Description
Source
Call Graph
Start Line: 743
int main(void)
{
unsigned char CharReceive=0;
unsigned char command=0;
unsigned char nbByte_Pixels=0;
unsigned char toggle_swapcc=0;
unsigned int reg_cr2=0;
unsigned char toggle_HSYNC=0;
unsigned char toggle_VSYNC=0;
unsigned char toggle_POL=0;
unsigned char toggle_SYNC=0;
unsigned char toggle_BAR=0;
EraseBufferLCD();
PIO_Configure(pins, PIO_LISTSIZE(pins));
PIO_InitializeInterrupts(0);
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("-- Basic ISI Project %s --\n\r", SOFTPACK_VERSION);
printf("-- %s\n\r", BOARD_NAME);
printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
S_Video.codec_hsize = 640;
S_Video.codec_vsize = 480;
S_Video.lcd_nbpp = 16; // 16-bit format of the LCD controller.
// Allocate the frame buffers for the preview datapath
AllocateFBD((AT91PS_VIDEO)&S_Video);
IsiDescriptors.CurrentLcdIndex = 0;
IsiDescriptors.DisplayCodec = 0;
IsiDescriptors.nb_codec_ovf = 0;
IsiDescriptors.nb_prev_ovf = 0;
// Configure TWI
// In IRQ mode: to avoid problems, the priority of the TWI IRQ must be max.
// In polling mode: try to disable all IRQs if possible.
// (in this example it does not matter, there is only the TWI IRQ active)
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TWI;
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_ISI;
#if defined (AT91C_ID_LCDC)
// LCD Enable peripheral clock
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_LCDC;
#if defined(at91sam9261)
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_HCK1;
#endif
#endif
#if defined(at91sam9263)
// ISI_MCK is mapped in PCK3: 24Mhz Sensor clock
AT91C_BASE_PMC->PMC_PCKR[3] = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK_8;
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK3;
while ((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_PCK3RDY) == 0);
#elif defined(at91sam9m10)
// ISI_MCK is mapped in PCK1: 24Mhz Sensor clock
AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK_16;
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK1;
while ((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_PCK1RDY) == 0);
#else
// ISI_MCK is mapped in PCK1: 24Mhz Sensor clock
AT91C_BASE_PMC->PMC_PCKR[1] = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK_8;
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK1;
while ((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_PCK1RDY) == 0);
#endif
TWI_ConfigureMaster(AT91C_BASE_TWI, TWCK, BOARD_MCK);
TWID_Initialize(&twid, AT91C_BASE_TWI);
AIC_ConfigureIT(AT91C_ID_TWI, 0, ISR_Twi);
AIC_EnableIT(AT91C_ID_TWI);
S_Video.Hblank = 0;
S_Video.Vblank = 0;
#if defined (AT91C_ID_LCDC)
S_Video.lcd_hsize = BOARD_LCD_WIDTH;
S_Video.lcd_vsize = 180;
S_Video.lcd_fb_addr = (unsigned int)BuffCam;
#endif
// base address of the descriptor list for preview DMA
S_Video.Isi_fbd_base = (int)&FbList[0];
S_Video.codec_fb_addr = 0;
S_Video.rgb_or_yuv = YUV;
ISI_Init(&S_Video);
S_Video.IsiPrevBuffIndex = 0;
AIC_ConfigureIT(AT91C_ID_ISI, AT91C_AIC_PRIOR_HIGHEST, ISR_IsiHandler);
AIC_EnableIT(AT91C_ID_ISI);
#if defined (AT91C_ID_LCDC)
AIC_ConfigureIT(AT91C_ID_LCDC, AT91C_AIC_PRIOR_HIGHEST, ISR_LcdHandler);
AIC_EnableIT(AT91C_ID_LCDC);
#endif
while( ov965x_init(&twid) == 0 ) {
printf("-I- Retry init\n\r");
}
printf("-I- Init passed\n\r");
nbByte_Pixels = ISI_BytesForOnePixel(S_Video.rgb_or_yuv);
#if defined (AT91C_ID_LCDC)
InitializeLcd();
// LCD power off
LCD_Disable(0);
// DMA disable
LCD_DisableDma();
// DMA reset
LCD_DMAReset();
LCD_SetBitsPerPixel(AT91C_LCDC_PIXELSIZE_SIXTEENBITSPERPIXEL);
LCD_SetFrameSize((S_Video.lcd_hsize * S_Video.lcd_vsize * S_Video.lcd_nbpp)/32);
LCD_SetBurstLength(4);
LCD_SetFrameBufferAddress(BuffCam);
LCD_EnableDma();
LCD_Enable(8);
LCD_EnableInterrupts(AT91C_LCDC_EOFI | // (LCDC) End of Frame Interrupt
AT91C_LCDC_UFLWI | // (LCDC) FIFO Underflow Interrupt
AT91C_LCDC_OWRI | // (LCDC) Over Write Interrupt
AT91C_LCDC_MERI); // (LCDC) Memory Error Interrupt
#endif
printf("Source Size = [%d,%d]", S_Video.codec_hsize, S_Video.codec_vsize);
if ( S_Video.rgb_or_yuv == RGB) {
printf(" RGB\n\r");
}
else {
printf(" YUV\n\r");
}
while(1)
{
printf("-- ====================================\n\r");
printf("-- TEST ISI\n\r");
printf("-- ====================================\n\r");
TRACE_DEBUG("IP TWI version: 0x%X\n\r", *(unsigned int*)(((unsigned int)AT91C_BASE_TWI)+0xFC));
TRACE_DEBUG("IP ISI version: 0x%X\n\r", *(unsigned int*)(((unsigned int)AT91C_BASE_ISI)+0xFC));
#if defined (AT91C_ID_LCDC)
TRACE_DEBUG("IP LCD version: 0x%X\n\r", *(unsigned int*)(((unsigned int)AT91C_BASE_LCDC)+0x8FC));
#endif
printf("-- 1: Sensor QVGA [320x240]\n\r");
printf("-- 2: Sensor CIF [352x288]\n\r");
printf("-- 3: Sensor VGA [640x480]\n\r");
printf("-- 4: Sensor SXGA [1280x1024]\n\r");
printf("-- 5: Take a BMP photo in RGB\n\r");
printf("-- 6: Take a BMP photo in YCbCr\n\r");
printf("-- 7: end video\n\r");
// Other cases are only for debug purpose
#if defined (AT91C_ID_LCDC)
TRACE_DEBUG("-- a: Test LCD: 24bpp\n\r");
TRACE_DEBUG("-- b: Test LCD: 16bpp, mire, with bgr correction\n\r");
TRACE_DEBUG("-- c: Test LCD mire:\n\r");
#endif
TRACE_DEBUG("-- d: Debug statistics ISI\n\r");
TRACE_DEBUG("-- e: Select Mode [0:YUV, 1:RGB]\n\r");
TRACE_DEBUG("-- f: Enable CODEC Path\n\r");
TRACE_DEBUG("-- g: Debug toggle YCC_SWAP: Defines the YCC image data\n\r");
TRACE_DEBUG("-- h: Debug toggle HSYNC\n\r");
TRACE_DEBUG("-- i: Debug toggle VSYNC\n\r");
TRACE_DEBUG("-- j: Debug toggle PIXCLK_POL\n\r");
TRACE_DEBUG("-- k: Debug toggle EMB_SYNC\n\r");
TRACE_DEBUG("-- l: Debug toggle Bar Color\n\r");
printf("-- Enter: ");
if( !USART_IsDataAvailable((AT91S_USART *)AT91C_BASE_DBGU) );
command = DBGU_GetChar();
printf(".\n\r");
switch(command) {
case '1': // QVGA
S_Video.codec_hsize = 320;
S_Video.codec_vsize = 240;
main_Test(&S_Video);
printf("-- Sensor QVGA [%dx%d], LCD[%dx%d]\n\r", S_Video.codec_hsize,
S_Video.codec_vsize, S_Video.lcd_hsize, S_Video.lcd_vsize);
break;
case '2': // CIF
S_Video.codec_hsize = 352;
S_Video.codec_vsize = 288;
main_Test(&S_Video);
printf("-- Sensor VGA [%dx%d], LCD[%dx%d]\n\r", S_Video.codec_hsize,
S_Video.codec_vsize, S_Video.lcd_hsize, S_Video.lcd_vsize);
break;
case '3': // VGA
S_Video.codec_hsize = 640;
S_Video.codec_vsize = 480;
main_Test(&S_Video);
printf("-- Sensor VGA [%dx%d], LCD[%dx%d]\n\r", S_Video.codec_hsize,
S_Video.codec_vsize, S_Video.lcd_hsize, S_Video.lcd_vsize);
break;
case '4': // SXGA
S_Video.codec_hsize = 1280;
S_Video.codec_vsize = 1024;
main_Test(&S_Video);
printf("-- Sensor SXGA [%dx%d], LCD[%dx%d]\n\r", S_Video.codec_hsize,
S_Video.codec_vsize, S_Video.lcd_hsize, S_Video.lcd_vsize);
break;
case '5':
printf("-- Take a BMP photo in RGB\n\r");
ISI_Disable();
// convert ISI captor (YCrCb) to LCD (RGB)
VIDEO_Ycc2Rgb((unsigned char *)BuffCam,
(unsigned short *)BuffTrans,
(S_Video.codec_hsize*S_Video.codec_vsize*S_Video.lcd_nbpp)/8);
S_Video.rgb_or_yuv = RGB;
WriteBMPheader((unsigned int*)BuffTransBMP,
S_Video.lcd_hsize,
S_Video.lcd_vsize,
S_Video.rgb_or_yuv,
nbByte_Pixels);
#if defined (AT91C_ID_LCDC)
LCD_Disable(0);
LCD_DisableDma();
LCD_DMAReset();
LCD_SetSize(S_Video.lcd_hsize, S_Video.lcd_vsize);
LCD_SetFrameSize((S_Video.lcd_hsize * S_Video.lcd_vsize * S_Video.lcd_nbpp)/32);
LCD_SetFrameBufferAddress((void*)BuffTrans);
LCD_EnableDma();
LCD_Enable(8);
#endif
printf("BMP image at address 0x%8X, length:%d\n\r",
(unsigned int)BuffTransBMP,
(S_Video.lcd_hsize * S_Video.lcd_vsize * S_Video.lcd_nbpp)/32);
break;
case '6':
printf("-- Take a BMP photo in YCbCr\n\r");
ISI_Disable();
S_Video.rgb_or_yuv = YUV;
WriteBMPheader((unsigned int*)BuffCamBMP,
S_Video.lcd_hsize,
S_Video.lcd_vsize,
S_Video.rgb_or_yuv,
nbByte_Pixels);
#if defined (AT91C_ID_LCDC)
LCD_Disable(0);
LCD_DisableDma();
LCD_DMAReset();
LCD_SetSize(S_Video.lcd_hsize, S_Video.lcd_vsize);
LCD_SetFrameSize((S_Video.lcd_hsize * S_Video.lcd_vsize * S_Video.lcd_nbpp)/32);
LCD_SetFrameBufferAddress((void*)BuffCam);
LCD_EnableDma();
LCD_Enable(8);
#endif
printf("BMP image at address 0x%8X, length:%d\n\r",
(unsigned int)BuffCamBMP,
(S_Video.lcd_hsize * S_Video.lcd_vsize * S_Video.lcd_nbpp)/32);
break;
case '7':
printf("-- end video\n\r");
#if !defined (BOARD_ISI_V200)
ISI_DisableInterrupt(AT91C_ISI_FO_P_EMP | AT91C_ISI_FO_C_EMP
| AT91C_ISI_FO_C_OVF | AT91C_ISI_FO_P_OVF);
#else
ISI_DisableInterrupt( AT91C_ISI_PXFR_DONE_1 | AT91C_ISI_CXFR_DONE_1
| AT91C_ISI_C_OVR_1 | AT91C_ISI_P_OVR_1
| AT91C_ISI_CRC_ERR_1 | AT91C_ISI_FR_OVR_1);
#endif
EraseBufferLCD();
#if defined (AT91C_ID_LCDC)
LCD_SetFrameBufferAddress((void*)BuffCam);
#endif
ISI_Reset();
break;
//------------------------------------------------------------------
// Other cases are only for debug purpose
//------------------------------------------------------------------
#if defined (AT91C_ID_LCDC)
case 97: // 'a'
printf("-- Test LCD: 24bpp\n\r");
InitializeLcd();
// LCD power off
LCD_Disable(0);
// DMA disable
LCD_DisableDma();
// DMA reset
LCD_DMAReset();
EraseBufferLCD();
LCD_SetFrameSize((BOARD_LCD_WIDTH * BOARD_LCD_HEIGHT * 24)/32);
LCD_SetFrameBufferAddress((void*)BuffCam);
// DMA enable.
LCD_EnableDma();
// LCD power on
LCD_Enable(8);
#ifdef BOARD_LCD_RGB565
TestLCD_RGB_240_320_24bpp(BuffCam);
#else
TestLCD_BGR_240_320_24bpp(BuffCam);
#endif
break;
case 98: // 'b'
printf("-- Test LCD: 16bpp, mire, with bgr correction\n\r");
InitializeLcd();
// LCD power off
LCD_Disable(0);
// DMA disable
LCD_DisableDma();
// DMA reset
LCD_DMAReset();
EraseBufferLCD();
LCD_SetBitsPerPixel(AT91C_LCDC_PIXELSIZE_SIXTEENBITSPERPIXEL);
LCD_SetFrameSize((BOARD_LCD_WIDTH * BOARD_LCD_HEIGHT * 16)/32);
LCD_SetFrameBufferAddress((void*)BuffCam);
// DMA enable.
LCD_EnableDma();
// LCD power on
LCD_Enable(8);
#ifdef BOARD_LCD_RGB565
TestLCD_RGB565_240_320_16bpp(BuffCam);
#else
TestLCD_BGR555_240_320_16bpp(BuffCam);
#endif
break;
case 99: // 'c'
printf("-- Test LCD mire:\n\r");
InitializeLcd();
// LCD power off
LCD_Disable(0);
// DMA disable
LCD_DisableDma();
// DMA reset
LCD_DMAReset();
EraseBufferLCD();
LCD_SetBitsPerPixel(AT91C_LCDC_PIXELSIZE_SIXTEENBITSPERPIXEL);
LCD_SetFrameSize((BOARD_LCD_WIDTH * BOARD_LCD_HEIGHT * 16)/32);
LCD_SetBurstLength(4);
// this image should be see with the adaptator on the lcd
LCD_DecodeRGB( (unsigned char*)image_2008,
(unsigned char*)BuffCam,
320,
240,
16);
LCD_SetFrameBufferAddress((void*)BuffCam);
// DMA enable.
LCD_EnableDma();
// LCD power on
LCD_Enable(8);
break;
#endif
case 100: // 'd'
printf("-- statistics ISI\n\r");
printf("IsiDescriptors.DisplayCodec = %d\n\r", IsiDescriptors.DisplayCodec);
printf("IsiDescriptors.Fifo Codec Overflow = %d\n\r", IsiDescriptors.nb_codec_ovf);
printf("IsiDescriptors.Fifo Preview Overflow = %d\n\r", IsiDescriptors.nb_prev_ovf);
printf("S_Video.codec_hsize: %d\n\r", S_Video.codec_hsize);
printf("S_Video.codec_vsize: %d\n\r", S_Video.codec_vsize);
printf("S_Video.lcd_hsize: %d\n\r", S_Video.lcd_hsize);
printf("S_Video.lcd_vsize: %d\n\r", S_Video.lcd_vsize);
#if !defined (BOARD_ISI_V200)
printf("ISI_CR1 0x%X\n\r", AT91C_BASE_ISI->ISI_CR1);
printf("ISI_CR2 0x%X\n\r", AT91C_BASE_ISI->ISI_CR2);
printf("ISI_SR 0x%X\n\r", AT91C_BASE_ISI->ISI_SR);
printf("ISI_PPFBD 0x%X\n\r", AT91C_BASE_ISI->ISI_PPFBD);
printf("ISI_PDECF %d\n\r", AT91C_BASE_ISI->ISI_PDECF);
printf("ISI_PSIZE 0x%X\n\r", AT91C_BASE_ISI->ISI_PSIZE);
printf("ISI_Y2RSET0 0x%X\n\r", AT91C_BASE_ISI->ISI_Y2RSET0);
printf("ISI_Y2RSET1 0x%X\n\r", AT91C_BASE_ISI->ISI_Y2RSET1);
printf("ISI_R2YSET0 0x%X\n\r", AT91C_BASE_ISI->ISI_R2YSET0);
printf("ISI_R2YSET1 0x%X\n\r", AT91C_BASE_ISI->ISI_R2YSET1);
printf("ISI_R2YSET2 0x%X\n\r", AT91C_BASE_ISI->ISI_R2YSET2);
#else
printf("ISI_CFG1 0x%X\n\r", AT91C_BASE_ISI->ISI_CFG1);
printf("ISI_CFG2 0x%X\n\r", AT91C_BASE_ISI->ISI_CFG2);
printf("ISI_PSIZE 0x%X\n\r", AT91C_BASE_ISI->ISI_PSIZE);
printf("ISI_PDECF %d\n\r", AT91C_BASE_ISI->ISI_PDECF);
printf("ISI_Y2RSET0 0x%X\n\r", AT91C_BASE_ISI->ISI_Y2RSET0);
printf("ISI_Y2RSET1 0x%X\n\r", AT91C_BASE_ISI->ISI_Y2RSET1);
printf("ISI_R2YSET0 0x%X\n\r", AT91C_BASE_ISI->ISI_R2YSET0);
printf("ISI_R2YSET1 0x%X\n\r", AT91C_BASE_ISI->ISI_R2YSET1);
printf("ISI_R2YSET2 0x%X\n\r", AT91C_BASE_ISI->ISI_R2YSET2);
printf("ISI_CTRL 0x%X\n\r", AT91C_BASE_ISI->ISI_CTRL);
printf("ISI_SR 0x%X\n\r", AT91C_BASE_ISI->ISI_SR);
printf("ISI_IER 0x%X\n\r", AT91C_BASE_ISI->ISI_IER);
printf("ISI_IDR 0x%X\n\r", AT91C_BASE_ISI->ISI_IDR);
printf("ISI_IMR 0x%X\n\r", AT91C_BASE_ISI->ISI_IMR);
printf("ISI_DMACHER 0x%X\n\r", AT91C_BASE_ISI->ISI_DMACHER);
printf("ISI_DMACHDR 0x%X\n\r", AT91C_BASE_ISI->ISI_DMACHDR);
printf("ISI_DMACHSR 0x%X\n\r", AT91C_BASE_ISI->ISI_DMACHSR);
printf("ISI_DMAPADDR 0x%X\n\r", AT91C_BASE_ISI->ISI_DMAPADDR);
printf("ISI_DMAPCTRL 0x%X\n\r", AT91C_BASE_ISI->ISI_DMAPCTRL);
printf("ISI_DMAPDSCR 0x%X\n\r", AT91C_BASE_ISI->ISI_DMAPDSCR);
printf("ISI_DMACADDR 0x%X\n\r", AT91C_BASE_ISI->ISI_DMACADDR);
printf("ISI_DMACCTRL 0x%X\n\r", AT91C_BASE_ISI->ISI_DMACCTRL);
printf("ISI_DMACDSCR 0x%X\n\r", AT91C_BASE_ISI->ISI_DMACDSCR);
printf("ISI_WPCR 0x%X\n\r", AT91C_BASE_ISI->ISI_WPCR);
printf("ISI_WPSR 0x%X\n\r", AT91C_BASE_ISI->ISI_WPSR);
#endif
#if defined (AT91C_ID_LCDC)
printf("LCDC_BA1 0x%X\n\r", AT91C_BASE_LCDC->LCDC_BA1);
printf("LCDC_BA2 0x%X\n\r", AT91C_BASE_LCDC->LCDC_BA2);
printf("LCDC_FRMP1 0x%X\n\r", AT91C_BASE_LCDC->LCDC_FRMP1);
printf("LCDC_FRMP2 0x%X\n\r", AT91C_BASE_LCDC->LCDC_FRMP2);
printf("LCDC_FRMA1 0x%X\n\r", AT91C_BASE_LCDC->LCDC_FRMA1);
printf("LCDC_FRMA2 0x%X\n\r", AT91C_BASE_LCDC->LCDC_FRMA2);
printf("LCDC_FRMCFG 0x%X\n\r", AT91C_BASE_LCDC->LCDC_FRMCFG);
printf("LCDC_DMACON 0x%X\n\r", AT91C_BASE_LCDC->LCDC_DMACON);
printf("LCDC_DMA2DCFG 0x%X\n\r", AT91C_BASE_LCDC->LCDC_DMA2DCFG);
printf("LCDC_LCDCON1 0x%X\n\r", AT91C_BASE_LCDC->LCDC_LCDCON1&0x001FF001);
printf("LCDC_LCDCON2 0x%X\n\r", AT91C_BASE_LCDC->LCDC_LCDCON2);
printf("LCDC_TIM1 0x%X\n\r", AT91C_BASE_LCDC->LCDC_TIM1);
printf("LCDC_TIM2 0x%X\n\r", AT91C_BASE_LCDC->LCDC_TIM2);
printf("LCDC_LCDFRCFG 0x%X\n\r", AT91C_BASE_LCDC->LCDC_LCDFRCFG);
printf("LCDC_MVAL 0x%X\n\r", AT91C_BASE_LCDC->LCDC_MVAL);
printf("LCDC_PWRCON 0x%X\n\r", AT91C_BASE_LCDC->LCDC_PWRCON);
printf("LCDC_CTRSTCON 0x%X\n\r", AT91C_BASE_LCDC->LCDC_CTRSTCON);
printf("LCDC_CTRSTVAL 0x%X\n\r", AT91C_BASE_LCDC->LCDC_CTRSTVAL);
printf("LCDC_ISR 0x%X\n\r", AT91C_BASE_LCDC->LCDC_ISR);
printf("LCDC_GPR 0x%X\n\r", AT91C_BASE_LCDC->LCDC_GPR);
#endif
break;
case 101: // 'e'
printf("-- Select Mode [0:YUV, 1:RGB]: ");
if ( !USART_IsDataAvailable((AT91S_USART *)AT91C_BASE_DBGU) ) {}
CharReceive = DBGU_GetChar();
printf("%c\n\r", CharReceive);
if( ( CharReceive == 0x30 ) || ( CharReceive == 0x31 ) ) {
#if !defined (BOARD_ISI_V200)
ISI_DisableInterrupt(AT91C_ISI_FO_P_EMP);
#else
ISI_DisableInterrupt(AT91C_ISI_PXFR_DONE_1);
#endif
ISI_Reset();
S_Video.rgb_or_yuv = CharReceive-0x30;
if( S_Video.rgb_or_yuv == RGB ) {
// Values for RGB565
// 0x12 0x03
ov965x_write_reg(&twid, 0x12, 0x03);
// 0x3A 0xC0
ov965x_write_reg(&twid, 0x3A, 0xC0);
// 0x40 0xd0
ov965x_write_reg(&twid, 0x40, 0xD0);
// 0xC7 0x80
ov965x_write_reg(&twid, 0xC7, 0x80);
}
else {
// 0x12 0x62
ov965x_write_reg(&twid, 0x12, 0x62);
// 0x3a 0x80
ov965x_write_reg(&twid, 0x3A, 0x80);
// 0x40 0xc0
ov965x_write_reg(&twid, 0x40, 0xC0);
// 0xc7 0x80
ov965x_write_reg(&twid, 0xC7, 0x80);
}
ISI_Init(&S_Video);
#if !defined (BOARD_ISI_V200)
ISI_EnableInterrupt(AT91C_ISI_FO_P_EMP | AT91C_ISI_FO_P_OVF);
#else
ISI_DisableInterrupt(AT91C_ISI_PXFR_DONE_1 | AT91C_ISI_P_OVR_1);
#endif
ISI_Reset();
ISI_Enable();
}
else {
TRACE_ERROR("Mode not supported\n\r");
printf("-- Press a key\n\r");
if ( !USART_IsDataAvailable((AT91S_USART *)AT91C_BASE_DBGU) ) {}
}
break;
case 102: // 'f'
printf("-- Enable CODEC Path\n\r");
ISI_Reset();
ISI_CodecPathFull();
ISI_Enable();
break;
case 103: // 'g'
printf("-- toggle swapp CC\n\r");
#if !defined (BOARD_ISI_V200)
reg_cr2 = AT91C_BASE_ISI->ISI_CR2;
#else
reg_cr2 = AT91C_BASE_ISI->ISI_CFG2;
#endif
reg_cr2 &= ~AT91C_ISI_YCC_SWAP;
if(toggle_swapcc == 0) {
printf("AT91C_ISI_YCC_SWAP_YCC_DEFAULT\n\r");
toggle_swapcc = 1;
}
else if(toggle_swapcc == 1) {
printf("AT91C_ISI_YCC_SWAP_YCC_MODE1\n\r");
reg_cr2 |= AT91C_ISI_YCC_SWAP_YCC_MODE1;
toggle_swapcc = 2;
}
else if(toggle_swapcc == 2) {
printf("AT91C_ISI_YCC_SWAP_YCC_MODE2\n\r");
reg_cr2 |= AT91C_ISI_YCC_SWAP_YCC_MODE2;
toggle_swapcc = 3;
}
else {
printf("AT91C_ISI_YCC_SWAP_YCC_MODE3\n\r");
reg_cr2 |= AT91C_ISI_YCC_SWAP_YCC_MODE3;
toggle_swapcc = 0;
}
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR2 = reg_cr2;
#else
AT91C_BASE_ISI->ISI_CFG2 = reg_cr2;
#endif
break;
case 104: // 'h'
printf("-- toggle HSYNC\n\r");
if(toggle_HSYNC == 0) {
printf("HSYNC active high\n\r");
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR1 &= ~AT91C_ISI_HSYNC_POL;
#else
AT91C_BASE_ISI->ISI_CFG1 &= ~AT91C_ISI_HSYNC_POL;
#endif
toggle_HSYNC = 1;
}
else if(toggle_HSYNC == 1) {
printf("HSYNC active low\n\r");
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR1 |= AT91C_ISI_HSYNC_POL;
#else
AT91C_BASE_ISI->ISI_CFG1 |= AT91C_ISI_HSYNC_POL;
#endif
toggle_HSYNC = 0;
}
break;
case 105: // 'i'
printf("-- toggle VSYNC\n\r");
if(toggle_VSYNC == 0) {
printf("VSYNC active high\n\r");
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR1 &= ~AT91C_ISI_VSYNC_POL;
#else
AT91C_BASE_ISI->ISI_CFG1 &= ~AT91C_ISI_VSYNC_POL;
#endif
toggle_VSYNC = 1;
}
else if(toggle_VSYNC == 1) {
printf("VSYNC active low\n\r");
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR1 |= AT91C_ISI_VSYNC_POL;
#else
AT91C_BASE_ISI->ISI_CFG1 |= AT91C_ISI_VSYNC_POL;
#endif
toggle_VSYNC = 0;
}
break;
case 106: // 'j'
printf("-- toggle PIXCLK_POL\n\r");
if(toggle_POL == 0) {
printf("PIXCLK rising edge\n\r");
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR1 &= ~AT91C_ISI_PIXCLK_POL;
#else
AT91C_BASE_ISI->ISI_CFG1 &= ~AT91C_ISI_PIXCLK_POL;
#endif
toggle_POL = 1;
}
else if(toggle_POL == 1) {
printf("PIXCLK falling edge\n\r");
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR1 |= AT91C_ISI_PIXCLK_POL;
#else
AT91C_BASE_ISI->ISI_CFG1 |= AT91C_ISI_PIXCLK_POL;
#endif
toggle_POL = 0;
}
break;
case 107: // 'k'
printf("-- toggle EMB_SYNC\n\r");
if(toggle_SYNC == 0) {
printf("Synchronization by HSYNC, VSYNC\n\r");
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR1 &= ~AT91C_ISI_EMB_SYNC;
#else
AT91C_BASE_ISI->ISI_CFG1 &= ~AT91C_ISI_EMB_SYNC;
#endif
toggle_SYNC = 1;
}
else if(toggle_SYNC == 1) {
printf("Synchronization by embedded synchronization sequence SAV/EAV\n\r");
#if !defined (BOARD_ISI_V200)
AT91C_BASE_ISI->ISI_CR1 |= AT91C_ISI_EMB_SYNC;
#else
AT91C_BASE_ISI->ISI_CFG1 |= AT91C_ISI_EMB_SYNC;
#endif
toggle_SYNC = 0;
}
break;
case 108: // 'l'
printf("-- Debug Toggle Bar Color\n\r");
if(toggle_BAR == 0) {
printf("Set Bar Color\n\r");
// Set register 8D bit 4 high (10hex)
ov965x_write_reg(&twid, 0x8D, 0x10);
toggle_BAR = 1;
}
else if(toggle_BAR == 1) {
printf("Remove Bar color\n\r");
ov965x_write_reg(&twid, 0x8D, 0x00);
toggle_BAR = 0;
}
break;
default:
printf("-%c ", command);
printf("-%d\n\r", command);
command = 0;
break;
}
}
}