본문 바로가기

Architecture/LM3S8962

[LM3S8962] SysCtl



 - SysCtl은 디바이스의 클럭을 컨트롤하고 주변기기의 enable을 설정하고 디바이스를 구성하거나 reset시키고 디바이스의 정보를 보여준다.

 - Power Control



1. 내장 LDO
 LDO(Low Drop-Out)는 선형 레귤레이터 DC 전원 공급장치의 약자입니다. ARM의 Stellaris 제품군은 안정적으로 제공하기 위해 프로세서 코어와 온칩 주변 기기를 위한 내부 LDC 레귤레이터 통합

 1.1 LDC 컨트롤 라이브러리 함수
SysCtlLDOSet - LDO 값 세팅

리셋 후, LDO를 출력 전압의 기본값은  2.50V

SysCtlLDOGet - LDO 값 리턴


SysCtlLDOConfigSet - LDO 오류 컨트롤 관리에 사용, 일반적으로 사용되지 않음


2. 클럭제어
 2.1 클럭 시스템 블록 다이어그램
●기본 클럭 소스
 - Internal Oscillator (IOSC) : 내부오실레이터는 온팁 클럭 소스이다. 이것은 외부구성이 필요없다.
 주파수는 12MHz+-30%이다. 정확한 클럭에 의존하지 않는 어플일경우 이 클럭을 사용하여 시스템 비용을 줄인다. 이 내부오실레이터는 POR(Power On Reset) 동안에 디바이스 클럭 소스로 사용한다.
 - Main Oscillator(MOSC) : 메인오실레이터는 정확한 주파수 클럭을 제공한다. 만약 PLL을 사용중인 경우, 크리스탈 값은 3.579545MHz와 8.192MHz사이어야 한다.
 만약 PLL을 사용하지 않는다면 1MHz~8.192MHz응 사용해야 한다.
 - Internal 30kHz Oscillator : 30kHz+-50% 주파수를 제공하는것 외에 Internal oscillator와 비슷하다. 이것은 Deep-Sleep power-saving모드에 사용하기위해 만든것이다.
 - External Real-Time Oscillator : 리얼타임클럭을 사용하기 위해 만들었다. Deep-Sleep 또는 Hibernate mode에도 제공된다.

내부 시스템 클럭(SysClk)은 두개의 다른 소스에서 파생된 것이다. main internal PLL과 internal oscillator devided by four

● Main Oscillator (MOSC)의 크리스탈 설정
 main oscillator가 PLL의 레퍼런스 클럭으로 쓰인다면 3.579545 ~ 8.192MHz, 쓰이지 않는다면 1~8.192MHz
 RCC레지스터의 XTAL field를 설정해야한다.

● Main PLL Frequency Configuration
 Main PLL은 power-on reset에는 사용안되고 요구된다면 소프트웨어적으로 사용할 수 있다.

● PLL Modes
 PLL은 두개의 모드가 있다.
 Normal :  PLL은 입력 클럭 레퍼런스를 곱하고 출력을 드라이브 한다.
 Power-Down : 대부분의 PLL 내부 회로는 비활성화되어 PLL은 출력 드라이를 하지 않는다.

● PLL Operation
 만약 PLL 설정이 바뀌면 잠시동안 불안정한 상태의 출력 클럭이 나온다.




 - Oscillator
    Stellaris 제품군은 ARM의 IOSC는 2개의 내부 오실레이터 고속 12MHz 오실레이터와 30KHz 저속 오실레이터가 통합되어 있다.
 - PLL
    Stellaris 제품군은 내부에 PLL이 통합되어 있다.
 - PWM 및 ADC의 클럭
    시스템 주파수에서 PWM 주파수를 설정
    Stellaris 제품군은 내부에 10비트 ADC가 통합되어 있다.
 
 2.2 클럭 컨트롤 라이브러리 함수
SysCtlClockSet
 - SYSCTL_SYSDIV_*
    코어의 최대 작동 주파수는 50MHz이므로 50MHz이하가 되도록 계산해서 사용.
 - SYSCTL_OSC_*
    SYSCTL_OSC_MAIN : 메인 OSC 사용
    SYSCTL_OSC_INT : 내부 OSC로 12MHz 오실레이터
    SYSCTL_OSC_INT4 : 내부 12MHz 오실레이터, 이후 4 방식으로
    SYSCTL_OSC_INT30 : 내부 OSC로 30MHz 오실레이터
    SYSCTL_OSC_EXT32 : 외부 활성 OSC로 32.768KHz 오실레이터
 - SYSCTL_XTAL_*
   외부 크리스탈 주파수
 - SYSCTL_*_OSC_DIS
   SYSCTL_INT_OSC_DIS : 내부 OSC 해제
   SYSCTL_MAIN_OSC_DIS : 메인 OSC 해제



SysCtlClockGet



SysCtlPWMClockSet




SysCtlPWMClockGet


SysCtlADCSpeedSet


SysCtlADCSpeedGet

SysCtlUSBPLLEnable



3. Reset Sources

 ● Power-on Reset(POS)
 전원을 완전히 차단한 뒤 다시 전원을 입력

 
● External Reset(EXT)
 외부에 핀을 통해서 리셋

 ● Software Reset(SW)
 SysCtlReset() 통해서 리셋이 되고 외부 리셋과 효과가 동일

 Watchdog Timer Reset(WDT)
 제 때 응답할 수 있는지를 체크해서 문제가 있을 경우에는 Hardware적으로 Target을 Reset 시키는 게 그 목적
 
 Brown Out Reset(BOR)
 전원(Vcc)가 어느 레벨 아래로 내려가서 지정된 시간 만큼 있으면, 브라운 아웃 리셋 신호를 발생

 Power Control(LDO)
 전원 공급 장치를 조정할 수 없을 경우

3.1 Reset 컨트롤 라이브러리
SysCtlReset - 소프트웨어 리셋
SysCtlResetCauseClear - 리셋 이유를 삭제
SysCtlBrownOutConfigSet -

4. 주변장치 제어
 4.1 주변장치 제어 라이브러리
SysCtlPeripheralEnable - 온칩 주변장치 활성화

SysCtlPeripheralDisable
SysCtlPeripheralPresent - 현재 디바이스의 주변장치의 존재를 확인
SysCtlPeripheralSleepEnable


SysCtlPeripheralDeepSleepEnable


SysCtlPeripheralDeepSleepDisable

SysCtlPeripheralClockGating


5. sleep and deep-sleep

 
Run-Mode
Sleep-Mode
Deep-Sleep-Mode
 프로세서, 메모리
 활동 멈춤
(메모리 내용은 유지)
멈춤
(메모리 내용은 유지)

 전원 크기
 높음 작음
매우 작음
 비교
 모든 클럭 사용
 클럭 주파수는 변하지 않음
main oscillator나 internal oscillator 둘 중 선택해서 클럭 소스 사용가능. PLL은 off

5.1 sleep and deep-sleep 제어 라이브러리
SysCtlSleep
SysCtlDeepSleep


6. 기타기능
 지연, 메모리 크기, 특정핀의 존재, 고속 GPIO 등
 6.1 기타 기능 제어 라이브러리
SysCtlDelay
 - SysCtlDelay(150*(SysClockGet()/3000)


SysCtlFlashSizeGet

SysCtlSRAMSizeGet
SysCtlPinPresent - 해당핀이 있는지 확인
SysCtlGPIOAHBEnable
SysCtlGPIOAHBDisable

7. 인터럽트 동작
7.1 인터럽트 동작 제어 라이브러리
SysCtlIntRegister
SysCtlIntUnregister
SysCtlIntEnable
SysCtlIntDisable
SysCtlIntStatus
SysCtlIntClear


8. 클럭확인
8.1 클럭확인 제어 라이브러리
SysCtlIOSCVerificationSet - internal oscillator verification timer 설정
SysCtlMOSCVerificationSet - main oscillator verification timer 설정
SysCtlPLLVerificationSet - PLL verification 설정
SysCtlClkVerificationClear - Clears the clock verification status