嵌入式常用功能模块原理简述
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传输。传输的两个重要参数:数据的起始位置、数据长度。