在线时间8 小时
UID2046785
注册时间2013-10-9
NXP金币0
TA的每日心情 | 奋斗 2018-7-24 11:40 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
注册会员

- 积分
- 171
- 最后登录
- 2020-11-22
|
程序比较简单
芯片:MK10DX256VLL7
Core/System=100MHz,Bus=100/2=50MHz,FlexBus=50MHz,Flash=100/4=25MHz
1、就是要每100ms反转一个PORTB22 的电平
2、每3秒钟由Lptmr产生一次中断,全局变量g_SysTimeBase++,
3、当g_SysTimeBase == 2 时 休眠然后被下一次中断唤醒
可是发现下一次唤醒后变成了200ms反转一个PORTB22 的电平.。。。。。。。。。。。。。
请高手帮忙看看问题出在哪里了??
代码如下:
=============================================
UINT32 g_SysTimeBase= 0;
VOID main(VOID)
{
DisableInterrupts; //关中断
GPIO_Base_Init(GPIO_PORTB, 22, IO_OUT, IO_LOW);
GPIO_Base_SetN(PORTB, 22);
PIT_Delay_ms(0,3000); //延时3秒
LPTMR_RunSystemTimeBase(); // 使用Lptmr 3秒产生一次中断
EnableInterrupts; //开中断
while (TRUE)
{
if (2 == g_SysTimeBase)
{
MC_EnterSleep();
set_sys_dividers(0, 1, 1, 3);
}
PIT_Delay_ms(0,100); //延时100ms
GPIO_Base_ToggleN(PORTB, 22);
}
}
休眠:
VOID MC_EnterSleep(VOID)
{
SMC_PMCTRL = SMC_PMCTRL_RUNM(0)| SMC_PMCTRL_STOPM(0);
stop();
}
Lptmr中断处理:
VOID LPTMR_ISR(VOID)
{
LPTMR0_CSR |= LPTMR_CSR_TCF_MASK; //写1清除中断标志
g_SysTimeBase++;
}
PIT延时函数
VOID PIT_Delay_ms(UINT8 n, UINT16 ms)
{
if (THREE < n)
{
return;
}
UINT32 u2Time = ms * 50000; // 20 ns
//开启定时模块时钟
SIM_SCGC6 |= SIM_SCGC6_PIT_MASK;
// 开启 PIT
PIT_MCR = 0x00;
PIT_LDVAL(n) = u2Time;
// 开始定时
PIT_TCTRL(n) = PIT_TCTRL_TEN_MASK;
while (!(PIT_TFLG(n) & PIT_TFLG_TIF_MASK)) {}
PIT_TFLG(n) |= PIT_TFLG_TIF_MASK;
PIT_TCTRL(n) &= ~PIT_TCTRL_TEN_MASK;
PIT_MCR = PIT_MCR_MDIS_MASK;
}
|
|