5 타이머 카운터 (PWM)

5.1 특징 및 기능

동일한 기능의 16bit 타이머가 3개(TC0,TC1,TC2)가 존재 한다. 3개의 외부 입력 클럭 입력, 5개의 내부 클럭 입력, 2개의 I/O 단자 중 source 원으로 선택 해서 사용이 가능하다. 각각의 타이머는 인터럽트 발생도 가능하다. 5개의 내부 클럭 입력은 MCLK 를 가공해서 입력되며 그 주파수는 아래와 같다.

타이머 의 블록도는 아래와 같다.

SYNC를 이용해 3개의 타이머를 동기되어 동시에 동작시키는 것도 가능 하다. 타이머 카운터는 기본적으로 클럭이 입력되지 않아 동작이 되지 않는 상태 이다. 즉 PMC에서 타이머 사용을 하도록 설정해야 한다. 인터럽트 사용을 위해서는 AIC 의 TC 를 설정해서 사용이 가능하도록 해야 한다.

 

5.2 타이머

 

16bit 타이머는 클럭에 따라 증가를 하며 증가값이 0xFFFF -> 0x0000 이 되면 TC_SR 레지스터의 COVFS 가 설정 되며, 이런 기능을 이용해 타이머를 사용 한다. 외부 입력 신호 XC0,XC1,XC2는 TCLK0~TCLK2 또는 TIOA0 ~ TIOA2중(TIOA는 자기 채널은 자신이 선택하지 못한다.) 하나를 선택해서 사용한다. 외부 클럭은 MCK 보다 2배 이상 주파수가 낮아야 사용을 할 수 있다.

 

 

타이머의 동작모드는 Capture Mode , Waveform Mode 로 나누어 지며, 이는 TCx_CMR

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 10  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 9  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 8  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14

4 인터럽트

 

4.1 특징 및 기능

인터럽트 source 는 32이며, 8레벨의 우선순위가 있다. 각각의 인터럽트를 살리는 것이 가능하고, 벡터 인터럽트 및 빠르게 인터럽트를 처리하는 인터럽트도 있다. 인터럽트가 발생하면 그 조건을 판단하여 nFIQ,nIRQ인터럽트가 발생한다. 외부 입력 인터럽트는 high level, low level, positive edge, negative edge 중 하나를 선택하며, 인터럽트 source 0 는 무조건 FIQ 에 사용한다. 인터럽트 source 1은 특정 주변장치(PMC, DBGU, RTT, PIT, EFC)와 연결이 되어 있어서 인터럽트 발생시 인터럽트 루틴에서 어떤 주변장치의 인터럽트인지 판단하여 해당 조건의 처리를 실시 해야 한다. 인터럽트 source 2~31은 주변장치와 외부 인터럽트로 사용한다.

AIC_SMRx를 이용해 내부 인터럽트를 레벨 또는 트리거 모드중 어떤 것을 사용 할 것인 결정하고, 외부 인터럽트는 high level, low level, positive edge, negative edge 중 하나를 선택 한다.

또한 edge detector는 AIC_ISCR,AIC_ICCR로 설정해 edge에 따른 제어를 할 수 있다.

 

nIRQ 인터럽트가 처리중에 좀더 높은 인터럽가 발생하면 좀더 높은 인터럽트를 먼저 처리 하며, 낮은 인터럽가 발생 하면, 해당 인터럽트는 AIC_EOICR에 기억되어 인터럽트 처리가 가능할 때까지 대기 하다 실행한다. 인터럽트 중간에 발생하면 이전 인터럽트의 상태가 8번까지 내부 스택에 저장 되어질수 있다. nFIQ 인터럽트가 발생되면 nIRQ보다 nFIQ가 먼저 실행된다.

Spurious 인터럽트는 인터럽가 발생되었는데 인터럽트 처리루틴에서는 인터럽트가 존재 하지 않는 상태를 만한다. 이때는 임시로 처리하고 최대한 빨리 원리 루틴으로 돌아 간다.

 

 

 

 

AIC Source Mode Register

  • SRCTYPE : 인터럽트 소스의 형태

  • PRIOR : 우선순위 0~7 까지 7이 가장 높음

 

AIC Source Vector Register

  • 인터럽트 백터의 어드레스를 지정한다.

 

 

AIC Interrupt Vector Register

- 현재 발생된 인터러트 백터, 에러인경운 AIC_SPU 레지스터값을 가짐

 

AIC FIQ Vector Register

- 현재 발생된 인터러트 백터, 에러인경운 AIC_SPU 레지스터값을 가짐

 

 

 

 

AIC Interrupt Status Register

현재 발생된 인터럽트 소스 번호를 알려줌

 

AIC Interrupt Pending Register

1 : 인터럽트가 대기중인 것을 알려줌

 

AIC Interrupt Mask Register

1 : 인터럽트가 사용가능한지 확인한다.

 

AIC Core Interrupt Status Register

nIRQ: nIRQ가 발생함, nFIQ : nFIQ가 발생함

 

AIC Interrupt Enable Command Register

1 : 인터럽트를 사용가능 하도록 설정 한다.

 

AIC Interrupt Disable Command Register

1 : 인터럽트를 사용 불가능 하도록 설정 한다.

 

AIC Interrupt Clear Command Register

- 인터럽트의 에지를 삭제 한다.

 

AIC Interrupt Set Command Register

- 인터럽트의 에지를 설정한다.

 

AIC End of Interrupt Command Register

- 인터럽트 처리를 종료할 때 쓰는 레지스터

 

AIC Spurious Interrupt Vector Register

- 잘봇된 인터럽트 발생시 처리를 위한 벡터 어드레스 설정

 

 

 

AIC Debug Control Register

  • GMSK : 1: nIRQ,nFIQ를 동작 금지
  • PROT : 1: 보호 모드 사용

 

AIC Fast Forcing Enable Register

- FIQ 인터럽트로 사용하도록 설정

 

AIC Fast Forcing Disable Register

- FIQ 인터럽트롤 사용하지 못하도록 설정

 

 

 

 

AIC Fast Forcing Status Register

- FIQ 인터럽트로 사용가능한지 상태를 확인

 

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 11  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 9  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 8  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14

 

3 입출력 I/O

 

3.1 특징 및 기능

PIO는 32bit의 프로그램 가능한 병렬 I/O를 제어 한다. I/O 포트는 PA0~ PA31로 표기되며, 필요에 따라 주변장치 연결용으로 사용되는 특수기능으로 정의 될 수 있다. 10K pull-up을 내부적으로 사용할 수 있으며, 오픈드레인 출력지원, 1/2이하의 클럭 신호를 무시하는 글리치 필터 지원, 각 핀 별로 인터럽트 발생이 가능 하다.

클럭이 공급되어야 동작하므로 reset 후에는 클럭을 공급해야 한다. PA0~PA4 까지는 3.3V에서 16mA 까지 출력 가능하고,PA5~PA20 까지는 2mA, PA21~PA31까지는 8mA 까지 출력이 가능하다.

RESET 후 내부 10K pull-up은 사용하지 않으므로 PIO_PUER 레지스터로 pull-up을 설정 해야 한다. 또한 특수 기능을 사용하기 위해서는 RESET 후에 PIO_PER 레지스터를 설정해서 특수기능으로 제어 해야 한다.

I/O출력값을 high로 설정은 PIO_SODR로 하고, low 출력은 PIO_CODE로 한다. 그외에도 출력 는 입력 모드 설정을 해야 한다. 출력을 한번에 하기 위한 별도의 레지스터가 있으며, 오픈드레인 모드로 사용시 pull-up 저항 사용시 3.3V 뿐만 아니라 5V 로직 동작도 가능하다. 추가적으로 각각의 포트는 상승/하강 에지 모드에서 인터럽트 발생이 가능하다.

 

 

* 모든 레지스터는 P0~P31 까지로 동일해 레지스터는 표기하지 않습니다.

 

PIO Controller PIO Enable Register

NAME : PIO_PER , Access Type: Write_only

  • 1: 일반 I/O 모드로 동작

 

PIO Controller PIO Disable Register

NAME : PIO_PDR , Access Type: Write_only

  • 1: 주변장치 용으로 동작

 

PIO Controller PIO Status Register

NAME : PIO_PSR , Access Type: Read_only

  • 0 : 주변장치 용으로 사용 , 1 : I/O 용으로 사용

 

PIO Controller Output Enable Register

NAME : PIO_OER , Access Type: Write_only

  • 1 : 출력으로 설정

 

 

PIO Controller Output Disable Register

NAME : PIO_ODR , Access Type: Write_only

  • 1 : 출력 해제

 

PIO Controller Output Status Register

NAME : PIO_OSR , Access Type: Read_only

  • 1: 출력모드 , 0 : 입력 모드

 

PIO Controller Input Filter Enable Register

NAME : PIO_IFER , Access Type: Write_only

  • 1: 입력에 필터 사용

 

PIO Controller Input Filter Disable Register

NAME : PIO_IFDR , Access Type: Write_only

  • 1: 입력에 필터 사용 안함

 

PIO Controller Input Filter Status Register

NAME : PIO_IFSR , Access Type: Read_only

  • 1 : 필터 사용 상태 , 0 : 필터 사용 안함

 

PIO Controller Set Output Data Register

NAME : PIO_SODR , Access Type: Write_only

  • 1 : high로 출력 함

 

PIO Controller Clear Output Data Register

NAME : PIO_CODR , Access Type: Write_only

  • 1 : low로 출력 함

 

PIO Controller Output Data Status Register

NAME : PIO_ODSR , Access Type: Read_only or Read/Write

  • 1 : 출력이 high로 되고 있다.

 

PIO Controller Pin Data Status Register

NAME : PIO_PDSR , Access Type: Read_only

  • 1 : 논리 상태가 high 임 , 0 : 논리 상태가 low 임

 

PIO Controller Interrupt Enable Register

NAME : PIO_IER , Access Type: Write_only

- 1 : 인터럽트 사용 가능

 

PIO Controller Interrupt Disable Register

NAME : PIO_IDR , Access Type: Write_only

  • 1 : 인터럽트를 사용하지 못하도록 한다.

 

PIO Controller Interrupt Mask Register

NAME : PIO_IMR , Access Type: Read_only

  • 1 : 인터럽트가 허용되어 있다.

 

PIO Controller Interrupt Status Register

NAME : PIO_ISR , Access Type: Read_only

  • 1 : 인터럽트가 발생되었다.

 

PIO Multi-driver Enable Register

NAME : PIO_MDER , Access Type: Write_only

  • 1 : 오픈드레인 모드로 동작

 

PIO Multi-driver Disable Register

NAME : PIO_MDDR , Access Type: Write_only

  • 1 : 오픈드레인 모드 금지

 

PIO Multi-driver Status Register

NAME : PIO_MDSR , Access Type: Read_only

  • 1 : 오픈드레인 모드로 동작한다.

 

PIO Pull Up Disable Register

NAME : PIO_PUDR , Access Type: Write_only

  • 1 : 내부 pull-up 을 사용하지 않는다.

 

PIO Pull Up Enable Register

NAME : PIO_PUER , Access Type: Write_only

  • 1 : 내부 pull-up 을 사용한다.

 

PIO Pull Up Status Register

NAME : PIO_PUSR , Access Type: Read_only

  • 1 : pull-up을 사용하지 않는다. , 0 : pull-up을 사용한다.

 

PIO Peripheral A Select Register

NAME : PIO_ASR , Access Type: Write_only

  • 1 : Peripheral A 가 사용한다.

 

PIO Peripheral B Select Register

NAME : PIO_BSR , Access Type: Write_only

  • 1 : Peripheral B 가 사용한다

 

PIO Peripheral A B Status Register

NAME : PIO_ABSR , Access Type: Read_only

  • 0 : Peripheral A 에서 사용함
  • 1 : Peripheral B 에서 사용함

 

PIO Output Write Enable Register

NAME : PIO_OWER , Access Type: Write_only

  • 1 : PIO_ODSR 을 Write/ Read 가능하게 한다.

 

PIO Output Write Disable Register

NAME : PIO_OWDR , Access Type: Write_only

  • 1 : PIO_ODSR 를 Read 가능하게 한다.

 

PIO Output Write Status Register

NAME : PIO_OWSR , Access Type: Read_only

  • 0 : PIO_ODSR 를 Read 가능하게 한다.
  • 1 : PIO_ODSR 을 Write/ Read 가능하게 한다.

 

 

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 11  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 10  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 8  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14

 

2.8 실시간 타이머

시간을 측정 하기 위한 RTT 가 존재 한다. SCLK클럭으로 동작 하며, 32bit 카운터 이다. 초단위 카운터 동작이 가능하며 시간을 비교해서 알람을 발생할 수 있으며 인터럽트 발생도 가능하다.

 

 

Real-time Timer Mode Register

  • RTTRST : 1설정시 32bit 카운터 16비트 분주기 0으로 초기화
  • RTTINCIEN : 1 설정시 RTTINC 가 set 되면 rtt_int로 인터럽트 요청
  • ALMIEN : 1설정시 ALMS 가 set되면 rtt_int로 인터럽트 요청
  • RTPRES : 1설정시 1~65536중 지정된 값으로 프리스케일러 동작 , 0 설정시 2에16승으로 프리스케일러 동작

 

Real-time Timer Alarm Register

  • ALMV : 32bit 카운터와 비교되는 알람발생 값

 

 

Real-time Timer Value Register

  • CRTV : 32bit 카운터

 

 

Real-time Timer Status Register

  • RTTINC : 1설정시 이전 RTT_SR을 읽은후 32bit 카운터값 증가
  • ALMS : 1설정시 이전 RTT_SR을 읽은후 알람이 발생

 

 

2.9 주기 타이머

OS에게 주기적인 인터럽트 신호를 주기 위한 타이머이며 이름은 PIT 라 한다. 정확도를 위한 MCLK를 사용한다. PIT_MR레지스터의 PITEN을 설정하여 동작시킨다. 디버그 모드에서 동작을 정지하며 CPIV값이 증가 하다가 PIV값과 동일해지면 0으로 초기화하고 PICNT 값을 1씩 증가 시킨다. 이때 인터럽트를 발생 할 수도 있으며, 인터럽트 발생을 위해 PIT_MR의 PITIEN을 설정해야 한다. 인터럽트 발생 후 PIT_PIVR을 읽으면 PICNT 값이 0이 되며 PIT_SR 레지스터의 PITS bit도 0으로 변경하면서 인터럽트가 종료 된다. PIT_PIIR 을 읽으면 PITS bit가 0이 되지 않는다.

 

Periodic Interval Timer Mode Register

  • PITIEN : 1설정 시 PITS 비트 설정 시 pit_irq로 인터럽트 요청
  • PITEN : 1설정시 타이머가 동작, 0 설정시 한번 카운터 완료되면 정지
  • PIV : CPIV와 비교하기 위한 값

 

Periodic Interval Timer Status Register

- PITS : 1시에 CPIV값이 PIV값과 동일하게 된 적이 있다.

 

Periodic Interval Timer Value Register

  • PICNT : PITS가 발생된 횟수를 기록한다.
  • CPIV : 타이머 카운터

 

Periodic Interval Timer Image Register

  • PICNT : PITS가 발생된 횟수를 기록한다.
  • CPIV : 타이머 카운터

 

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 10  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 9  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 5  (0) 2012.11.14

 

 

2.7 메모리

내부버스인 ASB를 관리하는 MC가 있다. 이를 이용해 내부 메모리를 읽어 들이며 사용하지 않는 영역을 읽을때는 Abort를 발생하며 Remap 같은 동작을 지원한다. 플래시 메모리를 제어하는 EFC는 flash를 쓰거나 지우거나 lock를 거는 등의 동작을 수행한다. lock기능은 flash를 지우지 못하도록 설정하는 기능이며, security 는 내부 버스를 읽는 것을 방지하는 기능이며, GPNVM은 저 전압 검출에 사용된다.

고속 DATA전송을 지원하는 DMA 는 core에 부담을 주지 않으며 고속으로 data를 전송하여 빠른 동작을 지원한다. 모두 11개의 DMA 체널이 존재한다. (DBGU*2,SPI*2,ADC*1,SCC*2,USART0*2,USART1*2)

 

  • RCB : 1를 설정시 remap을 설정 한다.

 

  • SVMST1 : ARM7TDMI abort 예외 발생
  • SVMST0 : PDC abort 예외 발생
  • MST1 : 최근 abort 예외는 ARM7TDMI에서 발생
  • MST0 : 최근 abort 예외는 PDC에서 발생
  • ABTTYP : Abort 상태 표시, 00->data read, 01->data write, 10->code fetech, 11->Nc
  • ABTSZ : Abort 사이즈, 00->byte, 01->half-word, 10->word, 11->NC
  • UNDADD : 사용하지 않는 어드레스 액세스에의한 abort

 

  • abort를 발생시킨 어드레스 저장

 

 

 

  • FMCN : NVM또는 Flash 쓰기전에 대기시간 설정,NVM->1us이상 , Flash->1.5us , 0->30us
  • FWS: flash동작 사이클설정, 00(읽기1,쓰기2대기),01(읽기2,쓰기3대기) ,01(읽기3,쓰기4대기) ,11(읽기4,쓰기4대기)
  • NEBP: 0설정 flash쓰기전에 해당페이지 삭제, 1설정 삭제 안함
  • PROGE : 1설정 flash쓰기 에러 인터럽트 발생
  • LOCKE : 1설정 lock에러 인터럽트 발생
  • FRDY: flash 준비 되었을대 인터럽트 발생

 

  • KEY: 쓰기 허용 0x5A
  • PAGEN : 사용할 페이지 번호
  • FCMD : 0000->NC, 0001->WP(페이지쓰기),0010->SLB(lock설정),0011->WPL(페이지쓰고lock설정),0100->CLB(페이지lock해제),1000->EA(전체플래시삭제),1011->SGPB(지정된 GPNVM설정),1101->CGPB(지정된GPNVM설정해제),1111->SSB(Security 설정)

 

  • LOCKSx: 메모리 lock 됨을 표시
  • GPNVM1: 1설정시 저전압 검출 리셋 신호 발생
  • GPNVM0: 1설정시 저전압 검출 사용
  • SECURITY: 1설정시 Security 지정
  • PROGE : 1상태시 최종 flash writer중 에러 발생
  • LOCKE : 1상태시 최종 flash writer를 lock 되어 있는 것을 함
  • FRDY : flash 제어기 동작 가능 다음 명령 수행 가능

 

 

  • RXPTR: DMA 전송시 수신될 어드레스 저장

 

  • RXCTR : DMA 전송시 수신 횟수 저장

 

 

  • TXPTR : DMA 전송시 송신 어드레스 저장

 

 

  • TXCTR : DMA전송시 송신될 버퍼 크기 저장

 

  • RXNPTR : 버퍼가 다차면 다음에 저장할 버퍼의 어드레서 저장

 

  • RXNCR : 데이터가 저장될 버퍼의 크기 저장

 

  • TXNPTR : 다 전송후 송신될 다음 버퍼 어드레스

 

  • TXNCR : 송신할 다음 버퍼 크기 저장

 

  • TXTDIS : 송신 전송 요청 금지
  • TXTEN : 송신 전송 요청 허용
  • RXTDIS : 수신 전송 요청 금지
  • RXTEN : 수신 전송 요청 허용

 

  • TXTEN : 송신 전송 요청 허용 가능
  • TXTEN : 수신 전송 요청 허용 가능

 

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 9  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 8  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 5  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 4  (0) 2012.11.14

 

2.4 워치독

잘못됫 프로그램 및 시스템에 문제가 있어 오동작하는 것을 방지한다. SCLK로 동작하는 12bit 카운터로 동작한다. 타임아웃이 되었을 때 RESET 또는 인터럽트로 동작시킬 수 있다. 디버그 모드 및 idle 모드에서 정시 시킬 수 있다.

RESET 후에 동작을 하도록 되어 있기 때문에, 사용을 하지 않는다면 WDT_MR레지스터에 WDDIS 를 1로 설정 해야 한다. WDT_MR 레지스터의 WDV에 설정한 값에서 SLCK/128 클럭으로 1씩 감소한다. 이 WDV 값을 조정해서 워치독 시간을 조정한다. WDT_MR을 RESET 후 한번만 설정 가능하다. WDT_CR 레지스터에서 WDRSTT를 1로 설정하면 WDV 값으로 카운터가 변경된다. 카운터 값이 WDD 값보다 작으면 WDRSTT 에 1로 설정하면 다시 카운터가 시작된다.

 

 

  • KEY : 0xA5 입력시 제어가능
  • WDRSTT : 워치독 카운터를 WDV 값으로 다시 설정

 

  • WDIDLEHLT : 1설정시 idle mode에서 워치독 타이머 정지
  • WDDBGHLT : 1설정시 디버그 모드에서 워치독 타이머 정지
  • WDD: 워치독 타이머를 초기화 할수 있는 시간 설정
  • WDDIS : 1설정시 위치독 타이머 동작 정지
  • WDRPROC : 1설정시 프로세서 리셋, 0 설정시 시스템 리셋
  • WDRSTEN : 1설정시 wdt_fault 신호를 RESET제어용으로 사용
  • WDFIEN : 1설정시 wdt_int 신호를 인터럽트로 사용
  • WDV : 워치독 타이머에 설정 되는값

 

 

  • WDERR : 1설정시 새로운 에러 발생
  • WDUNF : 1설정시 워치독 타임아웃 발생

 

 

2.5 전압레귤레이터

내부 1.8 레귤레이터는 정상동작에서 전류를 90uA ~ 100mA 로 출력 하고 저전력 모드에서 25uA ~ 1mA까지 사용가능 하다.

 

 

2.6 디버그

UART 통신으로 디버그 기능을 지원한다. 통신속도는 MCLK/(16*CD) 로 CD는 1~65535 까지 이다. 기본적으로는 전이중,data 8bit, step 1bit로 통신을 하며 다른 설정도 가능하다. 그 외에 자동 echo, local loop, remote loop 와 같은 특이한 기능도 지원한다. 칩 내부의 ID 와 같은 정보를 확인할 수도 있고 , 외부 ICE 동작을 막을 수도 있다.

 

  • RSTSTA : PARE,FRAME,OVRE 에러 리셋
  • TXDIS : 송신기능 정지
  • TXEN : 송신 기능 동작
  • RXDIS : 수신 기능 정지
  • RXEN : 수신 기능 동작
  • RSTTX : 송신 RESET 후 동작 정지
  • RSTRX : 수신 RESET 후 동작 정지

 

 

  • CHMODE : 체널 모드, 00->정상, 01->자동echo, 10->local loop, 11->remote loop
  • PAR : 페리티bit 설정, 000->even, 001->odd, 010->0 , 011-> 1, 1xx ->사용안함

 

  • COMMRX : COMMRX 인터럽트
  • COMMTX : COMMTX 인터럽트
  • RXBUFF : RX buffer full 인터럽트
  • TXBUFF : TX buffer empty 인터럽트
  • TXEMPTY : TX empty 인터럽트
  • RXRDY: Enable RXRDY Interrupt
  • TXRDY: Enable TXRDY Interrupt
  • ENDRX: Enable End of Receive Transfer Interrupt
  • ENDTX: Enable End of Transmit Interrupt
  • OVRE: Enable Overrun Error Interrupt
  • FRAME: Enable Framing Error Interrupt
  • PARE: Enable Parity Error Interrupt

 

 

 

 

  • COMMRX :1 -> COMMRX 신호 있음
  • COMMTX : 1-> COMMTX 신호 있음
  • RXBUFF : 1 -> PDC(DMA) 수신버퍼에 문자 있음
  • TXBUFF : 1 -> PDC(DMA) 송신버퍼가 비었음
  • TXEMPTY : 1 -> 송신버퍼,shift 레지스터 비었음
  • RXRDY: 1 -> DBGU_RHR 리드 가능
  • TXRDY: 1 -> DBGU_THR 에 쓰기 가능
  • ENDRX: 1 -> RX PDC(DMA) 전송 완료
  • ENDTX: 1 -> TX PDC(DMA) 전송 완료
  • OVRE: Overrun Error 발생
  • FRAME: Framing Error 발생
  • PARE: Parity Error 발생

 

  • 수신 버퍼

 

  • 송신 버퍼

 

  • 보레이트 설정용 CD

 

  • VERSION : Device의 버전
  • EPROC :프로세서 type

  • NVPSIZ :메모리 사이즈

- NVPSIZ2 :

  • SRAMSIZ :

  • ARCH :

  • NVPTYP

 

  • EXID : chip id

 

- FNTRST : 1 -> NTRST 가 0 으로 유지

 

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 8  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 5  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 4  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 3  (0) 2012.11.14

 

2.3 시스템 리셋

 

일반적인 외부 reset, 전원 감시 reset, S/W reset, Watchdog reset 을 지원 한다. 이 reset은 RSTC 라는 리셋 관련 제어 장치에서 관장을 한다. NRST pin에는 내부 PULL-UP 저항을 가지고 있어 외부에 스위치만 연결하면 되고, reset 신호 출력용으로 사용도 가능하다.

NRST에 입력된 신호는 RSTC_MR 레지스터의 URSTEN 을 설정해야만 사용이 가능하며, NRST 의 상태는 RSTC_SR의 NRSTL을 설정하면 NRSTS에서 읽어 들일 수 있다. RSTC_MR 레지스터의 URSTEN이 0 으로 URSTIEN이 1로 설정시 인터럽트로 사용할 수 있다. RSTC_MR의 ERSTL 이 설정되면 RESET 신호를 출력할수 있다.

전압이 1.68V 이하로 낮아지면 리셋 또는 인터럽트를 발생할 수 있는데 flash의 GPNVM1 bit를 1로 설정 하면 저전압 RESET 은 동작하지 않으며, RSTC_SR 레지스터의 BODSTS 을 설정하고, RSTC_MR 의 BODIEN의 을 1로 설정해서 인터럽트로 동작 시킬수 있다.

S/W reset 은 RSTC_CR 레지스터의 PROCRST,PERRST,EXTRST 가 1로 설정시 발생 한다. 위치독 리셋은 WDT_MR의 WDRSTEN 이 1로 설정되고 위치독 타이머의 타임 아웃이 발생하면 발생 한다.

 

 

Reset Controller Control Register

  • KEY : 레지스터 변경 암호 0xA5
  • EXTRST : KEY 값이 0xA5이고 1로 설정시 NRST 에 0을 출력
  • PRERST : KEY 값이 0xA5이고 1로 설정시 주변장치 RESET
  • PROCRST : KEY 값이 0xA5이고 1로 설정시 내부 reset

 

Reset Controller Status Register

  • SRCMP : 현재 S/W reset 수행중
  • NRSTL : NRST 의 입력 상태 저장
  • RSTTYP : 000->전원초기RESET,010->워치독리셋,011->S/W리셋,100->NRSTpin LOW 리셋, 101->저전압 리셋
  • BODSTS : 저전압 리셋이 있었음
  • URSTS : NRST 단자가 리셋 신호가 있었음

 

Reset Controller Mode Register

  • KEY : 레지스터 변경값 0xA5
  • ERSTL : 외부 RESET 신호 출력 시간 설정
  • BODIEN : 리셋 인터럽트(rstc_irq) 출력
  • URSTIEN : 리셋 인터럽트(rstc_irq) 출력
  • URSTEN : NRST신호를 내부 리셋으로 사용

 

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 4  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 3  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 2  (0) 2012.11.14

 

2 AT91SAM7S 기본 하드웨어

 

2.1 시스템 클럭

클럭은 CKGR 을 이용해서 조정한다. CKGR에는 내부 RC OSC, 메인 OSC, PLL 회로가 존재한다. 내부 RC OSC 는 기본적으로 32.768kHz로 동작한다. 그러나 오차 범위가 있어서 실제로는 22~42Khz 내에서 동작한다. 이 클럭은 SLCK 라고 지칭한다. 전원 ON후 바로 사용되는 클럭이다.

메인 OSC 는 Xin, Xout에 크리스탈(3~20Mhz)을 연결해서 발생시킨다. 이것은 MAINCK 라고 지칭한다. 이 클럭은 PLL외로의 입력 소스로 사용될 수 있다.

PLL 회로는 MAINCK 와 PLLRC에서 발진된 클럭 을 이용해서 동작하며, 여기서 발생된 클럭은 PLLCK 라고 지칭한다. PLLCK를 이용해 내부에서 사용하는 마스터 클럭 등에 사용한다.

전원 ON후 MAINCK 를 살리기 위해 CKGR_MOR 의 MISCEN 을 1로 OSCCOUNT에 대기클럭을 입력하고 OSCCOUNT 가 0 이 되면서 MAINCK 가 동작한다. MAINCK가 정상동작인지 확인은 PMC_SR의 0번 bit인 MOSCS 가 1인지로 판단하면 된다. MAINCK이 안정화 되면 PLLCK를 발생시키는데 PLLCK의 최대 가능 속도는 55Mhz 이므로 이를 주의 해야 한다. 일반적으로 USB를 사용하기 위해 48Mhz에 근접시킨다.

PLLCK 는 CKGR_PLLR 을 제어해 동작시키며 PLLCK는 MAINCK/DIV 한 값에 MUL+1 값을 곱하면 된다.

 

2.2 전원관리

AT91SAM7은 저전력 시스템을 지원하기 위해 전원관리장치(PMC)가 존재 한다. 원리는 간단한데 사용하지 않는 장치는 클럭을 주지 않아 멈추도록 하는 것이다. 이는 소프트웨어 적으로 제어가 가능하다.

PCK는 CPU코어가 사용하는 클럭이며, MCK는 메모리 제어기등(USART, SSC, SPI, TWI, TC, MCI, etc.) 의 무조건 쓰이는 주변 장치에 연결되는 클럭이다. 일반적으로 PLLCK를 96Mhz로 만들어 /2 해서 48Mhz로 만들어 사용한다.(55Mhz이상은 사용이 불가능 하다.) UDPCK는 USB동작에 사용된다. USB를 정상적으로 사용하기 위해서는 이 클럭은 48Mhz로 설정해야 한다. periph_clk[2..14]는 각각의 주변장치 클럭 공급에 사용한다. 이를 이용해 주변장치의 동작을 조절하여 소비전력을 조절할 수 있다. Pck[0..2]는 프로그램 가능한 클럭으로 필요시 외부에 제공한다. PCK 는 idle mode 를 지원하며 인터럽트에 의한 복귀도 지원한다. 이들 클럭은 SLCK, MAINCK, PLLCK 의 입력 클럭을 분주해서 사용하게 된다.

기본 동작 설정은 아래와 같다.

 

  1. Main Oscillator를 살리기

CKGR_MOR 레지스터의 MOSCEN를 설정해 Main Oscillator를 살린다. 약간의 케이스에서 Startup 시간을 설정하는 것이 유리하고, 그러기 위해 CKGR_MOR레지스터의 OSCOUNT를 설정한다. 안정화 되는 것은 PMC_SR의 MOSCS가 설정되는 것으로 확인할 수 있고 활성화 될 때까지 대기해야 한다.

예: CKGR_MOR 에 0x00000701 기록, Start Up Time = 8 * OSCOUNT / SLCK = 56 Slow Clock

그래서 Main Oscillator 는 56 slow Clock 이후 동작한다.

 

  1. Main Oscillator 주파수 점검(옵션으로 선택)

Main Oscillator가 정상적으로 발진하는지 측정을 해야 할 수도 있다. 이 측정은 CKGR_MCFR레지스터에서 MAINRDY을 읽어서 확인한다. 또한 MAINF에는 16주기의 slow Clock 동안의 Main Oscillator의 측정치가 기록됨으로 이를 이용해 정확하게 동작하는지 확인할 수 있다.

 

  1. PLL 을 설정 한다.

PLL의 div 값을 설정하기 위해 CKGR_PLLR에 기록한다. DIV값은 0~255까지 설정이 가능하며, 0으로 설정되면 동작이 정지된다. MUL값 설정은 0~2047까지 설정이 가능하며 실제 적용은 (MUL+1)로 된다. PLL 안정화 까지 출력 대기 시간 설정은 PLLCOUNT 에 설정하며 설정한 값만큼의 slow Clock 시간이 지나면,PMC_SR 레지스터의 LOCK 비트가 1로 설정된다. 이후 USBDIV도 설정 한다.

예: CKGR_PLLR에0x00040805 기록 ,PLL은 main clock 을 입력 받고 , 5을 곱하게 된다. 8 slow Clock 이후 안정화 된다.

 

  1. MCK 및 PCK 설정

MCK를 설정하기 위해 PMC_MCKR레지스터의 CSS를 사용한다. 특별히 설정하지 않으면 Clock source 는 slow Clock이 된다. MCK를 조정 하기 위해 PRES bit를 설정하며, 이를 이용해 MCK와 PCK를 사용하게 된다. 설정이 다 끝나면 PMC_SR 레지스터의 MCKRDY 가 설정되며 안정화 된 것이며, 기다리는 과정을 꼭 거쳐야 한다.

 

  1. PMC_SCER,PMC_SCDR,PMC_SCSR로 프로그램 가능한 PCK0~PCK2를 설정

PMC_PCK? 에서 클럭 소스 및 DIV(분주)값을 설정하고,CCS bit로 사용입력 클럭을 선택 하고 PRES로 분주비를 설정한다. 설정 완료 후 PMC_SR레지스터의 PCKRDY?로 정상동작을 확인한다.

 

<전체 레지스터>

 

PMC System Clock Enable Register

  • PCK0 ~ PCK2 : 각각의 pin에 클럭 출력을 한다. (설정 1)
  • UDP : USB 에 UDPCK을 공급한다. (설정 1)
  • PCK : PCK 를 발생 시킨다. (설정 1)

 

PMC System Clock Disable Register

  • PCK0 ~ PCK2 : 각각의 pin에 출력을 금지(설정 1)
  • UDP : USB에 클럭공급 중지(설정 1)
  • PCK : PCK 발생 금지, idle mode 동작(설정 1)

 

PMC System Clock Status Register

  • PCK0 ~ PCK2 : 클럭 출력이 허용되어 있는 것을 표시(설정 1)
  • UDP : USB 클럭 출력이 허용 되어 있는 것을 표시 (설정 1)
  • PCK : PCK 발생이 허용 (설정 1)

 

PMC Peripheral Clock Enable Register

- 주변장치 클럭 공급 허용 (설정 1) : Device 아래 참조

 

 

PMC Peripheral Clock Disable Register

- 주변장치 클럭 공급 금지 (설정 1)

 

PMC Peripheral Clock Status Register

- 주변장치 클럭 공급이 허용 되어 있다. (설정 1)

 

PMC Clock Generator Main Oscillator Register

  • OSCOUNT : Main Oscillator 시작 시간 설정 (설정 1)
  • OSCBYPASS : 외부 오실레이터 연결시 1로 설정, 이때 MOSCEN은 0으로 설정
  • MOSCEN : Main Oscillator 정지 (설정 1)

 

PMC Clock Generator Main Clock Frequency Register

  • MAINRDY : MAINF 값이 유효
  • MAINF : 16주기의 slow Clock 시간 동안의 Main Clock 카운트수

 

PMC Clock Generator PLL Register

  • USBDIV : 00 -> PLL/1 , 01->PLL/2, 10->PLL/4 , 11->사용안함
  • MUL : PLL 곱셈값
  • OUT : PLL 주파수범위 00->80~160Mhz , 01->150~180Mhz
  • PLLCOUNT : PLL안정화 대기시간
  • DIV : 0-> Pll정지 , 1~255:메인 클럭 분주값

 

 

PMC Master Clock Register

  • PRES : 분주비설정, 000->1,001->2,010->4,011->8,100->16,101->32,110->64,111->NC
  • CSS : 00->SLCK , 01->MAINCK, 10->NC, 11->PLLCK

 

PMC Programmable Clock Register

  • PRES : 분주비설정, 000->1,001->2,010->4,011->8,100->16,101->32,110->64,111->NC
  • CSS : 00->SLCK , 01->MAINCK, 10->NC, 11->PLLCK

 

PMC Interrupt Enable Register

  • PCKRDYx : 해당 인터럽트 허용
  • MCKRDY : 해당인터럽트 허용
  • LOCK : 해당인터럽트 허용
  • MOSCS : 해당인터럽트 허용

 

PMC Interrupt Disable Register

  • PCKRDYx : 해당 인터럽트 금지
  • MCKRDY : 해당인터럽트 금지
  • LOCK : 해당인터럽트 금지
  • MOSCS : 해당인터럽트 금지

 

PMC Status Register

  • PCKRDYx : 해당 클럭x가 준비 상태
  • MCKRDY : 마스터 클럭 준비 상태
  • LOCK : Pll이 준비 상태 (lock 됨)
  • MOSCS : 메인 오실레이터 안정화됨

 

PMC Interrupt Mask Register

  • PCKRDYx : 해당 클럭x 인터럽트 허용
  • MCKRDY : 마스터 클럭 인터럽트 허용
  • LOCK : Pll이 준비 상태 (lock 됨) 인터럽트 허용
  • MOSCS : 메인 오실레이터 인터럽트 허용

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 5  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 3  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 2  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 1  (0) 2012.11.14

+ Recent posts