|
|
@@ -59,9 +59,7 @@
|
|
|
#define REG_CHAN_NUM (ADC1_NUM + ADC2_NUM)
|
|
|
u16 adc_buffer[REG_CHAN_NUM];
|
|
|
float vref_adc = 1408.0f;
|
|
|
-float vref_5v_adc = 2047.0f;
|
|
|
-
|
|
|
-#define VREF_ADC_DATA 1509.0F //1498, 1.21/3.3*4095
|
|
|
+float vref_5v_adc = 3095.0f;
|
|
|
|
|
|
static void analog_gpio_init(gpio_type *gpiox, u32 pin) {
|
|
|
gpio_init_type gpio_init_struct = {0};
|
|
|
@@ -102,18 +100,20 @@ static void adc0_init(void){
|
|
|
adc_base_config_type adc_base_struct;
|
|
|
|
|
|
/* adc clock configuration */
|
|
|
- crm_adc_clock_div_set(CRM_ADC_DIV_4); /* PCLK2 Max. CLK = 100M Hz, ADC_CLK = 100/4 = 25M Hz */
|
|
|
+ crm_adc_clock_div_set(CRM_ADC_DIV_8); /* PCLK2 Max. CLK = 100M Hz, ADC_CLK = 100/4 = 25M Hz */
|
|
|
crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE);
|
|
|
- adc_reset(ADC1);
|
|
|
- /* select adc mster-slave mode */
|
|
|
- adc_combine_mode_select(ADC_ORDINARY_SMLT_PREEMPT_SMLT_MODE);
|
|
|
+ crm_periph_clock_enable(CRM_ADC2_PERIPH_CLOCK, TRUE);
|
|
|
|
|
|
+ adc_reset(ADC1);
|
|
|
+ adc_reset(ADC2);
|
|
|
+
|
|
|
adc_base_struct.sequence_mode = TRUE;
|
|
|
adc_base_struct.repeat_mode = TRUE;
|
|
|
adc_base_struct.data_align = ADC_RIGHT_ALIGNMENT;
|
|
|
adc_base_struct.ordinary_channel_length = ADC1_NUM;
|
|
|
adc_base_config(ADC1, &adc_base_struct);
|
|
|
-
|
|
|
+ adc_base_config(ADC2, &adc_base_struct);
|
|
|
+
|
|
|
/* ordinary channel configuration */
|
|
|
adc_ordinary_channel_set(ADC1, MOS_TEMP_ADC_CHAN, 1, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_ordinary_channel_set(ADC1, MOTOR_TEMP_ADC_CHAN, 2, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
@@ -124,33 +124,69 @@ static void adc0_init(void){
|
|
|
adc_ordinary_channel_set(ADC1, THROTTLE2_5V_CHAN, 7, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_ordinary_channel_set(ADC1, U_VOL_ADC_CHAN, 8, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_ordinary_channel_set(ADC1, ZERO_ADC_CHAN, 9, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
-
|
|
|
adc_ordinary_conversion_trigger_set(ADC1, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);
|
|
|
|
|
|
- adc_preempt_channel_length_set(ADC1, 1);
|
|
|
+ adc_ordinary_channel_set(ADC2, VBUS_V_CHAN, 1, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
+ adc_ordinary_channel_set(ADC2, ACC_V_CHAN, 2, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
+ adc_ordinary_channel_set(ADC2, VBUS_I_CHAN, 3, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
+ adc_ordinary_channel_set(ADC2, V_VOL_ADC_CHAN, 4, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
+ adc_ordinary_channel_set(ADC2, W_VOL_ADC_CHAN, 5, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
+ adc_ordinary_channel_set(ADC2, ZERO_ADC_CHAN, 6, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
+ adc_ordinary_channel_set(ADC2, THROTTLE_5V_CHAN, 7, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
+ adc_ordinary_channel_set(ADC2, ZERO_ADC_CHAN, 8, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
+ adc_ordinary_channel_set(ADC2, DC5V_ADC_CHAN, 9, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
+ adc_ordinary_conversion_trigger_set(ADC2, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);
|
|
|
+
|
|
|
+
|
|
|
+ adc_preempt_channel_length_set(ADC1, 3);
|
|
|
adc_preempt_channel_set(ADC1, V_PHASE_I_CHAN, 1, ADC_SAMPLE_TIME);
|
|
|
+ adc_preempt_channel_set(ADC1, V_PHASE_I_CHAN, 2, ADC_SAMPLE_TIME);
|
|
|
+ adc_preempt_channel_set(ADC1, V_PHASE_I_CHAN, 3, ADC_SAMPLE_TIME);
|
|
|
+ //adc_preempt_channel_set(ADC1, V_PHASE_I_CHAN, 4, ADC_SAMPLE_TIME);
|
|
|
/* adc prempt trigger source */
|
|
|
adc_preempt_conversion_trigger_set(ADC1, ADC12_PREEMPT_TRIG_TMR1CH4, TRUE);
|
|
|
|
|
|
+ adc_preempt_channel_length_set(ADC2, 3);
|
|
|
+ adc_preempt_channel_set(ADC2, W_PHASE_I_CHAN, 1, ADC_SAMPLE_TIME);
|
|
|
+ adc_preempt_channel_set(ADC2, W_PHASE_I_CHAN, 2, ADC_SAMPLE_TIME);
|
|
|
+ adc_preempt_channel_set(ADC2, W_PHASE_I_CHAN, 3, ADC_SAMPLE_TIME);
|
|
|
+ //adc_preempt_channel_set(ADC2, W_PHASE_I_CHAN, 4, ADC_SAMPLE_TIME);
|
|
|
+ /* adc prempt trigger source */
|
|
|
+ adc_preempt_conversion_trigger_set(ADC2, ADC12_PREEMPT_TRIG_TMR1CH4, TRUE);
|
|
|
+
|
|
|
+ /* select adc mster-slave mode */
|
|
|
+ adc_combine_mode_select(ADC_ORDINARY_SMLT_PREEMPT_SMLT_MODE);
|
|
|
+
|
|
|
adc_tempersensor_vintrv_enable(TRUE);
|
|
|
|
|
|
adc_dma_mode_enable(ADC1, TRUE);
|
|
|
+ adc_dma_mode_enable(ADC2, TRUE);
|
|
|
+
|
|
|
/* ADC enable and calibration */
|
|
|
- if(ADC1->ctrl2_bit.adcen != TRUE)
|
|
|
- {
|
|
|
- adc_enable(ADC1, TRUE);
|
|
|
- adc_calibration_init(ADC1);
|
|
|
- while(adc_calibration_init_status_get(ADC1));
|
|
|
- adc_calibration_start(ADC1);
|
|
|
- while(adc_calibration_status_get(ADC1));
|
|
|
- }
|
|
|
+ adc_enable(ADC1, TRUE);
|
|
|
+ adc_calibration_init(ADC1);
|
|
|
+ while(adc_calibration_init_status_get(ADC1));
|
|
|
+ adc_calibration_start(ADC1);
|
|
|
+ while(adc_calibration_status_get(ADC1));
|
|
|
+
|
|
|
+ adc_enable(ADC2, TRUE);
|
|
|
+ adc_calibration_init(ADC2);
|
|
|
+ while(adc_calibration_init_status_get(ADC2));
|
|
|
+ adc_calibration_start(ADC2);
|
|
|
+ while(adc_calibration_status_get(ADC2));
|
|
|
+
|
|
|
nvic_irq_enable(ADC1_2_IRQn, ADC_IRQ_PRIORITY, 0);
|
|
|
|
|
|
adc_disable_ext_trigger();
|
|
|
+
|
|
|
+ adc_current_sample_config(0);
|
|
|
+
|
|
|
+ adc_ordinary_software_trigger_enable(ADC1, TRUE);
|
|
|
}
|
|
|
|
|
|
static void adc1_init(void){
|
|
|
|
|
|
+#if 0
|
|
|
adc_base_config_type adc_base_struct;
|
|
|
|
|
|
/* adc clock configuration */
|
|
|
@@ -173,24 +209,24 @@ static void adc1_init(void){
|
|
|
adc_ordinary_channel_set(ADC2, THROTTLE_5V_CHAN, 7, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_ordinary_channel_set(ADC2, ZERO_ADC_CHAN, 8, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
adc_ordinary_channel_set(ADC2, DC5V_ADC_CHAN, 9, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
-
|
|
|
adc_ordinary_conversion_trigger_set(ADC2, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);
|
|
|
|
|
|
- adc_preempt_channel_length_set(ADC2, 1);
|
|
|
+ adc_preempt_channel_length_set(ADC2, 3);
|
|
|
adc_preempt_channel_set(ADC2, W_PHASE_I_CHAN, 1, ADC_SAMPLE_TIME);
|
|
|
+ adc_preempt_channel_set(ADC2, W_PHASE_I_CHAN, 2, ADC_SAMPLE_TIME);
|
|
|
+ adc_preempt_channel_set(ADC2, W_PHASE_I_CHAN, 3, ADC_SAMPLE_TIME);
|
|
|
+ //adc_preempt_channel_set(ADC2, W_PHASE_I_CHAN, 4, ADC_SAMPLE_TIME);
|
|
|
/* adc prempt trigger source */
|
|
|
adc_preempt_conversion_trigger_set(ADC2, ADC12_PREEMPT_TRIG_TMR1CH4, TRUE);
|
|
|
|
|
|
adc_dma_mode_enable(ADC2, TRUE);
|
|
|
/* ADC enable and calibration */
|
|
|
- if(ADC2->ctrl2_bit.adcen != TRUE)
|
|
|
- {
|
|
|
- adc_enable(ADC2, TRUE);
|
|
|
- adc_calibration_init(ADC2);
|
|
|
- while(adc_calibration_init_status_get(ADC2));
|
|
|
- adc_calibration_start(ADC2);
|
|
|
- while(adc_calibration_status_get(ADC2));
|
|
|
- }
|
|
|
+ adc_enable(ADC2, TRUE);
|
|
|
+ adc_calibration_init(ADC2);
|
|
|
+ while(adc_calibration_init_status_get(ADC2));
|
|
|
+ adc_calibration_start(ADC2);
|
|
|
+ while(adc_calibration_status_get(ADC2));
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -288,8 +324,6 @@ void adc_init(void) {
|
|
|
adc01_dma_init();
|
|
|
adc0_init();
|
|
|
adc1_init();
|
|
|
- adc_current_sample_config(0);
|
|
|
- adc_ordinary_software_trigger_enable(ADC1, TRUE);
|
|
|
}
|
|
|
|
|
|
void adc_set_vref_calc(float v) {
|