完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
在任务中,发送数据前,置位标志位1,填好第一包使能发送中断,后续发送在中断中处理,中断发送结束后,置位标志位为0,并关闭发送中断; 在中断中接受数据,接受完一帧数据后,发送给任务处理; 在发送数据的同时,下发数据,会出现不进入中断的情况: 中断处理代码为: void UARtiSR () { GR_U32 u32int_id = 0; GR_U32 u32fifo_status = 0; GR_U8 u8CharData = 0;//收到的1字节数据 GR_U32 u32SerialData= 0; GR_U16 u16Class = 0,u16Type = 0; GR_U16 u16PutCharCount = 0, u32Temp; // 确定中断源 u32int_id = UARTIntStatus(SOC_UART_1_REGS); //IntEventClear(SYS_INT_UART1_INT); // 发送中断 if (UART_INTID_TX_EMPTY == u32int_id) { if (DalUartSendBusy(UART1)) { while ((tUart1Buf.u32SendBufPos < tUart1Buf.u32SendBufLen) && (u16PutCharCount < 16)) { HWREG(SOC_UART_1_REGS + UART_THR) = tUart1Buf.u8SendBuf[tUart1Buf.u32SendBufPos]; tUart1Buf.u32SendBufPos++; u16PutCharCount++; } } if (DalUartSendBusy(UART1)) { if (tUart1Buf.u32SendBufPos == tUart1Buf.u32SendBufLen) { tUart1Buf.u32SendBufPos = 0; tUart1Buf.u32SendBufLen = 0; tUart1Buf.s32SendStatus = 0; UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY); } } } // 接收中断 if (UART_INTID_RX_DATA == u32int_id) { u32fifo_status = DalUartReadBusy(UART_PORT); vCommPortTimersEnable(); while (u32fifo_status) { //接收串口数据,放到全局缓冲区中 DalUartCharGet(UART_PORT, (GR_S8 *)&u8CharData, 0); // 拷贝至全局数组中 ………………………… u32fifo_status = DalUartReadBusy(UART_PORT); } } // 接收错误 if (UART_INTID_RX_LINE_STAT == u32int_id) { u32Temp = UARTRxErrorGet(SOC_UART_1_REGS); while(u32Temp) { while(DalUartReadBusy(UART_PORT)) { // 从 RBR 读一个字节 UARTCharGetNonBlocking(SOC_UART_1_REGS); } u32Temp = UARTRxErrorGet(SOC_UART_1_REGS); } } else if ((UART_INTID_RX_LINE_STAT != u32int_id) && (UART_INTID_RX_DATA != u32int_id) && (UART_INTID_TX_EMPTY != u32int_id)) { u32int_id = u32int_id; } } |
|
相关推荐
2个回答
|
|
|
任务实现代码如下:
while (tUart1Buf.s32SendStatus) { DalOsTaskSleep(1); } if (u16DataLen > 0) { tUart1Buf.s32SendStatus = 1; tUart1Buf.u32SendBufLen = u16DataLen; tUart1Buf.u32SendBufPos = 0; memcpy(tUart1Buf.u8SendBuf,pu8Data,u16DataLen); UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY); if (DalUartSendBusy(UART1)) { u16Count = 0; while ((tUart1Buf.u32SendBufPos < tUart1Buf.u32SendBufLen) && (u16Count < 16)) { HWREG(SOC_UART_1_REGS + UART_THR) = tUart1Buf.u8SendBuf[tUart1Buf.u32SendBufPos]; tUart1Buf.u32SendBufPos++; u16Count++; } } UARTIntEnable(SOC_UART_1_REGS, UART_INT_TX_EMPTY); } while (tUart1Buf.s32SendStatus) { DalOsTaskSleep(1); } |
|
|
|
|
|
仿真一下,看看中断标志有没有至位
|
|
|
|
|
只有小组成员才能发言,加入小组>>
【创龙TLT113-MiniEVM开发板试用体验】相关开发过程的体验,以及与毫米波雷达的联调
925 浏览 0 评论
【创龙TL3562-MiniEVM开发板试用体验】--MQTT通讯
926 浏览 0 评论
【创龙TL3562-MiniEVM开发板试用体验】问题4 ubuntu镜像,opencv不能正常工作??
1012 浏览 0 评论
【创龙TL3562-MiniEVM开发板试用体验】10、 Qt实现ADC采集显示和内部温度曲线监控
1461 浏览 0 评论
【创龙TLT113-MiniEVM开发板试用体验】U盘读写速度测试教程
1831 浏览 0 评论
【创龙TL3562-MiniEVM开发板试用体验】问题1 更换到Ubuntu镜像后,USB识别不了外设
471浏览 1评论
【创龙TL3562-MiniEVM开发板试用体验】1、从系统启动卡制作开始
720浏览 1评论
【创龙TL3562-MiniEVM开发板试用体验】Grove移植4之BUTTON
326浏览 0评论
【创龙TL3562-MiniEVM开发板试用体验】--开发板外设与接口测试
813浏览 0评论
1128浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 22:53 , Processed in 0.620360 second(s), Total 76, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
6607