UART使用EDMA收发

EDMA3:

EDMA3包括EDMA3通道控制器(32个通道)和传输控制器。

EDMA3传输类型:

A同步传输:每个传输请求传输ACNT bytes,共BCNT*CCNT个传输请求,也就是需要触发BCNT*CCNT个事件,无论手工触发还是外设触发。

AB同步传输:每个传输请求传输BCNT*ACNT bytes,共CCNT个传输请求

RAM参数(PaRAM):

EDMA3控制器基于RAM参数结构(32字节)。

 

重要参数理解:

ACNT:数据单元的字节数

BCNT:一个帧中元素的个数

CCNT:一个块中帧的个数

BINDEX:帧中元素的偏移量

CINDEX:块中帧的偏移量:

A同步传输:偏移量指一个帧中最后一个元素的开始地址到下一帧中第一个元素的开始地址。

AB同步传输:偏移量指一个帧中第一个元素的开始地址到下一帧中第一个元素的开始地址。

链接传输:

当前PaRAM消耗完的时候,自动装载链接地址指向的PaRAM。链接是特别有用的对于乒乓缓冲,循环缓冲,和连续的传输,不需要CPU干预。当一个传输完成的时候,当前传输参数自动装载链接地址指向的参数。链接只发生在OPT static位清除为0.链接地址为0xFFFF指向空传输。

DMA触发方式:

  1. 事件触发。
  2. CPU触发。写ESR寄存器使能对应的事件
  3. 链接触发。一个通道触发另一个通道的传输。

串口使用EDMA发送字符串代码:

CSL_Edma3ccRegsOvly EDMA3ccRegs = (CSL_Edma3ccRegsOvly) CSL_EDMA3CC_0_REGS;

void EDMA3_Uart(int len)

{

       EDMA3ccRegs->PARAMSET[13].OPT = 0x0010D000;

       EDMA3ccRegs->PARAMSET[13].SRC = (Uint32)tx_buf;

       EDMA3ccRegs->PARAMSET[13].A_B_CNT = _pack2(len, 1);

       EDMA3ccRegs->PARAMSET[13].DST = (Uint32)(&(Uart2Regs->THR));

       EDMA3ccRegs->PARAMSET[13].SRC_DST_BIDX = _pack2(0, 1);

       EDMA3ccRegs->PARAMSET[13].LINK_BCNTRLD = _pack2(0, 0xFFFF);

       EDMA3ccRegs->PARAMSET[13].SRC_DST_CIDX = _pack2(0, 0);

       EDMA3ccRegs->PARAMSET[13].CCNT = 1;

//cache向SDRAM写数据.,cpu使用CACHE,EDMA使用sdram

BCACHE_writeback((Ptr)tx_buf, sizeof(tx_buf));

}

// 串口输出字符串

Int16 uart1_send(String uart_tx_str)

{

       volatile Uint16 dummy;

       Uint8 lsr_status;

       int len,i;

      

       len = strlen(uart_tx_str);

      

       memset(tx_buf,0,sizeof(tx_buf));

       strcpy(tx_buf,uart_tx_str);

       EDMA3_Uart(len);

       for (i=0;i<len;i++){

              EDMA3ccRegs->ESR = 1<<13;

              //_wait(500);  

       }

}

串口如何使用EDMA接收不定长字符串?如果哪位成功过,请告知,谢谢!

转载于:https://www.cnblogs.com/soddy/archive/2011/07/08/2101311.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值