CCS配置MSPM0G3507(六) DMA串口发送

一.sysconfig

(1)Basci Config

1.选择 BUSCLK 时钟源

2.选择8分频

3.设置为8位数据位、无校验位、一位停止位

(2)Advanced Config

1.选择Nromal UART

2.选择通信方向位TX和RX

3.Oversampling(过采样) 选择为16

4.RX FIFO contains >= 1 entry

4.TX FIFO contains 1 entry

5.其余默认

(3)Interrupt Config

使能DMA done transit 和 End of transmission

(4)DMA Config

1.选择UART TX interrupt

2.地址模式设置为 块地址(用户)到固定地址(UART->TX_)

3.设置源长度为一个字节

4.源地址方向为自加 Increment

5.目标长度为一个字节

6.转换模式Transfer Mode 设置为 Single

7.Source Address Increment Do not change address

8.Destination Address Increment Do not change address

9.选择DMA通道

(5).Pin Mux

1.选择使用哪个DMA

2.选择串口的引脚

二.代码

1.重要代码

    //设置源地址
    DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t)(data));

    //设置目标地址
    DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t)(&UART_0_INST->TXDATA));
    
    //设置要搬运的字节数
    DL_DMA_setTransferSize(DMA, DMA_CH0_CHAN_ID, size);

    //使能DMA通道
    DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);

2.编写DMA串口发送函数

void UART0_Console_write(uint8_t *data, uint16_t size)
{
    //当串口发送完毕后,才可再次发送
    if(gConsoleTxTransmitted)
    {
        //设置源地址
        DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t)(data));
    
        //设置目标地址
        DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t)(&UART_0_INST->TXDATA));
    
        //设置要搬运的字节数
        DL_DMA_setTransferSize(DMA, DMA_CH0_CHAN_ID, size);
    
        //使能DMA通道
        DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);
    
        gConsoleTxTransmitted    = false;
        gConsoleTxDMATransmitted = false;
    }

}

3.主函数

volatile bool  gConsoleTxDMATransmitted = false;
volatile bool  gConsoleTxTransmitted = true;

int main(void)
{
    SYSCFG_DL_init();

    //开启UART中断
    NVIC_EnableIRQ(UART_0_INST_INT_IRQN);

    //使能DMA通道
    DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);


    while (1) 
    {

        //用户编写的DMA串口发送函数
        UART0_Console_write("hello\r\n",7);
        delay_cycles(3200000);

    }
}

4.编写串口中断服务函数

void UART_0_INST_IRQHandler(void)
{
    switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) {
        //串口发送完成
        case DL_UART_MAIN_IIDX_EOT_DONE:
            gConsoleTxTransmitted = true;
            break;
        //DMA搬运完成
        case DL_UART_MAIN_IIDX_DMA_DONE_TX:
            gConsoleTxDMATransmitted = true;
            break;
        default:
            break;
    }
}

  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值