我用以下代码,等待外部upp发送数据。
但外部停止发送数据了,我如何终止该dma传输?
while (ListMP_empty(server->list_free)) /* wait */
Task_sleep(10000);
DataNode *node = (DataNode *)ListMP_getTail(server->list_free); /* get free node */
int *data = (int *)SharedRegion_getPtr(node->SR_buffer);
server->transposeParA.WindowAddress = (unsigned int *)data; /* set taget */
server->transposeParA.LineCount = node->buffer_height;
server->transposeParA.ByteCount = node->buffer_pitch; server->transposeParA.LineOffsetAddress = node->buffer_pitch;
upp_error_count = 0;
upp_dmai_int_cut = 0;
/* fill in data */
uPPDMATransfer(SOC_UPP_0_REGS, uPP_DMA_CHI, &server->transposeParA);
/* wait */
while (upp_dmai_int_cut < 1 && upp_error_count == 0);
Tony Tang:
DMA的配置应该与外部发送端的数据大小相结合,如果大小不一致,那最后一组数据不能导致DMA结束,从而一直在等数据状态。
从应用的角度,是应该可以约定好数据包大小的。这样就不存在结束不结束DMA的问题了。