//***************************************************************************** // // The main loop for the user interface. // //***************************************************************************** int main(void) { unsigned long ulPanel; // // 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); } // // Set the clocking to run at 50MHz from the PLL. // SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); // // Set the priority of the interrupts. // IntPrioritySet(INT_CAN0, 0x00); IntPrioritySet(FAULT_SYSTICK, 0x20); // // Configure SysTick to generate an interrupt every millisecond. // SysTickPeriodSet(SysCtlClockGet() / 1000); SysTickIntEnable(); SysTickEnable(); // // Initialize the push button driver. // ButtonsInit(); // // Initialize the CAN communication channel. // CANCommInit(); // // Initialize the UART used to perform a "firmware update". // UpdateUARTInit(); // // Initialize the display. // RIT128x96x4Init(3500000); // // Add the screen-clearing widget to the widget tree. As the first widget // in the tree, this will always be drawn first, resulting in a blank // screen before anything else is drawn. // WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBackground); // // Display the splash screen. // DisplaySplash(); // // Set the CAN device ID to one. // CANSetID(1); // // The "Voltage Control Mode" panel should be displayed first. // ulPanel = PANEL_VOLTAGE; // // Loop forever. // while(1) { // // Determine which panel to display. // switch(ulPanel) { // // The "Voltage Control Mode" panel should be displayed. // case PANEL_VOLTAGE: { ulPanel = DisplayVoltage(); break; } // // The "VComp Control Mode" panel should be displayed. // case PANEL_VCOMP: { ulPanel = DisplayVComp(); break; } // // The "Current Control Mode" panel should be displayed. // case PANEL_CURRENT: { ulPanel = DisplayCurrent(); break; } // // The "Speed Control Mode" panel should be displayed. // case PANEL_SPEED: { ulPanel = DisplaySpeed(); break; } // // The "Position Control Mode" panel should be displayed. // case PANEL_POSITION: { ulPanel = DisplayPosition(); break; } // // The "Configuration" panel should be displayed. // case PANEL_CONFIGURATION: { ulPanel = DisplayConfig(); break; } // // The "Device List" panel should be displayed. // case PANEL_DEV_LIST: { ulPanel = DisplayDevList(); break; } // // The "Firmware Update" panel should be displayed. // case PANEL_UPDATE: { ulPanel = DisplayUpdate(); break; } // // The "Help" panel should be displayed. // case PANEL_HELP: { ulPanel = DisplayHelp(); break; } // // The "About" panel should be displayed. // case PANEL_ABOUT: { ulPanel = DisplayAbout(); break; } } } }
/* ********************************************************************************************************* * ApplicationInitialize * * Description : This function is called by SYS_Initialize() function and run after power up. Global * interrupts are not enabled here (i.e. CP0 Status register). Interrupts will be enabled * by RTOS when the highest priority task is run for the first time. * Arguments : ********************************************************************************************************* */ void ApplicationInitialize ( void ) { portBASE_TYPE errStatus; /*initialize app_data object to initial values for this application*/ appData.deviceHandle = USB_DEVICE_HANDLE_INVALID; appData.isConfigured = false; /* Initialize the keycode array */ appData.key = USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A; appData.keyCodeArray.keyCode[0] = USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED; appData.keyCodeArray.keyCode[1] = USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED; appData.keyCodeArray.keyCode[2] = USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED; appData.keyCodeArray.keyCode[3] = USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED; appData.keyCodeArray.keyCode[4] = USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED; appData.keyCodeArray.keyCode[5] = USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED; /* Initialize the modifier keys */ appData.keyboardModifierKeys.modifierkeys = 0; /* Initialise the led state */ appData.keyboardOutputReport.data = 0; /* Intialize the switch state */ appData.isSwitchPressed = false; appData.ignoreSwitchPress = false; /* Initialize the HID instance index. */ appData.hidInstance = 0; /* Initialize tracking variables */ appData.isReportReceived = false; appData.isReportSentComplete = true; /* Initialize the application state*/ appData.state = APP_STATE_INIT; /*write proper hardware pins to setup gfx*/ DisplayResetEnable(); DisplayResetConfig(); DisplayCmdDataConfig(); DisplayConfig(); DisplayBacklightOff(); DisplayBacklightConfig(); /*create applicaiton specific tasks*/ errStatus = xTaskCreate((pdTASK_CODE) ApplicationLEDblinkTask, (const signed char*)"LED Blink Task", APPLICATION_LEDBLINKTASK_STKSIZE, NULL, APPLICATION_LEDBLINKTASK_PRIO, NULL); errStatus = xTaskCreate((pdTASK_CODE) ApplicationUSBDeviceTask, (const signed char*)"USB Device Task", APPLICATION_USBDEVICETASK_STKSIZE, NULL, APPLICATION_USBDEVICETASK_PRIO, NULL); errStatus = xTaskCreate((pdTASK_CODE) ApplicationDisplayTask, (const signed char*)"Display Task", APPLICATION_DISPLAYTASK_STKSIZE, NULL, APPLICATION_DISPLAYTASK_PRIO, NULL); /*setup up interrupt controller to use multi-vectored mode, this is not the internal CP0 register, this sets the SFR register*/ PLIB_INT_MultiVectorSelect(INT_ID_0); /* Set priority for USB interrupt source */ PLIB_INT_VectorPrioritySet(INT_ID_0,INT_VECTOR_USB,INT_PRIORITY_LEVEL4); }