교육/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 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))


 - ifndef

 - define

 - typedef

 - 매크로함수

 - struct

 - 구조체안의 하위변수




#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"를 인클루드 후