快捷搜索:  汽车  科技

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。

ecu参数调整(汽车ECU开发专题四)(1)

休眠唤醒

系统时钟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);

这里指针没有初始化,指向的地址不确定,可能会随机分配到只读区或者非法区域,最终会造成程序跑飞,或者取值不变。这实际上,跟硬件关系不大,主要是还是嵌入式编程习惯的问题。

猜您喜欢: