描述问题时最好先介绍你使用的是什么型号的单片机,不同单片机的一些功能有些差异。
以AI8051U为例介绍,官方AI8051U实验箱例程包里面串口超时中断的例子(64-DMA-UART串口与存储器数据自动收发)就有读取DMA_UR1R_DONE来判断接收了多少字节数据:
- if(B_RX1_TimeOut) //接收一串数据结束,产生超时中断
- {
- B_RX1_TimeOut = 0;
-
- i = ((u16)DMA_UR1R_DONEH << 8) + DMA_UR1R_DONE; //获取已接收字节个数
- TI = 0; //清除发送标志(DMA发送完不会自动清除标志位)
- printf("cnt=%u\r\n",i);
-
- DMA_UR1R_CR = 0;
- i--; //传输字节设置为(i-1)个数据
- DMA_UR1T_AMT = (u8)i; //设置传输总字节数(低8位):n+1
- DMA_UR1T_AMTH = (u8)(i>>8); //设置传输总字节数(高8位):n+1
-
- DMA_UR1T_CR = 0xc0; //bit7 1:使能 UART1_DMA, bit6 1:开始 UART1_DMA 自动发送
- DMA_UR1R_CR = 0xa1; //bit7 1:使能 UART1_DMA, bit5 1:开始 UART1_DMA 自动接收, bit0 1:清除 FIFO
- }
复制代码
实验箱例程包下载页面:https://www.stcai.com/syx |