i have been working with a sam9260 ek board and a tcm8240 MD camera with eclipse and sam ice tool everything is working just fine. i manage to get to work i2c comunication and configurating the camera to start sending frames but i think i have problems with de configuration of the isi periferial because in the buffer that is supposed to have the frames there are no frames
code :
unsigned int i;
unsigned int bufferIMG[1000000];
Async async;
unsigned int numErrors;
unsigned long temp=0;
PIO_Configure(pins, PIO_LISTSIZE(pins));
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf(“-- Basic TWI EEPROM Project %s –\n\r”, SOFTPACK_VERSION);
printf(“-- %s\n\r”, BOARD_NAME);
printf(“-- Compiled: %s %s –\n\r”, DATE, TIME);
// 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;
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);
//CONFIG RST_CAM PIN
PIO_Configure(&ISI_RST, 1); // Configura Pin reset para camara como salida
PIO_Clear(&ISI_RST); // Camara en reset
// Erase page #0 and #1
memset(pData, 0, PAGE_SIZE);
printf(“-I- 2.0 Filling page #0 with zeroes …\n\r”);
TWID_Write(&twid, AT24C_ADDRESS, 0x0000, 2, pData, PAGE_SIZE, 0);
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
printf(“-I- Filling page #1 with zeroes …\n\r”);
TWID_Write(&twid, AT24C_ADDRESS, 0x0100, 2, pData, PAGE_SIZE, 0);
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
// Synchronous operation
printf(“-I- Read/write on page #0 (polling mode)\n\r”);
// Write checkerboard pattern in first page
for (i=0; i < PAGE_SIZE; i++) {
// Even
if ((i & 1) == 0) {
pData = 0xA5;
}
// Odd
else {
pData = 0x5A;
}
}
TWID_Write(&twid, AT24C_ADDRESS, 0x0000, 2, pData, PAGE_SIZE, 0);
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
// Read back data
memset(pData, 0, PAGE_SIZE);
TWID_Read(&twid, AT24C_ADDRESS, 0x0000, 2, pData, PAGE_SIZE, 0);
// Compare
numErrors = 0;
for (i=0; i < PAGE_SIZE; i++) {
// Even
if (((i & 1) == 0) && (pData != 0xA5)) {
printf(“-E- Data mismatch at offset #%u: expected 0xA5, read 0x%02X\n\r”, i, pData);
numErrors++;
}
// Odd
else if (((i & 1) == 1) && (pData != 0x5A)) {
printf(“-E- Data mismatch at offset #%u: expected 0x5A, read 0x%02X\n\r”, i, pData);
numErrors++;
}
}
printf(“-I- %u comparison error(s) found\n\r”, numErrors);
// Asynchronous operation
printf(“-I- Read/write on page #1 (IRQ mode)\n\r”);
// Write checkerboard pattern in first page
for (i=0; i < PAGE_SIZE; i++) {
// Even
if ((i & 1) == 0) {
pData = 0xA5;
}
// Odd
else {
pData = 0x5A;
}
}
memset(&async, 0, sizeof(async));
async.callback = (void *) TestCallback;
TWID_Write(&twid, AT24C_ADDRESS, 0x0100, 2, pData, PAGE_SIZE, &async);
while (!ASYNC_IsFinished(&async));
printf(“finish sending\n\r”);
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
// Read back data
memset(pData, 0, PAGE_SIZE);
memset(&async, 0, sizeof(async));
async.callback = (void *) TestCallback;
TWID_Read(&twid, AT24C_ADDRESS, 0x0100, 2, pData, PAGE_SIZE, &async);
while (!ASYNC_IsFinished(&async));
// Compare
numErrors = 0;
for (i=0; i < PAGE_SIZE; i++) {
// Even
if (((i & 1) == 0) && (pData != 0xA5)) {
printf(“-E- Data mismatch at offset #%u: expected 0xA5, read 0x%02X\n\r”, i, pData);
numErrors++;
}
// Odd
else if (((i & 1) == 1) && (pData != 0x5A)) {
printf(“-E- Data mismatch at offset #%u: expected 0x5A, read 0x%02X\n\r”, i, pData*);*
numErrors++;
}
}
printf(“-I- %u comparison error(s) found\n\r”, numErrors);
printf(" -I- Setting up PCK1 Clock\n\r");
//Configura reloj programable PCK1
AT91C_BASE_PMC->PMC_PCKR[1] = 0x5;//0x1; // fuente reloj main, sin divisor
// Habilita reloj PCK1
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_PCK1;
// Espera que esté listo reloj PCK1
while((AT91C_BASE_PMC->PMC_SCSR & AT91C_PMC_PCK1) == 0);
// DESPUES DE ACTIVADO RELOJ SE DEBE ESPERAR >1ms ANTES DE ACTIVAR RESET
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
PIO_Set(&ISI_RST); // Camara en reset
printf(“CAM TEST I2C\n\r”);
for (i=0; i < 1000000; i++);
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
// Wait at least 10 ms
for (i=0; i < 1000000; i++);
// Wait at least 10 ms
memset(pData,0x0F, PAGE_SIZE);
TWID_Read(&twid,TCM8240MD_ADDRESS,0x00, 1, pData, 7, 0);
for (i=0;i<7;i++)
{printf(“Read ->%d- %X \n\r”,i,pData*);}*
//pData[0]=0xC1;
//TWID_Write(&twid, TCM8240MD_ADDRESS, 0x03, 1, pData, 1, 0);
//AT91C_BASE_HISI->ISI_IER =0x;
memset(bufferIMG,0,1000000);
pData[0]=0x00;
TWID_Write(&twid,TCM8240MD_ADDRESS,0x02,1,pData,1,0); //Set Camera Active (I assume you did this?)
pData[0]=0x00;
TWID_Write(&twid,TCM8240MD_ADDRESS,0x0B,1,pData,1,0);// White Line OFF
pData[0]=0x20;
TWID_Write(&twid,TCM8240MD_ADDRESS,0x58,1,pData,1,0);// Exposure Time
pData[0]=0x00;
TWID_Write(&twid,TCM8240MD_ADDRESS,0x05,1,pData,1,0);// Frame Rate Quarter
pData[0]=0xFF;
TWID_Write(&twid,TCM8240MD_ADDRESS,0x1A,1,pData,1,0);// HCOUNT = 0x3FF = 1023
pData[0]=0xB3;
TWID_Write(&twid,TCM8240MD_ADDRESS,0x1B,1,pData,1,0);// VCOUNT = 0x21B = 539
pData[0]=0x4A;
TWID_Write(&twid,TCM8240MD_ADDRESS, 0x11,1,pData,1,0);// VCOUNT = 0x21B = 539
pData[0]=0x33;
TWID_Write(&twid,TCM8240MD_ADDRESS, 0x14,1,pData,1,0);// // Changed b/c of PICSIZE
pData[0]=0x0D;
TWID_Write(&twid,TCM8240MD_ADDRESS, 0x04,1,pData,1,0);// RGB 352x288 OUT ON
pData[0]=0x0B;
TWID_Write(&twid,TCM8240MD_ADDRESS, 0x1F,1,pData,1,0);// // SPCOUNT = 0xBC3 = 3011 // Doesn’t match formula?
pData[0]=0xC3;
TWID_Write(&twid,TCM8240MD_ADDRESS, 0x1E,1,pData,1,0);// SPCOUNT[7:0]
pData[0]=0x1E ;
TWID_Write(&twid,TCM8240MD_ADDRESS, 0x0E,1,pData,1,0);// SPCOUNT[7:0]
AT91C_BASE_ISI->ISI_SR =0x00000000;
//AT91C_BASE_ISI->ISI_CR1 =0x00009010;
AT91C_BASE_ISI->ISI_CR1 =0x00009000;
AT91C_BASE_ISI->ISI_CR2 =0x01609120;
AT91C_BASE_ISI->ISI_CDBA =bufferIMG;
////////////////////////////////////END
can some one help with these has someo ne manage to make isi work with these cam?
Thx for the help