// 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个字节。
2020-4-13 09:46:48
楼主,附件是一个UDMA-SSI的例程,您可以参考一下。
SSI1向SSI0用TI帧格式发送32个16位数据,SSI0通过中断接收
楼主,附件是一个UDMA-SSI的例程,您可以参考一下。
SSI1向SSI0用TI帧格式发送32个16位数据,SSI0通过中断接收
举报
2020-4-13 10:02:33
不知道1~8个字节发送情况如何?
楼主可以试试用Loopback看看到底能接收到几个数据,有时候发送过程在时间上不一定均匀。
不知道1~8个字节发送情况如何?
楼主可以试试用Loopback看看到底能接收到几个数据,有时候发送过程在时间上不一定均匀。
举报
2020-4-13 10:11:06
通过测试,发现将仲裁大小改为UDMA_ARB_1后,通过示波器,可以捕获到所有数据.但如果改成4/8/16则会丢数据,仲裁越大,丢的越多.这是为什么呢??
通过测试,发现将仲裁大小改为UDMA_ARB_1后,通过示波器,可以捕获到所有数据.但如果改成4/8/16则会丢数据,仲裁越大,丢的越多.这是为什么呢??
举报
2020-4-13 10:26:24
因为SSI的FIFO的深度只有8级。如果触发udma brust就会发生一次传送UDMA_ARB_X个数据,导致多余的数据丢失。
设置UDMA_ARB_4应该不会丢数据。再高就不建议了。
因为SSI的FIFO的深度只有8级。如果触发udma brust就会发生一次传送UDMA_ARB_X个数据,导致多余的数据丢失。
设置UDMA_ARB_4应该不会丢数据。再高就不建议了。
举报