想利用dma抓两幅图像到内存,
单幅图像通过单次DMA实现了;所以EPPI及基本的DMA配置应该是正确的。
现在,想利用描述符的DMA传输2幅图像时,寄存器配置如下;结果,内存中一副图像也没有。
VideoInDMAList[0].pStartAddress = ADV7280VideoBuffer;
VideoInDMAList[0].XCount = IMAGE_WIDTH / 2;
VideoInDMAList[0].XModify = 0x4;
VideoInDMAList[0].YCount = IMAGE_HEIGHT;
VideoInDMAList[0].YModify = 0x4;
VideoInDMAList[0].Config = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_SYNC |
ENUM_DMA_CFG_DSCLIST |
ENUM_DMA_CFG_EN;
VideoInDMAList[0].pNext = &VideoInDMAList[0];
VideoInDMAList[0].bCallbackWhenDone = false;
VideoInDMAList[1].pStartAddress = ADV7280VideoBuffer1;
VideoInDMAList[1].XCount = IMAGE_WIDTH / 2;
VideoInDMAList[1].XModify = 0x4;
VideoInDMAList[1].YCount = IMAGE_HEIGHT;
VideoInDMAList[1].YModify = 0x4;
VideoInDMAList[1].Config = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_SYNC |
ENUM_DMA_CFG_STOP |
ENUM_DMA_CFG_EN;
VideoInDMAList[1].pNext = &VideoInDMAList[0];
VideoInDMAList[1].bCallbackWhenDone = false;
*pREG_DMA33_DSCPTR_NXT = &VideoInDMAList[0];
ssync();
*pREG_DMA33_CFG = ENUM_DMA_CFG_READ | //看编程手册说,第一次要设成read,尝试设成write也不行
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_SYNC |
ENUM_DMA_CFG_DSCLIST |
ENUM_DMA_CFG_FETCH02;
ssync();
最后,使能DMA33