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