int main(int argc, char **argv) { /* * Initalize chip. */ CHIP_Init(); /* * Use XT oscillator, disable internal RC osc. */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); CMU_OscillatorEnable(cmuOsc_HFRCO, false, false); SystemCoreClockUpdate(); #if PORTCFG_CON_USART == 0 // Allow deep sleep. Doesn't work well with uart console currently. SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; #endif #if PORTCFG_CONOUT_ITM == 1 #ifdef _DBG if (DBG_Connected()) { CMU_ClockEnable(cmuClock_GPIO, true); DBG_SWOEnable(0); /* Enable trace in core debug, taken from Energy Aware Commander */ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; ITM->LAR = 0xC5ACCE55; ITM->TER = 0x0; ITM->TCR = 0x0; TPI->SPPR = 2; TPI->ACPR = 0xf; ITM->TPR = 0x0; DWT->CTRL = 0x400003FE; ITM->TCR = 0x0001000D; TPI->FFCR = 0x00000100; ITM->TER = 0x1; } #endif #endif #if PORTCFG_CON_USART == 1 // Configure usart pins. CMU_ClockEnable(cmuClock_GPIO, true); GPIO_PinModeSet(gpioPortC, 0, gpioModePushPull, 1); GPIO_PinModeSet(gpioPortC, 1, gpioModeInput, 0); #endif testStart(); return 0; }
/**************************************************************************//** * @brief Update LCD with temperature * @param[in] temp Temperature to display. *****************************************************************************/ void temperatureUpdateLCD(TEMPSENS_Temp_TypeDef *temp) { char text[8]; TEMPSENS_Temp_TypeDef dtemp; /* Work with local copy in case conversion to Fahrenheit is required */ dtemp = *temp; /* Show Gecko if debugger is attached. Energy modes do not behave as */ /* expected when using the debugger. */ if (DBG_Connected()) { SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 1); } else { SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 0); } memset(text, ' ', sizeof(text) - 1); text[sizeof(text) - 1] = 0; if (showFahrenheit) { text[5] = 'F'; TEMPSENS_Celsius2Fahrenheit(&dtemp); } else { text[5] = 'C'; } /* Round temperature to nearest 0.5 */ if (dtemp.f >= 0) { dtemp.i += (dtemp.f + 2500) / 10000; dtemp.f = (((dtemp.f + 2500) % 10000) / 5000) * 5000; } else { dtemp.i += (dtemp.f - 2500) / 10000; dtemp.f = (((dtemp.f - 2500) % 10000) / 5000) * 5000; } /* 100s */ if (abs(dtemp.i) >= 100) text[0] = '0' + (abs(dtemp.i) / 100); /* 10s */ if (abs(dtemp.i) >= 10) text[1] = '0' + ((abs(dtemp.i) % 100) / 10); /* 1s */ text[2] = '0' + (abs(dtemp.i) % 10); /* 0.1s */ text[3] = '0' + (abs(dtemp.f) / 1000); SegmentLCD_Write(text); SegmentLCD_Symbol(LCD_SYMBOL_DP4, 1); if ((dtemp.i < 0) || (dtemp.f < 0)) { SegmentLCD_Symbol(LCD_SYMBOL_MINUS, 1); } else { SegmentLCD_Symbol(LCD_SYMBOL_MINUS, 0); } }