int main() { CyGlobalIntEnable; /* Enable global interrupts. */ UART0_Start(); //uartRxInterrupt_StartEx(uartRxIsr); UART0_SetCustomInterruptHandler(uartRxIsr); Clock_1_Start(); LeftDrive_Start(); RightDrive_Start(); CameraGimbal_Start(); // TickTimer_Start(); - not using this yet. // TODO: I may need to increase the size of the uart rx buffer. while (1) { // any events pending? if (events) { // uart rx handler if (events & EVENT_UART0) { uart0_eventHandler(); } // else if (events & EVENT1) { // event1Handler(); // } } } }
/********************************************************************** name : function : **********************************************************************/ void UARTClass::begin(const uint32_t BaudRate, uint32_t rx_pin, uint32_t tx_pin) { uint32_t t_pin, r_pin; t_pin = Pin_nRF51822_to_Arduino(tx_pin); r_pin = Pin_nRF51822_to_Arduino(rx_pin); UART0_Start( BaudRate, r_pin, t_pin ); }
PUBLIC_FCT void UART0_Init (T_ULONG bd_value) { const T_ULONG cul_mcg_clk_hz = 24000000; //PLL/2 Source Clock for UART T_ULONG lul_baud_rate = 0; //Variable to store baud rate T_ULONG lul_br_value = 0; //Variable to store BD dividers float lf_br_float = 0; //Auxiliary variable to save the result of division float lf_residue = 0; //Variable to store the minimum residue T_UBYTE lub_temp = 4; //Auxiliary Variable T_UWORD luw_osr_value = 4; //Variable to store OSR dividers register T_UBYTE lub_i = 0; //Auxiliary Variable PORTA_PCR1 = PORT_PCR_MUX(2); //Enable the UART_TXD function on PTA1 PORTA_PCR2 = PORT_PCR_MUX(2); //Enable the UART_TXD function on PTA2 SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1); //Select the PLLFLLCLK as UART0 clock source SIM_SCGC4 |= SIM_SCGC4_UART0_MASK; //Enable Clock signal for UART0 UART0_Stop(); //Disable UART0 before changing registers lul_baud_rate = bd_value; //Store Baud rate desired /* * Calculate BR registers depends on Baud Rate = Baud Clock / (BR * (OSR + 1)) according to datasheet */ lul_br_value = cul_mcg_clk_hz / (lul_baud_rate * (luw_osr_value + 1)); lf_br_float = (float)cul_mcg_clk_hz / ((float)lul_baud_rate * ((float)luw_osr_value + 1)); lf_residue = lf_br_float - (float)lul_br_value; /* * Calculate it for all OSR possible values to find the minimum error */ for(lub_i = 5; lub_i <= 32; lub_i++) { lul_br_value = cul_mcg_clk_hz / (lul_baud_rate * (lub_i + 1)); lf_br_float = (float)cul_mcg_clk_hz / ((float)lul_baud_rate * ((float)lub_i + 1)); lf_br_float -= (float)lul_br_value; if(lf_br_float <= lf_residue) //If a new "minimum error" is found { lf_residue = lf_br_float; //Store new minimum error lub_temp = lub_i; //Store OSR value for this minimum error } } luw_osr_value = lub_temp; //Assign the found OSR value to calculate the minimum error lul_br_value = cul_mcg_clk_hz / (lul_baud_rate * (luw_osr_value + 1)); //Calculate BR value UART0_BDH |= UART0_BDH_SBR(((lul_br_value & 0x1F00) >> 8)); //Setting BD dividers UART0_BDL = (T_UBYTE)(lul_br_value & UART0_BDL_SBR_MASK); //Setting BD dividers UART0_C4 = UART0_C4_OSR(luw_osr_value); //Setting OSR for Sampling Ratio if(luw_osr_value < 8) //If Sampling Ratio is less than 8 { UART0_C5|= UART0_C5_BOTHEDGE_MASK; //Enable both edges of baud clock for receiving data } else { } UART0_C1 &=~(UART0_C1_M_MASK | UART0_C1_PE_MASK); //8 Bit for data, No parity Selected UART0_BDH &= ~(UART0_BDH_SBNS_MASK); //Configure One Stop Bit: 0 One stop bit. UART0_Start(); //Enable receiver and transmitter }
int main(void) { AppMode_T AppMode; APP_STATE_E state=UPDATE_TEMPERATURE; char LCDString[30], temp_char[2]; uint16_t temp; float ftemp; HardwareSetup(); /************************initializa LCD module********************************/ SPI2_Init(); InitialiseLCD(); led_init(); MSTimerInit(); /* Default app mode */ AppMode = GAINSPAN_DEMO; /* If the CIK is exist, auto into the Exosite mode */ NVSettingsLoad(&GNV_Setting); /* Determine if SW1 & SW3 is pressed at power up to enter programming mode */ if (Switch1IsPressed() && Switch3IsPressed()) { AppMode = PROGRAM_MODE; } else if(Switch3IsPressed() && Switch2IsPressed()) { AppMode = EXOSITE_ERASE; } else if(Switch1IsPressed()) { AppMode = RUN_EXOSITE; } else if(Switch2IsPressed()) { AppMode = RUN_PROVISIONING; } else if(Switch3IsPressed()) { AppMode = RUN_OVER_AIR_DOWNLOAD; } if(AppMode == GAINSPAN_DEMO) { LCDDisplayLogo(); LCDSelectFont(FONT_SMALL); DisplayLCD(LCD_LINE3, "RL78G14 RDK V2.0"); DisplayLCD(LCD_LINE4, " Wi-Fi & Cloud "); DisplayLCD(LCD_LINE5, " demos by: "); DisplayLCD(LCD_LINE6, "Gainspan "); DisplayLCD(LCD_LINE7, "Exosite "); DisplayLCD(LCD_LINE8, "Future Designs, Inc"); MSTimerDelay(3500); ClearLCD(); DisplayLCD(LCD_LINE1, "Demo Modes: "); DisplayLCD(LCD_LINE2, "-RST no key: "); DisplayLCD(LCD_LINE3, " GS Web Server "); DisplayLCD(LCD_LINE4, "-RST + SW1: "); DisplayLCD(LCD_LINE5, " Exosite Cloud "); DisplayLCD(LCD_LINE6, "-RST + SW2: "); DisplayLCD(LCD_LINE7, " AP Provisioning "); DisplayLCD(LCD_LINE8, "-RST + SW3: OTA "); MSTimerDelay(3000); ClearLCD(); LCDSelectFont(FONT_LARGE); if(Exosite_GetCIK(NULL)) { AppMode = RUN_EXOSITE; } } DisplayLCD(LCD_LINE1, "Starting..."); /*****************************************************************************/ SPI_Init(GAINSPAN_SPI_RATE); /* Setup LCD SPI channel for Chip Select P10, active low, active per byte */ SPI_ChannelSetup(GAINSPAN_SPI_CHANNEL, false, true); GainSpan_SPI_Start(); PM15 &= ~(1 << 2); P15 &= ~(1 << 2); if(AppMode == PROGRAM_MODE) { App_ProgramMode(); } else if (AppMode == RUN_EXOSITE) { DisplayLCD(LCD_LINE1, " CLOUD DEMO "); Temperature_Init(); Potentiometer_Init(); App_Exosite(); } else if(AppMode == RUN_PROVISIONING) { App_WebProvisioning(); } else if(AppMode == RUN_OVER_AIR_DOWNLOAD) { App_OverTheAirProgrammingPushMetheod(); } else if (AppMode == EXOSITE_ERASE) { ClearLCD(); LCDSelectFont(FONT_SMALL); DisplayLCD(LCD_LINE3, "EEPROM ERASING ... "); MSTimerDelay(2000); Exosite_Init("renesas", "rl78g14", IF_WIFI, 1); DisplayLCD(LCD_LINE3, " "); DisplayLCD(LCD_LINE4, "Please reset device"); while(1); } else{ UART0_Start(GAINSPAN_CONSOLE_BAUD); // UART2_Start(GAINSPAN_UART_BAUD); Temperature_Init(); Potentiometer_Init(); // sprintf(LCDString, "RDK Demo %s", VERSION_TEXT); // DisplayLCD(LCD_LINE1, (const uint8_t *)LCDString); /* Before doing any tests or apps, startup the module */ /* and nonvolatile stettings */ App_Startup(); // Now connect to the system //App_Connect(&G_nvsettings.webprov); // App_PassThroughSPI(); /******************Start Processing Sensor data******************/ uint32_t start = MSTimerGet(); uint8_t c; Accelerometer_Init(); while(1) { // if (GainSpan_SPI_ReceiveByte(GAINSPAN_SPI_CHANNEL, &c)) if(App_Read(&c, 1, 0)) AtLibGs_ReceiveDataProcess(c); /* Timeout? */ if (MSTimerDelta(start) >= 100) // every 100 ms, read sensor data { led_task(); switch(state) { case UPDATE_TEMPERATURE: // Temperature sensor reading temp = Temperature_Get(); #if 0 // Get the temperature and show it on the LCD temp_char[0] = (int16_t)temp / 16; temp_char[1] = (int16_t)((temp & 0x000F) * 10) / 16; #endif temp_char[1] = (temp & 0xFF00)>>8; temp_char[0] = temp & 0xFF; ftemp = *(uint16_t *)temp_char; gTemp_F = ((ftemp/5)*9)/128 + 22; // Display the contents of lcd_buffer onto the debug LCD //sprintf((char *)LCDString, "TEMP: %d.%d C", temp_char[0], temp_char[1]); sprintf((char *)LCDString, "TEMP: %.1fF", gTemp_F); DisplayLCD(LCD_LINE6, (const uint8_t *)LCDString); state = UPDATE_LIGHT; break; case UPDATE_LIGHT: // Light sensor reading gAmbientLight = LightSensor_Get(); // Display the contents of lcd_buffer onto the debug LCD sprintf((char *)LCDString, "Light: %d ", gAmbientLight); DisplayLCD(LCD_LINE7, (const uint8_t *)LCDString); state = UPDATE_ACCELEROMETER; break; case UPDATE_ACCELEROMETER: // 3-axis accelerometer reading Accelerometer_Get(); sprintf((char *)LCDString, "x%2d y%2d z%2d", gAccData[0], gAccData[1], gAccData[2]); DisplayLCD(LCD_LINE8, (const uint8_t *)LCDString); state = UPDATE_TEMPERATURE; break; } start = MSTimerGet(); } } }
int main(void) { AppMode_T AppMode; WDTIMK = 0U; /* enable INTWDTI interrupt */ HardwareSetup(); MSTimerInit(); /************************initializa LCD module********************************/ SPI2_Init(); InitialiseLCD(); led_init(); /* Default app mode */ AppMode = RUN_EXOSITE; /* Determine if SW1 & SW3 is pressed at power up to enter nvm erase mode */ if (Switch1IsPressed() && Switch3IsPressed()) { DisplayLCD(LCD_LINE1, "*NVM ERASED*"); DisplayLCD(LCD_LINE2, "Reboot "); DisplayLCD(LCD_LINE3, " Device "); while(1) { // wait here } } else if(Switch1IsPressed()) { AppMode = ACTIVATE_MODEM; } DisplayLCD(LCD_LINE1, "Initializing"); DisplayLCD(LCD_LINE2, " Novatel "); DisplayLCD(LCD_LINE3, " Modem "); // reset the modem P8 &= ~(1<<POWER_OFF_PIN); //SET LOW PM8 &= ~(1<<POWER_OFF_PIN); //SET AS OUTPUT P8 |= (1<<POWER_OFF_PIN); //SET HIGH MSTimerDelay(500); //pulse P8 &= ~(1<<POWER_OFF_PIN); //SET LOW // pulse the phone pin as well ADPC = 0x09U; //DEFAULT is all AINx pins are Analog, change 8-15 // to digital P15 &= ~(1<<MODEM_PHON_PIN); //SET LOW PM15 &= ~(1<<MODEM_PHON_PIN); //SET AS OUTPUT P15 |= (1<<MODEM_PHON_PIN); //SET HIGH MSTimerDelay(500); //pulse P15 &= ~(1<<MODEM_PHON_PIN); //SET LOW PM15 |= (1<<MODEM_PHON_PIN); //SET AS INPUT // wait for modem to power up DisplayLCD(LCD_LINE1, "Waiting for "); DisplayLCD(LCD_LINE2, " Modem to "); DisplayLCD(LCD_LINE3, " Initialize "); DisplayLCD(LCD_LINE4, " 3 "); MSTimerDelay(1000); DisplayLCD(LCD_LINE4, " 2 "); MSTimerDelay(1000); DisplayLCD(LCD_LINE4, " 1 "); MSTimerDelay(1000); DisplayLCD(LCD_LINE4, ""); // Start UART0 for Novatel modem UART0_Start(NOVATEL_UART_BAUD_RATE); /* If the CIK is exist, auto into the Exosite mode */ NVSettingsLoad(&GNV_Setting); if(AppMode == RUN_EXOSITE) { LCDDisplayLogo(); LCDSelectFont(FONT_SMALL); DisplayLCD(LCD_LINE3, "RL78G14 RDK V2.0"); DisplayLCD(LCD_LINE4, " Cellular "); DisplayLCD(LCD_LINE5, " demos by: "); DisplayLCD(LCD_LINE6, "Novatel "); DisplayLCD(LCD_LINE7, "Exosite "); MSTimerDelay(3500); ClearLCD(); DisplayLCD(LCD_LINE1, "Demo Modes: "); DisplayLCD(LCD_LINE2, "-RST no key: "); DisplayLCD(LCD_LINE3, " ExoSite App "); DisplayLCD(LCD_LINE4, "-RST + SW1 & SW3: "); DisplayLCD(LCD_LINE5, " Reset NVM "); DisplayLCD(LCD_LINE6, "-RST + SW1: "); DisplayLCD(LCD_LINE7, " Cell Activate "); MSTimerDelay(3000); ClearLCD(); LCDSelectFont(FONT_LARGE); DisplayLCD(LCD_LINE1, "Exosite DEMO"); Temperature_Init(); Potentiometer_Init(); App_Exosite(); } else if (AppMode == ACTIVATE_MODEM) { ATModem_CellActivate(); } return 0; }
/********************************************************************** name : function : **********************************************************************/ void UARTClass::begin( const uint32_t BaudRate ) { UART0_Start( BaudRate, DEFAULT_RX_PIN, DERAULT_TX_PIN ); }