|
@@ -122,6 +122,95 @@ static void adc01_dma_init(void)
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+#if (CONFIG_HW_VERSION==3)
|
|
|
|
|
+static void adc01_init(void) {
|
|
|
|
|
+ /* config ADC clock */
|
|
|
|
|
+ rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4); //APB2 clk 120M, adc clk 30M
|
|
|
|
|
+ rcu_periph_clock_enable(RCU_ADC0);
|
|
|
|
|
+ rcu_periph_clock_enable(RCU_ADC1);
|
|
|
|
|
+ adc_deinit(ADC0);
|
|
|
|
|
+ adc_deinit(ADC1);
|
|
|
|
|
+
|
|
|
|
|
+ /* config work mode */
|
|
|
|
|
+ adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
|
|
|
|
|
+ adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
|
|
|
|
|
+ adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE);
|
|
|
|
|
+ adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE);
|
|
|
|
|
+
|
|
|
|
|
+ /* configure ADC data alignment */
|
|
|
|
|
+ adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
|
|
|
|
+ adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
|
|
|
|
|
+
|
|
|
|
|
+ /* configure ADC regular channel */
|
|
|
|
|
+ adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, ADC01_NUM);
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 0, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 1, MOTOR_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 2, THROTTLE_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 3, THROTTLE2_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 4, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 5, ADC_CHANNEL_17, ADC_REGCHAN_SAMPLE_TIME); //mcu内部vref
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 6, THROTTLE2_5V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 7, U_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC0, 8, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
|
|
+ adc_tempsensor_vrefint_enable();
|
|
|
|
|
+
|
|
|
|
|
+ adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, ADC01_NUM);
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 0, VBUS_V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 1, ACC_V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 2, VBUS_I_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 3, V_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 4, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 5, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 6, THROTTLE_5V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 7, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
|
|
+ adc_regular_channel_config(ADC1, 8, DC5V_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
+ adc_buffer[VREF_BUFF_IDX] = VREF_ADC_DATA; //1.21/3.3*4095
|
|
|
|
|
+
|
|
|
|
|
+ /* configure ADC regular channel trigger */
|
|
|
|
|
+ adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
|
|
|
|
+ adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
|
|
|
|
+ adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
|
|
|
|
|
+ adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);
|
|
|
|
|
+
|
|
|
|
|
+ /* configure ADC inserted channel length */
|
|
|
|
|
+ adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 1);
|
|
|
|
|
+ adc_update_insert_sample_time(ADC0, V_PHASE_I_CHAN, ADC_SAMPLE_TIME);
|
|
|
|
|
+ adc_update_insert_sample_time(ADC0, W_PHASE_I_CHAN, ADC_SAMPLE_TIME);
|
|
|
|
|
+
|
|
|
|
|
+ adc_channel_length_config(ADC1, ADC_INSERTED_CHANNEL, 1);
|
|
|
|
|
+ adc_update_insert_sample_time(ADC1, V_PHASE_I_CHAN, ADC_SAMPLE_TIME);
|
|
|
|
|
+ adc_update_insert_sample_time(ADC1, W_PHASE_I_CHAN, ADC_SAMPLE_TIME);
|
|
|
|
|
+
|
|
|
|
|
+ adc_mode_config(ADC_DUAL_MODE);
|
|
|
|
|
+
|
|
|
|
|
+ /* configure ADC inserted channel trigger */
|
|
|
|
|
+ adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL, ADC_TRIGGER_PHASE);
|
|
|
|
|
+ /* ADC external trigger enable */
|
|
|
|
|
+ adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);
|
|
|
|
|
+ /* ADC1 external trigger disable */
|
|
|
|
|
+ adc_external_trigger_source_config(ADC1, ADC_INSERTED_CHANNEL, ADC_TRIGGER_NONE);
|
|
|
|
|
+ adc_external_trigger_config(ADC1, ADC_INSERTED_CHANNEL, ENABLE);
|
|
|
|
|
+
|
|
|
|
|
+ /* enable ADC interface */
|
|
|
|
|
+ adc_enable(ADC0);
|
|
|
|
|
+ delay_ms(1);
|
|
|
|
|
+ /* ADC calibration and reset calibration */
|
|
|
|
|
+ adc_calibration_enable(ADC0);
|
|
|
|
|
+ adc_enable(ADC1);
|
|
|
|
|
+ delay_ms(1);
|
|
|
|
|
+ /* ADC calibration and reset calibration */
|
|
|
|
|
+ adc_calibration_enable(ADC1);
|
|
|
|
|
+
|
|
|
|
|
+ adc_dma_mode_enable(ADC0);
|
|
|
|
|
+
|
|
|
|
|
+ adc_disable_ext_trigger();
|
|
|
|
|
+
|
|
|
|
|
+ nvic_irq_enable(ADC0_1_IRQn, ADC_IRQ_PRIORITY, 0);
|
|
|
|
|
+
|
|
|
|
|
+ //start regular channels
|
|
|
|
|
+ adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
|
|
|
|
|
+}
|
|
|
|
|
+#else
|
|
|
static void adc0_init(void){
|
|
static void adc0_init(void){
|
|
|
/* config ADC clock */
|
|
/* config ADC clock */
|
|
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4); //APB2 clk 120M, adc clk 30M
|
|
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4); //APB2 clk 120M, adc clk 30M
|
|
@@ -181,19 +270,6 @@ static void adc0_init(void){
|
|
|
adc_regular_channel_config(ADC0, 5, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
adc_regular_channel_config(ADC0, 5, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_regular_channel_config(ADC0, 6, ADC_CHANNEL_10, ADC_REGCHAN_SAMPLE_TIME);
|
|
adc_regular_channel_config(ADC0, 6, ADC_CHANNEL_10, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_regular_channel_config(ADC0, 7, ADC_CHANNEL_17, ADC_REGCHAN_SAMPLE_TIME);
|
|
adc_regular_channel_config(ADC0, 7, ADC_CHANNEL_17, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
- adc_tempsensor_vrefint_enable();
|
|
|
|
|
- adc_buffer[VREF_BUFF_IDX] = VREF_ADC_DATA; //1.21/3.3*4095
|
|
|
|
|
-#elif (CONFIG_HW_VERSION==3)
|
|
|
|
|
- adc_regular_channel_config(ADC0, 0, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC0, 1, MOTOR_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC0, 2, THROTTLE_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC0, 3, THROTTLE2_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC0, 4, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
|
|
- adc_regular_channel_config(ADC0, 5, ADC_CHANNEL_17, ADC_REGCHAN_SAMPLE_TIME); //mcu内部vref
|
|
|
|
|
- adc_regular_channel_config(ADC0, 6, THROTTLE2_5V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC0, 7, U_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC0, 8, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
|
|
-
|
|
|
|
|
adc_tempsensor_vrefint_enable();
|
|
adc_tempsensor_vrefint_enable();
|
|
|
adc_buffer[VREF_BUFF_IDX] = VREF_ADC_DATA; //1.21/3.3*4095
|
|
adc_buffer[VREF_BUFF_IDX] = VREF_ADC_DATA; //1.21/3.3*4095
|
|
|
#endif
|
|
#endif
|
|
@@ -249,24 +325,6 @@ static void adc1_init(void){
|
|
|
adc_external_trigger_source_config(ADC1, ADC_INSERTED_CHANNEL, ADC_TRIGGER_NONE);
|
|
adc_external_trigger_source_config(ADC1, ADC_INSERTED_CHANNEL, ADC_TRIGGER_NONE);
|
|
|
adc_external_trigger_config(ADC1, ADC_INSERTED_CHANNEL, ENABLE);
|
|
adc_external_trigger_config(ADC1, ADC_INSERTED_CHANNEL, ENABLE);
|
|
|
|
|
|
|
|
-#if (CONFIG_HW_VERSION==3)
|
|
|
|
|
- adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, ADC01_NUM);
|
|
|
|
|
-
|
|
|
|
|
- adc_regular_channel_config(ADC1, 0, VBUS_V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC1, 1, ACC_V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC1, 2, VBUS_I_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC1, 3, V_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC1, 4, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC1, 5, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
|
|
- adc_regular_channel_config(ADC1, 6, THROTTLE_5V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- adc_regular_channel_config(ADC1, 7, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
|
|
|
|
|
- adc_regular_channel_config(ADC1, 8, DC5V_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
|
|
- /* configure ADC regular channel trigger */
|
|
|
|
|
- adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
|
|
|
|
- adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);
|
|
|
|
|
-
|
|
|
|
|
- adc_dma_mode_enable(ADC1);
|
|
|
|
|
-#endif
|
|
|
|
|
/* enable ADC interface */
|
|
/* enable ADC interface */
|
|
|
adc_enable(ADC1);
|
|
adc_enable(ADC1);
|
|
|
delay_ms(1);
|
|
delay_ms(1);
|
|
@@ -274,6 +332,7 @@ static void adc1_init(void){
|
|
|
adc_calibration_enable(ADC1);
|
|
adc_calibration_enable(ADC1);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
static void adc_gpio_init(void) {
|
|
static void adc_gpio_init(void) {
|
|
|
|
|
|
|
@@ -368,10 +427,13 @@ static void adc_gpio_init(void) {
|
|
|
void adc_init(void) {
|
|
void adc_init(void) {
|
|
|
adc_gpio_init();
|
|
adc_gpio_init();
|
|
|
adc01_dma_init();
|
|
adc01_dma_init();
|
|
|
|
|
+#if (CONFIG_HW_VERSION==3)
|
|
|
|
|
+ adc01_init();
|
|
|
|
|
+#else
|
|
|
adc0_init();
|
|
adc0_init();
|
|
|
adc1_init();
|
|
adc1_init();
|
|
|
|
|
+#endif
|
|
|
adc_current_sample_config(0);
|
|
adc_current_sample_config(0);
|
|
|
- adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void adc_set_vref_calc(float v) {
|
|
void adc_set_vref_calc(float v) {
|