📄 drvadc.c
字号:
/* Parameters: */
/* OpMode [in]: Specify the operation mode. */
/* It could be ADC_SINGLE_OP / ADC_SINGLE_CYCLE_OP / ADC_CONTINUOUS_OP. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Set the ADC operation mode. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvADC_SetADCOperationMode(E_ADC_OPERATION_MODE OpMode)
{
if( OpMode == ADC_SINGLE_OP )
ADC->ADCR.ADMD = 0; /* single mode */
else if( OpMode == ADC_SINGLE_CYCLE_OP )
ADC->ADCR.ADMD = 2; /* single-cycle scan mode */
else
ADC->ADCR.ADMD = 3; /* continuous scan mode */
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvADC_SetADCClkSrc */
/* */
/* Parameters: */
/* ClockSrc [in]: Specify the ADC clock source. */
/* It could be EXTERNAL_12MHZ / INTERNAL_PLL / INTERNAL_HCLK / INTERNAL_RC22MHZ. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Set the ADC clock source. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvADC_SetADCClkSrc(E_ADC_CLK_SRC ClockSrc)
{
SYSCLK->CLKSEL1.ADC_S = ClockSrc; /* ADC clock source */
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvADC_SetADCDivisor */
/* */
/* Parameters: */
/* u8AdcDivisor [in]: Specify the divisor value. It could be 0~255. */
/* ADC clock frequency = ADC clock source frequency / ( u8AdcDivisor + 1 ) */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Set the divisor value of ADC clock. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvADC_SetADCDivisor(uint8_t u8AdcDivisor)
{
SYSCLK->CLKDIV.ADC_N = u8AdcDivisor;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvADC_EnableADCInt */
/* */
/* Parameters: */
/* Callback [in]: The callback function of ADC interrupt. */
/* u32UserData [in]: This user's data will be passed to the callback function. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Enable the ADC interrupt and setup callback function. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvADC_EnableADCInt(DRVADC_ADC_CALLBACK Callback, uint32_t u32UserData)
{
g_ptADCCallBack = Callback;
g_pu32UserData[0] = u32UserData;
_DRVADC_CLEAR_ADC_INT_FLAG(); /* clear the A/D interrupt flag for safe */
ADC->ADCR.ADIE = 1;
NVIC_SetPriority(ADC_IRQn, (1<<__NVIC_PRIO_BITS) - 2);
NVIC_EnableIRQ(ADC_IRQn);
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvADC_DisableADCInt */
/* */
/* Parameters: */
/* None. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Disable the ADC interrupt. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvADC_DisableADCInt(void)
{
ADC->ADCR.ADIE = 0;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvADC_EnableADCCmp0Int */
/* */
/* Parameters: */
/* Callback [in]: The callback function of ADC result monitor 0 (compare 0) interrupt. */
/* u32UserData [in]: This user's data will be passed to the callback function. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Enable the ADC compare 0 interrupt and setup callback function. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvADC_EnableADCCmp0Int(DRVADC_ADCMP0_CALLBACK Callback, uint32_t u32UserData)
{
g_ptADCMP0CallBack = Callback;
g_pu32UserData[1] = u32UserData;
_DRVADC_CLEAR_CMP0_INT_FLAG(); /* clear the ADC comparator 0 interrupt flag for safe */
ADC->ADCMPR[0].CMPIE = 1;
NVIC_SetPriority(ADC_IRQn, (1<<__NVIC_PRIO_BITS) - 2);
NVIC_EnableIRQ(ADC_IRQn);
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvADC_DisableADCCmp0Int */
/* */
/* Parameters: */
/* None. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Disable the ADC compare 0 interrupt. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvADC_DisableADCCmp0Int(void)
{
ADC->ADCMPR[0].CMPIE = 0;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvADC_EnableADCCmp1Int */
/* */
/* Parameters: */
/* Callback [in]: The callback function of ADC result monitor 1 (compare 1) interrupt. */
/* u32UserData [in]: This user's data will be passed to the callback function. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Enable the ADC compare 1 interrupt and setup callback function. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvADC_EnableADCCmp1Int(DRVADC_ADCMP1_CALLBACK Callback, uint32_t u32UserData)
{
g_ptADCMP1CallBack = Callback;
g_pu32UserData[2] = u32UserData;
_DRVADC_CLEAR_CMP1_INT_FLAG(); /* clear the ADC comparator 1 interrupt flag for safe */
ADC->ADCMPR[1].CMPIE = 1;
NVIC_SetPriority(ADC_IRQn, (1<<__NVIC_PRIO_BITS) - 2);
NVIC_EnableIRQ(ADC_IRQn);
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvADC_DisableADCCmp1Int */
/* */
/* Parameters: */
/* None. */
/* */
/* Returns: */
/* None. */
/* */
/* Description: */
/* Disable the ADC compare 1 interrupt. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -