123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #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);
|