Other Parts Discussed in Thread: SYSCONFIG
器件型号: F29H850TU
主题: SysConfig 中讨论的其他器件
您好团队:
我已在 Sysconfig 中配置 CAN 中断。刚刚尝试从 CAN 接收和发送数据 、但未触发中断。 在 ISR 中、只切换 LED。

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.
Other Parts Discussed in Thread: SYSCONFIG
器件型号: F29H850TU
主题: SysConfig 中讨论的其他器件
您好团队:
我已在 Sysconfig 中配置 CAN 中断。刚刚尝试从 CAN 接收和发送数据 、但未触发中断。 在 ISR 中、只切换 LED。

尊敬的 Sayali:
我看到该示例开箱即用后不支持 LaunchPad 选项。
我只看到的构建配置

闪存和 RAM(它们对应于控制卡,可能需要进行其他更改。)
通常、例如让 LaunchPad 支持包装盒的输出、我们会看到 LaunchPad 配置、如下所示

您是否尝试过以下操作:
*在 syscfg 中 需要进行迁移时、请将电路板更改为 launchpad 、并在 syscfg 中的 mcan 配置中选择适当的 pinmux、任何其他可能需要修复的选项 (您可以参阅 sysfg 中的 launchpad 图或原理图)


如果这样可以解决您的问题、请告诉我。
此致
库纳尔。
尊敬的 Sayali:
将此线程分配给 mcan 团队的某个人。
意味着虽然只是为了确定,你能检查你是否已经添加了这个部分 的代码在你的程序中启用中断。
您好 Pranav、
请在下面找到 SYSCFG 文件。
/**
* These arguments were used when this file was generated. They will be automatically applied on subsequent loads
* via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
* @cliArgs --device "F29H85x" --part "F29H850TU9RFS" --package "144RFS" --context "CPU1" --product "MCU_SDK_F29H85x@1.02.01.00"
* @v2CliArgs --device "F29H850TU" --package "144RFS" --variant "TMS320F29H850TU9" --context "CPU1" --product "MCU_SDK_F29H85x@1.02.01.00"
* @versions {"tool":"1.26.0+4407"}
*/
/**
* Import the modules used in this configuration.
*/
const clocktree = scripting.addModule("/driverlib/clocktree.js");
const gpio = scripting.addModule("/driverlib/gpio.js", {}, false);
const gpio1 = gpio.addInstance();
const gpio2 = gpio.addInstance();
const jtag = scripting.addModule("/driverlib/jtag.js");
const mcan = scripting.addModule("/driverlib/mcan.js", {}, false);
const mcan1 = mcan.addInstance();
/**
* Write custom configuration values to the imported modules.
*/
const divider8 = system.clockTree["MCANACLKDIV"];
divider8.divideValue = 10;
const divider15 = system.clockTree["PLL_REFDIV"];
divider15.divideValue = 1;
const multiplier1 = system.clockTree["PLL_IMULT"];
multiplier1.multiplyValue = 40;
const mux7 = system.clockTree["OSCCLKSRCSEL"];
mux7.inputSelect = "INTOSC2";
gpio1.$name = "myGPIO0";
gpio1.direction = "GPIO_DIR_MODE_OUT";
gpio1.gpioPin.$assign = "GPIO19";
gpio2.$name = "myGPIO1";
gpio2.gpioPin.$assign = "GPIO15";
jtag.JTAG.$assign = "JTAG";
jtag.JTAG.tdoPin.$assign = "GPIO223/TDO";
jtag.JTAG.tdiPin.$assign = "GPIO222/TDI";
mcan1.$name = "myMCAN0";
mcan1.additionalCoreConfig = true;
mcan1.stdFiltsUsed = [0];
mcan1.loopbackMode = false;
mcan1.dataRatePrescalar = 0;
mcan1.fdMode = false;
mcan1.brsEnable = false;
mcan1.nomTimeSeg1 = 9;
mcan1.nomTimeSeg2 = 8;
mcan1.nomSynchJumpWidth = 8;
mcan1.nomRatePrescalar = 3;
mcan1.stdFilts = 1;
mcan1.enableInterrupt = true;
mcan1.interruptLine0Flag = ["MCAN_IR_RF1N_MASK","MCAN_IR_TEFN_MASK"];
mcan1.registerInterruptLine1 = true;
mcan1.interruptLine1Flag = ["MCAN_IR_RF1N_MASK","MCAN_IR_TEFN_MASK"];
mcan1.txEventFIFOWaterMark = 1;
mcan1.rxFIFO1waterMark = 1;
mcan1.rxFIFO0waterMark = 1;
mcan1.interruptFlags = ["MCAN_INTR_MASK_ALL"];
mcan1.interruptLine = ["MCAN_INTR_LINE_NUM_1"];
mcan1.mcan.$assign = "MCANA";
mcan1.mcan.mcan_rxPin.$assign = "GPIO65";
mcan1.mcan.mcan_txPin.$assign = "GPIO64";
mcan1.periphClock.$name = "driverlib_perClock0";
mcan1.periphConfig.$name = "driverlib_perConfig0";
mcan1.stdFilt0.$name = "stdFilt0";
mcan1.stdFilt0.sfid1 = 4;
mcan1.stdFilt0.sfec = "MCAN_STDFILTEC_PRI_FIFO1";
谢谢!!
尊敬的 Sayali:
您能否使用下面的文件进行检查? 如果收到任何警告、您可以继续抑制警告。
e2e.ti.com/.../untitled.syscfg
此致、
Pranav Siddappa.
您好 Pranav、
请在下面找到 ISR 和 syscfg 文件。
void INT_myMCAN0_1_ISR()
{
timer++;
GPIO_togglePin(myGPIO0);
uint32_t intrStatus;
MCAN_RxNewDataStatus newData;
intrStatus = MCAN_getIntrStatus(myMCAN0_BASE);
MCAN_writeMsgRam(myMCAN0_BASE, MCAN_MEM_TYPE_BUF, 1U, &txMsg);
MCAN_txBufAddReq(myMCAN0_BASE, 1U);
while(MCAN_getTxBufReqPend(myMCAN0_BASE))
{
}
MCAN_clearIntrStatus(myMCAN0_BASE, intrStatus);
MCAN_clearInterrupt(myMCAN0_BASE, 1);
}
/**
* These arguments were used when this file was generated. They will be automatically applied on subsequent loads
* via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
* @cliArgs --device "F29H85x" --part "F29H850TU9RFS" --package "144RFS" --context "CPU1" --product "MCU_SDK_F29H85x@1.02.01.00"
* @v2CliArgs --device "F29H850TU" --package "144RFS" --variant "TMS320F29H850TU9" --context "CPU1" --product "MCU_SDK_F29H85x@1.02.01.00"
* @versions {"tool":"1.26.0+4407"}
*/
/**
* Import the modules used in this configuration.
*/
const clocktree = scripting.addModule("/driverlib/clocktree.js");
const gpio = scripting.addModule("/driverlib/gpio.js", {}, false);
const gpio1 = gpio.addInstance();
const gpio2 = gpio.addInstance();
const jtag = scripting.addModule("/driverlib/jtag.js");
const mcan = scripting.addModule("/driverlib/mcan.js", {}, false);
const mcan1 = mcan.addInstance();
/**
* Write custom configuration values to the imported modules.
*/
const divider4 = system.clockTree["EPWMCLKDIV"];
divider4.divideValue = 1;
const divider8 = system.clockTree["MCANACLKDIV"];
divider8.divideValue = 10;
const divider15 = system.clockTree["PLL_REFDIV"];
divider15.divideValue = 1;
const multiplier1 = system.clockTree["PLL_IMULT"];
multiplier1.multiplyValue = 40;
const mux7 = system.clockTree["OSCCLKSRCSEL"];
mux7.inputSelect = "INTOSC2";
gpio1.$name = "myGPIO0";
gpio1.direction = "GPIO_DIR_MODE_OUT";
gpio2.$name = "myGPIO1";
jtag.JTAG.$assign = "JTAG";
jtag.JTAG.tdoPin.$assign = "GPIO223/TDO";
jtag.JTAG.tdiPin.$assign = "GPIO222/TDI";
mcan1.$name = "myMCAN0";
mcan1.additionalCoreConfig = true;
mcan1.stdFiltsUsed = [0];
mcan1.loopbackMode = false;
mcan1.dataRatePrescalar = 0;
mcan1.fdMode = false;
mcan1.brsEnable = false;
mcan1.nomTimeSeg1 = 9;
mcan1.nomTimeSeg2 = 8;
mcan1.nomSynchJumpWidth = 8;
mcan1.nomRatePrescalar = 3;
mcan1.stdFilts = 1;
mcan1.enableInterrupt = true;
mcan1.interruptLine0Flag = ["MCAN_IR_RF1N_MASK","MCAN_IR_TEFN_MASK"];
mcan1.registerInterruptLine1 = true;
mcan1.interruptLine1Flag = ["MCAN_IR_RF1N_MASK","MCAN_IR_TEFN_MASK"];
mcan1.txEventFIFOWaterMark = 1;
mcan1.rxFIFO1waterMark = 1;
mcan1.rxFIFO0waterMark = 1;
mcan1.interruptFlags = ["MCAN_INTR_MASK_ALL"];
mcan1.interruptLine = ["MCAN_INTR_LINE_NUM_1"];
mcan1.mcan.$assign = "MCANA";
mcan1.mcan.mcan_rxPin.$assign = "GPIO65";
mcan1.mcan.mcan_txPin.$assign = "GPIO64";
mcan1.periphClock.$name = "driverlib_perClock0";
mcan1.periphConfig.$name = "driverlib_perConfig0";
mcan1.stdFilt0.$name = "stdFilt0";
mcan1.stdFilt0.sfid1 = 4;
mcan1.stdFilt0.sfec = "MCAN_STDFILTEC_PRI_FIFO1";
/**
* Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
* version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to
* re-solve from scratch.
*/
gpio1.gpioPin.$suggestSolution = "GPIO15";
gpio2.gpioPin.$suggestSolution = "GPIO16";
您好 Pranav、
在此程序中、目标是验证是否正确触发中断服务例程 (ISR)。 确认 ISR 功能后、相同的逻辑将集成到主应用程序代码中。
在当前实现中、使用 LINE1 中断。 Rx FIFO1 新消息中断、和 TX 事件新消息中断 已启用。 在 ISR 内、单个 LED 被切换以指示中断执行、数据传输作为中断处理例程的一部分执行。
请查看并确认是否 需要进行任何其他板级配置或硬件更改、以确保正确触发和执行中断。
谢谢!!
尊敬的 Sayali:
由于 ISR 未被触发、因此消息的接收方式存在问题。 可能存在以下问题:
最后、应尝试通过寄存器窗口监控 RXBUF、以确认消息是否实际到达。
我很难在没有整个项目应用程序的情况下重新创建。 如果你能把它作为一个整体分享,我可能能够证明更多的洞察力。
此致、
Pranav Siddappa.
您好 Pranav、
我想分享的另一个意见如下。
在不进行任何修改的情况下运行示例 mcan_ex1_loopback_interrupts 时、我会观察到该 msgCount 值设置为 1。 此外、我还可以在 RX 缓冲区中看到接收到的消息。
但是、将电路板切换到 144RFS 后、不会再次触发中断。 我也没有在该电路板上观察到预期的中断行为。
是否需要更改 144RFS 封装的电路板、请建议。

此致、
Sayali
尊敬的 Sayali:
mcan_ex1_loopback_interrupts 示例使用 Launchpad 上不存在的 CANB 实例。 您可以将实例更改为 Cana/Cancc 以及专用引脚、它就能正常工作。
以下是我执行的步骤:



以下是 LaunchPad 引脚排列:
e2e.ti.com/.../F29H85X-LP-Pinout.pdf
如果您正在观察 Interrupt0 ISR、则您的观察是正确的、因为它未启用。 因此不会触发。 您可以观察到中断 ISR。 
此致、
Pranav Siddappa.