Files
StepMotorCtrl/drv/adc/adc_driver.c
T

55 lines
1014 B
C
Raw Normal View History

#include "adc_driver.h"
#include "py32md530.h"
#include "config.h"
ret_code_t adc_init(void)
{
RCC->APB2ENR |= RCC_APB2ENR_ADCEN;
ADC1->CR &= ~ADC_CR_ADEN_Msk;
ADC1->CFGR1 = ADC_CFGR1_RES_1;
ADC1->CHSMPR2 = (0x7 << 3);
ADC1->SMPR1 = 0x07;
ADC1->ISR &= ~ADC_ISR_ADRDY_Msk;
ADC1->CR |= ADC_CR_ADEN_Msk;
while (!(ADC1->ISR & ADC_ISR_ADRDY_Msk));
return RET_OK;
}
ret_code_t adc_deinit(void)
{
ADC1->CR |= ADC_CR_ADDIS_Msk;
while (ADC1->CR & ADC_CR_ADEN_Msk);
RCC->APB2ENR &= ~RCC_APB2ENR_ADCEN;
return RET_OK;
}
uint16_t adc_read_channel(adc_channel_t ch)
{
ADC1->CHDR1 = (uint32_t)ch;
ADC1->ISR &= ~ADC_ISR_EOC_Msk;
ADC1->CR |= ADC_CR_ADSTART_Msk;
while (!(ADC1->ISR & ADC_ISR_EOC_Msk));
return (uint16_t)(ADC1->CHDR1 & 0x0FFF);
}
ret_code_t adc_start_dma(uint16_t *buffer, uint32_t len)
{
ADC1->CFGR1 |= ADC_CFGR1_DMAEN_Msk
| ADC_CFGR1_DMACFG_Msk;
ADC1->CR |= ADC_CR_ADSTART_Msk;
return RET_OK;
}