/** * Verifie et attend si l'afficheur a fini d'effectuer ses op�rations interne. */ void busyFlag(void) { TRIS_D7_LCD = 1; TRIS_D6_LCD = 1; TRIS_D5_LCD = 1; TRIS_D4_LCD = 1; // do { E_LCD = 0; RS_LCD = 0; RW_LCD = 1; delay100us(5); E_LCD = 1; delay100us(5); E_LCD = 0; // Provoque des blocages en mode normal => supprim� par SV // } //while (D7_LCD); E_LCD = 0; /////////////adresse � enregistrer////////////// TRIS_D7_LCD = 0; TRIS_D6_LCD = 0; TRIS_D5_LCD = 0; TRIS_D4_LCD = 0; }
static void rk30_hdmi_set_pwr_mode(int mode) { if(hdmi->pwr_mode == mode) return; hdmi_dbg(hdmi->dev, "[%s] mode %d\n", __FUNCTION__, mode); switch(mode) { case PWR_SAVE_MODE_A: HDMIWrReg(SYS_CTRL, 0x10); break; case PWR_SAVE_MODE_B: HDMIWrReg(SYS_CTRL, 0x20); break; case PWR_SAVE_MODE_D: // reset PLL A&B HDMIWrReg(SYS_CTRL, 0x4C); delay100us(); // release PLL A reset HDMIWrReg(SYS_CTRL, 0x48); delay100us(); // release PLL B reset HDMIWrReg(SYS_CTRL, 0x40); break; case PWR_SAVE_MODE_E: HDMIWrReg(SYS_CTRL, 0x80); break; } hdmi->pwr_mode = mode; if(mode != PWR_SAVE_MODE_A) msleep(10); hdmi_dbg(hdmi->dev, "[%s] curmode %02x\n", __FUNCTION__, HDMIRdReg(SYS_CTRL)); }
/** * Implementation of the write Function of the 24C512 chip. * @see eeprom.h * @private */ void _writeEeprom24C512Char(Eeprom* eeprom_, unsigned long index, unsigned char value) { /* OutputStream* outputStream = getDebugOutputStreamLogger(); appendStringAndDec(outputStream, "write Eeprom index=", index); appendStringAndDec(outputStream, ", value=", value); appendCRLF(outputStream); */ I2cBusConnection* i2cBusConnection = _24c512GetI2cBusConnection(eeprom_); I2cBus* i2cBus = i2cBusConnection->i2cBus; portableMasterWaitSendI2C(i2cBusConnection); portableMasterStartI2C(i2cBusConnection); WaitI2C(i2cBus); unsigned int blockAddress = get24C512BlockAddress(index); portableMasterWriteI2C(i2cBusConnection, blockAddress); WaitI2C(i2cBus); unsigned int msbaddress = index >> 8; unsigned int lsbaddress = index & 0xFFFF; portableMasterWriteI2C(i2cBusConnection, msbaddress); WaitI2C(i2cBus); portableMasterWriteI2C(i2cBusConnection, lsbaddress); WaitI2C(i2cBus); portableMasterWriteI2C(i2cBusConnection, value); WaitI2C(i2cBus); portableMasterStopI2C(i2cBusConnection); WaitI2C(i2cBus); delay100us(20); // delay <=3 don't write correctly if we write several times }
static inline void rk30_hdmi_config_phy_reg(int reg, int value) { HDMIWrReg(reg, value); HDMIWrReg(SYS_CTRL, 0x2C); delay100us(); HDMIWrReg(SYS_CTRL, 0x20); msleep(1); }
/*-------------- 18b20初始化 返回1则初始化成功 返回0则初始化失败 ----------------*/ bit initDS18B20(void) { bit returnData; DS18B20 = 1; //DQ复位 delay10us(); //稍做延时 DS18B20 = 0; //单片机将DQ拉低 delay100us(6); //精确延时 大于 480us 小于960us DS18B20 = 1; //拉高总线 delay100us(1); //15~60us 后 接收60-240us的存在脉冲 returnData=~DS18B20; //如果x=1则初始化成功, x=0则初始化失败 delay10us(); //稍作延时返回 delay10us(); delay10us(); return returnData; }
// 读取DHT11传送的5个字节,但只返回湿度值 unsigned char getAllBytes(void) { unsigned char temp, loopCount; unsigned char tempHHigh, tempHLow, tempTHigh, tempTLow, tempCheckSum; unsigned char returnData; //如果读取湿度不成功,则返回0xff,否则返回相对湿度值 returnData = 0xff; //主机拉低20ms (要求大于18ms) DHT11=0; delay100us(200); DHT11=1; //总线由上拉电阻拉高 主机延时20us delay10us(); delay10us(); delay10us(); delay10us(); //主机设为输入 判断从机响应信号 DHT11=1; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!DHT11) { loopCount = 200; //判断从机是否发出 80us 的低电平响应信号是否结束,或是否超时 while( !DHT11 && loopCount-- ); loopCount = 200; //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态,或是否超时 while( DHT11 && loopCount-- ); //数据接收状态 tempHHigh = getOneByte(); tempHLow = getOneByte(); tempTHigh = getOneByte(); tempTLow = getOneByte(); tempCheckSum = getOneByte(); DHT11=1; //数据校验 temp = tempHHigh + tempHLow + tempTHigh + tempTLow; if( temp == tempCheckSum && temp>0 ) { // 数据有效 返回湿度 returnData = tempHHigh; } }// end if return returnData; }
/** * 30F Implementation of ANX conversion. */ int getANX (char channel) { ADCON1bits.ADON = 0; //Stop ADC // ADCON1 Register ADCON1bits.SSRC = 0; //manual convert option ADCON1bits.ASAM = 0; //manual sample ADCON1bits.FORM = 0b00; //integer // ADCON2 Register ADCON2bits.VCFG = 0; //ADD - AGND // ADCON3 Register ADCON3bits.SAMC = 1; // ???? ADCON3bits.ADCS = 0b101010; // ???? // ADCHS Register // Set up A/D Channel Select Register to convert ANX on Mux A input // of CH0 and CH1 S/H amplifiers ADCHS = channel; // ADCSSL Register // Channel Scanning is disabled. All bits left to their default state ADCSSL = 0x0000; // ADPCFG Register // Set up channels ANX as analog input and configure rest as digital // Recall that we configured all A/D pins as digital when code execution // entered main() out of reset unsigned int configport = 1 << channel; configport = configport ^ 0b1111111111111111; //inverse configport ADPCFG = configport; // DAC ON ADCON1bits.ADON = 1; // start acquisition ADCON1bits.SAMP = 1; // Delay of 0.1 ms delay100us(1); // stop acquisition ADCON1bits.SAMP = 0; // wait end of conversion while(!ADCON1bits.DONE){ } unsigned int result; result = ADCBUF0; // stop ADC ADCON1bits.ADON = 0; return result; }
void hd44780_sendComLcd(char comLcd) { // Transfer du MSB pr�paration des signaux de commande delay100us(5); E_LCD = 0; delay100us(5); RS_LCD = 0; delay100us(5); RW_LCD = 0; delay100us(5); // transfer des 4 bits de poid fort D7_LCD = (comLcd & 0b10000000) >> 7; D6_LCD = (comLcd & 0b01000000) >> 6; D5_LCD = (comLcd & 0b00100000) >> 5; D4_LCD = (comLcd & 0b00010000) >> 4; //validation des 4 bits delay100us(5); E_LCD = 1; delay100us(5); E_LCD = 0; delay100us(5); // Transfer du LSB pr�paration des signaux de commande // transfer des 4 bits de poid faible D7_LCD = (comLcd & 0b00001000) >> 3; D6_LCD = (comLcd & 0b00000100) >> 2; D5_LCD = (comLcd & 0b00000010) >> 1; D4_LCD = (comLcd & 0b00000001); //validation des 4 bits delay100us(5); E_LCD = 1; delay100us(5); E_LCD = 0; }
void hd44780_sendIniComLcd(char D7, char D6, char D5, char D4) { delay100us(5); E_LCD = 0; delay100us(5); RS_LCD = 0; delay100us(5); RW_LCD = 0; delay100us(5); D7_LCD = D7; D6_LCD = D6; D5_LCD = D5; D4_LCD = D4; delay100us(5); E_LCD = 1; delay100us(5); E_LCD = 0; delay100us(5); }
void rk2928_hdmi_control_output(int enable) { char mutestatus = 0; if(enable) { mutestatus = HDMIRdReg(AV_MUTE); if(mutestatus && (m_AUDIO_MUTE | m_VIDEO_BLACK)) { HDMIWrReg(AV_MUTE, v_AUDIO_MUTE(0) | v_VIDEO_MUTE(0)); rk2928_hdmi_sys_power_up(); rk2928_hdmi_sys_power_down(); rk2928_hdmi_sys_power_up(); if(analog_sync){ HDMIWrReg(0xce, 0x00); delay100us(); HDMIWrReg(0xce, 0x01); analog_sync = 0; } } } else { HDMIWrReg(AV_MUTE, v_AUDIO_MUTE(1) | v_VIDEO_MUTE(1)); } }
int receiverZigbeeTest(void) { /* char *macAdresse = "1"; char *panId = "1620"; char *channel = "100000"; char *function = "0"; char *adresse = "0"; char *data; char receiveChar; char valide; int toto; */ TRISB = 0; TRISB = 0; // Configure serialBuffer Buffer zigbeeBuffer; initBuffer(&zigbeeBuffer, SERIAL_PORT_ZIGBEE); setAndOpenSerialBuffer(&zigbeeBuffer); Buffer debugBuffer; initBuffer(&debugBuffer, SERIAL_PORT_DEBUG); setAndOpenSerialBuffer(&debugBuffer); setSerialBuffer(&debugBuffer); putString("Beacon Receiver start rs232\n"); initPwmForServo(1500); // Initialization of laserDetector // Laser 1 initLaserDetectorStruct( LASER_INDEX_1, LASER_SERVO_INDEX_1, &getLaserPin1, SERVO_LASER_1_MAX_LEFT_POSITION_DEFAULT_VALUE, SERVO_LASER_1_MAX_RIGHT_POSITION_DEFAULT_VALUE, SHORT_TRACKING_INTERVAL, BEACON_SERVO_1_FACTOR, BEACON_SERVO_1_INIT_COMPUTE_VALUE, BEACON_SERVO_1_ANGLE_DEGREE ); // Laser 2 initLaserDetectorStruct( LASER_INDEX_2, LASER_SERVO_INDEX_2, &getLaserPin2, SERVO_LASER_2_MAX_LEFT_POSITION_DEFAULT_VALUE, SERVO_LASER_2_MAX_RIGHT_POSITION_DEFAULT_VALUE, SHORT_TRACKING_INTERVAL, BEACON_SERVO_2_FACTOR, BEACON_SERVO_2_INIT_COMPUTE_VALUE, BEACON_SERVO_2_ANGLE_DEGREE ); while (1) { int laserIndex; for (laserIndex = 0; laserIndex < LASER_COUNT; laserIndex++) { detectsLaser(laserIndex); } delay100us(5); char c = handleChar(&debugBuffer, false); if (c != 0) { putString("---------\n"); Laser* laser1 = getLaser(LASER_INDEX_1); Laser* laser2 = getLaser(LASER_INDEX_2); printLaserStruct(&debugBuffer, laser1); println(); printLaserStruct(&debugBuffer, laser2); clearBuffer(&debugBuffer); Point p = getPosition(DISTANCE_BETWEEN_BEACON); if (p.x != 0 && p.y != 0) { sendDec(p.x); putString(", "); sendDec(p.y); println(); } } } /* valide = 0; while (1) { if (U2STAbits.URXDA == 1){ valide = getc(); putc1 (valide); } if (U1STAbits.URXDA == 1){ valide = getc1(); putc (valide); } } */ }