我把ppi_control配置成0x01AC(程序原来的配置)、0x81AC、0xC1AC、0x41AC都不能产生中断。
下面是我的初始化代码:
void Init_CMOS_PPI(void)
{
*pPORTG_FER |= 0xf000; //IO口因为只用到PG12到PG15
ssync();
*pPORTG_MUX |= 0x4000;
ssync();
*pPORTF_FER |= 0x00ff; //IO口因为只用到PF0到PF7
ssync();
*pPORTF_MUX |= 0x0015;
ssync();
*pPPI_FRAME = 480;
*pPPI_COUNT = 1279;
*pPPI_DELAY = 0;
*pPPI_CONTROL = 0x41AC;
ssync();
*pDMA0_START_ADDR = 0;
*pDMA0_X_COUNT = 640;
*pDMA0_X_MODIFY = 0x2;
*pDMA0_Y_COUNT = 480;
*pDMA0_Y_MODIFY = 0x2;
*pDMA0_PERIPHERAL_MAP = 0x0;
*pDMA0_CONFIG = WNR | WDSIZE_16| DMA2D | DI_EN;
ssync();
}
void CMOS_PPI_Enable(void)
{
*pDMA0_CONFIG |= DMAEN;
ssync();
*pPPI_CONTROL |= PORT_EN;
ssync();
}
void CMOS_PPI_Disable(void)
{
*pDMA0_CONFIG &= ~DMAEN;
ssync();
*pPPI_CONTROL &= ~PORT_EN;
ssync();
}
void Init_CMOS_Interrupts(void)
{
*pSIC_IAR1 = 0x1fffffff ;
register_handler(ik_ivg8, DMA0_PPI_ISR);
*pSIC_IMASK0 =1<<15;
ssync();
}
EX_INTERRUPT_HANDLER(DMA0_PPI_ISR)
{
*pDMA0_IRQ_STATUS = 0x1;
CMOS_PPI_Disable();
printf( "\nSuccess Capture One Frame: 640 * 480\n");
printf( " The data is saved address is 0\n" );
printf( " YUV422(YUY2(4:2:2)) Format\n" );
}