大家好!我正在使用的MCU是KF8A100ENG,在做LIN通信,遇到了下面几个问题。
1. 只找到了KF8A100FTN上关于LIN的Demo程序,如下,有需要的小伙伴可以去官网上下载完整版本。
这里是接收LIN报文(帧头+响应)的过程,我需要的是接收主机的帧头后,发出响应。
我的做法是在接收到帧头后,记录一个已收到的标志位,在任务中轮询这个标志位,为真时就清该标志位并发出响应。这样做时原本以100ms为周期的LIN报文,响应的周期变成了30ms。只接收报头时的周期是正确的,但是加入了响应发送,发送周期就会变短,发出的响应通过示波器看有的也不正确了。
void int_fun0() __interrupt (0)
{
if(RC1IF)//从机的Lin接收
{
if(OVFER1==1)//清除溢出错误
{
CRXEN1=0; // 清溢出错误
_NOP();
_NOP();
CRXEN1=1; // 重新使能接收
}
Lin_buf =RXSDR1; // 清零 RXIF
//验证Lin协议帧头,并逐步接收数据到缓存中
if((FRER1)&&(Lin_buf==0))//检测到帧错误-没有在规定的时间内检测到停止位,且接收到的数据全是0。
{
flag=0;//就判断为13位低电平,为Lin间隔符
}
else if((flag==0)&&(Lin_buf==0x55))//紧接着的字符是时钟同步字节,0x55
{
flag=1;
Rev_buf_cnt=0;//清零缓存指针,准备开始接收数据
}
else if(flag==1)//帧头解析正确,开始接收数据内容
{
Rev_buf[Rev_buf_cnt++] =Lin_buf;
if(Rev_buf_cnt>2)//接收的数据完成,从帧头开始往后数3个数据。
{
Rev_buf_cnt=0;
flag=2;//接收完成标志,准备开始解析数据。
}
}
}
}
2. 我在接收中断中,接收到报头后直接发送响应,发送周期上是没有问题的,但是在一个中断中,进行持续13ms(波特率9600bps,8bytes数据)的报文发送,总觉得这样不对,而且在编译的时候,给出了下面的警告,不知道是什么意思。
警告:
!!! For Manual Push and Pop Parameter such as STK00 ,Look over File "manual_STK_protect.txt" which in the hex file out path !
信息:
!!! High Interrupt : STK variable used up to STK09 ,Should manual push and pop them if other course's parameter used !!!
!!! if right manual push and pop them, ignore those STK info !
!!! In Main : STK variable used up to STK10 ,Should referrence this to manual push and pop STK in Interrupt course!
|