/*---------------------------------------------------------------------------------------------------------*/ void ADC03_IRQHandler(void) { if(EADC_GET_INT_FLAG(EADC, (0x1 << 4))) { g_u32AdcCmp0IntFlag = 1; EADC_CLR_INT_FLAG(EADC, (0x1 << 4));/* Clear the A/D compare flag 0 */ } if(EADC_GET_INT_FLAG(EADC, (0x1 << 5))) { g_u32AdcCmp1IntFlag = 1; EADC_CLR_INT_FLAG(EADC, (0x1 << 5));/* Clear the A/D compare flag 1 */ } }
// ---------------------------------------------------------------------------------------- // Start ADC conversion // ---------------------------------------------------------------------------------------- void GetBattery(void) { // Clear the ADC INT0 interrupt flag EADC_CLR_INT_FLAG(EADC, 0x2); //Trigger sample module 0 to start A/D conversion EADC_START_CONV(EADC, 0x2); //Wait ADC interrupt (g_u32AdcIntFlag will be set at IRQ_Handler function) while(EADC_GET_INT_FLAG(EADC, 0x2) == 0); //Trigger sample module 0 to start A/D conversion BatteryData = ((EADC_GET_CONV_DATA(EADC, 1))*100/4096); /* Update TID value */ BatDev.Input.data1.value = BatteryData; if(BatDev.Input.data1.value < BatDev.Feature.data2.value) { BatDev.Input.data2.value = 1; BatOverTimeCounter = getTickCount()+ BatDev.Feature.data3.value*1000; } /* reset alerm flag after 10s */ if(BatDev.Input.data2.value == 1) { if(getTickCount() > BatOverTimeCounter) BatDev.Input.data2.value = 0; if(BatDev.Output.data1.value == 1) BatDev.Input.data2.value = 0; } }
void GetID() { static uint16_t u16Range[][2] = { { 125, 310}, { 373, 558}, { 621, 806}, { 869, 1055}, {1118, 1303}, {1366, 1551}, {1616, 1799}, {1861, 2048}, {2111, 2296}, {2359, 2544}, {2607, 2792}, {2855, 3040}, {3103, 3289}, {3351, 3537}, {3600, 3785} }; uint16_t adcData; uint32_t i; // Clear the ADC INT0 interrupt flag EADC_CLR_INT_FLAG(EADC, 0x1); // Clear the ADC INT0 interrupt flag EADC_START_CONV(EADC, 0x1); //Trigger sample module 0 to start A/D conversion while(EADC_GET_INT_FLAG(EADC, 0x1) == 0); //Wait ADC interrupt (g_u32AdcIntFlag will be set at IRQ_Handler function) adcData = EADC_GET_CONV_DATA(EADC, 0); //check module ID for(i=0; i<(sizeof(u16Range)/sizeof(uint16_t)/2); i++) { if (adcData > u16Range[i][0] && adcData < u16Range[i][1]) { devNum = i; break; } } if (i >= (sizeof(u16Range)/sizeof(uint16_t)/2)) devNum = 100; }