ecu参数调整(汽车ECU开发专题四)
ecu参数调整(汽车ECU开发专题四)定时器SCI0SR2 &= (t_uint8)~SCI0SR2_AMAP_MASK;在休眠之前还需要唤醒使能,如果需要支持LIN唤醒,那么就需要对RX进行配置,也就是这里的串口寄存器:SCI0SR2 |= SCI0SR2_AMAP_MASK;SCI0ACR1 |= SCI0ACR1_RXEDGIE_MASK;
NXP S12ZVL系列是恩智浦基于S12内核,集成LIN收发器和LDO的一款集成芯片,相当于集成了一个UJA1028。
休眠唤醒
系统时钟API和Watch Dog会定时唤醒,如果在休眠之前不关闭的话,会出现再次被唤醒的情况,相当于不能正常休眠进入省电模式。
因此,在休眠之前要将API关掉,需要执行操作CPMUAPICTL_APIFE = 0;关闭Watch Dog则需要设置CSAD,让Watch Dog(COP)在STOP时也停下来。
在休眠之前还需要唤醒使能,如果需要支持LIN唤醒,那么就需要对RX进行配置,也就是这里的串口寄存器:
SCI0SR2 |= SCI0SR2_AMAP_MASK;
SCI0ACR1 |= SCI0ACR1_RXEDGIE_MASK;
SCI0SR2 &= (t_uint8)~SCI0SR2_AMAP_MASK;
定时器
时间计数器TIM0TCNT只能写一次,实时累加;计数比较器TIM0TC0,则可以随时读写。TIM0TCNT和TIM0TC0均为16位定时器,不能超出范围。
计数时间开启
void tim0_start(void)
{
TIM0TC0 = TIM0TCNT ((8000000/1000000)*8000)& 0xFFFF;
TIM0TSCR1_TEN = 1;
}
计数时间停止
void tim0_stop(void)
{
TIM0TSCR1_TEN = 0;
}
其中,TIM0TC0可以自加,tim0_stop后TIM0TCNT停止自加
TIM0TC0 = TIM0TC0 ((8000000/1000000)*8000)& 0xFFFF
只做普通定时器(或者做普通IO),需要禁掉端口的IOC(input capture output compare)功能
需要设置Output Compare Pin Disconnect Register(OCPD)寄存器;如果需要做端口定时反转,可以设置Timer Toggle On Overflow Register 1 (TTOV)寄存器。
静态电流偏大
实际调试中发现,如果有端口外接上拉电阻,那么这个端口就会有灌电流产生。再如果灌电流比较大的话,比如大于20uA,则会导致内部LDO不能休眠,增加功耗。因此上拉电阻不能设置得过小。
按键唤醒
按键唤醒Key-Wakeup(KWU),寄存器PIEx需要使能有效。
并添加按键中断函数
interrupt VectorNumber_Vports void Vports_ISR(void)
{
PIFS = 0xff;
}
AD取值
模数转换AD在取值的时候,需要注意使用方法。
一般的,采用定义变量,传地址,
word Values;
AD1_GetValue16(&Values);
而不能定义指针,传指针,
byte *Value;
AD1_GetChanValue8(2 Value);
这里指针没有初始化,指向的地址不确定,可能会随机分配到只读区或者非法区域,最终会造成程序跑飞,或者取值不变。这实际上,跟硬件关系不大,主要是还是嵌入式编程习惯的问题。