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.

[参考译文] TMS570LC4357:MIBSPI 缓冲器处于意外状态

Guru**** 2399305 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1332533/tms570lc4357-mibspi-buffers-in-unexpected-state

器件型号:TMS570LC4357

您好!

我已经创建了 MIBSPI 实现来为外部 CAN 控制器提供服务。 这种实现通常可以正常运行、不会出现任何问题。 但是、为来自 CAN 控制器的传入消息提供服务的传输组会在5-10分钟后进入意外状态、从而冻结整个 MIBSPI。  当 我 提高用于 MIBSPI 的 DMA 通道的优先级(需要几个小时才能达到此状态)时、这个问题的频率似乎会降低。

传输组的配置:

//接收传输组
//将其保持为禁用状态,将其作为 CAN 控制器配置的最后一步启用
SPI_BASE->TGCTRL[CURRENT_GROUP]=(uint32_T)((uint32_T) 0U << 31U)//启用
                             |(uint32_T)((uint32_T) 0U << 30U)//单触发
                              |(uint32_T)((uint32_T) 0U << 29U)//当前复位
                              |(uint32_T)((uint32_T) TRG_LOW << 20U)//触发事件,由来自 CAN 控制器 VIA 的 RXEMPTY 标志触发的组。 GIOA
                              |(uint32_T)((uint32_T) TRG_GIOA0 << 16U)//触发源
                              |(uint32_T)((uint32_T) 0U<<8U);//开始缓冲

// Tx DMA 组
//将其禁用
SPI_BASE->TGCTRL[CURRENT_GROUP]=(uint32_T)((uint32_T) 0U << 31U)//启用
                              |(uint32_T)((uint32_T) 1U << 30U)//单触发器
                              |(uint32_T)((uint32_T) 0U << 29U)//当前复位
                              |(uint32_T)((uint32_T) TRG_LOW<< 20U)// 由来自 CAN 控制器 VIA 的 TXFULL 标志触发的触发事件组。 GIOA
                              |(uint32_T)((uint32_T) TRG_GIOA1 << 16U)//触发源
                              |(uint32_T)((uint32_T) 8u<<8U);//开始缓冲

MIBSPI 进入以下异常状态。 如果 buffer=0、RXEMPTY 为0、这使得 MIBSPI 卡在 RX 传输组中(来自 LTGPEND 寄存器)。 这种状态似乎在5分钟以上后随机出现。 RX DMA 被设定为将 RX 数据从缓冲器0-7传输至 RAM。

传输组 缓冲区 ID TX 说明 RX 说明 数据长度(位) RXEMPTY 缓冲模式 锁定
RX 传输组 0 命令数据 —— 8 0 6 1
1 —— CAN MSG 16 1 6 1
2 —— CAN MSG 16 1 6 1
3 —— CAN MSG 16 1 6 1
4 —— CAN MSG 16 1 6 1
5 —— CAN MSG 16 1 6 1
6 —— CAN MSG 16 1 6 1
7 —— CAN MSG 16 1 6 0 RX DMA 在此处触发
TX 传输组 8 命令数据 —— 8 0 5 1
9 CAN MSG —— 16 0 5 1
10 CAN MSG —— 16 0 5 1
11 CAN MSG —— 16 0 5 1
12 CAN MSG —— 16 0 5 1
13 CAN MSG —— 16 0 5 1
14 CAN MSG —— 16 0 5 1
15 CAN MSG —— 16 0 5 0 TX DMA 在此处触发
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martin:

    我已开始处理您的问题、并将尽快提供更新。

    --
    谢谢。此致、
    Jagadish。

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

    尊敬的 Martin:

    我能否获得一个最简单的项目来在最终重现问题? 如果我能够重现问题、那么我可以对其进行调试并提供必要的解决方案。

    通过上述信息、我无法找出任何根本原因。

    --
    谢谢。此致、
    Jagadish。