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:
新问题麻烦另起新帖,方便其他客户参考,谢谢!