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.

TMS320C6657: uart的EDMA3发送

Part Number: TMS320C6657
Other Parts Discussed in Thread: TMS320C6654

大家好 咨询下

在试UARTEDMA3发送 用的例程是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()中计数发现 实际上完成上述传输 只进了一次中断!!!

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

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

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

  • 根据 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也是可以执行的!!!

  • 现在 想实现srio的edma3发送

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

    这个占用时间有些长

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

  • 感谢分享!

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

  • 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 

    就可以???

  • 是的,您的理解正确。

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

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

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

  • 仿照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有啥关系?

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