在线时间269 小时
UID2056636
注册时间2013-11-13
NXP金币0
TA的每日心情 | 慵懒 2016-11-24 10:19 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
金牌会员
 
- 积分
- 2870
- 最后登录
- 1970-1-1
|
因为需要降低功耗,因此在采样时才打开 VREF ,采样完成后即关闭 VREF。开关 VREF 比较频繁,大概 10ms 一次。但是在操作过程中却经常导致 HardFault 硬错误中断,而且一旦进入该错误中断,复位后如果有打开或关闭 VREF ,则会再次进入 HardFault 。只有重新上电复位后才能正常工作。
PS:绝对不是堆栈溢出的原因,我现在已经将堆栈增加至很大了。而且出现该错误的时候,函数嵌套才3层而已,且没有参数传递,函数内局部变量也很少。
附代码如下:
void VREF_Open(void)
{
uint32_t i = 0;
if(VrefInfo.Open)
return;
SIM->SCGC4 |= SIM_SCGC4_VREF_MASK;
VREF->TRM |= VREF_ChopOscEnable;
VREF->SC = VREF_Enable | VREF_ICOMPCmd | VREF_BufMode;
//for(i = 0;i < 10000;i++); // wait 300ns
for(i = 0;i < 5000;i++); // wait 300ns
VREF->SC |= VREF_RegulatorEnable;
VrefInfo.Open = 1;
debugPrintf(VREF_DEBUG,("Enable internal voltage reference!\r\n"));
}
void VREF_Close(void)
{
if(VrefInfo.Open)
{
VREF->SC = 0;
VREF->TRM &= ~(uint8_t)VREF_ChopOscEnable;
SIM->SCGC4 &= ~(uint32_t)SIM_SCGC4_VREF_MASK;
VrefInfo.Open = 0;
debugPrintf(VREF_DEBUG,("Disable internal voltage reference!\r\n"));
}
}
|
|