반응형
Cortex-M3 Peripherals map : SysTick Timer 설정 방법
ARM Cortex-M3 마이크로컨트롤러에 내장된 SysTick 타이머는 시스템 레벨 타이머로, 주로 운영체제의 타이머 서비스나 단순한 지연(loop) 구현에 사용됩니다. 이 타이머는 프로그래밍이 간단하고 효율적인 인터럽트 기반 타이밍 기능을 제공합니다.
1. SysTick 타이머의 특징
- 24비트 다운 카운터: 24비트 리셋 가능한 다운 카운터로 구성되어 있습니다.
- 선택 가능한 클럭 소스: 프로세서 클럭 또는 외부 클럭 소스 중에서 선택할 수 있습니다.
- 자동 리로드: 0에 도달하면 자동으로 재설정되어 반복 카운트를 수행합니다.
- 인터럽트 기능: 0에 도달할 때마다 인터럽트를 발생시킵니다.
- 간단한 구성: 운영 체제의 타이머 서비스 구현에 적합합니다.
2. SysTick 타이머의 주요 레지스터
- SysTick Control and Status Register (SysTick_CTRL):
- 주소: 0xE000E010
- 기능: 타이머 활성화, 인터럽트 활성화, 클럭 소스 선택, 카운트 플래그 등을 제어합니다.
- SysTick Reload Value Register (SysTick_LOAD):
- 주소: 0xE000E014
- 기능: 타이머가 0에 도달했을 때 자동으로 로드되는 값입니다.
- SysTick Current Value Register (SysTick_VAL):
- 주소: 0xE000E018
- 기능: 현재 카운터 값을 읽거나 쓸 때 사용합니다.
- SysTick Calibration Value Register (SysTick_CALIB):
- 주소: 0xE000E01C
- 기능: 클럭 주파수 정보와 스킵 기능을 제공합니다.
3. SysTick 타이머 사용 방법 (스텝 바이 스텝)
1단계: SysTick 타이머 초기화
- SysTick_LOAD 설정:
- SysTick->LOAD 레지스터에 카운트 다운할 값 설정.
- 예: SysTick->LOAD = 0xFFFFFF; // 최대 카운트 값으로 설정
- SysTick_VAL 초기화:
- SysTick->VAL 레지스터를 0으로 설정하여 현재 카운터 값을 초기화.
- 예: SysTick->VAL = 0;
2단계: SysTick 타이머 시작
- SysTick_CTRL 설정:
- 클럭 소스 선택 (프로세서 클럭 사용 권장).
- 인터럽트 활성화.
- 타이머 활성화.
- 예: SysTick->CTRL = SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;
3단계: 인터럽트 핸들링
- SysTick_Handler 구현:
- 타이머가 0에 도달할 때마다 호출되는 인터럽트 핸들러 구현.
- 이 과정을 통해 SysTick 타이머를 설정하고 사용할 수 있습니다. SysTick 타이머는 특히 RTOS(RTOS에서 사용되는 컨텍스트 스위칭 등)에서 매우 유용하게 사용됩니다.
void SysTick_Handler(void) {
// 인터럽트 발생 시 수행할 작업
}
반응형
Cortex-M3 주요 주변 장치 및 레지스터 정보 표
이 표는 Cortex-M3의 주요 주변 장치들과 그들의 핵심 레지스터들을 요약한 것입니다. 각 레지스터는 특정 기능을 수행하며, 해당 주소를 통해 프로그램에서 직접 접근할 수 있습니다.
- NVIC (Nested Vectored Interrupt Controller) : 인터럽트 처리 및 관리를 담당합니다.
레지스터 이름 주소 기능 ISER 0xE000E100 - 0xE000E104 인터럽트 활성화 ICER 0xE000E180 - 0xE000E184 인터럽트 비활성화 ISPR 0xE000E200 - 0xE000E204 인터럽트 보류 설정 ICPR 0xE000E280 - 0xE000E284 인터럽트 보류 해제 IPR 0xE000E400 - 0xE000E4EF 인터럽트 우선순위 설정 - SysTick Timer : 간단한 타이밍 및 지연 기능을 제공합니다.
레지스터 이름 주소 기능 SysTick_CTRL 0xE000E010 타이머 제어 및 인터럽트 설정 SysTick_LOAD 0xE000E014 리로드 값 설정 SysTick_VAL 0xE000E018 현재 카운터 값 SysTick_CALIB 0xE000E01C 타이머 보정 값 - SCB (System Control Block) : 시스템 제어 및 구성을 담당합니다.
레지스터 이름 주소 기능 CPUID 0xE000ED00 CPU 식별 정보 ICSR 0xE000ED04 인터럽트 제어 및 상태 VTOR 0xE000ED08 벡터 테이블 오프셋 AIRCR 0xE000ED0C 시스템 제어 SCR 0xE000ED10 시스템 제어 및 구성 CCR 0xE000ED14 구성 제어 - MPU (Memory Protection Unit) : 메모리 영역의 보호 및 접근 제어를 담당합니다.
레지스터 이름 주소 기능 TYPE 0xE000ED90 MPU 타입 및 지원 영역 CTRL 0xE000ED94 MPU 제어 RNR 0xE000ED98 영역 선택 RBAR 0xE000ED9C 영역 기준 주소 RASR 0xE000EDA0 영역 속성 및 크기 - Debug Components : 디버깅 및 추적 기능을 제공합니다.
레지스터 이름 주소 기능 DHCSR 0xE000EDF0 디버그 할트 상태 및 제어 DCRSR 0xE000EDF4 디버그 코어 레지스터 선택 DCRDR 0xE000EDF8 디버그 코어 레지스터 데이터 DEMCR 0xE000EDFC 디버그 예외 및 모니터 제어
반응형
'코딩취미 > 프로그램 지식' 카테고리의 다른 글
xml, json, yaml 의 특징과 사용방법 (0) | 2024.01.17 |
---|---|
NOP (No Operation) 의 동작 개념과 실행 시간 (0) | 2024.01.11 |
트렁크(trunk)/브랜치(branch)/태그(tag) 프로젝트 흐름 (0) | 2024.01.10 |
프로그래밍 코딩에 적합한 폰트 추천 : C++,C#,python (0) | 2024.01.05 |
LGPL(Lesser General Public License)의 특징 (0) | 2023.12.05 |