api_rt_adc.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "api_rt_adc.h"
  2. #include "api_rt_pwm.h"
  3. #include "gd32f30x.h"
  4. ApiRtAdc_Handle Adcs[3];
  5. void iRtAdc_Init(void)
  6. {
  7. // ADC0 Regular
  8. Adcs[0].AdcBase = ADC0;
  9. Adcs[0].DmaBase = DMA0;
  10. Adcs[0].DmaChannelBase = DMA_CH0;
  11. for (int i = 0; i < ADC_RESULT_SIZE; i++)
  12. {
  13. Adcs[0].Results[i] = 0;
  14. }
  15. // ADC0 Injected
  16. Adcs[1].AdcBase = ADC0;
  17. for (int i = 1; i < ADC_RESULT_SIZE; i++)
  18. {
  19. Adcs[1].Results[i] = 0;
  20. }
  21. // ADC1 Injected
  22. Adcs[2].AdcBase = ADC1;
  23. for (int i = 0; i < ADC_RESULT_SIZE; i++)
  24. {
  25. Adcs[2].Results[i] = 0;
  26. }
  27. };
  28. void iRtAdc_CompleteIsr(uint8_t devIndex)
  29. {
  30. /* 处理同步采样的逻辑 */
  31. iRtPwm_SyncSamplingAdcIsr(0);
  32. if (Adcs[devIndex].CompleteISR.Action != 0)
  33. {
  34. Adcs[devIndex].CompleteISR.Action();
  35. }
  36. }
  37. uint16_t iAdc_GetResult(uint8_t devIndex, uint8_t channelIndex)
  38. {
  39. return Adcs[devIndex].Results[channelIndex];
  40. }
  41. uint16_t* iAdc_GetResultPointer(uint8_t devIndex)
  42. {
  43. return Adcs[devIndex].Results;
  44. }
  45. void iAdc_Enable(uint8_t devIndex)
  46. {
  47. if(RESET == (ADC_CTL1(Adcs[devIndex].AdcBase) & ADC_CTL1_ADCON)){
  48. ADC_CTL1(Adcs[devIndex].AdcBase) |= (uint32_t)ADC_CTL1_ADCON;
  49. }
  50. }
  51. void iAdc_Disable(uint8_t devIndex)
  52. {
  53. ADC_CTL1(Adcs[devIndex].AdcBase) &= ~((uint32_t)ADC_CTL1_ADCON);
  54. }
  55. ApiAdc_Status iAdc_GetStatus(uint8_t devIndex)
  56. {
  57. if (ADC_STAT(Adcs[devIndex].AdcBase) & ADC_STAT_EOC != 0)
  58. {
  59. return ApiAdc_End;
  60. }
  61. else
  62. {
  63. return ApiAdc_Converting;
  64. }
  65. }
  66. void iAdc_Convert(uint8_t devIndex)
  67. {
  68. //for regular only
  69. ADC_CTL1(Adcs[devIndex].AdcBase) |= ADC_CTL1_SWRCST;
  70. }
  71. int8_t iAdc_ChannelGroupSwitch(uint8_t devIndex, uint8_t groupIndex)
  72. {
  73. return 0;
  74. }
  75. void iAdc_EnableConversionInterrupt(uint8_t devIndex)
  76. {
  77. }
  78. void iAdc_EnableHardwareTrigger(uint8_t devIndex);
  79. void iAdc_DisableHardwareTrigger(uint8_t devIndex);