主题中讨论的其他器件:HALCOGEN
工具/软件:Code Composer Studio
大家好、我对 halcogen 的 sfety lib 示例有一些问题。
我按照说明进行了操作、得到了正确的构建。 在我将其加载到 MCU 后、我的程序 开始。 但是、在程序 尝试启动第一个 CAN 控制 器的自检后、它从函数调用中获得一个负响应、并在以下 while (1)指令中结束。
if (sl_SelfTest_CAN (CAN_ECC_TEST_MODE_1BIT、SL_DCAN1)= false)
{
while (1); //此处的 progam 结束
}
我看了一下功能、然后图示了、问题是什么。 该函数在 sl_selftest.c 中定义 程序会检查 CANREG1->CTL 寄存器中的 INIT 位是否被置位。 如果是、则该函数返回 false。 在我的情况下、该位被置位、因此我在上面的 while (1)指令中结束。
if ((布尔值) sl_canREG)
{
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
if (((uint32) CAN_init_bit =(sl_canREG->CTL 和 CAN_init_bit)){
SL_Log_Error (FUNC_ID_ST_CAN、ERR_TYPEE_INTURE_CON、3U);
RetVal = false;
返回 RetVal;
}
问题是、该位在 MCU 重新启动后始终置位。 之前没有将该位复位的指令。 之前有一个函数、用于初始化 CAN_RAM。
SL_Init_Memory (RAMTYPE_DMA_RAM |
RAMTYPE_NHET1 |
RAMTYPE_HET_TU1|
RAMTYPE_NHET2 |
RAMTYPE_HET_TU2 |
RAMTYPE_DCAN1_RAM |
RAMTYPE_DCAN2_RAM |
RAMTYPE_DCAN3_RAM |
RAMTYPE_DCAN4_RAM |
RAMTYPE_MIBSPI1_RAM |
RAMTYPE_MIBSPI2_RAM |
RAMTYPE_MIBSPI3_RAM |
RAMTYPE_MIBSPI4_RAM |
RAMTYPE_MIBSPI5_RAM |
RAMTYPE_MIBADC1_RAM |
RAMTYPE_MIBADC2_RAM );
但是这个函数不会清除 CAN 模块的控制寄存器。 因此、我添加了4条额外的线路、在开始自检之前、我手动复位所有 CAN-regs 的位。
canREG1->CTL =(0 << 0);
canREG2->CTL =(0 << 0);
canREG3->CTL =(0 << 0);
canREF4->CTL =(0 << 0);
添加此项后、我的程序将运行而不会出现任何问题。 我不知道、这是不是正确的方式。 可以有人确认一下吗?
在我看来,对这一点的检验有一个特殊的原因,我不知道,我对这一程序进行了管理,这是不好的。 因此、可能是 STH。 我的设置有问题吗? 或者、当我启动自检功能时、为什么该位始终置位?
非常感谢您的参与。