TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6657: uart的EDMA3发送

Part Number:TMS320C6657Other Parts Discussed in Thread:TMS320C6654

大家好 咨询下

在试UART的EDMA3发送 用的例程是STK_C6657\UART

 

edma3主要的设置如下:

gpEDMA_CC_regs[tpccNum]->PARAMSET[uartEdmaTxCh].OPT=

                                     CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS,

                                     CSL_EDMA3_TCCH_DIS,

                                     CSL_EDMA3_ITCINT_DIS,

                                     CSL_EDMA3_TCINT_EN,

                                     uartEdmaTxCh,

                                     CSL_EDMA3_TCC_NORMAL,

                                     CSL_EDMA3_FIFOWIDTH_NONE,

                                     CSL_EDMA3_STATIC_DIS,

                                     CSL_EDMA3_SYNC_A,                      //A-synchronized模式

                                     CSL_EDMA3_ADDRMODE_INCR,    //增量模式

                                     CSL_EDMA3_ADDRMODE_INCR);   //增量模式

 

gpEDMA_CC_regs[tpccNum]->PARAMSET[uartEdmaTxCh].A_B_CNT = 0x01000004;                       //ACNT=4 BCNT=256

gpEDMA_CC_regs[tpccNum]->PARAMSET[uartEdmaTxCh].DST= (Uint32)(&localUartRegs->THR);

gpEDMA_CC_regs[tpccNum]->PARAMSET[uartEdmaTxCh].SRC_DST_BIDX= 1;

gpEDMA_CC_regs[tpccNum]->PARAMSET[uartEdmaTxCh].LINK_BCNTRLD= 0xFFFF;

gpEDMA_CC_regs[tpccNum]->PARAMSET[uartEdmaTxCh].SRC_DST_CIDX= 0;

gpEDMA_CC_regs[tpccNum]->PARAMSET[uartEdmaTxCh].CCNT= 1;                                                 //CCNT=1

这个设置表示这个UART的传输是A-Synchronized Transfers ACNT=4 BCNT=256 CCNT=1 

按照如下资料的描述 完成上面一次传输的话 一共可以传输ACNT*BCNT*CCNT=256*4*1=1024个字节

但实际上我的串口只收到了256字节的数据???

并且资料上说:In this example, a total of 12 sync events (BCNT × CCNT) exhaust a PaRAM set.     12个sync events是否对应12个edma3的中断了?

例程 按照资料的说法应该产生BCNT × CCNT=256个sync events 

在KeyStone_UART_EDMA_ISR()中计数发现 实际上完成上述传输 只进了一次中断!!!

skysteed:

并且发现 当把ACNT设置为1到8中的任意以一个数时 串口收到的数都是256个

但ACNT设置为9之上的数 传输就异常了 

,

Shine:

请问对代码做了修改吗?原来的例程可以运行吗?

,

skysteed:

根据 KeyStone Architecture Enhanced Direct Memory Access (EDMA3) Controller User's Guide的3.4 Peripheral Servicing Example的

3.4.1 Non-bursting Peripherals 

有关外设和内存收发数据的介绍

ACNT设为1 BCNT设为你一次要发的数据个数 就可以了!!!

中断 只进一次 是因为 例程有BUG 

UART_EDMA_complete_handler(2);修改为UART_EDMA_complete_handler(0);就可以每次进中断了

不用中断 EDMA也是可以执行的!!!

,

skysteed:

现在 想实现srio的edma3发送

我的程序在主循环里通过srio发送(1920*2)*1080 的一帧图像 大概需要耗时5ms 也就是dsp核要被占用5ms 

这个占用时间有些长

能否通过EDMA3发送实现???

,

Shine:

感谢分享!EDMA3有对应的SRIO同步事件,可以用EDMA3搬移数据。另外,SRIO内部有DMA,DIO方式使用的是内部DMA进行数据搬移,Message 方式则使用的是内部PKTDMA进行数据搬移。

,

skysteed:

EDMA3有对应的SRIO同步事件,可以用EDMA3搬移数据。???这个对应的同步事件是哪个了???

我已经用DirectIO的方式实现了数据的搬移 搬运每一帧要占用核时间 不想占用核的话 就得用EDMA3

之前你的同事Nancy Wang说可以通过CIC1 Event Inputs (Secondary Events for EDMA3_CC)实现

我大概看了下 是不是这个意思

SPRS814D TMS320C6654/5/7 Fixed and Floating-Point DSP Silicon Errata (Silicon Rev 1.0) (Rev. D)

把Table 6-28. CIC1 Event Inputs (Secondary Events for EDMA3_CC)里的RapidIO interrupt事件 映射到Table 6-25. EDMA3_CC Events for C665x里的CIC1_OUT0 

就可以???

,

Shine:

是的,您的理解正确。

,

skysteed:

你好 有没有基于6657的MCBSP的EDMA发送的例程?

UART的edma没问题了 试着把uart的修改为mcbsp的 不行啊 发不出去啊!

,

Shine:

请参考processor SDK里的例程。C:\ti\pdk_C6657_1_1_2_6\packages\ti\drv\exampleProjects\MCBSP_DigLpbkExampleProjectC:\ti\pdk_C6657_1_1_2_6\packages\ti\drv\mcbsp\src\mcbsp_edma.c

,

skysteed:

仿照6657例程包STK_C6657里的UART的EDMA程序 修改后试了下mcbsp的edma 现在可以了测试发现:1 不使能mcbsp的FIFO(WENA) EDMA是可以执行的 PARAMSET参数里mcbsp的地址应该是McBSP FIFO Transmit Buffer的地址2 使能mcbsp的FIFO(WENA) EDMA是可以执行的 但WNUMEVT必须设置为1 不是1 DMA就会有问题 WNUMDMA设置为1-10 再大就会有问题 PARAMSET参数里mcbsp的地址应该是McBSP FIFO Transmit Buffer的地址

WNUMEVT、WNUMDMA代表啥意思了 和EDMA有啥关系?

,

Shine:

新问题麻烦另起新帖,方便其他客户参考,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6657: uart的EDMA3发送
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1