static void Bus_Init(int bus) { if(bus == V5_BUS_MULTI16) BusInit(BUS_IDX_4, BUS16); else BusInit(BUS_IDX_4, BUS8); }
/*----------------------------------------------------------------------------- * main */ int main(void) { uint8_t ret; int sioHdl; /* set clock prescaler to 2 (set clock to 7.3928 MHz) */ CLKPR = 1 << CLKPCE; CLKPR = 1; /* get module address from EEPROM */ sMyAddr = eeprom_read_byte((const uint8_t *)MODUL_ADDRESS); GetClientListFromEeprom(); PortInit(); TimerInit(); ButtonInit(); PwmInit(); ApplicationInit(); SioInit(); SioRandSeed(sMyAddr); /* sio for bus interface */ sioHdl = SioOpen("USART1", eSioBaud9600, eSioDataBits8, eSioParityNo, eSioStopBits1, eSioModeHalfDuplex); SioSetIdleFunc(sioHdl, IdleSio1); SioSetTransceiverPowerDownFunc(sioHdl, BusTransceiverPowerDown); BusTransceiverPowerDown(true); BusInit(sioHdl); spBusMsg = BusMsgBufGet(); /* warten for full operation voltage */ while (!POWER_GOOD); /* enable ints before RestorePwm() */ ENABLE_INT; TimerStart(); RestorePwm(); /* ext int for power fail: INT0 low level sensitive */ EICRA &= ~((1 << ISC01) | (1 << ISC00)); EIMSK |= (1 << INT0); ApplicationStart(); /* Hauptschleife */ while (1) { Idle(); ret = BusCheck(); ProcessBus(ret); CheckButton(); PwmCheck(); ApplicationCheck(); CheckEvent(); } return 0; }
int DeviceInit() { ClassInit(); BusInit(); InputInit(); return StorageInit(); }
/*----------------------------------------------------------------------------- * program start */ int main(void) { int sioHandle; uint8_t windThreshold1; uint8_t windThreshold2; MCUSR = 0; wdt_disable(); /* get module address from EEPROM */ sMyAddr = eeprom_read_byte((const uint8_t *)MODUL_ADDRESS); windThreshold1 = eeprom_read_byte((const uint8_t *)WIND_THRESHOLD1); windThreshold2 = eeprom_read_byte((const uint8_t *)WIND_THRESHOLD2); GetClientListFromEeprom(); PortInit(); TimerInit(); SioInit(); sioHandle = SioOpen("USART0", eSioBaud9600, eSioDataBits8, eSioParityNo, eSioStopBits1, eSioModeHalfDuplex); SioSetIdleFunc(sioHandle, IdleSio); SioSetTransceiverPowerDownFunc(sioHandle, BusTransceiverPowerDown); BusTransceiverPowerDown(true); BusInit(sioHandle); spRxBusMsg = BusMsgBufGet(); /* enable global interrupts */ ENABLE_INT; SendStartupMsg(); /* wait for controller startup delay for sending first state telegram */ DELAY_S(STARTUP_DELAY); while (1) { Idle(); ProcessSwitch(); ProcessBus(); if (sWind >= windThreshold1) { sWindSwitch |= 0x01; } else { sWindSwitch &= ~0x01; } if (sWind >= windThreshold2) { sWindSwitch |= 0x02; } else { sWindSwitch &= ~0x02; } } return 0; /* never reached */ }
/*----------------------------------------------------------------------------- * init bus communication */ static void InitComm(void) { SioInit(); SioRandSeed(sMyAddr); sSioHandle = SioOpen("USART0", eSioBaud9600, eSioDataBits8, eSioParityNo, eSioStopBits1, eSioModeHalfDuplex); SioSetIdleFunc(sSioHandle, IdleSio); SioSetTransceiverPowerDownFunc(sSioHandle, BusTransceiverPowerDown); BusTransceiverPowerDown(true); BusInit(sSioHandle); spRxBusMsg = BusMsgBufGet(); }
/*----------------------------------------------------------------------------- * sio open and bus init */ static int InitBus(const char *comPort) { uint8_t ch; int handle; SioInit(); handle = SioOpen(comPort, eSioBaud9600, eSioDataBits8, eSioParityNo, eSioStopBits1, eSioModeHalfDuplex); if (handle == -1) { return -1; } while (SioGetNumRxChar(handle) > 0) { SioRead(handle, &ch, sizeof(ch)); } BusInit(handle); return handle; }
void V9_InitEnv(void) { /************ Set port E, PE0 as Clock out ***********/ WriteMemory(REG_PCONE, 0x1556a); WriteMemory(REG_PDATE, 0x1ff); WriteMemory(REG_PUPE, 0x6); /************ Set port G, GP3 as EINT3 ***********/ WriteMemory(REG_PCONG, 0x54c0); WriteMemory(REG_PDATG, 0xff); WriteMemory(REG_PUPG, 0x0); //BusInit(BUS_IDX_4, BUS8); //V938 use bus4 BusInit(BUS_IDX_3, BUS8); //V938 use bus3 ResetV9Chip(); Lm4867ShutDown(0); SetPortCall(3, _ISR_V9IntHandle); ExtInt_Init(EXINT3); //v938 use exint3 /******************* start 938 clock *****************/ V9_CtrlSetPll(V938_DEFAULTMCLK); V9_CtrlStartClk(CTRL_PLL_WORK_MODE); }
/*----------------------------------------------------------------------------- * program start */ int main(void) { int sioHandle; uint8_t i; uint8_t u8; MCUSR = 0; wdt_disable(); /* get module address from EEPROM */ sMyAddr = eeprom_read_byte((const uint8_t *)MODUL_ADDRESS); for (i = 0; i < NUM_BUTTON_EVENT_ADDRESSES; i++) { sMySwitchAddr[i] = eeprom_read_byte((const uint8_t *)(BUTTON_EVENT_ADRESS_BASE + i)); } PortInit(); TimerInit(); SioInit(); SioRandSeed(MY_ADDR); sioHandle = SioOpen("USART0", eSioBaud9600, eSioDataBits8, eSioParityNo, eSioStopBits1, eSioModeHalfDuplex); SioSetIdleFunc(sioHandle, IdleSio); SioSetTransceiverPowerDownFunc(sioHandle, BusTransceiverPowerDown); BusTransceiverPowerDown(true); BusInit(sioHandle); spRxBusMsg = BusMsgBufGet(); /* enable global interrupts */ ENABLE_INT; i2c_slave(SLAVE_ADRESSE); button_register = 0; init_BJ(SLAVE_ADRESSE); for (i = 0; i < NR_OF_LEDS; i++) { u8 = eeprom_read_byte((const uint8_t *)(COLOR_LED_BASE + i)); set_LED(i, u8); sNewLedData[i / 2] |= (u8 & 0x0f) << ((i % 2) ? 4 : 0); } i2c_slave(SLAVE_ADRESSE); SendStartupMsg(); while (1) { Idle(); if (send_startup == 1) { init_BJ(SLAVE_ADRESSE); for (i = 0; i < NR_OF_LEDS; i++) { set_LED(i, eeprom_read_byte((const uint8_t *)(COLOR_LED_BASE + i))); } } sInputState = button_register; ProcessButton(sInputState); ProcessBus(); for (i = 0; i < BUS_SW16_LED_SIZE_SET_VALUE; i++) { if ((sNewLedData[i] & 0x0f) != (sLedData[i] & 0x0f) ) { // linke LED set_LED(i * 2, sNewLedData[i] & 0x0f); i2c_slave(SLAVE_ADRESSE); } if ((sNewLedData[i] & 0xf0) != (sLedData[i] & 0xf0) ) { // rechte LED set_LED(i * 2 + 1, (sNewLedData[i] & 0xf0) >> 4); i2c_slave(SLAVE_ADRESSE); } sLedData[i] = sNewLedData[i]; } }
//-------------------------------------------------------------------- // Main Init function //-------------------------------------------------------------------- void init(void) { uint16_t dummy = 0; int16_t ret; LED_ERROR_ON; //enable AD converter adc_init(); ResetImu(); //enable communication to PC over USB HostInit(); //enable communication to the bus BusInit(); //enable communications with gps GpsInit(); InitLeds(); XbeeInit(); //timer for sending out estop status timer3_init(); //timer3_set_overflow_callback(SendEstopStatus); timer3_set_overflow_callback(globalTimerOverflow); timer4_init(); timer4_set_compa_callback(Rs485ResponseTimeout); timer4_disable_compa_callback(); timer1_init(); timer1_set_compa_callback(EncodersRequestFcn); //generate the request packets: encoderRequestRawPacketSize = DynamixelPacketWrapData(MMC_MOTOR_CONTROLLER_DEVICE_ID, MMC_MOTOR_CONTROLLER_ENCODERS_REQUEST, &dummy,sizeof(dummy), encoderRequestRawPacket, encoderRequestRawPacketMaxSize); Servo1Init(GlobalTimerGetTime()); //buzzer port BUZZER_DDR |= _BV(BUZZER_PIN); //enable global interrupts sei(); DDRL |= _BV(PL3) | _BV(PL5) | _BV(PL4); PORTL |= _BV(PL3) | _BV(PL5) | _BV(PL4); //PORTL |= _BV(PL3); /* TCCR5A |= _BV(WGM51) | _BV(WGM50); TCCR5B |= _BV(WGM52) | _BV(WGM53); OCR5A = 2000; TCCR5A |= _BV(COM5A0); TCCR5A |= _BV(COM5B0); TCCR5A |= _BV(COM5C0); */ LED_ERROR_OFF; }
/*----------------------------------------------------------------------------- * program start */ int main(void) { int sioHandle; uint8_t inputState; MCUSR = 0; wdt_disable(); /* get module address from EEPROM */ sMyAddr = eeprom_read_byte((const uint8_t *)MODUL_ADDRESS); sInputType = eeprom_read_byte((const uint8_t *)INPUT_TYPE); if (sInputType > INPUT_TYPE_MOTION_DETECTOR) { sInputType = INPUT_TYPE_DUAL_BUTTON; } PortInit(); TimerInit(); SioInit(); SioRandSeed(sMyAddr); sioHandle = SioOpen("USART0", eSioBaud9600, eSioDataBits8, eSioParityNo, eSioStopBits1, eSioModeHalfDuplex); SioSetIdleFunc(sioHandle, IdleSio); SioSetTransceiverPowerDownFunc(sioHandle, BusTransceiverPowerDown); BusTransceiverPowerDown(true); BusInit(sioHandle); spRxBusMsg = BusMsgBufGet(); /* enable global interrupts */ ENABLE_INT; SendStartupMsg(); if ((sInputType == INPUT_TYPE_DUAL_SWITCH) || (sInputType == INPUT_TYPE_MOTION_DETECTOR)) { /* wait for controller startup delay for sending first state telegram */ DELAY_S(STARTUP_DELAY); } if ((sInputType == INPUT_TYPE_DUAL_SWITCH) || (sInputType == INPUT_TYPE_MOTION_DETECTOR)) { inputState = GetInputState(); sSwitchStateOld = ~inputState; ProcessSwitch(inputState); } while (1) { Idle(); inputState = GetInputState(); if ((sInputType == INPUT_TYPE_DUAL_SWITCH) || (sInputType == INPUT_TYPE_MOTION_DETECTOR)) { ProcessSwitch(inputState); } else if (sInputType == INPUT_TYPE_DUAL_BUTTON) { ProcessButton(inputState); } ProcessBus(); } return 0; /* never reached */ }
/*----------------------------------------------------------------------------- * main */ int main(int argc, char *argv[]) { int handle; int i; char comPort[SIZE_COMPORT] = ""; uint8_t len; uint8_t val8; /* get tty device */ for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-c") == 0) { if (argc > i) { strncpy(comPort, argv[i + 1], sizeof(comPort) - 1); comPort[sizeof(comPort) - 1] = 0; } break; } } if (strlen(comPort) == 0) { PrintUsage(); return 0; } SioInit(); handle = SioOpen(comPort, eSioBaud9600, eSioDataBits8, eSioParityNo, eSioStopBits1, eSioModeHalfDuplex); if (handle == -1) { printf("can't open %s\r\n", comPort); return 0; } // wait for sio input to settle and the flush usleep(100000); while ((len = SioGetNumRxChar(handle)) != 0) { SioRead(handle, &val8, sizeof(val8)); } BusInit(handle); #if 1 BusVarInit(67, BusVarNv); { uint8_t var1 = 1; uint16_t var2 = 0x1234; bool rc; uint8_t len; TBusVarHdl hdl1; TBusVarHdl hdl2; TBusTelegram *msg; TBusVarResult result; TBusVarState state; BusVarAdd(0, sizeof(var1), true); BusVarAdd(1, sizeof(var2), false); rc = BusVarWrite(1, &var2, sizeof(var2), &result); rc = BusVarWrite(0, &var1, sizeof(var1), &result); var1 = 0; var2 = 0; len = BusVarRead(1, &var2, sizeof(var2), &result); printf("len %d var2 %x\n", len, var2); len = BusVarRead(0, &var1, sizeof(var1), &result); printf("len %d var1 %x\n", len, var1); hdl2 = BusVarTransactionOpen(242, 1, &var2, sizeof(var2), eBusVarRead); hdl1 = BusVarTransactionOpen(242, 0, &var1, sizeof(var1), eBusVarRead); for (i = 0; i < 1000; i++) { BusVarProcess(); usleep(10000); if (BusCheck() == BUS_MSG_OK) { msg = BusMsgBufGet(); if ((msg->type == eBusDevRespGetVar) && (msg->msg.devBus.receiverAddr == 67)) { BusVarRespGet(msg->senderAddr, &msg->msg.devBus.x.devResp.getVar); } } if (hdl1 != BUSVAR_HDL_INVALID) { state = BusVarTransactionState(hdl1); if (state & BUSVAR_STATE_FINAL) { if (state == eBusVarState_Ready) { printf("var1 %02x\n", var1); } BusVarTransactionClose(hdl1); hdl1 = BUSVAR_HDL_INVALID; } } if (hdl2 != BUSVAR_HDL_INVALID) { state = BusVarTransactionState(hdl2); if (state & BUSVAR_STATE_FINAL) { if (state == eBusVarState_Ready) { printf("var2 %04x\n", var2); } BusVarTransactionClose(hdl2); hdl2 = BUSVAR_HDL_INVALID; } } } } return 0; #endif if (Test() == 0) { printf("OK\n"); } else { printf("ERROR\n"); } if (handle != -1) { SioClose(handle); } return 0; }