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.

[参考译文] MSPM0L1306:MSPM0L1306 在启用中断后在 main 之前进入 Default_Handler

Guru**** 2966500 points

Other Parts Discussed in Thread: MSPM0L1306, SYSCONFIG, TMS320F280049C

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1660657/mspm0l1306-mspm0l1306-enters-default_handler-before-main-after-enabling-interrupts

器件型号: MSPM0L1306
主题中讨论的其他器件: SysConfig、 TMS320F280049C

标题: MSPM0L1306 在使用 I2C 目标模式时进入 Default_Handler

您好、

我将 MSPM0L1306 与 CCS + SysConfig 配合使用。

我面临一个问题、即 MCU 跳转到 Default_Handler() 无限环路并因意外中断而卡在无限环路中。

void Default_Handler(void)
{
    while (1) {
    }
}

问题

在添加 I2C 功能之前、程序正常工作。 启用 I2C 相关代码后、它会进入 Default_Handler。

我还注意到,有时附近的断点 main() 未被正确命中,并最终执行达到 Default_Handler.

我想确定哪个中断导致了这种情况。

当前使用的项目中断

我已在工程中使用这些中断:

  • 计时器中断: TIMG1_IRQHandler

  • 计时器中断: TIMG0_IRQHandler

  • GPIO 中断: GROUP1_IRQHandler

我还使用以下命令启用 GPIO 中断:

NVIC_EnableIRQ(GPIOA_INT_IRQn);

I2C 配置(从模式/目标模式)

我正在 I2C0 目标(从器件)模式下使用。

  • I2C 实例: I2C0

  • 从器件地址: 0x50

  • SDA 引脚: PA0

  • SCL 引脚: PA1

  • Tx FIFO 触发级别: 1 byte

  • RX FIFO 触发电平: 1 byte

  • 时钟延展:已启用

SysConfig 中启用的 I2C 中断

我仅启用了以下 I2C 中断:

  • DL_I2C_INTERRUPT_TARGET_START

  • DL_I2C_INTERRUPT_TARGET_STOP

  • DL_I2C_INTERRUPT_TARGET_TXFIFO_TRIGGER

我未启用:

  • 目标 RX FIFO 中断

  • 控制器模式中断

  • NACK 中断

  • 仲裁丢失中断

我使用以下命令为 I2C 启用 NVIC:

NVIC_EnableIRQ(I2C_0_INST_INT_IRQN);

其中:

#define I2C_0_INST_INT_IRQN I2C0_INT_IRQn

通信设置

主 MCU 为 TMS320F280049C。

通信要求:

MSPM0 充当从器件并向主器件发送 3 个字节:

  1. 车辆模式(1 字节)

  2. ADC 低字节

  3. ADC 高字节

问题

  1. 如何确定哪个中断导致了 Default_Handler?

  2. 现有的计时器/GPIO 中断与 I2C 目标中断之间是否存在任何冲突?

  3. 对于 MSPM0 上的意外中断、建议使用调试方法吗?

如有任何帮助、我们将不胜感激。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据您所说的、我的第一种猜测是您没有用于 I2C0 的 ISR。 您是否有名为“I2C0_IRQHandler“的函数?

    更一般地说:进入 ISR(本例中为 Default_Handler)后、请查看“Registers(内核寄存器)“视图->xPSR。 低 6 位(异常字段)会提供当前异常编号。 从该值减去 16、您将获得相关 IRQn 值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你可以尝试我从 Brandon Fisher 获得的这个技术,它为*Every*中断创建一个存根。

    e2e.ti.com/.../5055118