本帖最后由 xiangzichen 于 2024-10-21 12:21 编辑
定长么,就DMA了,不定长,用中断加队列,这个和dma的效果差不多.还不挑单片机.(有无DMA都可),下面是我用队列的一部分程序
- u8 buff_size = 0;
- u8* buff_p = NULL;
-
- void UartIsr() interrupt 4{
- if(TI) {
- TI = 0;
- if(buff_size > 0) {
- SBUF = *buff_p;
- buff_p++;
- buff_size--;
- }
- else {
- if(mov.send_ok == 0) {
- mov.send_ok = 1;
- }
- }
- }
- if(RI) {
- RI = 0;
- mov.comm_empty_cnt = 1;
- UsbOutBuffer[mov.comm_buff_index] = SBUF;
- mov.comm_buff_index++;
- mov.comm_buff_index &= 0x3f;
- }
- }
-
- void uartBuffAutoSend(u8* buff, u8 bf) {
- SendEn();
- buff_p = buff;
- buff_size = bf;
- mov.send_ok = 0;
- TI = 1;
- }
复制代码
|