본문 바로가기

ARM/강의

AT91SAM7S256의 내부 구조

기본 구조

ARM7TDMI형의 CPU코어에 기본적으로 jTAG(외부와 통신하기 위한 표준 회로) 인터페이스가 부속되며 내부의 시스템버스 ASB를 통하여 메모리 제어기와 플래시 메모리및 SRAM이 연결되어있다. 플래시 메모리의 옆에는 별도로 SAM-Ba Boot 프로그램이 저장되어 있는 ROM이 있다. 이 외에도 주변장치 데이터 제어기와 주변장치 브리지를 통하여 APB버스가 연결되며 이 버스는 스스템 제어기와 모든 주변장치들이 접속되어 있다.

특징

1. 16/32비트 RISC형의 ARMv4T 구조에 ARM7TDMI코어를 가지는 ARM Thumb 마이크로프로세서

2. 고성능 32비트 명령 세트와 고밀도 16비트 명령 세트를 가짐

3. SAM-BA boot 프로그램을 내장하여 ISP방식으로 다운로드 가능

4. 3단계 파이프라인 처리방식(명령, 해석, 실행)을 사용하여 대부분 1클록사이클로 실행되며 최고 55MHz이하에서 0.9MIPS/MHz의 명령처리 속도를 나타냄(실제로 48MHz사용)

5. UART에 의한 디버그 유닛(DBGU)을 가짐.

6. 16개의 32비트 레지스터를 가지며 스택포인터와 프로그램 카운터(PC)를 포함. 16개의 레지스터는 5개의 동작모드에서 조금씩 다르게 사용됨.

7. 256KB의 내부 플레쉬 메모리를 갖음. 256Byte * 1024페이지의 구조로 되어있으면 10000번까지 R/W가능. 30MHz이하의 속도에서 1사이클에 제로웨이트로 액세스됨

8. 64KB의 고속 SRAM을 갖음. 55MHz 이하의 속도에서 1사이클에 제로 웨이트로 액세스

9. 메모리콘트롤러(MC)는 버스조정기, 어드레스 디코더, SRAM재배치, 플래시콘트롤러등의 기능을 갖음.

10. 리셋 콘트롤러(RSTC)는 전원투입 리셋 기능과 BOD기능을 갖음

11. 클록 발생기(CKGR)는 32.768KHz의 내부 RC 오실레이터 회로를 갖고있으며 외부에 3~20MHz의 수정발진자를 접속할수 있는 발진회로도 내장하고있음. PLL회로에 의하여 적절히 체배됨(클록 뻥튀기기능) ☞ 내부 RC는 저속모드에 쓸때만 사용함 너무느려서...

12. 전력 관리 제어기(PMC)는 임의로 조정할수있으며, 저주파클록모드와 아이들 모드로 소비전력을 제어. 사용하지 않는 주변장치에 클록을 공급하지 않고 동작을 정지시킴으로 소비전력을 최소화 할수 있음(저전력화가능)

13. 인터럽트제어기(AIC)는 인터럽트 소스, 인터럽트 우선순위 인터럽트 허용여부 제어

14. 32비트 병렬 I/O 포트를 가지고있으며 Peripheral A와 B등 2개의 주변장치 출력기능과 멀티플렉스되어 동작, 10㏀의 내부 풀업저항을 사용하도록 설정될수 있다.

15. 워치독 타이머(WDT)는 12비트 프로그래머블 카운터

16. 실시간 타이머(RTT)는 32비트 프리런닝(독릭성) 카운터로서 내부의 32.768Hz RC 오실레이터로 동작

17. 주기적인 시간간격타이머(PIT)는 20비트의 프로그래머블 카운터와 12비트의 시간간격 타이머를 갖음.

18. 주변장치 DMA제어기(PDC)는 모두 11개의 채널이 있음

19. 3채널의 16비트 타이머/카운터(TC)는 업/다운 카운터로 동작, PWM출력 발생 기능, 파형 발생 기능, 입력 캡쳐기능 등을 갖음.

20. PWM제어기는 4채널 16비트 PWM출력신호를 발생

21. 전이중통신이 가능한 동기 및 비동기 직렬통신 포트(UART)는 2채널, 디버그 유닛도 일반 UART로 사용 가능

22. 동기 직렬통신 제어기(SSC)는 독립적인 클로과 프레임 동기 신호를 가지는 동기식으로동작, I²S 아날로그 인터페이스 지원

23. 직렬통신 포트 SPI는 마스터 및 슬레이브로 동작할수 있으며 8비트 16비트 길이로 데이터를 전송할수 있고 4개의 침선택 신호를 가진다.

24. 직렬통신 포트 TWI는 I²S통신을 수행하며 마스터로만 동작

25. USB 디바이스 포트(UDP)는 USB 2.0 규격에 따라 12Mbits/s 까지 동작, 온칩 트랜시버와328바이트의 FIFO를 갖음

26. 8채널 10비트의 A/D 컨버터를 가지고 있고, 이중 4개의 채널은 전용 핀을, 나머지 4개는 병렬 I/O포트의 부수적인 기능

27. 모든 I/O 신호는 +5V 로직과 직접 인터페이스가 가능(톨러런트)

28. 특정 비트 제어 시에 비트 세트 레지스터, 비트 리셋 레지스터, 비트 상태 레지스터를 가지고 있어서 6클록 사이클의 빠른속도로 수행할 수 있다. 일반적인 Read-Modify-Write 방법을 사용하면 16클록 사이클이 소요

29. 내장된 1.8V 레귤레이터는 VDDIN단자의 3.3V 입력전압을 사용하여 VDDOUT 단자에 1.8V의 출력전압을 방생하며 100mARk지 구동, VDDCORE 전원으로는 1.8V를 사용, BOD기능이 포함되며 VDDIO 전원으로는 3.3V 또는 1.8V를 사용할 수 있다.

30. 64핀 LQFP(Low-profile Quad Flat Package) 또는 64핀QFN(Quad Flat No-lead) 패키지가 있음.

31. 산업용 버전으로서 -40℃ ~ +85℃의 온도 범위에서 사용할 수 있다.

CPU코어

AT91SAM7S256 CPU 코어는 ARM&TDMI에 해당되며 참고문헌의 ARM Architecture Reference Manual(DDI 0100E) 및 ARM7TDMI Technical Reference Manual(DDI 0210B 참고!

CPU 코어는 고성능의 32비트 ARM명령과 고밀도의 16비트 Thumb명령을 모두 실행할수 있는데 이것은 ARMv4T의 폰노이만 방식을 기반으로하는 RISC형 마이크로프로세서로서 3단계의 파이프라인 처리방식 인출(F)-해독(D)-실행(E)으로 명령을 처리.

평균적으로 1클럭 사이클에 1명령씩을 실행하게 되어 파이프라인 처리를 사용하지 않는 순차처리 방식에 비하여 훨씬 빠른 명령처리가 가능(3배속은 아님..그의 근접한 속도처리)

ARM7TDMI CPU는 8비트 바이트 데이터, 16비트 하프워드 데이터, 32비트 워드 데이터를처리. 하프워드 데이터는 2바이트 경계, 워드 데이터는 4바이트 경계로 할당 저장해야함.

ARM에서 모든 연산 명령에서는 32비트 워드 데이터만을 처리, 그러나 로드 및 스토어 명령에서는 8비트, 16비트, 32비트의 데이터를 모두 처리할수 있다. 이중 32비트 구조의 레지스터에 로드할 때는 자동으로 제로 확장 또는 부호 확장이 수행된다.(unsigned int 형은 확장을 수행하지 않아도 되기 때문에 최적의 속도를 갖는다.)

전력 관리 제어기(PMC)

프로세서 클럭 PCK, 마스터 클록 MCK, USB 클록 UDPCK등을 발생하는 회로와 주변장치 클럭과 프로그래머블 클럭 출력을 방생하는 회로로 구성.

각 구성요소 필요에 따라 클록 신호를 공급 또는 차단함으로써 소자의 소비전력을 최적화.

프로세서 클록 PCK

CPUzhdj 부분에 공급되는 클록 신호로서 아이들모드에서는 이 신호가 차단되어 소비전력을 크게 감소. PMC_SCER, PMC_SCDR 레지스터를 사용하여 각각 공급 또는 차단.

마스터 클록 MCK

메모리 제어기나 인터럽트 제어기처럼 항상 동작하는 CPUzhdj 부분에 공급되는 클록 신호, 포로세서 클록 제어기나 주변장치 클록 제어기의 입력 신호로도 공급되므로 주파수가 이들과 항상 같다. PMC_MCKR 레지스터의 CSS비트에 의해 슬로우 클록 SLCK, 메인클록 MAINCK, PLL 클록 PLLCK 중에서 하나로 선택됨.

USB 클록 UDPCK

USB 디바이스 포트가 동작하는데 필요한 클록 신호. 이 클록의 주파수는 항상 48MHz±0.25%로 공급되야함.

주변 장치 클록

PMC_PCER, PMC_PCDR 레지스터를 사용하여 마스터 클록이 공급되는 것을 허용 또는 금지할 수 있다. 주변장치에 공급되는 클록이 금지되면 해당 주변장치의 동작이 정지.

프로그래머블 클록

전력관리 제어기는 외부에 3까지의 독립적인 클록 주파수 신호 PCKx를 출력할 수 있는데 이것들은 각각 PMC_PCKx 레지스터를 사용하여 제어한다.

인터럽트 제어기(AIC)

32개의 인터럽트 소스를 취급하면서 8레벨의 우선순위 제어, 개별적인 인터럽트 허용, 벡터형 인터럽트 처리등의 기능을 제공. 각 인터럽트 소스는 레벨감지(level sensitive 또는 level triggered) 방식이나 에지 트리거(edge) 방식으로 설정할 수 있음. 외부 인터럽트 소스에 대하여 하이레벨, 로우레벨, 상승 에지, 하강 에지 중에서 1가지로 트리거되도록 설정할 수 있다. 소스0은 FIQ에 할당, 소스1은 내부의 시스템 제어기(PMC, DBGU, RTT, PIT, EFC등)에 할당. 모든 인터럽트는 벡터형 인터럽트로 처리되는데, 32개의 모든 인터럽트 소스에 개별적인 인터럽트 벡터 레지스터를 가지고있다.

내부 구성

인터럽트 소스2~31은 내장 주변장치나 외부 인터럽트에 할당. 인터럽트 소스는 FIQ, SYS, PID2~PID31등으로 구성

인터럽트 소스 제어

AIC_SMRx 레지스터를 사용하여 레벨감지 방식과 에지트리거 방식중에서 하나를 설정 외부 인터럽트의 경우 저것 뿐만 아니라 동작 레벨까지 설정해야한다. 외부 인터럽트의 경우에는 하이레벨, 로우레벨, 상승 에지, 하강 에지 트리거등 4가지의 동작 방식을 사용

AIC_ISCR, AIC_ICCR레지스터를 사용하여 이것의 상태를 세트 또는 클리어 할수 있음.

일반 인터럽트의 경우 AIC_IVR레지스터를 일거나 고속 인터럽트의 경우 AIC_FVR레지스터를 일으면 에지 검추기는 자동으로 클리어된다. 각 인터럽트 소스는 AIC_IECR, AIC_IDCR레지스터를 사용하여 인터럽트 요구를 허용 또는 금지 할수 있다.



'ARM > 강의' 카테고리의 다른 글

LCD + 센서 제어 프로그래밍  (0) 2011.02.25
A/D 컨버터(ADC)  (0) 2011.02.14
시리얼 통신으로 문자열 출력 함수 만들기!!  (0) 2011.02.14
LED 제어 테스트  (0) 2011.02.09
링커 스크립트 분석  (0) 2011.02.08