#include "api_rt_adc.h" #include "api_rt_pwm.h" #include "gd32f30x.h" ApiRtAdc_Handle Adcs[3]; /* ========================================================================== */ /* ============================ Api RT Functions ============================ */ /* ========================================================================== */ void iRtAdc_Init(void) { // ADC0 Regular Adcs[0].AdcBase = ADC0; Adcs[0].DmaBase = DMA0; Adcs[0].DmaChannelBase = DMA_CH0; for (int i = 0; i < ADC_RESULT_SIZE; i++) { Adcs[0].Results[i] = 0; } // ADC0 Injected Adcs[1].AdcBase = ADC0; for (int i = 1; i < ADC_RESULT_SIZE; i++) { Adcs[1].Results[i] = 0; } // ADC1 Injected Adcs[2].AdcBase = ADC1; for (int i = 0; i < ADC_RESULT_SIZE; i++) { Adcs[2].Results[i] = 0; } }; void iRtAdc_CompleteIsr(uint8_t devIndex) { /* 处理同步采样的逻辑 */ iRtPwm_SyncSamplingAdcIsr(0); if (Adcs[devIndex].CompleteISR.Action != 0) { Adcs[devIndex].CompleteISR.Action(); } } /* ========================================================================== */ /* ============================== API Functions ============================= */ /* ========================================================================== */ uint16_t iAdc_GetResult(uint8_t devIndex, uint8_t channelIndex) { return Adcs[devIndex].Results[channelIndex]; } uint16_t* iAdc_GetResultPointer(uint8_t devIndex) { return Adcs[devIndex].Results; } void iAdc_Enable(uint8_t devIndex) { if(RESET == (ADC_CTL1(Adcs[devIndex].AdcBase) & ADC_CTL1_ADCON)){ ADC_CTL1(Adcs[devIndex].AdcBase) |= (uint32_t)ADC_CTL1_ADCON; } } void iAdc_Disable(uint8_t devIndex) { ADC_CTL1(Adcs[devIndex].AdcBase) &= ~((uint32_t)ADC_CTL1_ADCON); } ApiAdc_Status iAdc_GetStatus(uint8_t devIndex) { if (ADC_STAT(Adcs[devIndex].AdcBase) & ADC_STAT_EOC != 0) { return ApiAdc_End; } else { return ApiAdc_Converting; } } void iAdc_Convert(uint8_t devIndex) { //for regular only ADC_CTL1(Adcs[devIndex].AdcBase) |= ADC_CTL1_SWRCST; } int8_t iAdc_ChannelGroupSwitch(uint8_t devIndex, uint8_t groupIndex) { return 0; } void iAdc_EnableConversionInterrupt(uint8_t devIndex) { } void iAdc_EnableHardwareTrigger(uint8_t devIndex); void iAdc_DisableHardwareTrigger(uint8_t devIndex);