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.
您好专家、
我们正在修改示例项目"cm_common_config_C28x.c"、以便将 CAN 外设的控制传递给 CPU2、我们的目标是让 CPU2使用 CANB。 我们按此配置、但似乎没有成功。 (CPU2 CANB 初始化失败)。
1.我们是否提供了有关如何将外设从 CPU1正确分配到 CPU2的示例? 它似乎使用不同的 API 来防止将外设传递到 CM 内核。
2.您能告诉我们我们我们是否正确了吗? 如果不是、您能帮助我们正确行事吗? (如下所示)
ifdef CANB // //为 CAN B 配置 GPIO // GPIO_setPinConfig (DEVICE_GPIO_CFG_CANRXB); GPIO_setPinConfig (DEVICE_GPIO_CFG_CANTXB); // //将共享外设 CAN B 分配给 CM 侧。 // //sysctl_allocateSharedPeripheral (SYSCTL_PALLOCATE_CAN_B、0x1U); SYSCTL_selectCPUForPeripheral (SYSCTL_CPUSEL8_CAN、1、SYSCTL_CPUSEL_CPU2); #endif
谢谢
谢尔登
您好、Sheldon、
让我以不同的方式回答该帖子、并让我知道这是否有意义:
作为最佳做法、 在 步骤1中分配模块分配之前、首先禁用模块的外设时钟。
此致、
Joseph
您好、Joseph、
以下是我对您的回答的反馈:
当然、我们在 CPU1中使用此 API 来执行托管。 但该 API 只能使用参数"sysctl_CPUSEL8_CAN"传递、该参数未指定目标的 CAN 模式(CANA 或 CANB)。
我们在 CPU2上使用示例项目"CAN_Ex5_transmit _receive.c"、并且所有外设都是通过您提到的 API 启用的。 在这种情况下、CANA 的寄存器将写入 CPU2、而 CANB 将无法写入。
现在、我和我的客户都可以根据对 TI 示例项目的微小修改重现此问题。 这个问题只发生在 CANB 上、而不是发生在 CANA 上。 因此、我们不知道接下来要做什么。
我可以通过 TI DRIVE 向您发送该测试程序。 它们可以在 TI LP 上轻松复制。 您能帮我们找到答案吗?
谢谢
谢尔登
您好、Sheldon、
很抱歉得到较晚的响应。我认为客户代码中的问题是在函数调用 sysctl_selectCPUForPeripheral()中,第二个参数是'1'。 它应该为"2"、以便将 CANB 正确分配给 CPU2。 下面是我根据您发送的内容尝试使用的简化代码:
在 CPU1中、尝试以下基本代码、以便将 CANB 分配给 CPU2:
// //初始化设备时钟和外设 // Device_init()函数 Device_enableAllPeripherals ()为包括 CANA 和 CANB 在内的所有外设打开时钟 device_init(); // //为 CAN B 配置 GPIO // GPIO_setPinConfig (DEVICE_GPIO_CFG_CANRXB); GPIO_setPinConfig (DEVICE_GPIO_CFG_CANTXB); //sysctl_resetPeripheral (sysctl_Periph_RES_CANB); // //将共享外设 CAN B 分配给 CM 侧。 // SYSCTL_selectCPUForPeripheral (SYSCTL_CPUSEL8_CAN、2、SYSCTL_CPUSEL_CPU2); : :
在 CPU2中、尝试以下基本代码来配置 CANB:
// //初始化设备时钟和外设 // device_init(); // //初始化 CAN 控制器 // CAN_initModule (CANB_BASE); // //将 CAN 总线位速率设置为500kHz //有关如何设置的信息,请参阅驱动程序库用户指南 //更严格的计时控制。 此外、请参阅器件数据表 //了解有关 CAN 模块计时的更多信息。 // CAN_setBitRate (CANB_BASE、DEVICE_SYSCLK_FREQ、50000、20); : :
请告诉我这是否可行。
此致、
Joseph