NULL
This commit is contained in:
187
user/MCU/lhl_adc.c
Executable file
187
user/MCU/lhl_adc.c
Executable file
@@ -0,0 +1,187 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
////ʹ<><CAB9><EFBFBD>ڲ<EFBFBD><DAB2>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
//pAFE->REF_CTRL |=AFE_REF_CTRL_TEMP_SENSER_EN_Msk;
|
||||
|
||||
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief <20><>ʼ<EFBFBD><CABC> ADC <20>ڲ<EFBFBD><DAB2><EFBFBD>Դ<D7BC><D4B4><EFBFBD><EFBFBD>
|
||||
* @note ʹ<><CAB9><EFBFBD>ڲ<EFBFBD><DAB2>ο<EFBFBD><CEBF><EFBFBD>ѹ VREF<45><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> VREF <20><> VDRIVE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
* @param vref: <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><D7BC>ѹѡ<D1B9><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> REF_INTERNAL_2P5V
|
||||
* @param vdrive: VDrive <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹѡ<D1B9><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> REF_INTERNAL_1P25V <20><> REF_INTERNAL_OFF
|
||||
* @example ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_1P25V);
|
||||
**/
|
||||
void ADC_REF_Init(u8 vref,u8 vdrive)
|
||||
{
|
||||
REF_InitTypeDef REF_InitStructure;
|
||||
|
||||
REF_InitStructure.VREF = vref; // <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><D7BC>ѹ
|
||||
REF_InitStructure.VDRIVE = vdrive;// VDrive<76><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
||||
REF_InitStructure.VREF_Boost = DISABLE;
|
||||
LHL_REF_Init(&REF_InitStructure);
|
||||
}
|
||||
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief <20><>ʼ<EFBFBD><CABC> ADC Ϊ<><CEAA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><>Դʹ<D4B4><CAB9><EFBFBD>ڲ<EFBFBD> VREF<45><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ˫<CEAA><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>жϡ<D0B6>
|
||||
* @param ADCx: ADC ʵ<><CAB5> (ADC_0 / ADC_1)
|
||||
* @param SPS: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD> SPS_977
|
||||
* @param Gain: <20>ڲ<EFBFBD> PGA <20><><EFBFBD>棬<EFBFBD><E6A3AC> GAIN32
|
||||
* @param PChan: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC0_AIN0
|
||||
* @param NChan: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC0_AIN1
|
||||
* @example ADC_Init(ADC_0, SPS_977, GAIN32, ADC0_AIN0, ADC0_AIN1);
|
||||
**/
|
||||
void ADC_Init(ADC_ID_t ADCx ,u8 SPS ,u8 Gain, u8 PChan, u8 NChan )
|
||||
{
|
||||
ADC_InitTypeDef ADC_InitStructure;
|
||||
ADC_InitStructure.AINP = PChan; // ADC0<43><30><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
ADC_InitStructure.AINM = NChan;
|
||||
ADC_InitStructure.PGA = Gain; // <20>ڲ<EFBFBD>PGA<47><41><EFBFBD><EFBFBD>x1
|
||||
ADC_InitStructure.FS = SPS; // ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ADC_InitStructure.Code = ADC_CODE_BIPOLAR; // ˫<><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ADC_InitStructure.Mode = ADC_MODE_CONTINUOUS_CONVERSION; // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ģʽ
|
||||
ADC_InitStructure.Trigger = ADC_TRIGGER_SOFTWARE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ADC_InitStructure.ReferenceSelect = ADC_REF_REFP_to_REFN; // <20>ڲ<EFBFBD><DAB2><EFBFBD>
|
||||
ADC_InitStructure.REF_BUFP = ENABLE; // ʹ<>ܻ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>
|
||||
ADC_InitStructure.REF_BUFM = ENABLE;
|
||||
ADC_InitStructure.REF_Precharge= DISABLE;
|
||||
// ADC_InitStructure.Reference = 1250.0f; //<2F><>ֵ initû<74>õ<EFBFBD>
|
||||
LHL_ADC_Init(ADCx, &ADC_InitStructure);
|
||||
LHL_ADC_ITConfig(ADCx, ADC_IT_RDY, ENABLE);
|
||||
}
|
||||
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief ʹ<>ܻ<EFBFBD><DCBB><EFBFBD>ֹ ADC0 <20><> ADC1 ͬ<><CDAC>ת<EFBFBD><D7AA>ģʽ
|
||||
* @note ͬ<><CDAC>ת<EFBFBD><D7AA>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC <20><><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>SPS<50><53>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>ͬ<EFBFBD><CDAC>
|
||||
* ADC0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>Զ<EFBFBD>Ӧ<EFBFBD>õ<EFBFBD> ADC1<43><31>
|
||||
* @param NewState: ENABLE <20><> DISABLE
|
||||
* @example ADC_SyncCmd(ENABLE);
|
||||
**/
|
||||
void ADC_SyncCmd(FunctionalState NewState)
|
||||
{
|
||||
LHL_ADC_SetSync(NewState);
|
||||
}
|
||||
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ADC <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param ADCx: ADC ʵ<><CAB5> (ADC_0 / ADC_1)
|
||||
* @example StartADC(ADC_0);
|
||||
**/
|
||||
void StartADC(ADC_ID_t ADCx)
|
||||
{
|
||||
(ADCx == ADC_0) ? LHL_ADC_Start(ADC_0): LHL_ADC_Start(ADC_1);
|
||||
}
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief ָֹͣ<D6B9><D6B8> ADC <20><>ת<EFBFBD><D7AA>
|
||||
* @param ADCx: ADC ʵ<><CAB5> (ADC_0 / ADC_1)
|
||||
* @example StopADC(ADC_0);
|
||||
**/
|
||||
void StopADC(ADC_ID_t ADCx)
|
||||
{
|
||||
(ADCx == ADC_0) ? LHL_ADC_Stop(ADC_0): LHL_ADC_Stop(ADC_1);
|
||||
}
|
||||
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief <20><>ȡ ADC ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>24 λԭʼ<D4AD><CABC><EFBFBD><EFBFBD>ת 16 λ<><CEBB>ƫ<EFBFBD><C6AB> 32768<36><38>
|
||||
* @note ת<><D7AA><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>((ԭʼ<D4AD><CABC><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD>չ >> 8) + 32768) & 0xFFFF
|
||||
* @param ADCx: ADC ʵ<><CAB5> (ADC_0 / ADC_1)
|
||||
* @return 16 λ ADC ֵ<><D6B5>0~65535<33><35>
|
||||
* @example u32 val = ADC_ReadData(ADC_0);
|
||||
**/
|
||||
u32 ADC_ReadData(ADC_ID_t ADCx)
|
||||
{
|
||||
volatile u32 reg_data = 0;
|
||||
reg_data = (ADCx == ADC_0) ? LHL_ADC_GetData(ADC_0) : LHL_ADC_GetData(ADC_1);
|
||||
reg_data = ((((reg_data & 0xFFFFFF) | ((reg_data & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;
|
||||
return reg_data ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*===========================================================================*/
|
||||
|
||||
/* С˯ģʽ<C4A3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
||||
ѡ<><D1A1><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʼǰ<CABC><C7B0><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ΪӲ<CEAA><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20>ڽ<EFBFBD><DABD>뵽<EFBFBD><EBB5BD><EFBFBD><EFBFBD>ģʽ(С˯ģʽ)<29><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
||||
ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ֹͣת<D6B9><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>ģʽ<C4A3><CABD><EFBFBD>ߺ<EFBFBD><DFBA>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>
|
||||
<20><>Ҫ<EFBFBD><D2AA>SNOOZE<5A><45><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>(ADC)Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
*/
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief <20><>ʼ<EFBFBD><CABC> ADC Ϊ<><EFBFBD><CDB9><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA> + Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SNOOZE ģʽ<C4A3>µ<EFBFBD><C2B5>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ѻ<EFBFBD><D1BB><EFBFBD><EFBFBD><EFBFBD>˯<EFBFBD>ߡ<EFBFBD>
|
||||
* @param ADCx: ADC ʵ<><CAB5> (ADC_0 / ADC_1)
|
||||
* @param SPS: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD> SPS_10
|
||||
* @param Gain: <20>ڲ<EFBFBD> PGA <20><><EFBFBD>棬<EFBFBD><E6A3AC> GAIN32
|
||||
* @param PChan: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC0_AIN2
|
||||
* @param NChan: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC0_AVSS
|
||||
* @example ADC_Init_For_LowerPower(ADC_0, SPS_10, GAIN32, ADC0_AIN2, ADC0_AVSS);
|
||||
**/
|
||||
void ADC_Init_For_LowerPower(ADC_ID_t ADCx, u8 SPS, u8 Gain, u8 PChan, u8 NChan)
|
||||
{
|
||||
ADC_InitTypeDef ADC_InitStructure;
|
||||
ADC_InitStructure.AINP = PChan; // ADC<44><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
ADC_InitStructure.AINM = NChan;
|
||||
ADC_InitStructure.PGA = Gain; // <20>ڲ<EFBFBD>PGA<47><41><EFBFBD><EFBFBD>
|
||||
ADC_InitStructure.FS = SPS; // ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ADC_InitStructure.Code = ADC_CODE_BIPOLAR; // ˫<><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ADC_InitStructure.Mode = ADC_MODE_SINGLE_CONVERSION; // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ģʽ
|
||||
ADC_InitStructure.Trigger = ADC_TRIGGER_HARDWARE; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADC_TRIGGER_HARDWARE ADC_TRIGGER_SOFTWARE
|
||||
ADC_InitStructure.ReferenceSelect = ADC_REF_REFP_to_REFN; // <20>ڲ<EFBFBD><DAB2><EFBFBD>
|
||||
ADC_InitStructure.REF_BUFP = ENABLE; // ʹ<>ܻ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>
|
||||
ADC_InitStructure.REF_BUFM = ENABLE;
|
||||
ADC_InitStructure.REF_Precharge = DISABLE;
|
||||
|
||||
LHL_ADC_Init(ADCx, &ADC_InitStructure);
|
||||
LHL_ADC_ITConfig(ADCx, ADC_IT_RDY, ENABLE); //RDY_INT = 1
|
||||
|
||||
NVIC_EnableIRQ(ADC0_IRQn);
|
||||
NVIC_SetPriority(ADC0_IRQn, 0);
|
||||
NVIC_EnableIRQ(ADC1_IRQn);
|
||||
NVIC_SetPriority(ADC1_IRQn, 0);
|
||||
}
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
|
||||
|
||||
//ADC<44>жϻص<CFBB>==============================================================================================================
|
||||
static adc_irq_callback_t adc0_irq_callback ,adc1_irq_callback;
|
||||
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief ע<><D7A2> ADC ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param ADCx: ADC ʵ<><CAB5> (ADC_0 / ADC_1)
|
||||
* @param tim_irq_callback: <20>û<EFBFBD><C3BB>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>루<EFBFBD><EFBFBD><DEB2><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD>ֵ<EFBFBD><D6B5>
|
||||
* @note ע<><D7A2><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD>ܶ<EFBFBD>Ӧ ADC <20><> NVIC <20>ж<EFBFBD> <20><>
|
||||
* @example ADC_register_irq_callback(ADC_0, my_adc_callback);
|
||||
**/
|
||||
void ADC_register_irq_callback(ADC_ID_t ADCx, adc_irq_callback_t tim_irq_callback)
|
||||
{
|
||||
if(ADCx == ADC_0) {adc0_irq_callback = tim_irq_callback; NVIC_EnableIRQ(ADC0_IRQn);NVIC_SetPriority(ADC0_IRQn, 0);}
|
||||
else if(ADCx == ADC_1) {adc1_irq_callback = tim_irq_callback; NVIC_EnableIRQ(ADC1_IRQn);NVIC_SetPriority(ADC1_IRQn, 0);}
|
||||
}
|
||||
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief ADC0 <20>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><> ADC0 <20><><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>
|
||||
**/
|
||||
void ADC0_IRQHandler(void)
|
||||
{
|
||||
if(LHL_ADC_GetPending(ADC_0, ADC_FLAG_RDY) == SET)
|
||||
{
|
||||
if(adc0_irq_callback != NULL) adc0_irq_callback();
|
||||
}
|
||||
}
|
||||
|
||||
/**------------------------------------------------------------------------
|
||||
* @brief ADC1 <20>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><> ADC1 <20><><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>
|
||||
**/
|
||||
void ADC1_IRQHandler(void)
|
||||
{
|
||||
if(LHL_ADC_GetPending(ADC_1, ADC_FLAG_RDY) == SET)
|
||||
{
|
||||
if(adc1_irq_callback != NULL) adc1_irq_callback();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user