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:TMS570LC4357 DCAN

Guru**** 2346050 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/1099485/tms570lc4357-tms570lc4357-dcan

部件号:TMS570LC4357
主题中讨论的其他部件:HALCOGEN

王工:

您好,通过HALCoGen将DCAN2、DCAN3对应的TX、RX配置成GPIO模式,且均为输入

故障现象CAN2的TX引脚导通时电平为0V,CAN3的TX引脚导通时电平2.5V,通过HALCoGen生成驱动文件“HL_CAN.c”,在文件中canInit函数中,对CAN2、CAN3的配置不一致,请问一下什么会出现这个情况(将CAN3的配置手动改成和CAN2的一样,CAN3 TX电平测量正常)

void canInit (void)(无效)

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

/**@b初始化@b CAN2:*/


/**-设置控制寄存器
*-进入初始化模式
*/
canREG2->CTL = 0x0.0001万U;

/**- CAN2端口输出值*/
canREG2->TIOC =(UINT32)((UINT32)1U <18U )
|(UINT32)((UINT32)0U <<17U )
|(UINT32)((UINT32)0U <<16U )
|(UINT32)((UINT32)0U << 3U )
|(UINT32)((UINT32)0U <<2U )
|(UINT32)((UINT32) 0U << 1U);

canREG2->RIOC =(UINT32)((UINT32) 1U << 18U)
|(UINT32)((UINT32)0U <<17U )
|(UINT32)((UINT32)0U <<16U )
|(UINT32)((UINT32)0U << 3U )
|(UINT32)((UINT32)0U <<2U )
|(UINT32)((UINT32)0U <<1U);


/**@b初始化@b CAN3:*/

/**-设置控制寄存器
*-禁用总线自动唤醒活动
*-禁用本地断电模式
*-禁用DMA请求行
*-启用全局中断线0和1
*-禁用调试模式
*-软件重置释放
*-启用/禁用奇偶校验或ECC
*-启用/禁用自动总线开启计时器
*-进入调试状态前设置消息完成
*-设置正常操作模式
*-请求对配置寄存器的写入访问权限
*-设置自动重新传输消息
*-禁用错误中断
*-禁用状态中断
*-进入初始化模式
*/
canREG3->CTL =(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)((UINT32) 0x0.0005万U << 10U)
| 0x2.0043万U;

/**-清除所有待定错误标志并重置当前状态*/
canREG3->ES |= 0xFFFFU;

/**-为讯息指派中断级别*/
canREG3->INTMUXx[0U]=(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U;
canREG3->INTMUXx[1U]=(UINT32) 0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U
|(UINT32)0x0万U;

/**-设置自动总线打开计时器周期*/
canREG3->ABOTR =(UINT32) 0U;

/**-为数据传输设置IF1
*-等待IF1准备就绪,可供使用
*-设置IF1控制字节
*/
/*SAFETYMCUSW 28 D MR:NA <approved>“Potentially Infinite loop found - Hardware Status check for execution sequence”*/
while ((canREG3->IF1STAT & 0x80U)=0x80U)

}/*等待*/
canREG3->IF1CMD = 0x87U;

/**-设置用于读取数据的IF2
*-等待IF1准备就绪,可供使用
*-设置IF1控制字节
*/
/*SAFETYMCUSW 28 D MR:NA <approved>“Potentially Infinite loop found - Hardware Status check for execution sequence”*/
while ((canREG3->IF2STAT & 0x80U)=0x80U)

}/*等待*/
canREG3->IF2CMD = 0x17U;

/**-设置位定时
*-设置波特率预分机扩展
*-设置TSeg2
*-设置TSeg1
*-设置样品跳宽
*-设置波特率预校准器
*/
canREG3->BTR =(UINT32)((UINT32) 0U << 16U)|
(UINT32)((UINT32)(4U - 1U)<< 12U)|
(UINT32)((UINT32)((6U + 4U)- 1U)<< 8U)|
(UINT32)((UINT32)(4U - 1U)<6U)|
(UINT32)(UINT32) 9U;


/**- CAN3端口输出值*/
canREG3->TIOC =(UINT32)((UINT32)1U <18U )
|(UINT32)((UINT32)0U <<17U )
|(UINT32)((UINT32) 1U <<16U)
|(UINT32)((UINT32)0U << 3U )
|(UINT32)((UINT32)0U <<2U )
|(UINT32)((UINT32) 0U << 1U);

canREG3->RIOC =(UINT32)((UINT32) 1U << 18U)
|(UINT32)((UINT32)0U <<17U )
|(UINT32)((UINT32) 1U <<16U)
|(UINT32)((UINT32)0U << 3U )
|(UINT32)((UINT32)0U <<2U )
|(UINT32)((UINT32) 0U << 1U);

/**-退出配置和初始化模式*/
canREG3->CTL &=~(UINT32)(0x0.0041万U);


/**@注意在使用驱动程序之前必须调用此函数。\n
*此功能必须在特权模式下执行。\n
*/


}

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

    从CAN配置GUI中,为CAN3启用PDR,但为CAN2禁用PDR。

    将 微控制器的GPIO引脚配置为输出时。 输出引脚可以是漏极开路或  推挽式。 这两种配置都告诉我们 如何在内部设计UC的GPIO引脚。

    漏极开路类型: 在漏极开路类型中,UC内部只有一个开关(晶体管/MOSFET) ,且此开关连接至接地。  

    推挽式: 在推挽式中,UC内将有两个开关(晶体管/MOSFET),一个开关将连接至接地,另一个将连接至Vcc/Vdd。