Freescale KV3064PM100SFARM芯片 ADC模块配置 驱动开发

2024-04-10 15:32

本文主要是介绍Freescale KV3064PM100SFARM芯片 ADC模块配置 驱动开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ADC模块驱动开发,这里只教ADC驱动开发技术小白或者第一次做ADC驱动开发的,入不了大佬就法眼。

因为我也是第一次做ADC驱动开发配置,自己摸索,找文档,看各种大佬经验之谈,后面才发现有些内容都是雷同,不过看多了,也能学到很多,比如知道A模块可以软件启动,B模块不支持软件启动,只支持硬件启动,所以下面我在开发ADC模块的时候,我选择A模块软件启动。由于用了半个月的时间才使ADC模块可以工作,这其中的困惑和不明之处我都知道,也明白ADC驱动开发针对不同MCU,有不同的方法去实现,但是万变不离其宗,就是给ADC模块正确的状态,当然这要你的硬件设计是正确的情况下,当然你也不要一味的相信你的硬件设计工程师,我就是相信我的硬件工程师,说他使用了差分模式,结果验证下来证明他没有使用差分模式,好了,废话不多说。

首先你要先看原理图,弄清楚MCU的引脚使用情况,明白ADC引脚的配置,明白输入如何输入的,然后再去查看MCU芯片手册,找到ADC这部分,首先先简单查看一下资源分配情况,以及各个工作状态,接下来你要确定你使用哪个编辑器,我这边使用的是IAR编辑器,至于这些库的调用自己可以上网查看一下如何配置,接下来最重要的是查看ADC软件部分每个function具体是做什么内容的,它的目的,最终是给哪个寄存器或者控制器赋值的,在这部分,只有你真正的弄懂,接下来你才可以知道如何去开发ADC驱动,配置你想要的状态,这也是最耗时间的,当然这对你的帮助也是最大的,因为当你真正懂的了ADC工作的原理后,以后不管哪种MCU,ADC驱动开发都难不倒你。下面是我配置ADC的代码和经验,仅供参考。

ADC模块配置方法:

在IAR编辑器上编写ADC模块,配置KV3064PM100SFARM芯片 ADC模块。第一次配置ADC模块,编写ADC驱动,刚开始的时候一点都不懂,一点思绪都没有,而且对这个芯片也不熟悉,只能硬着头皮去看芯片文档,找到ADC部分查看各种寄存器,控制器的相关信息,然后在网上看各种资料,以及别人配置ADC时是怎么配置的,忽然发现网上几乎所有的内容都是说调用ADC_start函数,但是在IAR上找不到这个函数,最后找到一篇关于K60系列的ADC配置,有一点懂的ADC配置是怎么配置的,但是和KV30芯片还是不一样的,最后在IAR上查看各种库函数,理清各个函数之间的关系,忽然对ADC配置和如何工作有了一个清晰理解,这是对ADC配置最关键的一步,所以如果不懂ADC是如何工作的,最好把它们之间的库函数关系弄懂,弄懂以后,接下来再仔细查看芯片文档,如果ADC要工作的话,各个寄存器,控制器的状态会是什么,比如要差分工作,硬件上是使用ADC0还是ADC1,然后SC1,CFG1,CFG2各个状态是什么样的,这就需要你把他们的状态给出来,根据你的需求来,然后直接赋值,给他们状态,直接上代码:

这是先获取默认配置,然后设置ADC初始状态,使用A模式,不能选用B模式,B模式用于硬件触发,选择软件触发。

static void ADC16_Configuration(void)
{adc16_config_t adcUserConfig;  /** Initialization ADC for 16bit resolution, DMA mode, normal convert speed, VREFH/L as reference,* enable continuous convert mode.*/ADC16_GetDefaultConfig(&adcUserConfig);adcUserConfig.resolution                 = kADC16_Resolution16Bit;adcUserConfig.enableContinuousConversion = true;adcUserConfig.clockSource                = kADC16_ClockSourceAsynchronousClock;adcUserConfig.clockDivider               = kADC16_ClockDivider8;//八分频adcUserConfig.enableLowPower             = true;adcUserConfig.longSampleMode             = kADC16_LongSampleCycle24;adcUserConfig.referenceVoltageSource     = kADC16_ReferenceVoltageSourceVref;ADC16_Init(DEMO_ADC16_BASEADDR0, &adcUserConfig);
#if defined(FSL_FEATURE_ADC16_HAS_CALIBRATION) && FSL_FEATURE_ADC16_HAS_CALIBRATION/* Auto calibration */if (kStatus_Success == ADC16_DoAutoCalibration(DEMO_ADC16_BASEADDR0)){PRINTF("ADC16_DoAutoCalibration() Done.\r\n");}else{PRINTF("ADC16_DoAutoCalibration() Failed.\r\n");}#endif#if defined(FSL_FEATURE_ADC16_HAS_MUX_SELECT) && FSL_FEATURE_ADC16_HAS_MUX_SELECTADC16_SetChannelMuxMode(DEMO_ADC16_BASEADDR0,kADC16_ChannelMuxA);
#endif /* Enable software trigger.  */ADC16_EnableHardwareTrigger(DEMO_ADC16_BASEADDR0, false);
}

根据硬件连接,自己想要的工作状态,配置寄存器和控制器的状态。

    DEMO_ADC16_BASEADDR0->CFG1 = 0x1C;DEMO_ADC16_BASEADDR0->CFG2 = 0U;DEMO_ADC16_BASEADDR0->SC2 = 0U;DEMO_ADC16_BASEADDR0->SC3 = 0x8U;DEMO_ADC16_BASEADDR0->SC1[0] = 0x40; 

这个函数是配置每个引脚

ADC16_SetChannelConfig(DEMO_ADC16_BASEADDR0, DEMO_ADC16_CHANNEL_GROUP0, &ADC0_channelConfig[0]);

 使用单端模式,00100引脚

adc16_channel_config_t ADC0_channelConfig[4] = {{.channelNumber = 4U,.enableDifferentialConversion = false,.enableInterruptOnConversionCompleted = true,}

 配置好后,就可以通过判断Channel的状态来确认ADC是否开始工作了,最后获取Channel转换值,并打印

 if ( 0U != ADC16_GetChannelStatusFlags(DEMO_ADC16_BASEADDR0,DEMO_ADC16_CHANNEL_GROUP0)){ADC0_SE4=ADC16_GetChannelConversionValue(DEMO_ADC16_BASEADDR0, DEMO_ADC16_CHANNEL_GROUP0);  PRINTF("ADC0_SE4 = %u\r\n",ADC0_SE4);PRINTF("ADC0_SE4 十六进制 = %0x\r\n",ADC0_SE4);}

这就是ADC驱动开发的整体流程,针对其他的MCU也一样的思路,就是如何正确的给各个寄存器或者控制器状态,使其正常工作。

这篇关于Freescale KV3064PM100SFARM芯片 ADC模块配置 驱动开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891453

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据