#include #include "ppi.h" #include "const.h" #include "flag.h" unsigned short ppi_control_value ; unsigned short dma_config; //#define ANALOG_CAM 1 //int get_camera_type(void); void PPI_Interface_Enable(unsigned long no_of_lines) { unsigned short ppi_flag_input; unsigned short ACTV_FIELD; // program flags 12, 13, 14 and 15 are configured // to take in PPI databits 7, 6, 5 and 4 resp. ppi_flag_input = (unsigned short) (PPI_PF12 | PPI_PF13 | PPI_PF14 | PPI_PF15 ); Flag_Setting(ppi_flag_input,INPUT); // if(get_camera_type()==ANALOG_CAM) // { // ACTV_FIELD = (ACTV_FIELD_1 << FLD_SEL_SHIFT)|(PORT_CFG_INVALID << PORT_CFG_SHIFT); // } // else // { ACTV_FIELD = (ACTV_FIELD_1_2 << FLD_SEL_SHIFT)|(PORT_CFG_INVALID << PORT_CFG_SHIFT); // } // to hold the number of lines expected per frame *(unsigned short *) PPI_FRAME = (unsigned short)(no_of_lines); // setting the ppi control value ppi_control_value = (unsigned short)((POL_NON_INV << POL_SHIFT)|(DLEN_8 << DLENGTH_SHIFT)| (INVALID_SKIP << SKIP_EO_SHIFT)|(SKIP_DISABLE << SKIP_EN_SHIFT)| (DMA32_ENABLE << DMA32_SHIFT)|(PACK_ENABLE << PACK_EN_SHIFT)| ACTV_FIELD| // (INVALID_ACTV << FLD_SEL_SHIFT)|(PORT_CFG_INVALID << PORT_CFG_SHIFT)| (ACTIVE_FIELD << XFR_TYPE_SHIFT)|(PPI_RECEIVE << PORT_DIR_SHIFT)| // (ENTIRE_FIELD << XFR_TYPE_SHIFT)|(PPI_RECEIVE << PORT_DIR_SHIFT)| (PPI_ENABLE << PORT_EN_SHIFT)); ppi_control_value=0xC1AC|(PPI_ENABLE << PORT_EN_SHIFT); // For Micron *(unsigned short *)PPI_COUNT=640*2 -1; *(unsigned short *)PPI_DELAY = 0x13e;//0x02; *(unsigned short *)PPI_FRAME = 480; *(unsigned short *) PPI_CONTROL = (unsigned short)ppi_control_value; } // Enabling the DMA channel 0 for PPI void PPI_DMA_Enable(unsigned long PPI_Dma_Adress,unsigned long x_count, unsigned long y_count) { dma_config = ( DI_EN | /*DI_SEL |*/ DMA2D | WDSIZE_16 | WNR | DMAEN ); *(unsigned short *)DMA0_PERIPHERAL_MAP = (unsigned short)0x0000 ; asm("ssync;"); *(unsigned long *)DMA0_START_ADDR =(unsigned long)PPI_Dma_Adress; asm("ssync;"); *(unsigned short *)DMA0_X_COUNT = (unsigned short)x_count; asm("ssync;"); // *(unsigned short *)DMA0_X_MODIFY = (unsigned short)X_MODIFY_VALUE; *(unsigned short *)DMA0_X_MODIFY = (unsigned short)2; asm("ssync;"); *(unsigned short *)DMA0_Y_COUNT = (unsigned short)y_count; asm("ssync;"); // *(unsigned short *)DMA0_Y_MODIFY = (unsigned short)Y_MODIFY_VALUE; *(unsigned short *)DMA0_Y_MODIFY = (unsigned short)2; asm("ssync;"); *(unsigned short *)DMA0_CONFIG = (unsigned short) dma_config; asm("ssync;"); } extern unsigned int last_interrupt_number; void PPI_Interface_Disable() { last_interrupt_number = 812; *(unsigned short *)PPI_CONTROL = 0; *(unsigned short *)DMA0_CONFIG = 0; last_interrupt_number = 813; } void Enable_PPI_DMA_Interface() { *(unsigned short *)DMA0_CONFIG = (unsigned short) dma_config; asm("ssync;"); *(unsigned short *)PPI_COUNT=640*2 -1; *(unsigned short *)PPI_DELAY = 0x13e;//0x02; *(unsigned short *)PPI_FRAME = 480; *(unsigned short *)PPI_CONTROL = (unsigned short)ppi_control_value; asm("ssync;"); } void Enable_PPI_DMA(unsigned long PPI_Dma_Adress) { *(unsigned long *)DMA0_START_ADDR =(unsigned long)PPI_Dma_Adress; asm("ssync;"); *(unsigned short *)DMA0_CONFIG = (unsigned short) dma_config; asm("ssync;"); *(unsigned short *)PPI_CONTROL = (unsigned short)ppi_control_value; asm("ssync;"); }