完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好 我的串行设备有一个 IRQ,看起来类似于这样:
CY_ISR(uart_isr) { if (h_UART_CHECK_INTR_RX_MASKED(h_UART_INTR_RX_NOT_EMPTY)) { uint32_t data = h_UART_UartGetByte(); uint8_t byte = data 0xFF; // Ignore any errors. if ((data 0xFFFFFF00) != 0) { return; } queue_data( queue, byte); h_UART_ClearRxInterruptSource(h_UART_INTR_RX_NOT_EMPTY); }} 但我遇到了一个问题,偶尔会出现下溢错误。 也就是说,"((数据 0xFFFFFF00) != 0 "将为真。 这不是成帧或奇偶校验错误,而是下溢错误。 但我不明白怎么会出现这种情况,因为我是专门检查 FIFO 是否为空的。 好吧,我做了一个替代方案。 CY_ISR(uart_isr) { if (h_UART_CHECK_INTR_RX_MASKED(h_UART_INTR_RX_NOT_EMPTY)) { for (uint32_t count = h_UART_SpiUartGetRxBufferSize; count > 0; count--) { uint32_t data = h_UART_UartGetByte(); uint8_t byte = data 0xFF; // Skip errors if ((data 0xFFFFFF00) != 0) { continue; } queue_data( queue, byte); } h_UART_ClearRxInterruptSource(h_UART_INTR_RX_NOT_EMPTY); }}结果不知怎么的,情况更糟了。 计数将是一个正数,但随后将跳过接收到的每个字节。 基本上,我想问的是,怎么可能 h_UART_CHECK_INTR_RX_MASKED(h_UART_INTR_RX_NOT_EMPTY)为真,但在读取字节时会出现下溢错误? 我做了一个测试,它收到的每个错误都是下溢。 如果我检查下溢时接收到的值,有些是实际发送的数据(又称非下溢),有些则是垃圾数据。 几个月来,这一直是我的心病,但到目前为止,我的解决方案一直是",大约每 50 封邮件中就有一封因某些原因而失败," ,但这已经过时了。 |
|
相关推荐
1个回答
|
|
在PSoC 4中,读取数值时出现下溢的原因可能有以下几点:
1. 数据接收不正确:首先,我们需要确保串行设备发送的数据是正确的。如果发送的数据有误,那么在接收端读取时可能会出现下溢。 2. 串口配置错误:检查串口配置是否正确,包括波特率、数据位、停止位和奇偶校验位等。如果配置不正确,可能会导致数据接收错误,从而引发下溢。 3. 中断处理不当:在中断服务程序(ISR)中,我们需要确保正确地处理接收到的数据。在您提供的代码中,使用了`h_UART_UartGetByte()`函数来读取数据,然后通过`data & 0xFF`将数据转换为8位。请确保这个转换是正确的,并且没有丢失任何有效数据。 4. 数据缓冲区溢出:如果接收到的数据量超过了缓冲区的大小,可能会导致数据丢失或下溢。请确保您的缓冲区足够大,以容纳接收到的数据。 5. 硬件问题:如果以上原因都排除了,那么可能是硬件问题导致的下溢。检查串行设备的硬件连接是否正确,以及是否有其他硬件故障。 为了解决这个问题,您可以尝试以下步骤: 1. 检查串行设备的发送数据是否正确。 2. 检查串口配置是否正确。 3. 在中断服务程序中添加调试信息,以便于跟踪数据接收和处理的过程。 4. 确保缓冲区足够大,以容纳接收到的数据。 5. 如果可能,请检查硬件连接和硬件故障。 通过以上步骤,您应该能够找到导致下溢的原因,并采取相应的措施解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教个XMC1404调试串口接收时为什么一直无法接收数据的问题
360 浏览 0 评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6255 浏览 2 评论
4104 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3630 浏览 9 评论
1230 浏览 8 评论
457浏览 2评论
270浏览 2评论
376浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
6263浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
456浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 04:46 , Processed in 0.584855 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号