Bf561有2个PPI,一个用来接收视频数据,一个用来发送视频数据。我在核 A中用PPI0接收FPGA发来的数据,16位接收,在核B中用PPI1发送数据,10位发送,采用中断方式进行接收和发送,Timer9中断中接收数据,Timer11中断中发送数据。当开始接收一帧数据后才使能Timer11中断
核B发送中断中DMA设置为
*pDMA1_0_CONFIG =WDSIZE_16| DMA2D | DI_EN;
*pDMA1_1_X_COUNT = g_swWidthVideoA;//视频为384*288,宽384
*pDMA1_1_X_MODIFY = 0x0002;
*pDMA1_1_Y_COUNT = g_swHeightVideoA;//288行
*pDMA1_1_Y_MODIFY = 0x0002;
*pDMA1_1_START_ADDR = (void*)sFrame1;//数据保存地址,在SDRAM中
*pPPI1_DELAY = 15;
*pPPI1_CONTROL = 0<<14 | 1<<11 |0<<8 | 0<<4 | 3<<2 | 1<<1;//带同步发送模式,非ITU_R656模式,1个帧同步
*pPPI1_COUNT = g_swWidthVideoA-1;
*pPPI1_FRAME = g_swHeightVideoA;
ssync();
*pDMA1_1_CONFIG |= DMAEN;
ssync();
*pPPI1_CONTROL |= PORT_EN;
ssync();
核A接收中断中
*pDMA1_0_X_COUNT = g_swWidthVideoA/2;
*pDMA1_0_X_MODIFY = 4;
*pDMA1_0_Y_COUNT = g_swHeightVideoA;
*pDMA1_0_Y_MODIFY = 4;
*pDMA1_0_START_ADDR = (void*)sFrame1;
*pDMA1_0_CONFIG = WDSIZE_32 | WNR | DMA2D | DI_EN;
*pPPI0_CONTROL = (0x3 << 2) | (0x3<< 4) | (0x7 << 11)| DMA32 | PACK_EN ;//16位
//非ITU-656模式,0帧同步,16bit,输入模式,打包使能
*pDMA1_0_CONFIG |= DMAEN;
asm("ssync;");
*pPPI0_CONTROL |= PORT_EN;
asm("ssync;");
目前的问题是
1)为什么只有停止核A时,才会在显示器上显示图像,否则就一直是乱的
2)将发送中断DMA设置采用32bit传输,PACK_EN =1(打包使能)、DMA32=1时,这时会有图像显示,但是会闪动