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.
尊敬的 TI 教授:
我已 将 mCAN_TEST 程序按照 https://e2e.ti.com/support/processors/f/791/t/969305中的说明在 MCU1_0中运行。
现在 我在 vision_apps\apps\basic_demos\app_tirtos\con\app_run.c 中的 appRun()中调用 canTest()
我在 K3-j721e-common-proc-board.dts 中禁用了 MCU_MCAN0和 MCU_MCAN1:
&MCU_mcan0{
STATUS ="禁用";
pinctrl-names ="default";
pinctrl-0 =<&MCU_mcan0_PINS_DEFAULT &MCU_mcan0_GPIO_PINS_DEFAULT>;
STB-GPIO =<&wkup_GPIO0 54 GPIO_ACTIVE_HIGH_>;
EN-GPIO =<&wkup_GPIO0 GPIO_ACTIVE_HIGH_>;
CAN 收发器{
最大比特率=<5000000>;
};
};
&MCU_mcan1{
STATUS ="禁用";
pinctrl-names ="default";
pinctrl-0 =<&MCU_mcan1_PINS_DEFAULT &MCU_mcan1_GPIO_PINS_DEFAULT>;
STB-GPIO =<&wkup_GPIO0 2 GPIO_ACTIVE_LOW>;
CAN 收发器{
最大比特率=<5000000>;
};
};
目前、可以正常配置 mcan、CAN 收发器可以正常启用、但添加传输请求后无法完成传输、 MCAN_TXBRP 寄存 器始终为0x2、无法复位。 程序在这里存根
/*等待传输完成*/ while (((MCAN_getTxBufReqPend (baseAddr)>>) APP_MCAN_TX_BUF_NUM)和 0x1)=0x1)
如何解决此问题?
JJXie、您好!
MCAN_TXBRP 的值将显示哪个 MCAN Tx 缓冲器有一个挂起的消息请求。 0x2表示缓冲区编号1 (位位置1被置位)有一个挂起的消息将被发出。
[引用用户="Jiajiang.Xie">目前、可以正常配置 mcan、可以正常启用 CAN 收发器、但添加传输请求后传输无法完成、 MCAN_TXBRP 寄存 器始终为0x2、无法复位。 程序在此处出现[/引用]
一旦您添加传输请求(通过写入 MCAN_TXBAR)、MCAN_TXBRP 就会被置位、并且一旦成功传输(并设置 MCAN_TXBTO)或传输被取消(设置 MCAN_TXBCF)、MCAN_TXBRP 的值就会被复位。 您可能无法手动重置它。
您能否检查 MCAN_PSR 寄存器的值以查看是否存在任何错误?
此外、您是否未使用中断? 作为您指向的 while ()循环是 MCAN_DIAG_INTR_ENABLE 的其他情况的一部分。
此致、
Karan
您好、Karan、
现在、我将使用 pdk_jacinto_07_01_00_45\packages/ti\cSL\examples\mcan\mcanEvmLoopback\mcan_evm_loopback_app_main_k3.c 中的另一个示例
我做了一些修改并测试了 MCAN1发送 CAN 帧到 MCAN0、它运行良好。
但是中断注册函数 App_mcanRegisterIsr()有问题。
我在 vision_apps\apps\basic_demos\app_tirtos\tirtos_linux\mcu1_0\main.c 中调用可配置函数(包括 appMain ()中的 App_mcanRegisterIsr ())
代码在此处出错:
静态 Int32_t App_mcanRegisterIsr() { int32_t configStatus = STW_SOK; printf ("开始注册 MCAN 中断... \n"); /* MCU MCAN Inst 1 */ configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_1_INT0、&App_mcanTxISR、(void *)(&gMcanMods[MCU_MCAN1_index]); configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_1_INT1、&App_mcanRxISR、(void *)(&gMcanMods[MCU_MCAN1_index]); configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_1_TS_INT、&App_mcanTSInterISR、(void *)(&gMcanMods[MCU_MCAN1_index]); /* MCU MCAN Inst 0 */ configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_0_INT0、&App_mcanTxISR、(void *)(&gMcanMods[MCU_MCAN0_index]); configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_0_INT1、&App_mcanRxISR、(void *)(&gMcanMods[MCU_MCAN0_index]); configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_0_TS_INT、&App_mcanTSInterrISR、(void *)(&gMcanMods[MCU_MCAN0_index]); if (STW_SOK!= CONFIGStatus) { printf ("crossbar/Interrupt Configuration failed.\n"); } 其他 { printf ("crossbar/Interrupt Configuration Done。\n"); } 返回 CONFIGStatus; }
仅突出显示行(APP_MCU_MCAN_0_INT0)注册失败、其他注册正常。
我使用 CCS 进行调试并发现、在 pdk_jacinto_07_01_00_45\packages/ti\osal\src\tirtos\Hwip_tirtos.c 中调用 Hwi_con构()时、EB 不会返回0。
为什么会发生这种情况? 如何解决此问题?
此致
您好、Karan、
我正在使用另一个示例 pdk_jacinto_07_01_00_45\packages/ti\CSL\examples\mcan\mcanEvmLoopback\mCAN_EVM_loopback_app_main_K3.c 并进行了一些修改。
I TEST 发送 CAN 帧从 MCAN1到 MCAN0、运行良好。 但中断注册函数 App_mcanRegisterIsr()有一些问题。
我在 vision_apps\apps\basic_demos\app_tirtos\tirtos_linux\mcu1_0\main.c 的 appMain ()中调用 mcan 配置函数(包括 App_mcanRegisterIsr ())
这里出错了:
静态 Int32_t App_mcanRegisterIsr() { int32_t configStatus = STW_SOK; printf ("开始注册 MCAN 中断... \n"); /* MCU MCAN Inst 1 */ configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_1_INT0、&App_mcanTxISR、(void *)(&gMcanMods[MCU_MCAN1_index]); configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_1_INT1、&App_mcanRxISR、(void *)(&gMcanMods[MCU_MCAN1_index]); configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_1_TS_INT、&App_mcanTSInterISR、(void *)(&gMcanMods[MCU_MCAN1_index]); /* MCU MCAN Inst 0 */ configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_0_INT0、&App_mcanTxISR、(void *)(&gMcanMods[MCU_MCAN0_index]); configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_0_INT1、&App_mcanRxISR、(void *)(&gMcanMods[MCU_MCAN0_index]); configStatus += App_mcanRegisterInterrupt (app_MCU_MCAN_0_TS_INT、&App_mcanTSInterrISR、(void *)(&gMcanMods[MCU_MCAN0_index]); if (STW_SOK!= CONFIGStatus) { printf ("crossbar/Interrupt Configuration failed.\n"); } 其他 { printf ("crossbar/Interrupt Configuration Done。\n"); } 返回 CONFIGStatus; }
仅突出显示行注册(APP_MCU_MCAN_0_INT0)失败、其他注册正常。
我使用 CCS 进行调试并发现、当它在 pdk_jacinto_07_01_00_45\packages/ti\osal\src\tirtos\Hwip_tirtos.c 中调用 Hwi_con构()时、EB 不会返回0。
这是为什么? 如何解决此问题?
此致
您好!
抱歉、此处未回复。
MCU MCAN0的中断注册不应失败。 是否可以检查中断号的值? 这些0和1是否用于 ISR0和 ISR1?
2.您能否在您使用的 SDK7.1之上提供补丁、以便我可以在我的设置上复制此补丁?
3.您是否按照开发人员说明 https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/psdk_rtos/docs/user_guide/developer_notes_mcu1_0_sysfw.html 根据 MCU1_0应用程序创建引导加载程序映像?
此致、
Karan