- 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