EB配置MCAL的ADC模块

前言

学习使用配置ADC模块,比如电压、温度的采集与检测等。本文章只讲解配置,原理暂不做讲解
EB Tresos需要的模块:
1.Port模块:配置ADC引脚
2.Mcu模块:时钟
3.Platfrom模块:使能ADC的中断
4.ADC模块:配置相关ADC的参数

1.Port模块的配置

在这里插入图片描述

本次使用的ADC: ADC0:一个通道,ADC0_X_3。 ADC1:三个通道,ADC1_X_0、ADC1_X_2和ADC1_S15

2.Platform模块的配置

使能ADC0与ADC1的中断,路径为Platform – Interrupt Contrller – 创建并进入 – Interrupt Configuration – 创建选择中断并使能中断
在这里插入图片描述

3.Mcu模块的配置

Mcu这里主要是配置ADC所需的时钟和使能ADC

使能ADC

路径:Mcu – McuModeSettingConf – 创建并进入 – McuPeripheral – 创建并使能ADC
在这里插入图片描述

配置ADC的时钟

根据S32K312的时钟树,ADC的时钟来源于CORE_CLK
在这里插入图片描述
采用外部晶振,使能PLL,然后分频得到
在这里插入图片描述

4.ADC模块的配置

使能ADC的中断

使能ADC的中断,ADC0与ADC1
在这里插入图片描述

添加ADC的Trigger

在这里插入图片描述

添加AdcHwUnit的通道

本次共使用ADC0与ADC1,采用中断模式
在这里插入图片描述

ADC0的配置(单个通道)

添加ADC的通道,选择Port已配置的引脚,例如ADC0配置的是X3,选择通道就该为X3开头的,要一一对应
在这里插入图片描述
添加ADC的组,这里是管理通道的,一个组可以管理多个通道
路径:ADCGroup – 创建并进入 – 设置参数,本次选用oneshot模式,并使能中断函数
在这里插入图片描述
在AdcGroupDefinition添加通道,管理多个通道
在这里插入图片描述

ADC1的配置(多个通道)

同理进入ADC1的配置,共3个通道
在这里插入图片描述
进入Group管理,其他的同ADC0配置,设置中断函数
在这里插入图片描述
在这里,ADC配置就结束了

简要代码

#include "Adc.h"  //Import the header file generated by EB

//Single acquisition  ADC0
static uint8 Adc0ConversionCompleteState = 0;
static Adc_ValueGroupType Adc0GroupResultBuffer = 0;
static Adc_ValueGroupType Adc0ReadGroupResult = 0;

//Multiple acquisition  ADC1
#define ADC1_GROUP_NUMBER        (2U)
static uint8 Adc1ConversionCompleteState = 0;
static Adc_ValueGroupType    Adc1GroupResultBuffer[ADC1_GROUP_NUMBER] = {0};
static Adc_ValueGroupType    Adc1ReadGroupResult[ADC1_GROUP_NUMBER] = {0};

void Adc0_Notification(void)
{
    Adc0ConversionCompleteState = 1;
}

void Adc1_Notification(void)
{
    Adc1ConversionCompleteState = 1;
}

void enable_and_start_adc_conversion_(void)
{
    Adc0ConversionCompleteState = 0;
    Adc1ConversionCompleteState = 0;
    //Set the conversion result buffer
    Adc_SetupResultBuffer(AdcHwUnit_1, &Adc0GroupResultBuffer);				//ADC0
	Adc_SetupResultBuffer(AdcHwUnit_0, Adc1GroupResultBuffer);				//ADC1
    //Enable interrupt function 
    Adc_EnableGroupNotification(AdcHwUnit_0);
	Adc_EnableGroupNotification(AdcHwUnit_1);
    //Open conversion
    Adc_StartGroupConversion(AdcGroup_0);
    Adc_StartGroupConversion(AdcGroup_1);
}

float get_Adc0_value(void)
(
    float32 adc0_value = 0;
    if(Adc0ConversionCompleteState == 1)
    {
        Adc0ConversionCompleteState = 0;
        Adc_ReadGroup(AdcHwUnit_0, &Adc0ReadGroupResult);
 		adc0_value = Adc0ReadGroupResult;
 		Adc_StartGroupConversion(AdcHwUnit_0);
    }
    return adc0_value;
)

void get_Adc1_values(void)
{
   float32 adc1_value1 = 0;
   float32 adc1_value2 = 0;
    if(Adc0ConversionCompleteState == 1)
    {
        Adc0ConversionCompleteState = 0;
        Adc_ReadGroup(AdcHwUnit_1, &Adc1ReadGroupResult);
        adc1_value1 = Adc1ReadGroupResult[0];
        adc1_value2 = Adc1ReadGroupResult[1];
 		Adc_StartGroupConversion(AdcHwUnit_1);
    }
}

总结

后续进行更新吧,要抓紧学技术了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值