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.
工具/软件:Code Composer Studio
您好!
我想将 CAN 通信从 CPU1传输到 CPU2。 我在论坛上看到了两次介绍并实施了我的项目:
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/787160
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/539650?How-to-enable-cpu02-to-send-receive-over-CAN-bus-A-TMS320F28377D-
代码 CPU1:
DevCfgRegs.CPUSEL8.bit.CAN_A = 1; // 连接到 CPU2
#if CANA_RX_GPIO = 30 //设置引脚
sdiGpioPinMuxSetup (CANA_RX_GPIO、GPIO_MUX_CPU2、1); //CANRXA
#endif
sdiGpioPinOptionsSetup (CANA_RX_GPIO、GPIO_INPUT、GPIO_异 步);
#IF (CANA_TX_GPIO = 31)
sdiGpioPinMuxSetup (CANA_TX_GPIO、GPIO_MUX_CPU2、1); //CANTXA
#endif
sdiGpioPinOptionsSetup (CANA_TX_GPIO、GPIO_OUTPUT、GPIO_PushPull);
CANInit (0x00048000);
代码 CPU 2:
CpuSysRegs.PCLKCR10.bit.CAN_A = 1; // 打开外设时钟
CANClkSourceSelect (CANA_base、CANA_CLK_SOURCE);
CANBitRateSet (CANA_base、CANA_CLK_FREQ、CANA_bitrate);
如果仅使用 CPU1、则可以在使用表达式窗口时进行初始化、并设置:CpuSysRegs.PCLKCR10.bit.CAN_A = 1;
相同的过程、在 DevCfgRegs.CPUSEL8.bit.CAN_A = 1之后;在 CPU1 中、CAN 通信不起作用! 是否有论坛中未提及的其他设置?
提前感谢!
Matthias
您好、Matthias、
您的流程应为:
-分配 CPU1中的 CAN 引脚多路复用配置
-从 CPU1禁用外设时钟(CpuSysRegs.PCLKCR10.bit.CAN_A = 0)
-将 CAN 的所有权从 CPU1切换到 CPU2 (DevCfgRegs.CPUSEL8.bit.CAN_A = 1;);
-在 CPU2中,打开 CAN 时钟(CpuSysRegs.PCLKCR10.bit.CAN_A = 1)并设置 CAN_CLK (CANClkSourceSelect (CANA_base、CANA_CLK_SOURCE)并配置位时序( CANBitRateSet (CANA_base、CANA_CLK_FREQ、CANA_bitrate))。
此致、
Joseph
您好、Joseph、
感谢 你的帮助!
问题出在内存链接器文件中。 在这里未分配内存、我忽略了 Code Composer Studio 的警告。
CAN 通信在我更改链接器文件后运行:
存储器:
// CAN 通信(仅 CPU1)
DEVCFGREGSMEM:origin = 0x0005D000、length = 0x000017F
章节:
// CAN 通信(仅 CPU1)
DevCfgRegsFile:> DEVCFGREGSMEM,PAGE = 1.
此致、
Matthias