void Init() { Uart.Init(115200); Uart.Printf("\rFirefly2\r"); Led.Init(); Led.SetColorSmoothly((Color_t){255, 255, 255}); Adc.Init(); }
void AdcTxIrq(void *p, uint32_t flags) { dmaStreamDisable(ADC_DMA); Adc.Stop(); // Signal event chSysLockFromISR(); App.SignalEvtI(EVT_ADC_DONE); chSysUnlockFromISR(); }
int main(void) { // ==== Init clock system ==== Clk.UpdateFreqValues(); Clk.SetupFlashLatency(); // ==== Init OS ==== halInit(); chSysInit(); // ==== Init Hard & Soft ==== Init(); while(TRUE) { chThdSleepMilliseconds(360); uint32_t rslt = 0; for(uint8_t i=0; i<8; i++) { Adc.StartConversion(); while(!Adc.ConversionCompleted()); rslt += Adc.Result(); } rslt >>= 3; Uart.Printf("Adc: %u\r", rslt); if(rslt > ADC_VALUE_TO_OFF) Led.SetColorSmoothly(clBlack); if(rslt < ADC_VALUE_TO_ON) Led.SetColorSmoothly(LED_COLOR); } }
// =============================== Init ======================================== static inline void ShowChargeLevel() { Adc_t Adc; uint32_t rslt = 0; Adc.Init(); for(uint8_t i=0; i<8; i++) { Adc.StartConversion(); while(!Adc.ConversionCompleted()) chThdSleepMilliseconds(20); rslt += Adc.Result(); } Adc.Disable(); Adc.ClockOff(); rslt >>= 3; rslt = (rslt * 16225) / 10000; Uart.Printf("mv=%u\r", rslt); // Show charge BlueLed.On(LED_LOW); // Always if(rslt > 3700) RedLed.On (LED_LOW); if(rslt > 3800) YellowLed.On(LED_LOW); if(rslt > 3900) GreenLed.On (LED_LOW); if(rslt > 4050) WhiteLed.On (LED_LOW); }
// DMA irq void SIrqDmaHandler(void *p, uint32_t flags) { Adc.IrqDmaHandler(); }