/** * Main code for the Relay Machine */ void RelayLoop() { bool usb = relayUSBConneted(); if(relayData.state > RELAY_STATE_MAX) { RelayInit(); return; } switch (relayData.state) { case RELAY_STATE_INIT: if(usb) { relayResetInjector(); relayData.state = RELAY_STATE_USB; } else { relayResetInjector(); relayData.state = RELAY_STATE_BLUETOOTH; } break; case RELAY_STATE_USB: relayFromUSB(); relayFromRadio(); if(!usb) { relayResetInjector(); relayData.state = RELAY_STATE_BLUETOOTH; } break; case RELAY_STATE_BLUETOOTH: relayFromRadio(); relayFromBluetooth(); if(usb) { relayResetInjector(); relayData.state = RELAY_STATE_USB; } break; case RELAY_STATE_MAX: default: //Error, unknown state RelayInit(); break; } }
// ***************************************************************************** // InitialiseHW // Setup the processor // ***************************************************************************** void InitialiseHW ( void ) { // If running on Rev A2 silicon, turn the LDO voltage up to 2.75V. This is // a workaround to allow the PLL to operate reliably. // if(REVISION_IS_A2) { SysCtlLDOSet(SYSCTL_LDO_2_75V); } // 50 MHz SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); // Enable Peripherals SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH); SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); // Set interrupt priority levels IntPrioritySet(INT_ETH, 0x20); IntPrioritySet(FAULT_SYSTICK, 0x40); // // Enable the peripherals that should continue to run when the processor // is sleeping. // SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOF); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOG); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOH); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART0); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART1); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_ETH); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER0); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER1); SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER2); // // Enable peripheral clock gating. Note that this is required in order to // measure the the processor usage. // SysCtlPeripheralClockGating(true); // Grab the Config from Flash SysConfigInit(); AdcInit(); pwmInit(); RelayInit(); //usrand(0x23482937); // Note (From the DriverLib) : // It takes five clock cycles after the write to enable a peripheral // before the the peripheral is actually enabled. During this time, attempts // to access the peripheral result in a bus fault. Care should be taken // to ensure that the peripheral is not accessed during this brief time // period. #ifdef SERIAL_ENABLED Serial_Init(); #endif #ifdef UPNP_ENABLED UPnPInit(); #endif Ethernet_Init(); #ifdef LOGIC_ENABLED LogicStartStop(true); #endif #ifdef SOLDERBRIDGES_ENABLED SB_Init(); ExtGpio_Init(); SolderBridge_StartScan(); ExtGpio_Scan(); #endif #ifdef SPLASHPIXEL_ENABLED SP_Init(); #endif // Set up the GPIO as specified by the user UserGpioInit(); // Most, if not all M3's have a SysTick which you can use for scheduling your code SysTickPeriodSet(SysCtlClockGet() / SYSTICKHZ); SysTickEnable(); SysTickIntEnable(); }