此程序为BF609从摄像头读入至sdram中
/********主函数********/
InitEPPI2DMA();
InitEPPI2();
EnableEPPI2_DMA();
/****子程序里***/
void InitEPPI2DMA(void)
{
*pREG_DMA31_ADDRSTART = (void *)CmosBuffer1;
*pREG_DMA31_XCNT = IMAGE_WIDTH / 2;
*pREG_DMA31_XMOD = 0x4;
*pREG_DMA31_YCNT = IMAGE_HEIGHT;
*pREG_DMA31_YMOD = 0x4;
*pREG_DMA31_CFG = ENUM_DMA_CFG_WRITE |
ENUM_DMA_CFG_MSIZE04 |
ENUM_DMA_CFG_PSIZE04 |
ENUM_DMA_CFG_ADDR2D |
ENUM_DMA_CFG_SYNC |
ENUM_DMA_CFG_STOP |
BITM_DMA_CFG_INT;
//ENUM_DMA_CFG_AUTO;
ssync();
}
void InitEPPI2()
{
*pREG_EPPI2_CTL=0;
*pREG_EPPI2_CTL = ENUM_EPPI_CTL_RXMODE |
ENUM_EPPI_CTL_PACK_EN|
ENUM_EPPI_CTL_DLEN08 |
ENUM_EPPI_CTL_NON656 |
ENUM_EPPI_CTL_SYNC2
;
ssync();
*pREG_EPPI2_LINE = IMAGE_WIDTH*2;
ssync();
*pREG_EPPI2_FRAME = IMAGE_HEIGHT;
ssync();
}
void EnableEPPI2_DMA(void)
{
*pREG_DMA31_CFG |= ENUM_DMA_CFG_EN;
ssync();
*pREG_EPPI2_CTL |= ENUM_EPPI_CTL_EN;
ssync();
}
void InitEPPI2Int(void)
{
ADI_INT_STATUS status;
status = adi_int_InstallHandler((uint32_t)INTR_EPPI2_CH0_DMA ,adi_adrp_ctl_dma31callback,(void*)0,true);
adi_int_EnableInt(INTR_EPPI2_CH0_DMA,true);
}
void adi_adrp_ctl_dma31callback(uint32_t iid, void* handlerArg)
{
uint16_t val = (uint16_t)0;
val = *pREG_DMA31_STAT;
*pREG_DMA31_STAT |= (uint16_t)(val & 0xffffffff);/* Write 1 to clear interrupt */
val = *pREG_DMA31_STAT;
*pREG_DMA31_STAT |= (uint16_t)(val & 0xffffffff);/* Write 1 to clear interrupt */
// adi_int_EnableInt(INTR_EPPI2_CH0_DMA,false);
if (Frame0Flag == true)
{
Frame0Flag = false;
*pREG_DMA31_ADDRSTART = CmosBuffer1;
}
else
{
Frame0Flag = true;
*pREG_DMA31_ADDRSTART = CmosBuffer2;
}
EnableDMA35();
EnableDMA37();
EnablePixc();
printf("dma31\n");
// adi_int_EnableInt(INTR_EPPI2_CH0_DMA,true);
//adi_int_EnableInt(INTR_PIXC0_CH2_DMA,true);
}