| 本帖最后由 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;
}
 
 
 |