TI论坛
直播中

刘斌

7年用户 252经验值
私信 关注
[问答]

udma ssi1 tx只捕获到9个字节

// dma init start
void dma_init()
[
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
ROM_uDMAEnable();
ROM_uDMAControlBaseSet(ucControlTable);
ROM_IntEnable(INT_SSI1);
ROM_SSIDMAEnable(SSI1_BASE,SSI_DMA_TX);
ROM_uDMAChannelAttributeDisable(UDMA_CHANNEL_SSI1TX,
                                    UDMA_ATTR_ALTSELECT |
ROM_uDMAChannelControlSet(UDMA_CHANNEL_SSI1TX | UDMA_PRI_SELECT,
                              UDMA_SIZE_8 | UDMA_SRC_INC_8 |
                              UDMA_DST_INC_NONE | UDMA_ARB_8);
//dma init end
]
// 输入10个字节
uint8 g_ZeroArray[PRINTER_WIDTH_BYTE]=[0x55];
void sendData()
[
ROM_uDMAChannelTransferSet(UDMA_CHANNEL_SSI1TX | UDMA_PRI_SELECT,
                               UDMA_MODE_BASICg_ZeroArray
                               (void *)(SSI1_BASE + SSI_O_DR),
                               10);
ROM_uDMAChannelEnable(UDMA_CHANNEL_SSI1TX);
ROM_uDMAChannelRequest(UDMA_CHANNEL_SSI1TX);
]
//SSI1 配置
SSIConfigSetExpClk(SPRINT_SSI_BASE, SysCtlClockGet(),
                                           SSI_FRF_MOTO_MODE_0,
                                           SSI_MODE_MASTER, 1000000, 8);
检测到key按下时,调用 sendData()发送10个字节,通过示波器,只捕获到9个字节。

回帖(4)

朱虹博

2020-4-13 09:46:48
楼主,附件是一个UDMA-SSI的例程,您可以参考一下。
SSI1向SSI0用TI帧格式发送32个16位数据,SSI0通过中断接收
 
 
 
 
 
 
 
举报

周莹

2020-4-13 10:02:33
不知道1~8个字节发送情况如何?
楼主可以试试用Loopback看看到底能接收到几个数据,有时候发送过程在时间上不一定均匀。
举报

刘斌

2020-4-13 10:11:06
引用: vmmjuwy 发表于 2020-4-13 14:01
不知道1~8个字节发送情况如何?
楼主可以试试用Loopback看看到底能接收到几个数据,有时候发送过程在时间上不一定均匀。

通过测试,发现将仲裁大小改为UDMA_ARB_1后,通过示波器,可以捕获到所有数据.但如果改成4/8/16则会丢数据,仲裁越大,丢的越多.这是为什么呢??
举报

朱虹博

2020-4-13 10:26:24
引用: 作死不止 发表于 2020-4-13 14:10
通过测试,发现将仲裁大小改为UDMA_ARB_1后,通过示波器,可以捕获到所有数据.但如果改成4/8/16则会丢数据,仲裁越大,丢的越多.这是为什么呢??

因为SSI的FIFO的深度只有8级。如果触发udma brust就会发生一次传送UDMA_ARB_X个数据,导致多余的数据丢失。
设置UDMA_ARB_4应该不会丢数据。再高就不建议了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分