This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于CC2530 UART使用DMA的问题。

Other Parts Discussed in Thread: CC2530

请问我配置了CC2530的DMA,然后要怎样才和UART挂上勾呢?

我设置源地址为要发送的buff地址,目标地址为X_U0DBUF,但是就是无法发送出去。

dmaConfig0.SRCADDRH = (uint8)(((uint16)&data >> 8) & 0x00FF); //获取到data地址(源地址)的高8位地址
dmaConfig0.SRCADDRL = (uint8)(((uint16)&data) & 0x00FF); //获取到data地址(源地址)的低8位地址
dmaConfig0.DESTADDRH = (uint8)(((uint16)&X_U0DBUF >> 8) & 0x00FF); //获取到copy地址(目的地址)的高8位地址
dmaConfig0.DESTADDRL = (uint8)(((uint16)&X_U0DBUF) & 0x00FF); //获取到copy地址(目的地址)的低8位地址

dmaConfig0.VLEN = DMA_VLEN_USE_LEN; //设置可变长度为0
dmaConfig0.LENH = (DATA_AMOUNT >> 8) & 0x00FF; //获取传输长度的高5位
dmaConfig0.LENL = (DATA_AMOUNT) & 0x00FF; //获取传输长度的低8位

dmaConfig0.WORDSIZE = DMA_WORDSIZE_BYTE; //设置为字节传输模式,赋值0
dmaConfig0.TMODE = DMA_TMODE_BLOCK; //块传输模式
dmaConfig0.TRIG = DMA_TRIG_NONE; //无触发模式,即无触发源

dmaConfig0.SRCINC = DMA_SRCINC_1; //源地址1个字节/字递增
dmaConfig0.DESTINC = DMA_DESTINC_1; //目的地址1个字节/字递增

dmaConfig0.IRQMASK = DMA_IRQMASK_DISABLE; //通道的中断屏蔽
dmaConfig0.M8 = DMA_M8_USE_8_BITS; //采用所有8位作为传输长度
dmaConfig0.PRIORITY = DMA_PRI_HIGH; //高优先级,DMA优先

DMA0CFGH = ((uint16)&dmaConfig0 >> 8) & 0x00FF; //DMA通道0配置地址高8位地址
DMA0CFGL = ((uint16)&dmaConfig0) & 0x00FF; //DMA通道0配置地址低8位地址

/*DMA进入工作模式通道0*/
DMAARM |= DMAARM_DMAARM0;//为了任何DMA传输能够在该通道上发生,该位必须置1,对于非重复传输模式,一旦完成传送,该位自动清0
/*一个通道准备工作(即获得配置数据)的时间需要9个系统时钟*/
NOPs_();NOPs_();NOPs_();NOPs_();NOPs_();NOPs_();NOPs_();NOPs_();NOPs_();NOPs_(); // 9 NOPs

/*DMA通道0传送请求,即触发DMA传送*/
DMAREQ |= DMAREQ_DMAREQ0;//设置为1,激活DMA通道0(与一个触发事件具有相同的效果),当DMA传输开始清除该位

/*等待DMA通道0传送完毕*/
for (; !(DMAIRQ & DMAIRQ_DMAIF0););//当DMA通道0传送完成,DMAIRQ:DMAIF0位置1,与上DMAIRQ_DMAIF0(0x01),取非后为0退出循环

/*清除中断标志*/
DMAIRQ = ~DMAIRQ_DMAIF0;