基于MCAL的S32K312 delay功能实现
参考:https://www.wpgdadatong.com/blog/detail/76897
0、简介
本文基于S32K312 介绍使用PIT实现delay功能,主要是记录开发流程,本文基于《基于MCAL的S32K312 GPT使用》的工程,环境如下:
MCU:NXP S32k312
RTD版本:SW32K3_S32M27x_RTD_R21-11_4.0.0_D2311
EB版本:tresos Studio 29.0
***本文目前主要是记录配置,后期不断完善配置内容的含义***
1、工程配置
***本文只记录使用GPT0_CH1完成delay,相关模块的配置请先参考《基于MCAL的S32K312 GPT使用》***
1.1 GPT配置
1.1.1 使能定时器通道和中断
1.1.2 配置GptPIT
1.1.3 GptChannelConfiguration配置
补充:使能GptNotification并填入PIT0_CH1_Notification
2、代码
//將預裝載值寫入 LDVAL,TCTRL的 TEN 置位開啟定時器,此時定時器開始遞減計數,循環檢測 TFLG 寄存器,當超時中斷髮生時 TIF 置位,關閉 PIT 定時器通道並清除掛起的中斷,完成一次延時操作。
#include "S32K312_PIT.h"
void delay_ms(uint32 i)
{uint32_t count_timer = 0;count_timer = i * ( 30000000 / 1000);IP_PIT_0->TIMER[1].LDVAL = count_timer-1;IP_PIT_0->TIMER[1].TCTRL|=PIT_TCTRL_TEN_MASK;while(!(IP_PIT_0->TIMER[1].TFLG));IP_PIT_0->TIMER[1].TCTRL&=~PIT_TCTRL_TEN_MASK;IP_PIT_0->TIMER[1].TFLG|=PIT_TFLG_TIF_MASK;
}
void PIT0_CH1_Notification(uint8_t channel)
{(void)channel;
}
// test
// while(1){
// delay_ms(35);
// TIME_TEST_IO_HIGH;
// delay_ms(20);
// TIME_TEST_IO_LOW;
// }