工具/软件:Code Composer Studio
大家好、任何 LIN 协议专家都可以举手。
我有这个 LIN 数据包
1)写入帧:break+syn+PID (0x78)+data1 (0x01)+data2 (0x02)+校验和
2)延迟1
3)响应帧(读帧):break+syn+PID (0x03),必须返回8个数据字节。
include "LIN.h"
#include "sys_core.h
#include "sys_common.h"
#include "system.h"
uint8 text1[2]={0x01、0x02};
uint8 text2[8]={0};
void main (void)
{
/*启用中断。 *
_enable_IRQ ();
linInit();
/*检查 Tx 是否就绪以及 LIN 总线是否空闲(检查忙标志)*/
while (!(linIsTxReady (linREG)))||(linREG->FLR 和0x8U = 0x8U);
/*发送 LIN 报头,包括同步间隔字段、同步字段和标识符。 *
LinSendHeader (linREG、0x78);
LinSetLength (linREG、2);
/*发送数据文本1*/
linSend (linREG、&text1[0]);
__delay_cycles (80000000);
//set the length of the response data
linSetLength (linREG,8);
linSendHeader(linREG,0x03);
}//
用户代码 begin (4)*/
void linNotification (linbase_t *lin,uint32 flags)
{
/*数据从 RD 寄存器中读取并存储在文本2中。 *
if (((linREG->FLR 和 LIN_RX_INT)== LIN_RX_INT)
{
linGetData (linREG、text2);
}
}/*用户代码结束*/
在编写代码时是否有任何错误。
我有两个问题
1)看不到 linSend()的任何发送数据;在示波器 上。当启用回送时,我可以在示波器上监视数据
2)我无法从从从器件接收任何数据。
3)在我写一个波特图时、在写入响应数据的标头之前、我是否需要使用 setlength。
还是在 sendlin 函数之前使用它?
这些是我的 LIN 配置
/**-启用 LIN 模式*/
LINREG->GCR1 = 0x40U;
/**-设置控制寄存器1
*-启用发送器
*-启用接收器
*-进入调试模式时停止
*-禁用环回模式
*-启用 HGENCTRL (使用 ID 字节进行屏蔽滤波)
*-使用增强校验和
*-启用多缓冲模式
*-禁用自动波特率调整
*-禁用睡眠模式
*-将 LIN 模块设置为主模块
*-禁用奇偶校验
*-在 ID4和 ID5中禁用数据长度控制
*
LINREG->GCR1 |= 0x03020C40U
|(uint32)((uint32) 1U <<12U)
|(uint32)((uint32) 0U << 2U)
|(uint32)((uint32) 1U <<5U);
我使用了10k 波特率