static void setfld(naContext c, unsigned char* s, int slen, int bit, int flen, unsigned int fld) { int i; if(bit + flen > 8*slen) naRuntimeError(c, "bitfield out of bounds"); for(i=0; i<flen; i++) if(fld & (1<<i)) SETB(s, slen, i+bit); else CLRB(s, slen, i+bit); }
void G_sensor_init(void) { SETB(GSEN_DETECT_PORT_DIR, GSEN_DETECT_PORT_BIT); SETB(GSEN_DETECT_PORT_IE, GSEN_DETECT_PORT_BIT); CLRB(GSEN_DETECT_PORT_PU, GSEN_DETECT_PORT_BIT); CLRB(GSEN_DETECT_PORT_PD, GSEN_DETECT_PORT_BIT); if(bSFBusy_Flag == 0) { i2c_Init(G_SEN_BAUD, G_SEN_WRITE_ADDR,G_SEN_READ_ADDR); Gsensor_ID = u8sensor_Read_Gsen_ID(); if(Gsensor_ID != G_SEN_ID) { sensor_I2C_port_release(); return; } Gsen_Write_Reg(0x44,0x28); //setting normal not int Gsen_Write_Reg(0x45,(G_SEN_XG_CONF | 0x20)); sen_hold_last_xdata = Gsen_Read_Reg(0x41); sen_hold_last_ydata = Gsen_Read_Reg(0x42); sen_hold_last_zdata = Gsen_Read_Reg(0x43); sensor_I2C_port_release(); } }
/******************************************************************************* * Function Name : sensor_Init * Description : initialize the sensor * Input : None * Output : None * Return : None *******************************************************************************/ u8 sensor_Init(void) { u32 i; u8 j; u8 u8Buf[2]; u8 SensorId; #if(SYS_CLK == 120000000) sensor_ClockInit(24000000); #elif(SYS_CLK == 48000000) sensor_ClockInit(12000000); #endif u8SensorwriteID = OV7725_I2C_WRITE_ADDR; u8SensorreadID = OV7725_I2C_READ_ADDR; u8Addrbytnum = 1; u8Databytnum = 1; //=======close sensor power ======== #if (I2C_MAP == I2C_MAP_SW2) //select software simulate I2C signal bI2CBusy_Flag=1; //set dc check unuse bSFBusy_Flag=1; //set tf card check unuse REG32(PMAP_CFG0) &= ~(1<<14); //SPI0_MAP0 not mapping to io REG32(PMAP_CFG0) &= ~(1<<7); // uart not map to io I2C_SCL_SDA_OUT(); I2C_SCL_LOW(); I2C_SDA_LOW(); #endif REG32(SYS_CON) = 0x932B; //SPEC request value REG32(LDO_ACON) &= ~(0xf << 4); //close senosr ldo power #if (USER_CONFIG==CONFIG_AX3251_K6000) Delay_MS(250); //rc reset need delay, IO reset not do it #endif #if (I2C_MAP == I2C_MAP_SW2) //select software simulate I2C signal bI2CBusy_Flag=0; bSFBusy_Flag=0; #endif //======end close sensor power======= //====sensor ldo open====== REG32(LDO_ACON) |= (4<<4); //sensor 3bit 111:3.3v,110:3.2v .... 000:2.6v REG32(LDO_ACON) |= (1<<7); //sensor ldo enable Delay_MS(50); //===end sensor ldo open==== i2c_Init(OV7725_I2C_BAUD, OV7725_I2C_WRITE_ADDR,OV7725_I2C_READ_ADDR); CLRB(REG32(PCON0), 23); //csi Clock Enable Bit //SENSOR_PIN_CONF(); //SENSOR_POWERDN(); SENSOR_NRESET(); Delay_MS(10); SENSOR_RESET(); Delay_MS(10); SENSOR_NRESET(); //SENSOR_NORMAL(); Delay_MS(10); i2c_SendStop(); SensorId = u8sensor_ReadID(); for(i=0; i<sizeof(OV7725InitTable)/2; i++) { for(j=0; j<(u8Addrbytnum+u8Databytnum); j++) { u8Buf[j] = OV7725InitTable[i][j]; } Sensor_WriteRegister(u8Buf,u8Addrbytnum,u8Databytnum); Delay_MS(1); } sensor_I2C_port_release(); deg_Printf("SensorId=%x\n",SensorId); return 0; }