ti81xx_interrupt 1146: VBUS error workaround (delay coming)产生原因分析

这几天用开发板来采集声音信号,接了一个24为的采集卡。开发板是TI的AM335X,运行内核是3.2版。整个系统用小米移动电源供电(因为要把整个系统拿到室外)。但是在使用过程中,系统老是出问题,提示代码就是标题:

ti81xx_interrupt 1146: VBUS error workaround (delay coming)

其实在启动过程中也报出了这个问题,但是可以正常启动使用。只不过在使用过程中,经常时不时的又报出这个问题,虽然没有导致系统挂掉,但是也使得系统无法正常使用。网上查了一下,VBUS是USB的供电电源,这个问题应该是由USB供电电源出问题导致的。考虑到在室内用电源适配器供电使用正常,且整个系统确实要的电流比较大,于是怀疑移动电源供电能力不足。接着换了一块供电能力强一点的移动电源,没有再报错了!

回去查了继续针对这个问题查了一下资料。找到下面这个TI论坛的帖子,里面分析的很详细!其中讲到的VBUS电压下降的原因应该就是我这次碰到问题的原因。帖子链接如下:

<think>好的,我现在需要帮用户解释UART各个中断参数的含义。首先,用户提供的列表里有八个不同的中断类型,每个都有对应的英文名称和简写。我的任务是逐一解释每个中断的作用和应用场景。 首先,我需要回忆UART的基本知识。UART是通用异步收发传输器,常用于串行通信。中断是处理器响应外部事件的一种机制,当中断触发时,处理器会暂停当前任务,执行中断服务程序。 接下来,逐个分析每个中断参数: 1. **UART_IT_CTS**:CTS是Clear To Send的缩写,属于硬件流控制的一部分。当对方设备准备好接收数据时,会拉低CTS信号线,触发这个中断。通常用于控制数据流,防止数据丢失。需要确认用户是否了解硬件流控制的概念,可能需要简单解释。 2. **UART_IT_LBD**:LIN Break检测中断。LIN总线是一种用于汽车通信的低成本串行协议,Break检测指的是检测到LIN总线上的特殊Break信号,用于帧同步。这里可能需要说明LIN总线的背景,以及Break信号的作用。 3. **UART_IT_TXE**:发送数据寄存器空中断。当发送数据寄存器为空时触发,意味着可以继续发送下一个数据。这个中断常用于连续发送数据的场景,比如在DMA不适用时,通过中断填充数据。 4. **UART_IT_TC**:传输完成中断。当整个数据帧(包括停止位)发送完毕时触发,适用于需要确认数据完全发送完毕后再进行下一步操作的情况,比如关闭发送器或切换模式。 5. **UART_IT_RXNE**:接收数据寄存器非空中断。当接收到新数据时触发,用于及时读取接收到的数据,防止数据覆盖。这是接收数据时最常用的中断之一。 6. **UART_IT_IDLE**:空闲线检测中断。当检测到总线空闲(即一段时间内没有数据传输)时触发,可以用于处理数据包接收完成后的处理,比如解析接收到的数据帧。 7. **UART_IT_PE**:奇偶校验错误中断。当接收到的数据奇偶校验失败时触发,帮助检测数据传输中的错误,需要结合错误处理机制进行应对。 8. **UART_IT_ERR**:错误中断,包括帧错误、噪声错误和过载错误。这些错误可能由信号干扰、波特率不匹配或接收缓冲区溢出引起,需要综合处理这些错误以确保通信可靠。 在解释每个中断时,需要考虑用户可能的背景。用户之前询问过Modbus RTU的参数设置,可能是在进行工业控制或嵌入式系统的开发,涉及到串口通信配置。因此,应用场景可能需要结合实际例子,比如在PLC或触摸屏通信中使用这些中断来处理数据收发和错误检测。 另外,用户可能需要知道如何配置这些中断,比如在STM32等微控制器中如何启用相应的中断标志,以及中断服务程序的处理流程。但根据问题,用户目前只需要每个中断的含义,所以可能需要保持解释简洁,但足够清晰。 需要确保术语准确,比如区分TXE和TC中断,前者是发送寄存器空,可以继续发送,后者是整个传输完成。这点容易混淆,需要明确说明。 最后,总结部分可以强调根据应用需求选择合适的中断,比如需要高效发送数据时使用TXE,需要确保数据完整发送后执行操作时使用TC,接收数据用RXNE,错误处理用PE和ERR等。同时提醒用户在实际编程中正确配置中断优先级和使能相应的中断标志,避免遗漏或冲突。</think>以下是对UART中断参数的详细解释,按功能分类说明其作用和应用场景: --- ### **UART中断类型解析** 以下参数用于配置UART通信中的中断触发条件,每个中断对应不同的通信事件: #### **1. 硬件流控制相关** - **UART_IT_CTS** *含义*:CTS(Clear To Send)信号变化中断 *应用*:用于硬件流控制。当对方设备准备好接收数据时,CTS引脚电平变化会触发此中断,通知本方可以继续发送数据。 *典型场景*:高速通信中防止数据丢失,需配合RTS(Request To Send)使用。 #### **2. 数据发送相关** - **UART_IT_TXE** *含义*:发送数据寄存器空中断(Transmit Data Register Empty) *应用*:当发送寄存器为空时触发,表示可以写入新数据。 *典型场景*:连续发送数据流时,通过中断持续填充数据,避免发送停滞。 - **UART_IT_TC** *含义*:传输完成中断(Transmission Complete) *应用*:当整个数据帧(包括停止位)发送完毕后触发。 *典型场景*:需确认数据完全发送完毕后再执行后续操作(如关闭发送器)。 #### **3. 数据接收相关** - **UART_IT_RXNE** *含义*:接收数据寄存器非空中断(Receive Data Register Not Empty) *应用*:当接收到新数据时触发,需及时读取数据寄存器。 *典型场景*:实时接收数据(如传感器读数),防止数据覆盖。 - **UART_IT_IDLE** *含义*:空闲线检测中断(Idle Line Detection) *应用*:检测到总线空闲(无数据传输超过一帧时间)时触发。 *典型场景*:判断一帧数据接收完成(如Modbus RTU协议中报文间隔)。 #### **4. 通信错误检测** - **UART_IT_PE** *含义*:奇偶校验错误中断(Parity Error) *应用*:接收数据奇偶校验失败时触发,表示数据可能被篡改。 *典型场景*:高可靠性通信(如工业控制)中检测传输错误。 - **UART_IT_ERR** *含义*:综合错误中断(Frame/Noise/Overrun Error) *包含错误类型*: - **帧错误**:停止位不符合预期(波特率不匹配或信号干扰) - **噪声错误**:信号线受到电磁干扰 - **过载错误**:接收缓冲区未及时读取导致数据丢失 *典型场景*:调试通信故障时定位问题根源。 #### **5. 特殊协议支持** - **UART_IT_LBD** *含义*:LIN总线Break检测中断(LIN Break Detection) *应用*:检测LIN总线中的Break信号(持续至少13位低电平)。 *典型场景*:汽车电子中LIN总线通信的帧同步。 --- ### **配置建议** 1. **发送场景** - 使用`UART_IT_TXE`实现高效连续发送。 - 结合`UART_IT_TC`确保数据完整发送后执行后续操作(如切换接收模式)。 2. **接收场景** - 启用`UART_IT_RXNE`实时读取数据。 - 配合`UART_IT_IDLE`判断数据帧结束。 3. **错误处理** - 必须启用`UART_IT_PE`和`UART_IT_ERR`以检测通信异常。 - 在中断服务程序中清除错误标志,防止持续触发。 4. **硬件流控制** - 若使用RTS/CTS流控制,需启用`UART_IT_CTS`避免数据溢出。 --- ### **示例代码逻辑(伪代码)** ```c // 启用接收中断和错误中断 UART_ITConfig(UARTx, UART_IT_RXNE | UART_IT_IDLE | UART_IT_ERR, ENABLE); void UART_IRQHandler() { if (UART_GetITStatus(UARTx, UART_IT_RXNE)) { // 读取接收到的数据 uint8_t data = UART_ReceiveData(UARTx); buffer.push(data); } if (UART_GetITStatus(UARTx, UART_IT_IDLE)) { // 处理完整数据帧 process_buffer(); } if (UART_GetITStatus(UARTx, UART_IT_PE)) { // 处理奇偶校验错误 UART_ClearITPendingBit(UARTx, UART_IT_PE); } } ``` --- ### **常见问题排查** - **数据丢失**:检查是否启用`UART_IT_RXNE`并及时读取数据。 - **通信卡顿**:确认波特率匹配,避免帧错误。 - **频繁进入错误中断**:检查线路干扰或接地问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值