链表部分拷贝错了。
应该是:
//输入的UYVY图像背景
OSD_DMA35_DescriptorCopy[0].pNextDesc = &OSD_DMA35_DescriptorCopy[1];// 下一个描述符地址
//OSD_DMA15_DescriptorCopy[0].Config = DMAEN | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA35_DescriptorCopy[0].Config = ENUM_DMA_CFG_READ |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA35_DescriptorCopy[0].XCount = 640*2/4; // X Count
OSD_DMA35_DescriptorCopy[0].XModify = 4; // X Mod
OSD_DMA35_DescriptorCopy[0].YCount = (512-32)/2; // Y Count
OSD_DMA35_DescriptorCopy[0].YModify = (720-640)*2+4;
OSD_DMA35_DescriptorCopy[1].pNextDesc = &OSD_DMA35_DescriptorCopy[2];// 下一个描述符地址
//OSD_DMA15_DescriptorCopy[1].Config = DMAEN | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA35_DescriptorCopy[1].Config = ENUM_DMA_CFG_READ |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA35_DescriptorCopy[1].XCount = ((640-32)/2)*2/4; // X Count
OSD_DMA35_DescriptorCopy[1].XModify = 4; // X Mod
OSD_DMA35_DescriptorCopy[1].YCount = 32; // Y Count
OSD_DMA35_DescriptorCopy[1].YModify = (720-((640-32)/2))*2+4;
OSD_DMA35_DescriptorCopy[2].pNextDesc = &OSD_DMA35_DescriptorCopy[3];// 下一个描述符地址
//OSD_DMA15_DescriptorCopy[2].Config = DMAEN | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA35_DescriptorCopy[2].Config = ENUM_DMA_CFG_READ |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA35_DescriptorCopy[2].XCount = ((640-32)/2)*2/4; // X Count
OSD_DMA35_DescriptorCopy[2].XModify = 4; // X Mod
OSD_DMA35_DescriptorCopy[2].YCount = 32; // Y Count
OSD_DMA35_DescriptorCopy[2].YModify = (720-((640-32)/2))*2+4;
OSD_DMA35_DescriptorCopy[3].pNextDesc = &OSD_DMA35_DescriptorCopy[4];// 下一个描述符地址
// OSD_DMA15_DescriptorCopy[3].Config = DMAEN | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA35_DescriptorCopy[3].Config = ENUM_DMA_CFG_READ |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA35_DescriptorCopy[3].XCount = 640*2/4; // X Count
OSD_DMA35_DescriptorCopy[3].XModify = 4; // X Mod
OSD_DMA35_DescriptorCopy[3].YCount = (512-32)/2-128; // Y Count
OSD_DMA35_DescriptorCopy[3].YModify = (720-640)*2+4;
OSD_DMA35_DescriptorCopy[4].pNextDesc = &OSD_DMA35_DescriptorCopy[5];// 下一个描述符地址
// OSD_DMA15_DescriptorCopy[4].Config = DMAEN | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA35_DescriptorCopy[4].Config = ENUM_DMA_CFG_READ |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA35_DescriptorCopy[4].XCount = (640-160)*2/4; // X Count
OSD_DMA35_DescriptorCopy[4].XModify = 4; // X Mod
OSD_DMA35_DescriptorCopy[4].YCount = 128; // Y Count
OSD_DMA35_DescriptorCopy[4].YModify = (720-(640-160))*2+4;
//与开窗重合
OSD_DMA35_DescriptorCopy[5].pNextDesc = &OSD_DMA35_DescriptorCopy[5];// 下一个描述符地址
// OSD_DMA15_DescriptorCopy[5].Config = DMAEN | WDSIZE_32 | DMA2D | FLOW_STOP;// DMA config 结束
OSD_DMA35_DescriptorCopy[5].Config = ENUM_DMA_CFG_READ |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_STOP;
OSD_DMA35_DescriptorCopy[5].XCount = 160*2/4; // X Count
OSD_DMA35_DescriptorCopy[5].XModify = 4; // X Mod
OSD_DMA35_DescriptorCopy[5].YCount = 128; // Y Count
OSD_DMA35_DescriptorCopy[5].YModify = (720-160)*2+4;
=============DMA37
//输出的UYVY图像
OSD_DMA37_DescriptorCopy[0].pNextDesc = &OSD_DMA37_DescriptorCopy[1];// 下一个描述符地址
//OSD_DMA17_DescriptorCopy[0].Config = DMAEN | WNR | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA37_DescriptorCopy[0].Config = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA37_DescriptorCopy[0].XCount = 640*2/4; // X Count
OSD_DMA37_DescriptorCopy[0].XModify = 4; // X Mod
OSD_DMA37_DescriptorCopy[0].YCount = (512-32)/2; // Y Count
OSD_DMA37_DescriptorCopy[0].YModify = (720-640)*2+4;
OSD_DMA37_DescriptorCopy[1].pNextDesc = &OSD_DMA37_DescriptorCopy[2];// 下一个描述符地址
//OSD_DMA17_DescriptorCopy[1].Config = DMAEN | WNR | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA37_DescriptorCopy[1].Config = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA37_DescriptorCopy[1].XCount = ((640-32)/2)*2/4; // X Count
OSD_DMA37_DescriptorCopy[1].XModify = 4; // X Mod
OSD_DMA37_DescriptorCopy[1].YCount = 32; // Y Count
OSD_DMA37_DescriptorCopy[1].YModify = (720-((640-32)/2))*2+4;
OSD_DMA37_DescriptorCopy[2].pNextDesc = &OSD_DMA37_DescriptorCopy[3];// 下一个描述符地址
//OSD_DMA17_DescriptorCopy[2].Config = DMAEN | WNR | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA37_DescriptorCopy[2].Config = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA37_DescriptorCopy[2].XCount = ((640-32)/2)*2/4; // X Count
OSD_DMA37_DescriptorCopy[2].XModify = 4; // X Mod
OSD_DMA37_DescriptorCopy[2].YCount = 32; // Y Count
OSD_DMA37_DescriptorCopy[2].YModify = (720-((640-32)/2))*2+4;
OSD_DMA37_DescriptorCopy[3].pNextDesc = &OSD_DMA37_DescriptorCopy[4];// 下一个描述符地址
// OSD_DMA17_DescriptorCopy[3].Config = DMAEN | WNR | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA37_DescriptorCopy[3].Config = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA37_DescriptorCopy[3].XCount = 640*2/4; // X Count
OSD_DMA37_DescriptorCopy[3].XModify = 4; // X Mod
OSD_DMA37_DescriptorCopy[3].YCount = (512-32)/2-128; // Y Count
OSD_DMA37_DescriptorCopy[3].YModify = (720-640)*2+4;
OSD_DMA37_DescriptorCopy[4].pNextDesc = &OSD_DMA37_DescriptorCopy[5];// 下一个描述符地址
// OSD_DMA17_DescriptorCopy[4].Config = DMAEN | WNR | WDSIZE_32 | DMA2D | NDSIZE_9 | FLOW_LARGE;// DMA config
OSD_DMA37_DescriptorCopy[4].Config = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_FETCH07 |
ENUM_DMA_CFG_DSCLIST;
OSD_DMA37_DescriptorCopy[4].XCount = (640-160)*2/4; // X Count
OSD_DMA37_DescriptorCopy[4].XModify = 4; // X Mod
OSD_DMA37_DescriptorCopy[4].YCount = 128; // Y Count
OSD_DMA37_DescriptorCopy[4].YModify = (720-(640-160))*2+4;
OSD_DMA37_DescriptorCopy[5].pNextDesc = &OSD_DMA37_DescriptorCopy[5];// 下一个描述符地址
// OSD_DMA17_DescriptorCopy[5].Config = DMAEN | WNR | WDSIZE_32 | DMA2D | DI_EN | FLOW_STOP;// DMA config 结束 中断
OSD_DMA37_DescriptorCopy[5].Config = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_EN |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_YCNT_INT |
ENUM_DMA_CFG_STOP;
OSD_DMA37_DescriptorCopy[5].XCount = 160*2/4; // X Count
OSD_DMA37_DescriptorCopy[5].XModify = 4; // X Mod
OSD_DMA37_DescriptorCopy[5].YCount = 128; // Y Count
OSD_DMA37_DescriptorCopy[5].YModify = (720-160)*2+4;