Need help in setting up a Camera Cmos Sensor that interfaces to the OMAP35x ISP Camera module.
I am attempting to get the ISP CCDC module to take in a 12 bit raw sensor data and write it into memory in Raw Bayer format. The Sensor is programmed to generate a HS (Horizontal Sync) and VS (Vertical Sync). The Sensor will have an XCLK input and is programmed to put the 12 bit Raw data on the falling edge of the PXCLK at 54mhz. ISP will sample the data on the rising edge of the clock.
In my application program, I allocated 1224 x 1224 or 1, 498, 1276 (16 word memory space). Note I have setup the ISP and Cmos sensor to transmit 612 x 612 frame. I want to get 2 frames using the Circular Buffer controller in 2 windows mode.
I call a function to convert my virtual memory pointer to a physical memory pointer. I pass the physical memory location to the CCDC_SDR_ADDR register. The same pointer is written to CBUFF0_START register. Then I enabel CBUFF0_CTRL and CCDC module and unreset the CMOS sensor.
I can see data being written to my allocated memory location in the application layer. The data correlates with the CMOS sensor data.
Question 1:
What is the difference in the address pointers given to the CCDC_SDR_ADDR register and the CBUFF0_START register? I am writing the same pointer to both registers.
Question 2:
I am always getting an . IRQ_CBUFF0_INVALID in the CBUFF_IRQSTATUS (IRQ_CBUFF0_INVALID[1]=0x1) register. What could be the cuase of this status error?
Question 3:
When I interogate the memroy that the ISP is writing to, I always see a data being written. I was hopping that the data does not get written to the memory until I write a 0x1 to CBUFF0_CTRL. DONE[2] bit. This way I can make sure the data being processed by the CPU is not being changed by the ISP CCDC module.
See the registers that were initialized in the OMAP3530
I have programmed and verified the PAD_CONFIGx registers as such:
0x4800210C CONTROL_PADCONF.CAM_HS[15:0] = 0x0108
0x4800210C CONTROL_PADCONF.CAM_VS[31:16] = 0x0108
0x48002110 CONTROL_PADCONF.CAM_XCLKA[15:0] = 0x0008
0x48002110 CONTROL_PADCONF.CAM_PCLKA[31:16] = 0x0108
0x48002114 CONTROL_PADCONF.GLOBL_RESET[15:0] = 0x000A
0x48002114 CONTROL_PADCONF.CAM_D0[31:16] = 0x0108
0x48002118 CONTROL_PADCONF.CAM_D1[15:0] = 0x0108
0x48002118 CONTROL_PADCONF.CAM_D2[31:16] = 0x0108
0x4800211C CONTROL_PADCONF.CAM_D3[15:0] = 0x0108
0x4800211C CONTROL_PADCONF.CAM_D4[31:16] = 0x0108
0x48002120 CONTROL_PADCONF.CAM_D5[15:0] = 0x0108
0x48002120 CONTROL_PADCONF.CAM_D6[31:16] = 0x0108
0x48002124 CONTROL_PADCONF.CAM_D7[15:0] = 0x0108
0x48002124 CONTROL_PADCONF.CAM_D8[31:16] = 0x0108
0x48002128 CONTROL_PADCONF.CAM_D9[15:0] = 0x0108
0x48002128 CONTROL_PADCONF.CAM_D10[31:16] = 0x0108
0x4800212C CONTROL_PADCONF.CAM_D11[15:0] = 0x0108
0x4800212C CONTROL_PADCONF.XCLKB [31:16] = 0x0008 (Not Used)
The rest of the registered are programmed and monitored as indicated below.
0x48004810 CM_SYSCONFIG. AUTO_IDLE[0] = 0x1
0x48004F00 CM_FCLKEN_CAM. EN_CAM[0] = 0x1 (CM_FCLKEN_CAM = 0x1)
0x48004F48 CM_CLKSTCTRL_CAM. CLKTRCTRL_CAM[1:0] = 0x2 (CM_CLKSTCTRL_CAM = 0x2)
0x48004F4C CM_CLKSTST_CAM. CLKACTIVITY_CAM[0] = 0x1 (CM_CLKSTST_CAM = 0x1)
0x48306FE0 PM_PWSTCTRL_CAM. POWERSTATE[1:0] = 0x3 (PM_PWSTCTRL_CAM =0x30107)
0x48004F00 CM_FCLKEN_CAM.EN_CSI2[1] = 0x1
0x48004F00 CM_FCLKEN_CAM.EN_CAM[0] = 0x1 (CM_FCLKEN_CAM = 0x3)
0x48004F10 CM_ICLKEN_CAM. EN_CAM[0] = 0x1
0x480BD2F8 SBL_SDR_REQ_EXP = 0x401004
0x480BD2F8 SBL_SDR_REQ_EXP.HIST_EXP[9:0] =0x4
0x480BD2F8 SBL_SDR_REQ_EXP. RSZ_EXP [19:10]=0x4
0x480BD2F8 SBL_SDR_REQ_EXP. PRV_EXP [29:20]=0x4
0x480BC040 ISP_CTRL = 0x3029C100
0x480BC040 ISP_CTRL.FLUSH[31]=0x0
0x480BC040 ISP_CTRL.JPEG_FLUSH[30]=0x0
0x480BC040 ISP_CTRL.CCDC_WEN_POL[29]=0x1 (wen is not used)
0x480BC040 ISP_CTRL.SBL_SHARED_RPORT[28]=0x1
0x480BC040 ISP_CTRL.SBL_AUTOIDLE[21]=0x1
0x480BC040 ISP_CTRL.SBL_WR0_RAM_EN[20]=0x0
0x480BC040 ISP_CTRL.SBL_WR1_RAM_EN[19]=0x1
0x480BC040 ISP_CTRL.SBL_RD_RAM_EN[18]=0x0
0x480BC040 ISP_CTRL.PREV_RAM_EN[17]=0x0
0x480BC040 ISP_CTRL.CCDC_RAM_EN[16]=0x1
0x480BC040 ISP_CTRL.SYNC_DETECT[15:14]=0x3
0x480BC040 ISP_CTRL.RSZ_CLK_EN[13]=0x0
0x480BC040 ISP_CTRL.PRV_CLK_EN[12]=0x0
0x480BC040 ISP_CTRL. HIST_CLK_EN[11]=0x0
0x480BC040 ISP_CTRL.H3A_CLK_EN[10]=0x0
0x480BC040 ISP_CTRL.CBUFF_AUTOGATING[9]=0x0
0x480BC040 ISP_CTRL.CCDC_CLK_EN[8] =0x1
0x480BC040 ISP_CTRL.SHIFT[7:6]=0x0
0x480BC040 ISP_CTRL.PAR_CLK_POL[4]=0x0
0x480BC040 ISP_CTRL.PAR_BRIDGE[3:2]= 0x0
0x480BC040 ISP_CTRL.PAR_SER_CLK_SEL[1:0]= 0x0
0x480BC030 TCTRL_GRESET_LENGTH. LENGTH[23:0] = 0x84
0x480BC034 TCTRL_PSTRB_REPLAY.DELAY[24:0]=0x800
0x480BC034 TCTRL_PSTRB_REPLAY. COUNTER[31:25]= 0x0
0x480BC050 TCTRL_CTRL = (Write 0xF8801084) (Read back 0xD8801084)
0x480BC050 TCTRL_CTRL.GRESETDIR[31]=0x1
0x480BC050 TCTRL_CTRL.GRESETPOL[30]=0x1
0x480BC050 TCTRL_CTRL.GRESETEN[29]=0x1
0x480BC050 TCTRL_CTRL.INSEL[28:27]=0x3
0x480BC050 TCTRL_CTRL.STRBPSTRBPOL[26]=0x0
0x480BC050 TCTRL_CTRL.SHUTPOL[24]=0x0
0x480BC050 TCTRL_CTRL.STRBEN[23]=0x1
0x480BC050 TCTRL_CTRL.PSTRBEN[22]=0x0
0x480BC050 TCTRL_CTRL.SHUTEN[21]=0x0
0x480BC050 TCTRL_CTRL.DIVC[18:10]=0x4
0x480BC050 TCTRL_CTRL.DIVB[9:5]=0x4
0x480BC050 TCTRL_CTRL.DIVA[4:0]=0x4
0x480BC004 ISP_SYSCONFIG (Write 0x1002) (Read-Back 0x1)(Write 0x1000)(Read-back 0x1000) ( Write 0x1001) (Read-Back 0x1001)
0x480BC004 ISP_SYSCONFIG. MIDLE_MODE[13:12]=0x1
0x480BC004 ISP_SYSCONFIG. SOFT_RESET[1]=0x1
0x480BC004 ISP_SYSCONFIG. AUTO_IDLE[0] =0x0
0x480BC040 ISP_CTRL = 0x3029C100
0x480BC040 ISP_CTRL.FLUSH[31]=0x0
0x480BC040 ISP_CTRL.JPEG_FLUSH[30]=0x0
0x480BC040 ISP_CTRL.CCDC_WEN_POL[29]=0x1 (wen is not used)
0x480BC040 ISP_CTRL.SBL_SHARED_RPORT[28]=0x1
0x480BC040 ISP_CTRL.SBL_AUTOIDLE[21]=0x1
0x480BC040 ISP_CTRL.SBL_WR0_RAM_EN[20]=0x0
0x480BC040 ISP_CTRL.SBL_WR1_RAM_EN[19]=0x1
0x480BC040 ISP_CTRL.SBL_RD_RAM_EN[18]=0x0
0x480BC040 ISP_CTRL.PREV_RAM_EN[17]=0x0
0x480BC040 ISP_CTRL.CCDC_RAM_EN[16]=0x1
0x480BC040 ISP_CTRL.SYNC_DETECT[15:14]=0x3
0x480BC040 ISP_CTRL.RSZ_CLK_EN[13]=0x0
0x480BC040 ISP_CTRL.PRV_CLK_EN[12]=0x0
0x480BC040 ISP_CTRL. HIST_CLK_EN[11]=0x0
0x480BC040 ISP_CTRL.H3A_CLK_EN[10]=0x0
0x480BC040 ISP_CTRL.CBUFF_AUTOGATING[9]=0x0
0x480BC040 ISP_CTRL.CCDC_CLK_EN[8] =0x1
0x480BC040 ISP_CTRL.SHIFT[7:6]=0x0
0x480BC040 ISP_CTRL.PAR_CLK_POL[4]=0x0
0x480BC040 ISP_CTRL.PAR_BRIDGE[3:2]= 0x0
0x480BC040 ISP_CTRL.PAR_SER_CLK_SEL[1:0]= 0x0
0x480BC044 ISP_SECURE = 0x0
0x480BC608 CCDC_SYN_MODE = 0x0070400
0x480BC608 CCDC_SYN_MODE.SDR2RSZ[19] =0x0
0x480BC608 CCDC_SYN_MODE.VP2SDR[18] =0x1
0x480BC608 CCDC_SYN_MODE.WEN[17] =0x1
0x480BC608 CCDC_SYN_MODE.VDHDEN[16]=0x1
0x480BC608 CCDC_SYN_MODE.FLDSTAT[15] =0x0
0x480BC608 CCDC_SYN_MODE.LPF[14] =0x0
0x480BC608 CCDC_SYN_MODE.INPMOD[13:12] =0x0
0x480BC608 CCDC_SYN_MODE.PACK8[11] =0x0
0x480BC608 CCDC_SYN_MODE.DATSIZ[10:8]=0x4
0x480BC608 CCDC_SYN_MODE.FLDMODE[7] =0x0
0x480BC608 CCDC_SYN_MODE.DATAPOL[6] =0x0
0x480BC608 CCDC_SYN_MODE.EXWEN[5] =0x0
0x480BC608 CCDC_SYN_MODE.FLDPOL[4] =0x0
0x480BC608 CCDC_SYN_MODE.HDPOL[3] =0x0
0x480BC608 CCDC_SYN_MODE.VDPOL[2] =0x0
0x480BC608 CCDC_SYN_MODE.FLDOUT[1] =0x0
0x480BC608 CCDC_SYN_MODE.VDHDOUT[0] =0x0
Initialze Cmos Sensor to 612 x 612
0x480BC600 CCDC_PID = 0x0001fe01
0x480BC604 CCDC_PCR = 0x0
0x480BC608 CDC_SYN_MODE= 0x0070400
0x480BC60C CCDC_HD_VD_WID = 0x0
0x480BC610 CCDC_PIX_LINES = 0x0
0x480BC614 CCDC_HORZ_INFO = 0x263
0x480BC618 CCDC_VERT_START = 0x0
0x480BC61C CCDC_VERT_LINES = 0x263
0x480BC620 CCDC_CULLING = 0xffff00ff
0x480BC624 CCDC_HSIZE_OFF = 0x0
0x480BC628 CCDC_SDOFST = 0x0
0x480BC62C CCDC_SDR_ADDR = 0x4057cf84 ??
0x480BC630 CCDC_CLAMP = 0x10
0x480BC634 CCDC_DCSUB = 0x0
0x480BC638 CCDC_COLPTN = 0x1B1B1B1B
0x480BC63C CCDC_BLKCMP = 0x0
0x480BC640 CCDC_FPC = 0x0
0x480BC644 CCDC_FPC_ADDR = 0x0
0x480BC648 CCDC_VDINT = 0x0
0x480BC64C CCDC_ALAW = 0x4
0x480BC650 CCDC_REC656IF = 0x0
0x480BC654 CCDC_CFG = 0x0
0x480BC658 CCDC_FMTCFG = 0x00004000
0x480BC65C CCDC_FMT_HORZ= 0x0
0x480BC660 CCDC_FMT_VERT = 0x0
0x480BC664 CCDC_FMT_ADDRx = 0x0
0x480BC684 CCDC_PRGEVEN0 = 0x0
0x480BC688 CCDC_PRGEVEN1 = 0x0
0x480BC68C CCDC_PRGODD0 = 0x0
0x480BC690 CCDC_PRGODD1 = 0x0
0x480BC694 CCDC_VP_OUT = 0x0F3C0797
0x480BC698 CCDC_LSC_CONFIG = 0x00006600
0x480BC69C CCDC_LSC_INITIAL = 0x0
0x480BC6A0 CCDC_LSC_TABLE_BASE = 0x0
0x480BC6A4 CCDC_LSC_TABLE_OFFSET = 0x0
0x480BC604 CCDC_PCR = 0x1
0x480BC140 CBUFF0_START = 0x28608000
0x480BC150 CBUFF0_END = 0x28bbf100
0x480BC160 CBUFF0_WINDOWSIZE = 0x002db880
0x480BC170 CBUFF0_THRESHOLD = 0xF0
0x480BC174 CBUFF1_THRESHOLD = 0xF0
0x480BC120 CBUFF0_CTRL = 0x5
0x480BC124 CBUFF1_CTRL = 0x0
0x480BC62C CCDC_SDR_ADDR = 0x850c1000
0x480BD204 SBL_PCR = 0x00800000 (write to clear overflow)
0x480BC118 CBUFF_IRQSTATUS = 0x2
0x480BC120 CBUFF0_CTRL = 0x1
0x480BC130 CBUFF0_STATUS = 0x00010001
0x480BD208 SBL_GLB_REG_0 = 0x00000018
0x480BD20C SBL_GLB_REG_1 = 0x00000098
0x480BD210 SBL_GLB_REG_2 = 0x00000118
0x480BD214 SBL_GLB_REG_3 = 0x00000198
0x480BD218 SBL_GLB_REG_4 = 0x00000018
0x480BD21C SBL_GLB_REG_5 = 0x00000098
0x480BD220 SBL_GLB_REG_6 = 0x00000118
0x480BD224 SBL_GLB_REG_7 = 0x00000198
0x480BD248 SBL_CCDC_WR_0 = 0x0
0x480BD24C SBL_CCDC_WR_1 = 0x0
0x480BD250 SBL_CCDC_WR_2 = 0x0
0x480BD254 SBL_CCDC_WR_3 = 0x0
0x480BD258 SBL_CCDC_WR_0 = 0x0
0x480BD248 SBL_CCDC_WR_0 = 0x0
0x480BC608 CCDC_SYN_MODE = 0x00070400