This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357 LIN 受控模式

Guru**** 2024750 points
Other Parts Discussed in Thread: HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/673887/tms570lc4357-lin-slave-mode

主题中讨论的其他器件:HALCOGEN

您好!

我正在尝试在从模式下配置和使用 LIN 端口。 但我没有收到任何中断、即使在我使用示波器检查时总线上有流量也是如此。

我正在使用 LIN1。 在 HALCogen 中、我无法在 LIN 全局选项卡中启用中断和 TX 中断。 此外、当我取消选中主控模式复选框并生成代码时、 GCR1中的相关位不会更改、因此我改为更改了 HL_LIN.c。 以下是我的 HL_LIN.c、经过修改:

void linInit (void)
{
/*用户代码开始(2)*/
/*用户代码结束*/
/**@b 初始化@b LIN */

/**-从重置中释放*/
linREG1->GCR0 = 1U;

/**-启动 LIN 配置
* -使状态机保持软件复位
*/
linREG1->GCR1 = 0U;

/**-启用 LIN 模式*/
linREG1->GCR1 = 0x40U;

/**-设置控制寄存器1
* -启用发送器
* -启用接收器
* -进入调试模式时停止
* -禁用环回模式
* -禁用/启用 HGENCTRL (使用 ID 字节进行屏蔽滤波)
* -使用增强校验和
* -启用多缓冲模式
* -禁用自动波特率调整
* -禁用睡眠模式
* -将 LIN 模块设置为主模块
* -启用/禁用奇偶校验
* -禁用 ID4和 ID5中的数据长度控制
*
linREG1->GCR1 |= 0x03000C40U
|(uint32)((uint32) 1U <<12U)
|(uint32)((uint32) 0U << 2U);

/**-设置最大波特率预分频器*/
linREG1->MBRSR =(uint32) 5155U;

/**-设置波特率预分频器*/
linREG1->BRS=(uint32) 357U;

/**-设置 RX 和 TX 接收屏蔽*/
linREG1->MASK =((uint32)((uint32) 0xU <<16U)|(uint32) 0x10U);

/**-设置比较
* -同步定界符
* -同步中断扩展
*
linREG1->COMP =((uint32)((uint32)(1U - 1U)<<8U)|((uint32) 13U - 13U));

/**-设置响应长度*/
linREG1->format =((linREG1->format & 0xFFF8FFFFU)|(uint32)(((uint32) 8U - 1U)<< 16U);

/**-设置 LIN 引脚功能模式
* - TX
* - RX
* - CLK
*
linREG1->PIO0 =((uint32) 4U |(uint32) 2U |(uint32) 0U);

/**-设置 LIN 引脚默认输出值
* - TX
* - RX
* - CLK
*
linREG1->PIO3=((uint32) 0U |(uint32) 0U |(uint32) 0U);

/**-设置 LIN 引脚输出方向
* - TX
* - RX
* - CLK
*
linREG1->PIO1 =((uint32) 0U |(uint32) 0U |(uint32) 0U);

/**-设置 LIN 引脚开漏使能
* - TX
* - RX
* - CLK
*
linREG1->PIO6 =((uint32) 0U |(uint32) 0U |(uint32) 0U);

/**-设置 LIN 引脚上拉/下拉使能
* - TX
* - RX
* - CLK
*
linREG1->PIO7=((uint32) 0U |(uint32) 0U |(uint32) 0U);

/**-设置 LIN 引脚上拉/下拉选择
* - TX
* - RX
* - CLK
*
linREG1->PIO8=((uint32) 4U |(uint32) 2U |(uint32) 1U);

/**-设置中断级别
* -位错误级别
* -物理总线错误级别
* -校验和错误级别
* -同步字段错误级别不一致
* -无响应错误级别
* -帧错误级别
* -溢出错误级别
* -奇偶校验错误级别
* -标识符级别
* - RX 电平
* - TX 电平
* - 3个唤醒信号电平后超时
* -唤醒信号电平后超时
* -超时级别
* -唤醒电平
* 中断检测级别
*
linREG1->SETINTLVL =((UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U);

/**-设置中断使能
* -启用/禁用位错误
* -启用/禁用物理总线错误级别
* -启用/禁用校验和错误级别
* -启用/禁用不一致的同步字段错误级别
* -启用/禁用无响应错误级别
* -启用/禁用组帧错误级别
* -启用/禁用溢出错误级别
* -启用/禁用奇偶校验错误级别
* -启用/禁用标识符级别
* -启用/禁用 RX 电平
* -启用/禁用 TX 级别
* -启用/禁用3个唤醒信号电平后的超时
* -唤醒信号电平后启用/禁用超时
* -启用/禁用超时级别
* -启用/禁用唤醒电平
* -启用/禁用中断检测级别
*
linREG1->SETINT =((UINT32) 0x80000000U
|(UINT32) 0x40000000U
|(UINT32) 0x20000000U
|(UINT32) 0x10000000U
|(UINT32) 0x08000000U
|(UINT32) 0x04000000U
|(UINT32) 0x02000000U
|(UINT32) 0x01000000U
|(UINT32) 0x00002000U
|(UINT32) 0x00000200U
|(UINT32) 0x00000100U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000002U
|(UINT32) 0x00000001U);

/**-最终启动 LIN */
linREG1->GCR1 |= 0x00000080U;

/**@b 初始化@b LIN */

/**-从重置中释放*/
linREG2->GCR0 = 1U;

/**-启动 LIN 配置
* -使状态机保持软件复位
*/
linREG2->GCR1 = 0U;

/**-启用 LIN 模式*/
linREG2->GCR1 = 0x40U;

/**-设置控制寄存器1
* -启用发送器
* -启用接收器
* -进入调试模式时停止
* -禁用环回模式
* -禁用/启用 HGENCTRL (使用 ID 字节进行屏蔽滤波)
* -使用增强校验和
* -启用多缓冲模式
* -禁用自动波特率调整
* -禁用睡眠模式
* -将 LIN 模块设置为主模块
* -启用/禁用奇偶校验
* -禁用 ID4和 ID5中的数据长度控制
*
linREG2->GCR1 |= 0x03000C60U
|(uint32)((uint32) 1U <<12U)
|(uint32)((uint32) 0U << 2U);

/**-设置最大波特率预分频器*/
linREG2->MBRSR =(uint32) 5155U;

/**-设置波特率预分频器*/
linREG2->BRS=(uint32) 357U;

/**-设置 RX 和 TX 接收屏蔽*/
linREG2->MASK =((uint32)((uint32) 0xFFU <<16U)|(uint32) 0xFFU);

/**-设置比较
* -同步定界符
* -同步中断扩展
*
linREG2->COMP =((uint32)((uint32)(1U - 1U)<<8U)|((uint32) 13U - 13U));

/**-设置响应长度*/
linREG2->format =((linREG2->format & 0xFFF8FFFFU)|(uint32)(((uint32) 8U - 1U)<< 16U);

/**-设置 LIN 引脚功能模式
* - TX
* - RX
* - CLK
*
linREG2->PIO0 =((uint32) 4U |(uint32) 2U |(uint32) 0U);

/**-设置 LIN 引脚默认输出值
* - TX
* - RX
* - CLK
*
linREG2->PIO3=((uint32) 0U |(uint32) 0U |(uint32) 0U);

/**-设置 LIN 引脚输出方向
* - TX
* - RX
* - CLK
*
linREG2->PIO1 =((uint32) 0U |(uint32) 0U |(uint32) 0U);

/**-设置 LIN 引脚开漏使能
* - TX
* - RX
* - CLK
*
linREG2->PIO6 =((uint32) 0U |(uint32) 0U |(uint32) 0U);

/**-设置 LIN 引脚上拉/下拉使能
* - TX
* - RX
* - CLK
*
linREG2->PIO7=((uint32) 0U |(uint32) 0U |(uint32) 0U);

/**-设置 LIN 引脚上拉/下拉选择
* - TX
* - RX
* - CLK
*
linREG2->PIO8=((uint32) 4U |(uint32) 2U |(uint32) 1U);

/**-设置中断级别
* -位错误级别
* -物理总线错误级别
* -校验和错误级别
* -同步字段错误级别不一致
* -无响应错误级别
* -帧错误级别
* -溢出错误级别
* -奇偶校验错误级别
* -标识符级别
* - RX 电平
* - TX 电平
* - 3个唤醒信号电平后超时
* -唤醒信号电平后超时
* -超时级别
* -唤醒电平
* 中断检测级别
*
linREG2->SETINTLVL =((uint32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U);

/**-设置中断使能
* -启用/禁用位错误
* -启用/禁用物理总线错误级别
* -启用/禁用校验和错误级别
* -启用/禁用不一致的同步字段错误级别
* -启用/禁用无响应错误级别
* -启用/禁用组帧错误级别
* -启用/禁用溢出错误级别
* -启用/禁用奇偶校验错误级别
* -启用/禁用标识符级别
* -启用/禁用 RX 电平
* -启用/禁用 TX 级别
* -启用/禁用3个唤醒信号电平后的超时
* -唤醒信号电平后启用/禁用超时
* -启用/禁用超时级别
* -启用/禁用唤醒电平
* -启用/禁用中断检测级别
*
linREG2->SETINT =((UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000200U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U
|(UINT32) 0x00000000U);

/**-最终启动 LIN */
linREG2->GCR1 |= 0x00000080U;


/*用户代码开始(3)*/*
用户代码结束*/
} 

谢谢、

SA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sa、

    你是对的。 我确认了取消选中主控模式不会更改源代码。 我将向发展团队汇报。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。 有什么想法、为什么我不会获得中断中断? 当我在 LIN->MASK 中将0xFF 用作 TX 和 RX 的屏蔽时、我确实会获得 ID 中断。

    谢谢、

    SA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sa、

    我已经提交了"master mode"、"break int"和"TX int"的错误报告。 谢谢