refactor: streamline adc_init()

This commit is contained in:
roy01
2026-06-12 10:39:14 +08:00
parent 1257dc34c7
commit 8164d47b35
2 changed files with 34 additions and 49 deletions
@@ -13,7 +13,7 @@
void SYS_Config();
void gpio_config();
void opa_config();
void adc_config();
void adc_init(void);
//-------------------------------------
void llc_pwm_config(); // LLC
@@ -1,8 +1,5 @@
/*
* init.c
*
* Created on: 2025年8月18日
* Author: jim_liao
/**
* Copyright (c) 2026 Wisetop. All Rights Reserved.
*/
#include "init.h"
@@ -12,7 +9,6 @@
//=============================================================================
// Constant Definition
//=============================================================================
// #define CONFIG_OPA_PGA_GAIN OPAMP_PGAGain_1 //OPAMP_PGAGain_5
//=============================================================================
// Public Function Definition
@@ -75,7 +71,7 @@ void SYS_Config()
gpio_config();
opa_config();
adc_config();
adc_init();
llc_pwm_config(); // 初始化但不輸出 EPWM_CH1
pfc_pwm_config(); // 初始化但不輸出 TIM2_CH1
@@ -123,15 +119,6 @@ void gpio_config()
GPIO_InitStruct.GPIO_AF_Mode = GPIO_AF_5; // AF5 = TIM2
GPIO_Init(GPIOA, &GPIO_InitStruct);
//-----------------//
// ADC
// PA7(iac), PA10(vbus), PA13(vac) // PA11(cr), PA12(vfb)-->GPIO
//-----------------//
GPIO_InitTypeDef GPIO_InitADC;
GPIO_InitADC.GPIO_Pin = GPIO_Pin_07 | GPIO_Pin_10 | GPIO_Pin_13; // | GPIO_Pin_11; // PA11(cr)
GPIO_InitADC.GPIO_Mode = GPIO_Mode_ANAL;
GPIO_Init(GPIOA, &GPIO_InitADC);
//-----------------//
// Button
//-----------------//
@@ -178,42 +165,40 @@ void opa_config(void)
OPAMP_Enable(OPAMP0);
}
//===================================================================================
void adc_config(void)
void adc_init(void)
{
ADC_InitTypeDef init = { 0 };
ADC_StructInit(&init);
// gpio
GPIO_InitTypeDef gpio_init;
gpio_init.GPIO_Pin = GPIO_Pin_10; // vbus = PA10(AIN4)
gpio_init.GPIO_Pin |= GPIO_Pin_07; // iac = PA7(AIN9)
gpio_init.GPIO_Pin |= GPIO_Pin_13; // vac = PA13(AIN7)
gpio_init.GPIO_Pin |= GPIO_Pin_11; // vcr = PA11(AIN5)
gpio_init.GPIO_Mode = GPIO_Mode_ANAL;
GPIO_Init(GPIOA, &gpio_init);
ADC_InitTypeDef init1 = { 0 };
ADC_StructInit(&init1);
// iac = PA7 = ADC_Channel_09
// vac = PA13 = ADC_Channel_07
// vbus = PA10 = ADC_Channel_04
// ----------------------------------------------
// vcr = PA11 = ADC_Channel_05 (未使用)
// vfb = PA12 = ADC_Channel_06 (使用 GPIO)
init1.SelChannels = ADC_Channel_04 | ADC_Channel_07 | ADC_Channel_09 | ADC_Channel_05;
// init1.SelChannels = ADC_Channel_09 ;// OP_O 指定到 PA7 時,ADC 需要用 CH_09 讀取
init1.ClkPrescaler = ADC_ClkDiv_4; // 60M/4 = 15M,接近 1MSPS (1us 轉換時間), 最快速度
init1.DataAlign = ADC_DataAlign_Right;
init1.Mode = ADC_Mode_Scan; // Scan mode
ADC_Init(ADC0, &init1);
// adc
ADC_InitTypeDef adc_init = { 0 };
ADC_StructInit(&adc_init);
adc_init.SelChannels = ADC_Channel_04;
adc_init.SelChannels |= ADC_Channel_09;
adc_init.SelChannels |= ADC_Channel_07;
adc_init.SelChannels |= ADC_Channel_05;
adc_init.ClkPrescaler = ADC_ClkDiv_4; // 60M/4 = 15MHz, ADC max working clock is 16MHz
adc_init.DataAlign = ADC_DataAlign_Right;
adc_init.Mode = ADC_Mode_Scan; // Scan mode
ADC_Init(ADC0, &adc_init);
ADC_ExtTrigConfig(ADC0, ADC_ExtTrigSource_TIM0, ADC_ExtTrigMode_Enable); // tim0 trigger adc
// ADC_ExtTrigConfig(ADC0, ADC_ExtTrigSource_EPWM_CH2R, ADC_ExtTrigMode_Enable);
ADC_ExtTrigConfig(ADC0, ADC_ExtTrigSource_16, ADC_ExtTrigMode_Enable); // use tim0 trigger
// ADC interrupt config
sys_irq_attr_t irq_attr = {
.disable_vector = false,
.trig_mode = SYS_IRQ_TRIGGER_LEVEL,
.level = SYS_IRQ_LEVEL_H,
.priority = SYS_IRQ_PRIORITY_MIDDEN,
};
sys_register_IRQ(ADC0_IRQn, isr_adc_handle, &irq_attr);
#if 1
{ // Configure TIM interrupts
sys_irq_attr_t irq_attr = {
.disable_vector = false,
};
irq_attr.trig_mode = SYS_IRQ_TRIGGER_LEVEL;
irq_attr.level = SYS_IRQ_LEVEL_H;
irq_attr.priority = SYS_IRQ_PRIORITY_MIDDEN;
sys_register_IRQ(ADC0_IRQn, isr_adc_handle, &irq_attr);
ADC0->CON0_b.INT_EN = 1;
}
#endif
ADC0->CON0_b.INT_EN = 1; // ADC interrupt enable
}
//===================================================================================
void llc_pwm_config() // complimentary PWM for LLC