1. 들어가면서
지난 포스팅에 이어서 Timer를 이용한 LED Blinking 실 구현 부분에 대해 이야기하고자 합니다.
S32K는 Reference Manual에서는 Timer Module로 PDB, FTM, LPIT, LPTMR, RTC 총 5개를 정의하고 있습니다.
NXP에서 제공하는 예제 기준으로 LPIT를 활용하였기에, LPIT를 기반으로 한 LED Blinking에 대해 알아보겠습니다.
(실제 구현 코드는 아래에서 다운로드하시면 됩니다.)
2. 시작합니다.
LED를 동작시키기 위한 IO 설정은 이미 다룬 내용이라, 별도의 설명은 하지 않겠습니다.
(그림이 잘 안보여서.. 다시 올릴 예정입니다.)
hy-park.tistory.com/6?category=891221
01. S32K146 - 개발환경 구성 및 GPIO 활용
1. 들어가면서 8Bit MCU와는 다르게, 32Bit MCU는 GUI로 Pheripheral을 설정하고 자동으로 소스코드를 생성해주는 것이 대세가 되었다고 생각합니다. 아마도 이런 개발 환경을 적극적으로 지원한게 ST Micro
hy-park.tistory.com
1. Processor Expert 활성화
아래와 같은 화면을 만나게 됩니다.
(개인적으로 해당 구성도 정말 마음에 들지 않습니다.. 뭔가 정리가 안된듯한 느낌의 구조입니다.
Peripheral Abastraction Layer와 Peripheral Drivers의 차이는 뭐지?라는 생각이 들었습니다. 그리고 왜 Analog는 별도로 분리 해두었는지 이해가 안 되었습니다. 마치.. 해당 환경 개발에 컨트롤 타워가 없다는 생각이 들 정도입니다.)
Peripheral Driver는 ST의 Low Level Driver와 유사하다고 생각하면 됩니다.
Device의 의존성을 가지고 있어, 해당 API로 개발을 하면 이식성이 떨어지게 되지만.. 보다 Light 하게 개발이 가능합니다.
Peripheral Abstraction Layer는 ST의 HAL과 비슷하여, Peripheral Driver를 한 단계 더 추상화하여 이식성을 높였다고 생각하면 됩니다. 대신 무거워지는 건 덤입니다.
(참고 : community.nxp.com/t5/S32-SDK/S32K144-Driver-vs-PAL/m-p/1019121)
2. Peripheral Abstraction Layer의 timing_pal 추가
timing_pal을 더블 클릭하면, 좌측 하단에 Components가 생성됩니다.
3. LPIT 공급 Clock 설정
좌측 하단에 clockMan1을 더블 클릭하여, Clock 설정 창을 켭니다.
LPIT는 아래 그림처럼 SOSCDIV2_CLK, SIRCDIV2_CLK, FIRCDIV2_CLK, SPLLDIV2_CLK 중 한 개를 공급 Clock으로 사용할 수 있습니다.
저의 경우 1초 Blinking을 만들기 위해, 주파수가 낮은 Clock이 필요하여 SIRCDIV2_CLK를 선택하였습니다.
또한, SIRCDIV2_CLK는 기본 클럭이 8 MHz이므로, Functional Clocks의 SIRCDIV2_CLK의 분주를 조정하였습니다.
(나머지 Clock 설정은 Default 상태 유지)
4. LPIT 설정
timing_pal1을 더블 클릭하여, timing_pal 설정 창을 켭니다.
Device의 Drop box 부분을 LPIT0로 변경합니다.
앞에서 LPIT Clock을 1 Mhz로 설정하였기에, 1 Tick은 1us라고 친절하게 설명해주고 있습니다.
5. Code Generate
5. 코드 구현
LPIT Timer를 구동하기 위해, 아래의 3가지 API를 사용해야 합니다.
-
TIMING_Init
-> 위에서 설정한 LPIT의 실질적인 초기화 수행 -
TIMING_StartChannel
-> Timer 동작의 주기 설정
(위에서 설정한 Tick이 1us이기 때문에, 1초 동작을 위해서는 1,000,000 Tick 이후 Interrupt가 발생해야 함) -
TIMING_InstallCallback
-> Interrupt 발생 시, 호출될 Callback 등록
main문에는 다음과 같이 작성하였습니다.
너무 간단한 내용이라, 별도 설명을 추가하지 않도록 하겠습니다.
TIMING_InstallCallback에 등록한 Callback 함수의 구현체는 다음과 같습니다.
6. 동작
3. 나갑니다.
다음 포스팅에서는 실제 Register 값과 Call Stack을 보면서 어떤 식으로 Interrupt가 처리되는지 알아보겠습니다.
'NXP' 카테고리의 다른 글
07. S32K146 - UART (1/3) using PAL TX (0) | 2021.01.01 |
---|---|
06. S32K146 - Hello World + Clocks (3/3) with LPIT (작성중) (1) | 2021.01.01 |
04. S32K146 - Hello World + Clocks (1/3) (1) | 2020.12.20 |
03. S32K146 - Clock 설정 (2) | 2020.09.08 |
02. S32K146 - Pin package 설정 (1) | 2020.08.30 |