교육/ARM
ARM7TDMI
솔♡
2014. 7. 4. 15:46
ARM7TDMI
*족보
이니셜 하나하나가 의미를 가지고 있다.
Thumb
16bit로도 동작이 된다.
- 소비전력 절약
- 메모리가 줄어듬
(메모리를 적게 써야하는 곳에 썸보드 명령어를 사용한다.)
- 실행되는 중간중간 Thumb를 사용할 수 있다. -
- 고밀도 -
– High-density 16-bit Instruction Set
Thumb를 뜻한다.
*512와 256 의 차이점
괄호 안에 보면 512(듀얼 플랜) 256(싱글 플랜)이 다르다.
512는 256을 두개 가지고있다. 512KB 자체가 512KB가 아님.
(사실상 256과 512는 동등하다.)
- 저전력이라서 모바일에 강하다. -
• Advanced Interrupt Controller (AIC)
- 인터럽트를 굉장히 세분화 시켜놓음, AIC라는게 인터럽트를 총괄한다.
– Individually Maskable, Eight-level Priority,
개별적으로 on/off 할 수 있는 여덟단계의 우선순위를 가진인터럽트이다.
(인터럽트는 동등하지 않고, 우선순위를 따진다.)
Fast Interrupt
인터럽트가 있는데 Fast Interrupt 또 다른 초고속 인터럽트.
총괄인터럽트의 우선순위에 영향을 받지 않는다.
Debug Unit (DBGU)
디버그 전용으로 따로 만들어 둔 것, USART와 DBGU는 따로있다.
컴퓨터 내용안의 간단한것을 구현 할 때에는 DBGU를 사용하면 더 간편하게 데이터를 주고 받을 수 있다.
One Parallel (Two Parallel짜리도 있는데, 이름이 다름)
DMA
DMA도 쓸 수 있다. Direct Memory Access
- 직접 메모리 접근 -
One Synchronous Serial Controller (SSC)
한개의 동기화된 시리얼 콘트롤러
5V-tolerant
* ARM은 3.3V를 사용한다.
전자장치들의 기본전력은 TTL을 사용한다. TTL = 5V기준
보내는건 3.3V인데 TTL기준으로 만든 외부장치들은 5V를 ARM에게 보낸다. 이 5V를 버틸 수 있도록 장치 해 놓은 것이 tolerant라 한다.
3.3V까지 견뎌야 하지만 5V-tolerant면 5V로 입력받아도 크게 지장이 없다.
-----
외부장치에 3.3V를 보냈을때 TTL 기준의 외부장치가 신호를 받지 못 할 수 도 있다. 이럴경우 장치를 교체해야한다.
-----
including Four High-current Drive I/O lines, Up to 16 mA Each
많은 전류를 흐르게 할 수 있는 4개의 다리가 존재한다.
-대 전류용 다리 4개-
최대 16mA까지
--- *** 다른 의미로는
다른 다리들은 16mA의 전류도 받아 낼 수 없다는 의미.
(다른 다리들은 8mA이다.)
SAM7S512 512
SAM7S256 256
플래시메모리가 작은거 빼고는 동등함.
APB
주변장치용 버스연결
System Controller
APB -> System Controller
TST - 스위치 (전압)
USB Device - 다른장치의 간섭을 잘 안받음, 빠른 처리를 위해 FIFO내장
PIO - 밖으로 나가려면 PIO에게 허락받아야함
AD4 AD5 AD6 AD7
PIO를 거치지 않음
(쓰고싶으면 바로 써도 된다.)
AD0~3은 PIO에 허락받아야함
ICE
컴파일되서 밖으로 나가는 것에 신호를 보내면 장치가 돌고있는지 확인한다.
(모니터링이 가능하다는 것)
VCC33
3.3V
VCC18
1.8V레귤레이터가 뱉어내는 전압
Y1
옵실레이터
18.432Mhz
주파수
Reset버튼
C10 - 전해콘덴서
* 전력이 부족할 때 보충하여주는 역할
U2 - VCC5를통하거나 J4를통해 전류를 공급할 수 있다. 우리는 VCC를 통해서 전류를 공급함
J6 - USB스위치
U2- VBUS가 VCC5로 연결 된다.
PA10, PA9 - 9/10을 LCD에 연결한다면 장애를 유발한다.
DBGU_TXD, DBGU_RXD
- PA10 = DBGU_TXD
- PA9 = DBGU_RXD
#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) 는
typedef volatile unsigned int AT91_REG;
-> volatile unsigned int 의 자료형의 이름을 AT91_REG로 디파인한 것과 같은 의미이다.
#define AT91_CAST(a) (a)
-> AT91_REG 가 a임
#define PIOA_PER ((volatile unsigned int *) 0xFFFFF400)
#define AT91_CAST(a) (a)
-> AT91_REG 가 a임
#define PIOA_PER ((volatile unsigned int *) 0xFFFFF400)
#define PIO_PER ((*(volatile unsigned int *)0xFFFFF400))
- 즉 디파인의 차이일 뿐 둘은 같은 코드이다. -
* 어셈블리 *
#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) -전처리 후- AT91C_PIOA_PER (0xFFFFF400) ->컴파일 시 왼쪽 AT91C_PIOA_PER을 발견하면 0xFFFFF400으로 바꾼다. * C * #define PIO_PER ((*(volatile unsigned int *)0xFFFFF400)) -전처리 후- PIO_PER (*((volatile unsigned int *)0xFFFFF400)) |
#define AT91C_BASE_PIOA (AT91_CAST(AT91PS_PIO) 0xFFFFF400) #define AT91C_BASE_PIOA ((AT91PS_PIO) 0xFFFFF400) -> 오른쪽의 주소를 왼쪽의 구조체포인터로 캐스팅하는 의미 typedef struct _AT91S_PIO { AT91_REG PIO_PER; // PIO Enable Register AT91_REG PIO_PDR; // PIO Disable Register AT91_REG PIO_PSR; // PIO Status Register AT91_REG Reserved0[1]; // AT91_REG PIO_OER; // Output Enable Register AT91_REG PIO_ODR; // Output Disable Registerr AT91_REG PIO_OSR; // Output Status Register AT91_REG Reserved1[1]; // AT91_REG PIO_IFER; // Input Filter Enable Register AT91_REG PIO_IFDR; // Input Filter Disable Register AT91_REG PIO_IFSR; // Input Filter Status Register AT91_REG Reserved2[1]; // AT91_REG PIO_SODR; // Set Output Data Register AT91_REG PIO_CODR; // Clear Output Data Register AT91_REG PIO_ODSR; // Output Data Status Register AT91_REG PIO_PDSR; // Pin Data Status Register AT91_REG PIO_IER; // Interrupt Enable Register AT91_REG PIO_IDR; // Interrupt Disable Register AT91_REG PIO_IMR; // Interrupt Mask Register AT91_REG PIO_ISR; // Interrupt Status Register AT91_REG PIO_MDER; // Multi-driver Enable Register AT91_REG PIO_MDDR; // Multi-driver Disable Register AT91_REG PIO_MDSR; // Multi-driver Status Register AT91_REG Reserved3[1]; // AT91_REG PIO_PPUDR; // Pull-up Disable Register AT91_REG PIO_PPUER; // Pull-up Enable Register AT91_REG PIO_PPUSR; // Pull-up Status Register AT91_REG Reserved4[1]; // AT91_REG PIO_ASR; // Select A Register AT91_REG PIO_BSR; // Select B Register AT91_REG PIO_ABSR; // AB Select Status Register AT91_REG Reserved5[9]; // AT91_REG PIO_OWER; // Output Write Enable Register AT91_REG PIO_OWDR; // Output Write Disable Register AT91_REG PIO_OWSR; // Output Write Status Register }*AT91PS_PIO; |
->"AT91SAM7S256.H"를 인클루드 후