adc dma采集
This commit is contained in:
parent
4ca82f2c6c
commit
9ed0bb00be
|
@ -357,12 +357,9 @@
|
||||||
<state>$PROJ_DIR$\..\rtthread</state>
|
<state>$PROJ_DIR$\..\rtthread</state>
|
||||||
<state>$PROJ_DIR$\..\rtthread\include\libc</state>
|
<state>$PROJ_DIR$\..\rtthread\include\libc</state>
|
||||||
<state>$PROJ_DIR$\..\rtthread\include</state>
|
<state>$PROJ_DIR$\..\rtthread\include</state>
|
||||||
<state>D:\newPtz\drivers</state>
|
<state>C:\Users\Administrator\Documents\newPtz\drivers\mb85rc64</state>
|
||||||
<state>D:\newPtz\drivers\mb85rc64</state>
|
<state>C:\Users\Administrator\Documents\newPtz\drivers\tmp75</state>
|
||||||
<state>D:\newPtz\drivers\tmp75</state>
|
<state>C:\Users\Administrator\Documents\newPtz\drivers</state>
|
||||||
<state>C:\Users\Admin\Documents\newPtz\drivers</state>
|
|
||||||
<state>C:\Users\Admin\Documents\newPtz\drivers\mb85rc64</state>
|
|
||||||
<state>C:\Users\Admin\Documents\newPtz\drivers\tmp75</state>
|
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCStdIncCheck</name>
|
<name>CCStdIncCheck</name>
|
||||||
|
@ -775,11 +772,11 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfOverride</name>
|
<name>IlinkIcfOverride</name>
|
||||||
<state>0</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFile</name>
|
<name>IlinkIcfFile</name>
|
||||||
<state>$TOOLKIT_DIR$/config/linker/GigaDevice/GD32F470xE.icf</state>
|
<state>C:\Users\Administrator\Documents\newPtz\EWARM\iar\GD32F450xE.icf</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFileSlave</name>
|
<name>IlinkIcfFileSlave</name>
|
||||||
|
|
|
@ -761,10 +761,10 @@ void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t fla
|
||||||
\retval none
|
\retval none
|
||||||
*/
|
*/
|
||||||
void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source)
|
void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source)
|
||||||
{
|
{//DMA_CHXFCTL_FEEIE 7
|
||||||
if(DMA_CHXFCTL_FEEIE != source) {
|
if(DMA_CHXFCTL_FEEIE != source) {//不是7
|
||||||
DMA_CHCTL(dma_periph, channelx) |= source;
|
DMA_CHCTL(dma_periph, channelx) |= source;
|
||||||
} else {
|
} else {//是7
|
||||||
DMA_CHFCTL(dma_periph, channelx) |= source;
|
DMA_CHFCTL(dma_periph, channelx) |= source;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,9 +46,6 @@ float current;
|
||||||
float current_origin;
|
float current_origin;
|
||||||
char tiedian_id[3]={0};
|
char tiedian_id[3]={0};
|
||||||
|
|
||||||
#ifdef MDAX
|
|
||||||
uint32_t ctl_data = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint32_t primask;
|
uint32_t primask;
|
||||||
|
|
||||||
|
@ -56,9 +53,6 @@ uint16_t tmp_value = 0;
|
||||||
|
|
||||||
extern uint16_t USER_ADC_DMA_DATA_BUFF;//bsp_adc.c中定义的ADC数据接收数组
|
extern uint16_t USER_ADC_DMA_DATA_BUFF;//bsp_adc.c中定义的ADC数据接收数组
|
||||||
|
|
||||||
uint8_t g_ADCDataReady=0;//DMA传输完成ADC数据标志位
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _MB85TEST_
|
typedef struct _MB85TEST_
|
||||||
{
|
{
|
||||||
char ttt;
|
char ttt;
|
||||||
|
@ -113,42 +107,27 @@ int main(void)
|
||||||
// 进入主循环或启动其他任务
|
// 进入主循环或启动其他任务
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
#ifdef DMAX
|
#ifdef ADC_MODE_3
|
||||||
ctl_data = DMA_CHCTL(DMAX, USER_DMA_ADC_CHANNEL);
|
|
||||||
if (ctl_data == 33762576)
|
|
||||||
{
|
|
||||||
// dma_channel_enable (DMA1, USER_DMA_ADC_CHANNEL);
|
|
||||||
ttest.status = 5;
|
|
||||||
}
|
|
||||||
else if (ctl_data == 33762577)
|
|
||||||
{
|
|
||||||
ttest.status = 4;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for(uint8_t i=0; i<CHANNEL_LENGTH; i++)
|
||||||
|
{
|
||||||
|
tmp_value = BSP_ADCDataAcquire(i);
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
voltage = tmp_value/ 4095.0 * 3.3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current = tmp_value/ 4095.0 * 3.3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
__asm volatile("mrs %0, primask" : "=r"(primask));
|
|
||||||
|
|
||||||
if(SET == g_ADCDataReady)
|
|
||||||
{
|
|
||||||
g_ADCDataReady = RESET;
|
|
||||||
for(uint8_t i=0; i<CHANNEL_LENGTH; i++)
|
|
||||||
{
|
|
||||||
tmp_value = BSP_ADCDataAcquire(i);
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
voltage = tmp_value/ 4095.0 * 3.3;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
current = tmp_value/ 4095.0 * 3.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rt_thread_mdelay(250);
|
rt_thread_mdelay(250);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ADC_MODE_2
|
#if (defined ADC_MODE_0) || (defined ADC_MODE_1)
|
||||||
voltage = ptz_Voltage_collect_adc1_task();
|
voltage = ptz_Voltage_collect_adc1_task();
|
||||||
rt_thread_mdelay(500);
|
rt_thread_mdelay(500);
|
||||||
|
|
||||||
|
@ -210,7 +189,7 @@ void DMA1_Channel0_IRQHandler(void)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//下次移到drv_adc.c文件里
|
||||||
#ifdef ADCX_IRQn
|
#ifdef ADCX_IRQn
|
||||||
void ADC_IRQHandler()
|
void ADC_IRQHandler()
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
|
@ -15,9 +15,10 @@
|
||||||
|
|
||||||
|
|
||||||
#ifdef DMAX
|
#ifdef DMAX
|
||||||
|
|
||||||
/*全局声明区*/
|
/*全局声明区*/
|
||||||
uint16_t USER_ADC_DMA_DATA_BUFF[16] = {0};
|
uint16_t USER_ADC_DMA_DATA_BUFF[16] = {0};
|
||||||
uint32_t ctl = 0;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool filter_v_flag = 0;//滤波开启标志位,全局改变一次
|
bool filter_v_flag = 0;//滤波开启标志位,全局改变一次
|
||||||
|
@ -43,20 +44,6 @@ void adc_init(void)
|
||||||
adc_interrupt_int();
|
adc_interrupt_int();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DMAX
|
|
||||||
ctl = DMA_CHCTL(DMAX, USER_DMA_ADC_CHANNEL);
|
|
||||||
if (ctl == 33762576)
|
|
||||||
{
|
|
||||||
// dma_channel_enable (DMA1, USER_DMA_ADC_CHANNEL);
|
|
||||||
// ttest.status = 5;
|
|
||||||
dma_channel_enable (DMA1, USER_DMA_ADC_CHANNEL);// enable DMA channel
|
|
||||||
}
|
|
||||||
else if (ctl == 33762577)
|
|
||||||
{
|
|
||||||
// ttest.status = 4;
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
/* 时钟+GPIO */
|
/* 时钟+GPIO */
|
||||||
void adc_rcu_config(void)
|
void adc_rcu_config(void)
|
||||||
|
@ -100,20 +87,20 @@ void adc_dma_config(void)
|
||||||
dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY; //ADC外设到RAM全局变量 DMA外设到内存模式开启
|
dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY; //ADC外设到RAM全局变量 DMA外设到内存模式开启
|
||||||
dma_single_data_parameter.number = CHANNEL_LENGTH; //宏决定传输个数
|
dma_single_data_parameter.number = CHANNEL_LENGTH; //宏决定传输个数
|
||||||
dma_single_data_parameter.priority = DMA_PRIORITY_ULTRA_HIGH; //优先级设为超高,可改用宏
|
dma_single_data_parameter.priority = DMA_PRIORITY_ULTRA_HIGH; //优先级设为超高,可改用宏
|
||||||
dma_single_data_mode_init (DMA1, USER_DMA_ADC_CHANNEL, &dma_single_data_parameter);
|
dma_single_data_mode_init (DMAX, USER_DMA_ADC_CHANNEL, &dma_single_data_parameter);
|
||||||
/* 配置 dma 子连接 */
|
/* 配置 dma 子连接 */
|
||||||
dma_channel_subperipheral_select (DMA1, USER_DMA_ADC_CHANNEL, USER_DMA_ADC_SUBPERI);
|
dma_channel_subperipheral_select (DMAX, USER_DMA_ADC_CHANNEL, USER_DMA_ADC_SUBPERI);
|
||||||
|
|
||||||
/* enable DMA circulation mode */
|
/* enable DMA circulation mode */
|
||||||
dma_circulation_enable (DMA1, USER_DMA_ADC_CHANNEL);// 开启循环模式
|
dma_circulation_enable (DMAX, USER_DMA_ADC_CHANNEL);// 开启循环模式
|
||||||
|
|
||||||
/* enable DMA it */
|
/* enable DMA it */
|
||||||
dma_interrupt_enable (DMA1,USER_DMA_ADC_CHANNEL,DMA_INT_FTF);//DMA传输完成标志位 打开全部完成中断
|
dma_interrupt_enable (DMAX,USER_DMA_ADC_CHANNEL,DMA_INT_FTF);//DMA传输完成标志位 打开全部完成中断 4
|
||||||
dma_interrupt_enable (DMA1,USER_DMA_ADC_CHANNEL,DMA_INT_TAE);
|
// dma_interrupt_enable (DMAX,USER_DMA_ADC_CHANNEL,DMA_INT_TAE);//传输错误中断使能位 2
|
||||||
dma_interrupt_enable (DMA1,USER_DMA_ADC_CHANNEL,DMA_INT_FEE);
|
// dma_interrupt_enable (DMAX,USER_DMA_ADC_CHANNEL,DMA_INT_FEE);// 7
|
||||||
nvic_irq_enable (DMA_ADC_IRQn, DMA_ADC_PRIORITY_PRE, DMA_ADC_PRIORITY_SUB);
|
nvic_irq_enable (DMA_ADC_IRQn, DMA_ADC_PRIORITY_PRE, DMA_ADC_PRIORITY_SUB);
|
||||||
|
|
||||||
dma_channel_enable (DMA1, USER_DMA_ADC_CHANNEL);// enable DMA channel
|
dma_channel_enable (DMAX, USER_DMA_ADC_CHANNEL);// enable DMA channel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,7 +150,10 @@ void adc_config(void)
|
||||||
adc_inserted_channel_config (ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);//电压
|
adc_inserted_channel_config (ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);//电压
|
||||||
adc_inserted_channel_config (ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);//电流
|
adc_inserted_channel_config (ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);//电流
|
||||||
}
|
}
|
||||||
|
#ifdef DMAX
|
||||||
|
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
|
adc_routine_channel_config(ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 使能外部触发:这里使用软件触发,所以先禁用硬件触发 */
|
/* 使能外部触发:这里使用软件触发,所以先禁用硬件触发 */
|
||||||
// adc_external_trigger_source_config(ADCX, SEQUENCE_CHANNEL, ADC_EXTTRIG_ROUTINE_T0_CH0);
|
// adc_external_trigger_source_config(ADCX, SEQUENCE_CHANNEL, ADC_EXTTRIG_ROUTINE_T0_CH0);
|
||||||
|
|
|
@ -24,9 +24,10 @@
|
||||||
#define LB_I_DEL 2 //电流滤波最高最低各删除个数
|
#define LB_I_DEL 2 //电流滤波最高最低各删除个数
|
||||||
#define LB_T_DEL 1 //温度滤波最高最低各删除个数
|
#define LB_T_DEL 1 //温度滤波最高最低各删除个数
|
||||||
|
|
||||||
#define ADC_MODE_0 //规则组、单次转换、非扫描
|
// #define ADC_MODE_0 //规则组、单次转换、非扫描
|
||||||
// #define ADC_MODE_1 //注入组、单次转换、扫描、转换结束标志位采集
|
// #define ADC_MODE_1 //注入组、单次转换、扫描、转换结束标志位采集
|
||||||
// #define ADC_MODE_2 //注入组、单次转换、扫描、中断转换结束标志位采集
|
// #define ADC_MODE_2 //注入组、单次转换、扫描、中断转换结束标志位采集
|
||||||
|
#define ADC_MODE_3 //规则组、连续转换、扫描、DMA采集
|
||||||
|
|
||||||
/*
|
/*
|
||||||
adc模式配置参数
|
adc模式配置参数
|
||||||
|
@ -34,36 +35,47 @@ adc模式配置参数
|
||||||
DISABLE
|
DISABLE
|
||||||
*/
|
*/
|
||||||
#ifdef ADC_MODE_0
|
#ifdef ADC_MODE_0
|
||||||
|
|
||||||
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
||||||
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
||||||
// #define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
|
||||||
#define SCAN_STATUS DISABLE // 是否开启扫描模式
|
#define SCAN_STATUS DISABLE // 是否开启扫描模式
|
||||||
#define CHANNEL_LENGTH 1 // 通道数量:1~16
|
#define CHANNEL_LENGTH 1 // 通道数量:1~16
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ADC_MODE_1
|
#ifdef ADC_MODE_1
|
||||||
|
|
||||||
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
||||||
// #define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
|
||||||
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
||||||
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
||||||
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ADC_MODE_2
|
#ifdef ADC_MODE_2
|
||||||
#define CONTINUOUS_STATUS DISABLE // 是否开启连续转换
|
|
||||||
// #define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
#define CONTINUOUS_STATUS DISABLE // 不开启连续转换
|
||||||
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组
|
||||||
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
||||||
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
||||||
#define ADCX_IRQn ADC_IRQn
|
#define ADCX_IRQn ADC_IRQn
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ADC_MODE_3
|
||||||
|
|
||||||
|
#define CONTINUOUS_STATUS ENABLE // 开启连续转换
|
||||||
|
#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 规则组
|
||||||
|
#define SCAN_STATUS ENABLE // 是否开启扫描模式
|
||||||
|
#define CHANNEL_LENGTH 2 // 通道数量:1~16
|
||||||
|
#define DMAX DMA1
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* adc dma */
|
/* adc dma */
|
||||||
// #define DMAX DMA1
|
|
||||||
|
|
||||||
#ifdef DMAX
|
#ifdef DMAX
|
||||||
#define DMA_STATUS DISABLE // 是否开启dma *后续把这个定义改到#ifdef里*
|
|
||||||
#define USER_DMA_ADC_CHANNEL DMA_CH3 //DMA通道:ADC0:DMA_CH0 DMA_CH4
|
#define USER_DMA_ADC_CHANNEL DMA_CH3 //DMA通道:ADC0:DMA_CH0 DMA_CH4
|
||||||
// ADC1:DMA_CH2 DMA_CH3
|
// ADC1:DMA_CH2 DMA_CH3
|
||||||
// ADC2:DMA_CH0 DMA_CH3
|
// ADC2:DMA_CH0 DMA_CH3
|
||||||
|
@ -102,6 +114,7 @@ void adc_interrupt_int(void);
|
||||||
#ifdef DMAX
|
#ifdef DMAX
|
||||||
void adc_dma_config(void);
|
void adc_dma_config(void);
|
||||||
__weak void DMA1_Channel0_IRQHandler(void);
|
__weak void DMA1_Channel0_IRQHandler(void);
|
||||||
|
uint16_t BSP_ADCDataAcquire(uint8_t _index);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue