嵌入式常用功能模块实现原理

本文详细介绍了嵌入式系统中的六个关键功能模块:GPIO、ADC、定时中断、外部中断、PWM及DMA的工作原理与配置方法。通过具体的寄存器设置和应用场景,帮助读者深入理解各模块的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


嵌入式常用功能模块原理简述

1. GPIO

分为GPI(输入模式)和GPO(输出模式)。其中,GPI可根据单片机内部电路配置上拉电阻等,具体需要视单片机而定,GPO分为几种不同的输出模式,如开漏、推挽等输出模式,配合外部的电平转换电路和隔离电路,常做开关量。
此功能常用的寄存器一般包括方向寄存器和数据寄存器。方向寄存器控制GPO/GPI。而数据寄存器控制IO电平状态。此外还有控制驱动能力等的寄存器,视实际运用场合进行配置。

2. ADC

进行模拟量/数字量转换的模块。一般多通道共享一个AD转换器,因此常常搭配采样保持器使用。当然,这不是软件设计者考虑的东西。
ADC转换功能需要选择ADC时钟,时钟与寄存器中决定分频系数的位共同决定采样频率。根据实际需要常常采用用所需的采样频率反求ADC时钟的分频系数的方法。
ADC采样有硬件触发和软件触发的方式:硬件触发采用的是硬件定时进行采样,而软件触发是通过向相应寄存器写位进行触发。
ADC还带有比较功能,用来筛选一些无效的数据,此外还有连续转换、设定长采样时间等功能,这些也在相应寄存器里进行配置。

3. 定时中断

定时中断是基于单片机内部计数器实现的。通过对内部计数器的时钟源和分频系数的选择,可以确定一个时钟脉冲所占的实际时间的大小,因此,通过设置模数寄存器即可调节定时时间,再使能计数器(此处应认为定时器)溢出中断,当数值寄存器达到模数寄存器的值的时候,产生溢出中断信号,即可进入定时中断服务函数。
中断服务函数需要进行标志位清除。否则会导致中断不断被触发,PC指针一直在中断服务函数里,一直执行中断服务函数,不运行其他程序的内容。

4. 外部中断

外部IO中断。中断信号由外部设备上报,MCU接收中断信号,进入中断服务函数。由于是接收外部中断信号,所以需要复用对应的IO为输入模式,设置中断信号(沿/电平),设定中断优先级(有些单片机默认),使能IO中断,编写中断服务函数。(注意各个模块的中断向量表编号是固定的,编写服务函数的时候通过这个编号绑定中断服务函数)中断服务函数里需要清除中断标志位以让PC返回,中断函数不能是个死循环。

5. PWM(脉冲宽度调制)

PWM的实现原理:模数寄存器+计数器+通道数值寄存器。
脉冲周期:此周期的数值反应为模数寄存器的值。PWM需要配置时钟源。根据时钟源和自己所需要的脉冲周期,可以确定模数寄存器的数值。简单地形容一下公式:模数寄存器的值=目标周期/(1/时钟源频率)。
占空比:占空比的形式分为三种,中间对齐和两端对齐的方式,这里选取最常用的左端对齐方式。占空比可理解为为一个脉冲周期里高电平所占有的比例。假设脉冲周期1S,40%占空比则意味着高电平时间0.4s。因此,占空比的数值表示为通道数值寄存器的值。简单地形容一下公式:通道数值寄存器的值=占空比X模数寄存器的值=占空比X目标周期/(1/时钟源频率)

6. DMA

直接存储器访问。高效的批量数据传输功能,省去了CPU读取翻译指令的时间,会占用总线。分请求、响应、传输、结束四个步骤。DMA获得总线控制权后,CPU即刻挂起或者只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与IO口进行DMA传输。传输的两个重要参数:数据的起始位置、数据长度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值