在线时间0 小时
UID340491
注册时间2012-2-4
NXP金币0
该用户从未签到
新手上路

- 积分
- 76
- 最后登录
- 1970-1-1
|
#define PIT0_INIT_VAL 9599999 // 100ms
#define ENABLE_PIT0 do{PIT_TCTRL0 |= PIT_TCTRL_TEN_MASK;}while(0)
#define DISABLE_PIT0 do{PIT_TCTRL0 &= ~PIT_TCTRL_TEN_MASK;}while(0)
#define CLR_PIT0 do{PIT_TFLG0 = PIT_TFLG_TIF_MASK;}while(0)
1.首先是初始化:
void PIT_Init(void)
{
// PIT clock enable:
SIM_SCGC6 |= SIM_SCGC6_PIT_MASK;
// enable the clock for PIT Timers:
PIT_MCR = 0;
// config the period of PIT0:
PIT_LDVAL0 = PIT0_INIT_VAL;
// enable interrupt for PIT0:
PIT_TCTRL0 |= PIT_TCTRL_TIE_MASK; // TIE=1:Interrupt will be requested whenever TIF is set
EnableISR(IRQ_NUM_PIT0);
}
2.应用层开启Timer:
EnableTimer0(PERIOD_SAMPLE, MonitorTimerOK);
void EnableTimer0(UINT uiCnt, void (*pFunc)(void))
{
ENABLE_PIT0;
m_stTimer0Set.bTimerFlag = TRUE; // set flag for count
m_stTimer0Set.uiTimerCnt = uiCnt; // count number
m_stTimer0Set.pTimerHandle = pFunc; // count OK,call this function
}
3.PIT0中断入口函数:
void PIT0_Handler(void)
{
if (m_stTimer0Set.bTimerFlag)
{
if (0 == --m_stTimer0Set.uiTimerCnt)
{
if (m_stTimer0Set.pTimerHandle != NULL)
{
(*m_stTimer0Set.pTimerHandle)();
}
}
}
CLR_PIT0;
}
现象:从复位开始,PIT0中断入口函数只能进入一次;在调试过程中,只有在入口函数设置断点,并且将窗口Register中选择PIT相关寄存器,中断才能再次进入;一旦将断点取消,运行再没有进入中断。
|
|