惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
L
LINUX DO - 热门话题
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threat Research - Cisco Blogs
AI
AI
B
Blog RSS Feed
S
Schneier on Security
雷峰网
雷峰网
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Cloudbric
Cloudbric
L
LINUX DO - 最新话题
罗磊的独立博客
有赞技术团队
有赞技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
博客园 - Franky
Attack and Defense Labs
Attack and Defense Labs
The Cloudflare Blog
Webroot Blog
Webroot Blog
Last Week in AI
Last Week in AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 叶小钗
美团技术团队
L
Lohrmann on Cybersecurity
T
The Blog of Author Tim Ferriss
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
Know Your Adversary
Know Your Adversary
O
OpenAI News
博客园 - 【当耐特】
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
PCI Perspectives
PCI Perspectives
H
Heimdal Security Blog
I
InfoQ
GbyAI
GbyAI
T
Threatpost
C
Cisco Blogs

Watermelonabc的Blog

福州大学毛概期末复习 x86 汇编语言详解 - 2 CCB 2026 Half-Final Guangzhou 视频也可以含恶意代码吗 Hello,2026 2025 福州大学算法与数据结构复习 2025 福州大学习概期末复习 Frida 入门 记一场贴吧交流 虚拟机保护 2025 强网杯 S9 Reverse 复现 你如何在 FZU 取到快递 2025 福州大学离散数学笔记 2025 福州大学数字逻辑笔记 C# 逆向入门 安卓刷机一点通 Z3-Solver 教程 出题人的 “恶意” 编译器为我做了什么 CSAPP Lab2 Note Hash 系列算法 程序脱壳 Linux 简单教程 安卓逆向介绍 IDA 类型修复 到旗山了
福州大学单片机原理与应用(跨学科)复习
Watermelonabc · 2026-06-22 · via Watermelonabc的Blog

CH1 嵌入式系统概述

1、嵌入式系统的定义

以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、安全性、成本、体积、重量、功耗、环境等方面有严格要求的专用计算机系统。

2、嵌入式系统和通用计算机系统的比较(共同点和不同点)、嵌入式系统的特点

共同点:都属于计算机系统,由硬件和软件组成;工作原理相同,都属存储程序机制;从硬件上看,嵌入式系统和通用计算机系统都是由 CPU、存储器、I / O 接口和中断系统等部件组成;从软件上看,嵌入式系统软件和通用计算机软件都可以划分为系统软件和应用软件两类。

不同点:形态,功能,资源,价值,功耗,开发方式。

特点:专用性强、可裁剪性、实时性好、可靠性高、生命周期长、不易被垄断

3、嵌入式系统的架构:冯・诺依曼结构和哈佛结构

冯・诺依曼结构:采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)

哈佛结构(存储器结构):程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。

4、嵌入式系统处理器:MPU、MCU、DSP、SoC

分别为微处理器 (MPU)、微控制器(MCU,俗称单片机)、数字信号处理器 (DSP) 和嵌入式片上系统(System on Chip ,简称 SoC)

MCU 的特点是集成度高、控制能力强、可靠性强、低功耗、性价比高、系统设计周期短。最大特点是单片化,体积大大减小,从而使功耗和成本下降,可靠性提高。

5、MCU 的基本组成:CPU、时钟、存储器、通用 I/O、定时器/计数器、外设等

单片机的 CPU 由运算器和控制器组成,有运算和控制的功能。单片机的指令代码就是通过 CPU 执行的。

时钟时钟本质上就是固定频率的脉冲信号,为 MCU 工作提供基准时序。时钟频率直接决定了 MCU 的执行速度。

单片机的存储器包括存放代码指令的 ROM(或 Flash),以及存放变量、数据的 SRAM

通用 I/O 口 (GPIO) 可以当作输入或输出接口。大部分单片机为了减少引脚数量,I/O 口还复用作为其它特殊功能引脚,比如 PWM 输出、捕获输入、串行通信、外部中断输入等。

定时器 / 计数器能够提供精确定时,或者对外部事件进行计数。内部硬件本质是计数器,当计数器脉冲来源是固定频率脉冲时,可通过计数来实现计时。

MCU 常用的外设模块有:模数转换模块 (ADC)、PWM 模块、捕获模块 (CAP)、通信模块等等。不同芯片有不同的外设配置

6、CPU 功能

CPU 有运算和控制的功能。单片机另外增设了 “面向控制” 的处理功能,如位处理、查表、跳转、乘除法运算、状态检测、中断处理等,增强了实用性。

7、总线 BUS:地址总线、数据总线、控制总线

总线是一组相关逻辑信号的集合。不同芯片有不同的总线标准。

地址总线 (Address Bus, AB):单向,用于传递地址信息。地址线的数目决定了可寻址的存储空间。一根地址线有两种状态,即可以区分两个不同的存储单元,或者说可以寻址两个存储单元;如果有 nn 根地址线,则可以寻址 2n2n 个存储单元。

数据总线 (Data Bus, DB):一般为双向,用于 CPU 与存储器、CPU 与外设、或外设与外设之间传送数据信息。我们平常说的 8 位、16 位或 32 位单片机,指的就是 CPU 一次能够处理的数据位数,这也决定了单片机数据总线的根数(宽度)。

控制总线 (Control Bus, CB):是单片机系统中所有控制信号线的总称,用来传递控制信息。

CH2 C2000 系列微控制器及硬件平台

1、F28027 主要资源

32 位 CPU、时钟(40MHz/50MHz/60MHz)、哈佛总线架构、3.3V 单电源供电、外设资源(GPIO、中断 PIE、CPU 定时器、ePWM、eCAP、ADC、SCI、SPI、I2C)

2、引脚。功能复用、引脚有效符号等

F28027 的引脚按其功能进行分类,可以分为 JTAG 接口、Flash、时钟信号、复位引脚、ADC 模拟输入信号、CPU 和 I / O 电源引脚、电压调节控制引脚、GPIO 和外设信号。

3、MCU 硬件功能概述

F28027 有一个 32 位的 CPU 内核(TMS320C28x),主频高达 60MHz,同时它具有 GPIO、模数转换器 ADC、增强型 PWM 模块、增强型捕获模块、串口通信接口、串行外设接口等外设。功能丰富强大,用户可以方便地用它来开发高性能的微控制系统。片内集成了 Flash 存储器,程序可以直接烧写到 Flash 中,实现脱机运行。

4、内存映射(数据空间 / 地址空间,空间大小与地址的转换)

M0 SARAM 和 M1 SARAM 大小均为 1K×16 位,地址范围分别为0x000000 ~ 0x0003FF0x000400 ~ 0x0007FF。当复位后,堆栈指针指向 M1 块的起始地址,堆栈指针向上生长。M0、M1 可以映射到程序区和数据区

0x000800 ~ 0x0001FFF 对应外设帧 0,为寄存器映射空间,该空间直接通过 CPU 内存总线访问。

0x006000 ~ 0x0006FFF 对应外设帧 1,为寄存器映射空间,该空间通过 32 位外设总线访问。

L0 SARAM 的大小为 4K×16 位,即可以映射到程序区,也可以映射到数据区。L0 SRAM 地址为双映射,可以映射到0x008000 ~ 0x008FFF,也可以映射到0x03F8000 ~ 0x3F8FFF

用户 OTP 区的大小为 1K×16 位,地址范围为 0x3D7800 ~ 0x3D7BFF,即可以映射到程序区,也可以映射到数据区。

0x3D7C80 ~ 0x3D7CBF 为内部振荡器和 ADC 模块的校正数据空间。由厂家进行编程,用户不可编程。

0x3D7CC0 ~ 0x3D7CDF 该存储空间保存 MCU 工作模式引导程序。在 MCU 初始化引导时调用引导程序进入相应模式。

0x3D7E80 ~ 0x3D7EAF 预留给 TMX / TMP 系列芯片使用。

0x3D7FFF 保存设备相关信息,对于 TI 28027PT 读取值为 0x00CF。

0x3F0000 ~ 0x3F7FF7 闪存分为四个扇区,每个扇区 8K×16,分别是扇区 D、扇区 C、扇区 B、扇区 A。如果使用代码安全模式,Flash 空间 0x3F7F80 - 0x3F7FF5不能用来保存程序代码或数据,必须将这些区域编程为 0。如果不使用代码安全模式,可以用来保存程序或数据,但是 0x3F7FF0 ~ 0x3F7FF5 s 只能用于保存数据,不能用于保存程序代码。

0x3F7FF8 ~ 0x3F7FFF 128 位密码区。密钥由用户编程时写入闪存。

0x3FE000 ~ 0x3FFFFF BOOT ROM 用于保存 TI 的引导装载程序和 IQ 数学表,在芯片出厂时已经编程好。包含 IQ 数学表、IQ 数学函数、Bootloader 函数、Flash 应用程序接口库、ROM 版本和 ROM 校验和、复位向量和 CPU 向量表几个部分。

0x3FE000 ~ 0x3FFFFF F28027 的 CPU 向量表。在 CPU 向量表中,唯一可以直接使用的是位于0x3FFFC0的复位向量,复位向量保存着 InitBoot 函数的入口地址。

5、时钟信号 SYSCLKOUT

由锁相环模块输出。为了达到节能目的,TI 对时钟提供一种管理机制,每个外设模块都可以对时钟输入进行使能或禁止(CLK ENABLE),只对需要工作的模块提供时钟信号,不工作的模块不提供时钟信号。系统时钟可以再次被处理,生成低速时钟信号 LSPCLK,用于低速外设模块,如 SCI 模块和 SPI 模块。

F28027 提供了四种时钟来源。包括:1、提供外接晶振的接口来实现内部振荡电路的工作;2、直接用外接时钟信号 XCLKIN;3、内部振荡器 Internal OSC1;4、内部振荡器 Internal OSC2。内部振荡器的工作频率是 10MHz,单片机上电复位后默认的时钟来源是 Internal OSC1。

6、看门狗电路(本质是定时器,“喂狗”:0x55AA)

F28027 提供了看门狗模块。该模块本质上是一个计数器,在计数器溢出时,它会产生一个复位信号,来复位 CPU 或者产生看门狗中断。为了不让它产生复位信号,那就需要在计数器溢出前对它清零,俗称 “喂狗”。

时钟源 OSCCLK 经过 512 分频后再进行可编程的预分频 (Watchdog Prescaler),输出脉冲作为看门狗计数器(Watchdog Counter)的计数脉冲。Watchdog 55+AA Key Detector 是看门狗的 “喂狗” 操作。“喂狗” 时,需要先写入数据 “55” 给寄存器 WDKEY,接着写入 “AA” 给寄存器 WDKEY,硬件就会发出有效的信号 Good Key,用于复位看门狗计数器。

当程序运行出现问题,比如 “死机” 或进入 “死循环”,那么设定的 “喂狗” 程序将无法执行,看门狗计数器将溢出并发出触发信号,通过 Generate Output Pulse 模块输出 512 个时钟周期的低电平信号。

7、片内上电复位 / 欠电压复位

上电复位电路(POR)的目的是在整个上电过程,对器件产生一个有效的复位信号。器件上电过程结束后,欠压复位电路(BOR)对 VDDIO 进行监测,如果使能片内电压稳压器,还对 VDD 进行监测。POR 的电压保护点比 BOR 低。当电压低于相应的保护点时,复位电路把 XRS 拉至低电平引起复位过程。

CH3 微控制器程序设计基础

1、编程语言

机器语言就是用二进制代码表示的计算机能直接识别和执行的一种机器指令集合,每一条机器指令在计算机内部都有相应的电路来完成它,是唯一的计算机能够直接识别和执行的语言。CPU 的所有指令集构成该计算机的指令系统

汇编语言是面向机器的程序设计语言。由汇编语言编写的程序,计算机无法直接识别,需把汇编语言翻译成机器语言,这种具有翻译功能的程序叫做汇编程序。汇编程序把汇编语言翻译成机器语言的过程称为汇编。汇编语言的指令一般都由操作码和操作数组成,操作码也被称为指令助记符。

机器语言和汇编语言都是低级语言。高级语言是一种贴合人类逻辑思维、便于直观理解的计算机语言,高级语言既接近自然语言又可以使用数学表达式,并且相对独立于计算机,可以跨计算机使用。编译的程序代码通常比用汇编语言设计的程序代码更长、执行更慢。

2、CPU 执行指令 5 个过程:取指令、指令译码、取操作数、执行指令、结果写回

取指令:将指令从程序存储器取出。程序计数器 PC 中的数值指示当前指令在程序存储器中的位置。当一条指令被取出后,PC 中的数值将根据指令长度自动递增,指向下一条指令。

指令译码:指令译码器按照预定的指令格式,对取回的指令进行译码,识别出不同的指令类别以及各种获取操作数的方法。

取操作数:从存储器或者 CPU 寄存器中获取操作数。操作数指出了参与运算的数据或数据所在的地址,而如何得到就由芯片的寻址方式决定。C28x 支持四种基本寻址方式:直接寻址方式、间接寻址方式、堆栈寻址方式、寄存器寻址方式。同时,C28x 还支持一些特殊寻址方式,如数据/程序/IO 空间寻址方式、程序空间间接寻址方式等。

执行指令:完成指令所规定的操作,实现指令的功能。为此,CPU 的不同部分被连接起来,以执行所需的操作。

结果写回:把执行指令阶段的运行结果数据写回到存储器或 CPU 寄存器。

在结果数据写回之后,当条指令执行完毕。CPU 从程序计数器 PC 中取得下一条指令地址,开始新一轮的循环。

为了提高效率,C28x 采用 8 个独立阶段来完成以上 5 个过程。指令以流水线方式执行,在任何时候,最多可以执行八个指令,每个指令处于不同的完成阶段。

3、嵌入式 C 语言:几个特殊保留字(volatile、interrupt)

嵌入式 C 语言的四大要素就是数据及其处理、程序流程控制、函数与中断服务程序以及指针。

volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

1
2
3
4
5
volatile int i=10;
int a = i;
...

int b = i;

volatile 指出 i 是随时可能发生变化的,每次使用它的时候必须从 i 的地址中读取,因而编译器生成的汇编代码会重新从 i 的地址读取数据放在 b 中。而优化做法是,由于编译器发现两次从 i 读数据的代码之间的代码没有对 i 进行过操作,它会自动把上次读的数据放在 b 中。而不是重新从 i 里面读。这样以来,如果 i 是一个寄存器变量或者表示一个端口数据就容易出错,所以说 volatile 可以保证对特殊地址的稳定访问。

interrupt/__interrupt 为编译器扩展的保留字,用于声明中断服务函数(ISR)。ISR 函数必须定义为 void 返回类型,且没有参数。例如:__interrupt void int_handler(void)。编译器会在编译时执行特殊的操作:自动保存和恢复寄存器;生成特殊的中断返回指令 IRET

CH4 软件架构与 CCS 集成开发环境

1、如何使用结构体指针操作寄存器

结构体指针的定义:

  • 第一步:声明结构体类型,结构体类型名为GPIO_Obj
    结构体成员包含了 GPIO 模块的所有寄存器,结构体成员严格按照寄存器的地址顺序排列,并保留没有用到的地址空间,
  • 第二步:声明结构体指针类型,结构体指针类型名为GPIO_Handle
    typedef GPIO_Obj * GPIO_Handle;
  • 第三步:定义结构体指针变量 myGpio。
    GPIO_Handle myGpio;
  • 第四步:结构体指针变量初始化。
    myGpio = (void*)GPIO_BASE_ADDR; //GPIO_BASE_ADDR为GPIO模块所有寄存器的首地址0x0000 6F80

接下来,以 GPADAT 寄存器为例介绍寄存器的读写操作方法。

1
2
myGpio->GPADAT = 5; 
data = myGpio->GPADAT;

2、寄存器位操作

寄存器位操作一般都是通过逻辑 “与” 和逻辑 “或” 来实现的。在对某个位操作的同时不能影响到寄存器的其他位。例如,对GPADATGPIO2这个位进行写和读操作:

1
2
3
4
5
myGpio ->GPADAT &= (~((uint32_t)1 << 2)); 
myGpio ->GPADAT |= (uint32_t)1<< 2;


Bitdata= ((myGpio -> GPADAT >> 2) & 0x0001);

3、软件架构

分为主程序层、应用层、用户模块层和芯片模块层。

TI 公司为各系列 MCU 提供了丰富的固件库函数和技术支持。固件库是一个固件函数包,它由程序、数据结构和宏组成,包括 MCU 所有系统级和外设标准驱动函数 (接口)。对于初学者而言,可以直接调用这些驱动函数,快速实现需要的应用。

用户模块层对 MCU 驱动函数进行封装,完成具体的功能操作。

应用层对用户函数进行封装。

主程序层主要是对 MCU 的初始化配置和应用层功能函数的调用,实现复杂的 MCU 功能。初始化部分包含系统和外设模块配置函数和初始化函数。

CH5 通用输入输出口

1、GPIO 基础知识

GPIO 是微控制器的数字输入输出模块,可以实现微控制器与外部设备的数字交换。数字输入功能主要是将外部设备的开关量信号转换成 CPU 可读取的数字信号 “1”、“0”,从而获知外部设备的运行状态;数字输出功能则是将 CPU 的数字控制信号 “1”、“0” 转换成引脚高、低电平信号,从而实现对外部设备运行状态控制。

GPIO 输出驱动器主要由多路选择器、输出控制和 MOS 管组成。

多路选择器根据用户配置决定该引脚是用于通用 GPIO 还是复用功能输出。通用输出时,该引脚的输出信号来自于 GPIO 输出数据寄存器。复用功能输出时,该引脚输出信号来自于片上外设,并且一个引脚输出可能来自多个不同外设。同一时刻,一个引脚只能使用一种输出功能

根据数字电路输出电平的 “强弱”,可将 IO 输出分为图腾柱输出(推挽输出 / 推拉输出)、开漏输出、下拉电阻输出 3 种。

图腾柱输出电路输出为强 1,强 0 或高阻态。推挽输出既提高电路的负载能力,又提高开关速度,适用于输出 0V 和 VDD 的场合。输出强 1:上管导通,下管截止,OUTPUT 输出高电平;输出强 0:上管截止,下管导通,OUTPUT 输出低电平;高阻状态:上管截止,下管截止,无影响

开漏输出:与图腾柱方式相比,只有下管受控,上管断开或没有上管。对于与 Vss 相连的 MOS 管来说,其漏级是开路的。当内部输出 “0” 时,下管导通,引脚相当于接地,外部输出低电平;当内部输出 “1” 时,下管截止,由于上管也截止,外部输出既不是高电平,也不是低电平,而是高阻态。如果想要外部输出高电平,必须接有上拉电阻。上拉电阻输出电路为强 0 弱 1 电路

下拉电阻输出电路为强 1 弱 0 电路。与图腾柱方式相比,只有上管受控,没有下管。

2、C2000 的 GPIO 模块(概述、软件架构)

F28027 有 22 个 GPIO(DIO)、6 个 AIO(与 AD 采样通道共用引脚);GPIO 引脚分组管理,分为端口 A(由 GPIO0 - GPIO31 组成)、端口 B(由 GPIO32-GPIO38 组成)。

GPIO 引脚与最多 3 种外设功能引脚共用,使用前需要先进行模式选择。

GPIO 引脚可工作在上拉模式或推挽模式。

GPIO 引脚的电气特性:输入时,低电平电压范围为:(Vss-0.3)V ~ 0.8V,高电平电压范围为:2V ~(VDD + 0.3)V。输出时,逻辑 “1” 输出的电压最低为 2.4V,逻辑 “0” 输出的电压最高为 0.4V。

CPU 对输入引脚的信号确认有 3 种方式。非同步(异步输入)方式、同步时钟方式、采样窗方式。默认情况下,所有输入引脚信号被设置为同步于系统时钟 SYSCLKOUT。

采样窗方式下,输入信号首先被同步到系统时钟 SYSCLKOUT,然后输入信号状态持续时间达到指定数量周期数时,输入状态才允许改变。

为了限定信号,在固定的周期进行输入信号采样。用户指定采样周期(也称采样间隔时间)是相对于系统时钟(SYSCLKOUT)而言的。

采样的次数可以选择为 3 次采样或者 6 次采样,通过寄存器 GPAQSEL1、GPAQSEL2、GPBQSEL1 和 GPBQSEL2 来设置。当连续 3 次或 6 次信号状态一样,输入状态的改变才会被确认

采样窗口就是输入信号被确认的时间长度。为了让输入限定能够检测到输入的变化,信号电平必须在采样窗口或者更长的时间内保持稳定。GPIO 引脚的输入信号经过限定器后输出信号就对小毛刺 A 进行了滤波。

3、软件思维导图:配置 GPIO 控制 LED 和按键

GPIO 的硬件初始化配置都需要通过 GPIO 的寄存器实现,包括 GPIO 控制寄存器(GPIO Control Registers)和 GPIO 中断
和低功耗唤醒选择寄存器(GPIO Interrupt and Low Power Mode Select Registers)。GPIO 的读写操作通过 GPIO 数据寄存器操作(GPIO Data Registers)。

由于引脚功能的复用性,使用前需要根据硬件系统的资源需求,统筹考虑把引脚当作 GPIO 或其他外设功能。优先考虑并预留外设功能的需求。

步骤 1:配置引脚功能 (GPIO_setMode)。
步骤 2:使能 / 禁止内部上拉电阻 (GPIO_setPullUp)。
步骤 3:配置输入限定 (GPIO_setQualification、GPIO_setQualificationPeriod)。
步骤 4:配置引脚方向 (GPIO_setDirection)。
步骤 5:低功耗唤醒模式唤醒源 (GPIO_lpmSelect)。
步骤 6:选择外部中断源(GPIO_setExtInt)。

CH6 中断系统

1、中断基础知识(中断概念、中断处理过程、中断嵌套)

单片机的中断系统能够加强 CPU 对多任务事件的处理能力。中断是 CPU 对系统发生的某个事件作出的一种反应。引起中断的事件称为中断源。中断源向 CPU 提出处理的请求称为中断请求。发生中断时被打断程序的暂停点称为断点。CPU 暂停现行程序而转去响应中断请求的过程称为中断响应。中断响应的程序称为中断处理程序。CPU 执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现通过软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序。

根据来源不同,中断可分为硬件中断(Hardware Interrupt)和软件中断(Software Interrupt);根据中断请求能否被屏蔽,中断可分为可屏蔽中断(Maskable Interrupt)和非可屏蔽中断(Non-Maskable Interrupt,NMI)

中断服务程序的入口地址称为中断向量

中断的优先级主要用来描述不同事件的重要程度。如果在执行一个中断时又被另一个更重要的事件打断,暂停该中断处理过程转而去处理这个更重要的事件,处理完毕后再继续处理本中断的过程称为中断的嵌套

程序设计人员可以通过设置相应的中断屏蔽位,禁止 CPU 响应某个中断,从而实现中断屏蔽。但值得注意的是,尽管某个中断源可以被屏蔽,但一旦该中断发生,不管该中断屏蔽与否,它的中断标志位都会被置位,而且只要该中断标志位不被清除,它就一直有效。

MCU 的中断处理过程包括中断请求、中断响应、中断服务、中断返回四个步骤。当外设发出中断请求时,如果从外设到 CPU 的中断使能被允许,那么进入中断响应阶段。由于 CPU 执行完中断处理程序之后要返回被中断的地方继续执行原来程序,因此在执行中断服务程序之前,要把断点处地址和现场进行保护

单一中断请求时,CPU 暂停正在运行的主程序转而运行中断服务程序,中断处理完毕后运行原程序。当多个中断请求同时挂起且不允许中断嵌套时,CPU 首先处理高优先级中断事件,然后再处理低优先级中断事件,最后返回执行主程序。允许中断嵌套时,大多数 MCU 高优先级中断可以中断低优先级中断服务程序,低优先级中断不能中断高优先级中断服务程序

2、C2000 的中断系统

中断资源包含 1 个非可屏蔽中断 NMI 和 16 个可屏蔽中断(INT1-INT14、RTOSINT、DLOGINT)

可屏蔽中断(INT1~INT12)采用外设中断扩展(PeripheralInterrupt Expansion,PIE)来进行协助管理,定时器 1、2 对应的 INT13、INT14 中断和 NMI 不经过 PIE,直接与 CPU 相连。

PIE 模块参与管理的中断有以下四类:

  • TINT0:定时器 0 中断,可屏蔽中断;
  • 外部中断:XINT1、XINT2、XINT3;
  • 唤醒中断:WAKEINT,包括看门狗和低功耗唤醒;
  • 外设中断:SPI、SCI、I2C、EPWM、HRPWM、ECAP、ADC 等。

PIE 最多可管理 96 个独立中断源,这 96 个中断源分成 12 组、每组 8 个,分别对应 CPU 级 12 个可屏蔽中断(INT1~INT12)。96 个中断源具有独立的中断向量,均存储在专用 RAM 中,用户可以修改这些中断向量。

3、PIE 三级中断管理机制

F28027 的中断采用的是 3 级中断管理机制,分别是外设级、PIE 级和 CPU 级。对于某一个具体的外设中断请求,任意一级的不许可,CPU 最终都不会响应该外设中断。

外设模块产生中断事件时,相应外设模块寄存器的中断标志位 IF 被置位,如果对应的外设中断允许位 IE 被使能,则外设就向 PIE 发送一个中断请求。如果外设中断允许位 IE 未被使能,则该中断被屏蔽,不会向 PIE 发送中断请求。外设模块的中断标志位有的会在中断响应后自动清除,有的需要通过软件来清除。外部中断比较特殊,没有中断标志位,如果中断使能允许,外部中断请求信号直接送达 PIE。

PIE 控制器将每 8 个外设或外部中断汇集成 1 个 CPU 级中断。这样对于 96 个外设中断源,就被分成 12 组,分别是 PIE1~PIE12,每一组对应一个 CPU 级中断,即 PIE1 对应 INT1,PIE12 对应 INT12。一旦中断请求被送到 PIE 模块,相应的 PIE 中断标志位 PIEIFRx.y 被置位。如果对应的中断使能位PIEIERx.y=1,那么 PIE 模块将检查相应的 PIE 应答位PIEACKx,确认 CPU 是否准备好响应这个组的中断。如果这个组的 PIE 应答位PIEACKx=0,则 PIE 将该中断请求送至 CPU。如果 PIE 应答位PIEACKx=1,中断请求不会被 PIE 发送给 CPU,直到PIEACKx=0且该中断请求还存在时,PIE 才会将挂起的中断请求发送给 CPU。

软件清除中断应答位PIEACKx;而 CPU 响应 PIE 级中断后,自动清除相应的中断标志位PIEIFRx.y,后者不可通过软件进行清除。

当中断请求从 PIE 发送到 CPU 时,CPU 级的中断标志寄存器IFRx被置位,中断应答位PIEACKx被置位,同组的其他中断请求被挂起。如果IERx=1且中断总开关INTM=0,那么 CPU 将响应这个中断请求并自动清零对应的IFRx标志位

CPU 响应中断请求后,要去处理中断服务程序,这个中断响应过程包括现场保护(中断返回地址、相关寄存器等入栈)和中断服务子程序地址的获取。其中,中断服务子程序地址保存在 MCU 内存单元,这部分内存单元也称为中断向量表

4、软件思维导图

CH7 CPU 定时器

1、定时器基础知识(本质是计数器、计数方式、定时时间计算)

定时器本质上是一个计数器,该计数器能对固定频率的脉冲进行计数,把时间的计量转化为对脉冲的计数。根据计数方向不同,有增计数、减计数、增减计数三种模式

增计数的工作模式是计数器按加 1 计数,也就是计数器在时钟脉冲的触发下连续加 1。当计数值与预先设置的周期值 PRD 相等时,计数器重新从 0 开始计数,由于计数是从 0 开始的,因此实际的计数周期要多加 1

减计数的计数方式与增计数相反,计数器从某个初始值开始减 1,减到 0 时回到初始值重新开始。

增、减计数工作模式下定时器的定时时间 T 为:T=Tclk×(PDR+1)T=T_{clk} × (PDR+1)

增减计数模式的计数方向由定时器自动设置,当计数器的值增加到周期值时,计数方向由增计数自动改为减计数,同样,当计数值减到 0 时,计数方向由减计数自动改为加计数。这种工作模式下定时器的定时时间 T 为:T=Tclk×(PDR×2)T=T_{clk} × (PDR×2)

2、C2000 的定时器(3 个定时器、时钟基准 SYSCLKOUT、减计数方式、预分频、周期、定时时间计算)

F28027 有 3 个 32 位的定时器 TIMER0、TIMER1 和 TIMER2,三个定时器均采用减计数工作模式。TIMER0 和 TIMER1 提供给用户使用,TIMER2 提供给实时操作系统使用。时钟基准默认为系统时钟 SYSCLKOUT。

预分频计数器(PSCH:PSC)的触发信号是系统时钟信号(SYSCLKOUT)。每个时钟周期 PSCH:PSC 的值减 1,当 PSCH:PSC 值为 0 后的一个时钟周期,发出脉冲信号(Borrow),该信号作为计数器(TIMH:TIM)的时钟信号,同时触发寄存器 TDDRH:TDDR 的值重新装载到寄存器 PSCH:PSC。

定时器的工作流程是:每经过 (TDDRH:TDDR + 1) 个时钟周期计数器(TIMH:TIM)减 1,当计数器 TIMH:TIM 减到 0 后将产生一次中断请求信号送给 CPU。

假设系统时钟是 1MHz(即 1 微秒一个脉冲)。

  • 如果 TDDRH:TDDR = 0,预分频系数是 1,则主计数器每 1 微秒减 1。
  • 如果 TDDRH:TDDR = 99,预分频系数是 100,则主计数器每 100 微秒才减 1。

定时时间:T=(TDDRH:TDDR+1)×(TIMH:TIM+1)×TclkT=(TDDRH:TDDR+1)×(TIMH:TIM+1)×T_{clk}

3、软件思维导图

CH8 增强型捕获模块

1、捕获模块基础知识

捕获模块可以捕获 MCU 引脚的电平跳变(上升沿、下降沿),并记录电平跳变的时刻。捕获模块也有对时间的处理,也是通过计数器来实现的。捕获模块可以用于外部事件的精确时间测量。只要被检测信号能够转换为脉冲信号,捕获模块就可以对该脉冲信号进行捕获。

2、计数器工作模式:增计数

3、C2000 的 eCAP(概述、功能(预分频、边沿极性、连续 / 单次模式、事件决策、捕获寄存器、中断控制)

单触发捕获模式:捕获 1-4 个事件后停止捕获
连续捕获模式:循环进行 1-4 个事件的捕获
中断功能:4 个捕获事件都可以触发中断
捕获模式不使用时,eCAP 模块可以配置为单通道 PWM 输出

预分频器可以对输入脉冲信号进行预分频(2-62 分频,2 的倍数),或者直接旁路,不经过预分频器。

边沿极性可以选择上升沿捕获或下降沿捕获。eCAP 模块有 4 个独立的边沿极性选择,每一个分别对应一个捕获事件。

Modulo 4 counter:事件触发计数器,由捕获事件触发计数。计数值只能是 0、1、2、3。

输入信号经过事件预分频(Event prescale)、极性选择(Polarity select)后到达事件决策模块(Event qualifier)。事件决策模块根据捕获模式(Continuous / Oneshot Capture Control)的配置,产生装载捕获寄存器的触发信号(LD1~LD4),把捕获计数器(TSCTR)的当前值 CTR 装载到捕获寄存器中(CAP1、CAP2、CAP3、CAP4)。根据复位配置(CTRRSTx)可输出信号(Delta mode)复位捕获计数器。捕获事件(Capture events)可发出捕获事件中断信号(CEVT)给 PIE。另外,eCAP1~ eCAP4 可通过时钟同步信号(SYNCIn)进行计数器初始值(CTRPHS)的装载。

捕获事件 1 设置为上升沿触发,差分模式,当上升沿捕获时,计数器清 0,开始新的周期计数;捕获事件 2 设置为下降沿触发,绝对值模式,这样 CAP2 即对应高电平的周期值;CAP1 的值对应波形周期值

eCAP 捕获模式时有 5 个中断事件,即捕获事件 1(CEVT1)、捕获事件 2(CEVT2)、捕获事件 3(CEVT3)、捕获事件 4(CEVT4)、TSCTR 计数器溢出(CTROVF)(计数值从 FFFFFFFF 回到 00000000)。

4、软件思维导图

CH9 增强型脉宽调制模块

1、PWM 基础知识

PWM 是 Pulse Width Modulation 的缩写,即脉冲宽度调制,也就是宽度可调节的方波脉冲。相关的参数:周期、频率和占空比

  • 周期 T:输出一次脉冲,即输出一次完整的高低电平的时间
  • 频率 f:周期的倒数,即 f=1Tf=\frac{1}{T}
  • 占空比 D:一个周期内,脉冲高电平时间与周期的比值(D=ThighTD=\frac{T_{high}}{T}

PWM 信号有两种产生方法:模拟电子方法和数字化方法。

模拟电子方法:由三角波或锯齿波发生器产生高频调制波,经比较器产生 PWM 信号。三角波或锯齿波与可调直流电源比较,产生占空比可调的 PWM 信号;与正弦基波比较,产生占空比按正弦规律变化的 SPWM 信号。

数字化方法(主流):与硬件构成 PWM 信号类似,数字逻辑将锯齿波发生器等效为一个计数器 Count,将可调直流电源等效为比较点 Compare。数字控制产生 PWM 需要 3 个寄存器:计数器、周期值和比较值。通过配置周期值和比较值就能够产生任意频率、占空比的 PWM 信号。

2、C2000 的 ePWM(TB 子模块、CC 子模块、AQ 子模块、ET 子模块)

时基子模块(TB)功能:每个 ePWM 单元都有一个独立的时基单元,用来决定该 ePWM 模块相关的事件时序。通过同步输入信号可以将所有的 ePWM 工作在同一时基信号下,即所有的 ePWM 级联在一起,处于同步状态,可以看成一个整体。

TB 模块的主要功能:

  1. 预分频功能(Clock Prescale)
  2. PWM 周期值(TBPRD)
  3. 时基计数器 TBCTR
  4. 时基时钟同步
  5. 时基计数器相位控制

系统时钟预分频后作为 TB 子模块的时钟信号,分频系数由寄存器TBCTL[HSPCLKDIV]TBCTL[CLKDIV]决定。HSPCLKDIV的值为 x,则如果 x 为 0,则分频系数为 1,如果 x 不为 0,则分频系数为 2x;如果CLKDIV的值为 y,则分频系数为 2y。

本书案例设置 SYSCLKOUT 为 60MHz,如果 HSPCLKDIV = 0,CLKDIV = 1,则 TBCLK = 30MHz。

PWM 周期值 TBPRD 有两个寄存器:影子寄存器(Period Shadow)和活动寄存器(PeriodActive)。它们具有相同物理地址。由TBCTL[PRDLD]位控制周期寄存器的工作模式:影子寄存器模式 (=0) 或立即加载模式 (=1)。默认情况下 TBPRD 采用影子寄存器模式。在影子寄存器模式下,对 TBPRD 的读写操作是对影子寄存器进行的,只有当 TBCTR = 0 时,影子寄存器的值加载到工作寄存器。

时基计数器的计数模式有三种模式,分别是:增计数模式、减计数模式和增减计数模式。在这三种计数模式中,一个有效的 TBCLK,时基计数器变化率为 1。

每个 ePWM 模块的时基时钟 TBCLK 是独立的,它们都是由系统时钟信号 SYSCLKOUT 分频得到。在 CLK 模块中,提供一个同步开关 TBCLKSYNC,当这个开关有效(置位)时,所有工作的 ePWM 模块的时基计数器 TBCTR 同步于 TBCLK 的第一个上升沿。每个 ePWM 模块的分频必须设置一样。

每个 ePWM 模块拥有一个同步信号输入 (EPWMxSYNCI) 和一个同步信号输出 (EPWMxSYNCO)。第一个 ePWM 模块(ePWM1)的同步输入信号是来自芯片的引脚。同步信号还控制关联的捕获(eCAP)模块。同步脉冲信号实现不同 ePWM 模块的同步,而且通过 TBPHS 实现各 ePWM 模块的相位超前和滞后的控制。当同步输入信号发生时,时基相位 TBPHS 装载到时基计数器 TBCTR,装载时刻一致,同步实现。如果 ePWM 模块的 TBPHS 不为零,那么在同步信号作用下,TBPHS 的值就装载进 TBCTR,各个 ePWM 模块就存在计数初值的不同,也就是存在相位差。


CC 子模块主要功能是对 TB 子模块的计数器值 TBCTR 与给定的比较值进行比较,产生比较相等的事件,该事件作为后续 AQ 子模块的触发事件。有两个比较寄存器 CMPA 和 CMPB

它们分别有两个寄存器:影子寄存器和工作寄存器。影子寄存器和工作寄存器具有相同的物理地址。由CMPCTL[SHDWAMODE]CMPCTL[SHDWBMODE]位控制比较值寄存器的工作模式:影子寄存器模式或立即加载模式。对 CMPA 的写操作是对影子寄存器进行的。在设置的特殊时刻,影子寄存器的值加载到工作寄存器。加载的特殊时刻由CMCTRL[LOADMODE]决定,可以在 CTR = 0 时刻、CTR = PRD 时刻或两者都可以。

比较功能子模块可以产生两个独立的比较事件,对于增计数或减计数,在一个 PWM 周期内,比较事件只发生一次。对于增减计数模式,在一个 PWM 周期内,如果比较寄存器的值在 0~TBPRD 之间,在一个 PWM 周期内,比较事件发生两次。


AQ 子模块决定了相应事件发生时应该输出什么样的电平。该模块是基于事件驱动的,可以认为该子模块输入的就是事件,输出的是动作。每个子模块有两路独立输出 EPWMA 和 EPWMB

AQ 子模块的输入事件有 4 种,事件发生时触发 AQ 子模块,分别是:

  1. CTR = PRD,计数器寄存器 TBCTR 的值与周期寄存器 TBPRD 相等时;
  2. CTR = Zero,计数器寄存器 TBCTR 的值等于 0 时;
  3. CTR = CMPA,计数器寄存器 TBCTR 的值等于比较寄存器 CMPA;
  4. CTR = CMPB,计数器寄存器 TBCTR 的值等于比较寄存器 CMPB

将计数方向输入给 AQ 子模块,能够把计数比较事件细分为增计数情形的计数比较事件(CAU 和 CBU)和减计数情形的计数比较事件(CAD 和 CBD)。除了以上外部事 件外,还可以用软件强制触发。通过设置寄存器 AQSFRC、AQCSFRC,产生一个软件强制事件。该软件强制事件可以是单次作用,也可以是连续作用。

AQ 子模块控制在触发事件产生时,2 路 PWM 输出 EPWMxA 和 EPWMxB 表现出何种行为。PWM 输出 EPWMxA 和 EPWMxB 可以设置为以下的动作:

  1. 置高,EPWMxA 或 EPWMxB 输出高电平;
  2. 置低,EPWMxA 或 EPWMxB 输出低电平;
  3. 翻转,EPWMxA 或 EPWMxB 输出电平与之前的电平相反;
  4. 无动作,EPWMxA 或 EPWMxB 的输出状态不变。

任何有效事件都能用来产生预定的动作,例如事件 CTR = CMPA 和 CTR = CMPB 都可以作用于 EPWMxA,不要认为 A 的事件只能用来产生 A 的 PWM 输出。

AQ 在硬件上也设计有事件的优先级。在众多事件中,软件强制的优先级始终是最高的。在增减计数下,CTR = CMPB 优先于 CTR = CMPA;增计数方向上,增事件优先于减事件,CTR = Zero 在中间;减计数方向上,减事件优先于增事件,CTR = PRD 在中间

如果是增/减计数,那么就排除减/增计数方向和减/增事件。


死区,通常叫死区时间(dead time),用于避免功率开关控制信号翻转时发生误触发的情况。死区子模块 (DB) 就是起到延时导通的作用。实现的功能有:死区发生器时钟选择、死区时间的设置、输入源选择(DBCTL[IN_MODE])、极性选择(DBCTL[POLSEL])、输出模式(DBCTL[OUT-MODE])

死区发生器产生波形上升沿延时 RED 和下降沿延时 FED,它是通过 10 位计数器来实现的。计数器时钟 DBCLK 可以选择为:

  • fDBCLK = fTBCLK,即与 TBCLK 同频,称为周期时钟
  • fDBCLK= 2×fTBCLK,即为 TBCLK 的 2 倍频,称为半周期时钟

死区时延时间计算公式为:
FED=DBFED×TTBCLKFED = DBFED × TTBCLK
RED=DBRED×TTBCLKRED = DBRED × TTBCLK
其中 TTBCLKTTBCLK 是时基时钟 TBCLK 的周期。如果选择半周期时钟,则 TTBCLKTTBCLK 也取半。

通过对应开关控制,死区子模块的输入信号是动作限定子模块的输出信号,记为 EPWMxA in 和 EPWMxB in。信号源可以设置为:

  • EPWMxA in 作为上降沿和下升沿延时的信号源,该模式是缺省模式。
  • EPWMxA in 作为上降沿延时的信号源,EPWMxB 作为下升沿延时的信号源。
  • EPWMxA in 作为下升沿延时的信号源,EPWMxB 作为上降沿延时的信号源。
  • EPWMxB in 作为上降沿和下升沿延时的信号源。

事件触发与中断管理 (ET) 子模块主要功能有:

  • 管理由时基子模块、比较子模块所产生的事件,这些事件可用于产生 PIE 中断 EPWMxINT 和 ADC 转换启动信号 EPWMxSOCA 和 EPWMxSOCB
  • 允许软件强制触发中断和启动 ADC 转换
  • 通过事件分频机制,灵活设置输出触发事件的频度

可用于 ET 子模块的输入事件信号有:

  • CTR = Zero:计数器寄存器的值为 0,TBCTR =0
  • CTR = PRD:计数器寄存器的值为 PRD,TBCTR =PRD
  • CTR = Zero 或 CTR = PRD:TBCTR = 0 或 TBCTR = period
  • CTRU = CMPA:在计数器增计数时,TBCTR = CMPA,CTR_dir = 1
  • CTRD = CMPA:在计数器减计数时,TBCTR = CMPA,CTR_dir = 0
  • CTRU = CMPB:在计数器增计数时,TBCTR = CMPB,CTR_dir = 1
  • CTRD = CMPB:在计数器减计数时,TBCTR = CMPB,CTR_dir = 0
  • 软件产生的强制事件信号

每个 ePWM 的 ET 子模块拥有的输出事件信号有:

  • 1 路 PIE 中断,EPWMxINT
  • 2 路 ADC 启动信号,EPWMxSOCA 和 EPWMxSOCB

PWM 周期:T=(N+1)×TclkT=(N + 1)×T_{clk}

占空比与比较值:Thigh=CMP+TclkT_{high} = CMP + T_{clk}

3、软件思维导图

引脚配置:

  1. 配置引脚功能(GPIO_setMode)
  2. 配置引脚方向(GPIO_setDirection)
  3. 使能 / 禁止内部上拉电阻(GPIO_setPullUp)
  4. 输入配置为异步系统时钟(GPIO_setQualification)

功能配置:

  1. PWM 时基时钟关闭(CLK_disableTbClockSync (myClk)
  2. PWM 时钟设置(PWM_setHighSpeedClkDiv、PWM_setClkDiv)
  3. PWM 计数模式设置(PWM_setCounterMode)
  4. PWM 动作限定设置(AQ 模块)
  5. 计算 PWM 的周期、周期设置(PWM_setPeriod)
  6. 计算 PWM 的占空比、占空比设置(CC 模块)
  7. 设置 PWM 死区(DB 模块, 可选项)
  8. 设置 PWM 斩波(PC 模块,可选项)
  9. 设置 PWM 故障联防(TZ 模块,可选项)
  10. PWM 时基时钟开启(CLK_enableTbClockSync)
  11. PWM 事件触发与中断管理(ET 模块)

中断事件配置:

  1. 中断入口地址注册(PIE_registerPieIntHandler)
  2. PWMx 事件中断使能(PWM_enableInt)
  3. PIE 级中断使能(PIE_enableInt)
  4. CPU 级中断使能(CPU_enableInt)

中断服务程序:

  1. 在 PWM 中断服务程序里完成比较点的更新或其他任务
  2. 清除 PWM 中断标志位和对应的 PIE 中断应答位 PIEACKx。

CH10 模 / 数转换器

1、ADC 基础知识

模拟数字转换器(Analog to Digital Converter, ADC),也称模数转换器,是将连续变化的模拟信号转换为离散的数字信号的电子器件。因为 CPU 只能处理数字量,所以需要把外部待测量的模拟量转换为数字量

输出量为待测量的电压、电流、温度、压力、流量、速度等物理量,这些物理量先经过传感器变换为电信号,再调制成符合 ADC 模块输入电压范围的电压模拟量,最后送给 ADC 模块转换为数字量,实时控制系统可以对该数字量进行处理

输入的模拟信号在时间上是连续的,而输出的数字信号是离散的。将连续的模拟量转换为离散的数字量通常要经过 3 个步骤:采样保持、量化、编码

  1. 采样是将随时间变化的模拟量转换为在时间上离散的模拟量,保持则将所采样的模拟信号值保持一段时间,以使得后续的量化编码过程中信号值不发生变化。
  2. 采样后每个脉冲的幅度仍然是连续的,必须对每个脉冲的幅度进行离散化处理。将采样保持电路输出的电平转换为量化单位的整数倍的过程称为量化。
  3. 把量化的结果用二进制表示出来叫做编码。

ADC 的主要性能参数有量程、分辨率、精度、转换时间、量化误差、偏移误差等。除此之外,其他指标还有:绝对精度、相对精度、微分非线性、单调性和无错码、总谐波失真和积分非线性等等。

量程是指 ADC 所能转换的模拟输入电压的范围,分为单极性和双极性两种类型。

量化时需要把电平转换为量化单位的整数倍,因为模拟电压是连续的,它不一定能被量化单位整除,因而不可避免地会存在量化误差。AD 分辨率越高,量化误差越小。一般是 1 个或 0.5 个最小数字量的模拟变化量,表示为 1LSB 或 0.5LSB

分辨率(Resolution):指 ADC 能分辨的最小模拟输入量。从理论上来讲,n 位输出的 ADC 能区分 2n 个不同等级的输入模拟电压,能区分输入电压的最小值为满量程输入的 12n\frac{1}{2^n}

精度(Accuracy):精度是指对于 ADC 的数字输出(二进制代码),其实际需要的模拟输入值与理论上要求的模拟输入值之差。

转换时间(Conversion time):ADC 完成一次 AD 转换所需要的时间,是指从启动 ADC 开始到获得相应数据所需要的时间。一般来讲,ADC 的分辨率越高,转换时间就越长。

偏移误差(Offset Error):模拟量输入信号为零时,数字量输出不为零的值。

增益误差(Gain Error):满刻度输出时对应的模拟输入量与理想的模拟输入量之差。

ADC 的主要类型:

  • 逐次逼近型 ADC 属于直接式 ADC,其原理可理解为将输入模拟量逐次与 UREF/2、UREF/4、UREF/8、…、UREF/2N - 1 作比较,模拟量大于比较值取 1(并减去比较值),否则取 0。逐次逼近型 ADC 转换精度高,速度较快,价格适中,是目前种类最多、应用最广的 AD 转换器

  • 积分型 ADC 是一种间接式 ADC,其原理是将输入模拟量和基准量通过积分器积分,转换为时间,再对时间计数,计数值即为数字量。优点是转换精度高,缺点是转换时间较长。

  • 并行比较型 ADC 的主要原理是将参考电压分为 2N−12^N-1 个等级(对于 NN 位的 ADC),通过 2N−12^N-1 个比较器和输入模拟电压进行比较,比较器的输出状态由触发器存储,经编码器编码,得到数字量输出。速度快,但其分辨率不高。

  • 压频变换型 ADC 是一种间接式 ADC,其原理是将模拟量转换为频率信号,再对频率信号计数,转换为数字量。精度高,功耗较低,抗干扰能力强,便于长距离传送,但转换速度较低。

  • ∑-Δ 型 ADC 又称为过采样型 ADC,是目前分辨率最高的 ADC。它主要由采样 / 保持电路、模拟低通滤波器、DAC 及数字滤波器构成。大多数的模块都是由数字电路搭建,一些噪声对其的影响很小。

  • 流水线型 ADC 的原理是将多级比较网络级联在一起,每一级得到一位数字码。如果需要的是 n 位数字码,则需要比较 n 次。每次输入的信号必须从头传到尾才算完成了一次量化编码。其优点是高速、高精度,低功耗,芯片面积小,同时具有优异的动态特性。

2、C2000 的 ADC(12 位 ADC 内核、量程、SOC)

具有内置双采样保持 (S / H) 的 12 位 ADC 内核

ADC 内核包含一个 12 位转换器,转换器为部分逐次逼近型、部分流水线型。转换器的模拟参考电平可以配置为外部电压基准 (VREFHI / VREFLO),也可以配置为内部电压基准。

全范围模拟输入:0V 至 3.3V,或者 VREFLO 到 VREFHI

F28027 有 13 个 ADC 引脚可以与外部模拟量相连,分为两组,包括 ADCINA(ADCINA7、ADCINA6、ADCINA4、ADCINA3、ADCINA2、ADCINA1、ADCINA0 等 7 个引脚)和 ADCINB(ADCINB7、ADCINB6、ADCINB4、ADCINB3、ADCINB2、ADCINB1 等 6 个引脚)。在芯片内部,内置温度传感器占用 A5 输入,参考电压 VREFLO 占用 B5 输入,ADCINA5、ADCINB5 和 ADCINB0 没有外接引脚。

ADC 的工作是基于 SOC 控制的,SOC 信号送到 ADC 采样决策辑模块(ADC Sample Generation Logic)进行决策,产生相应的控制信号:通道选择(CHSEL)、采样窗设置(ACQPS)和开始转换触发信号(SOC)。

每个 SOC 可以独立配置:转换的通道、采样窗宽度和选择开始转换的触发源。转换方式灵活:用同一个触发源对不同的通道进行采样;用不同的触发源对不同的通道进行采样;也可以用一个触发源对同一个采样通道进行多次采样的过采样。

输入电路包括通道选择和采样 / 保持电路。ADC 模块输入的通道有 16 个(F28027 只有 13 个,见概述说明),分为 A 组和 B 组,各 8 个。当使用外部参考电平时,电平 VREFHI 占用 ADCINA0 引脚,ADCINA0 不能当作采样输入口。

采样窗的配置信号 ACQPS 来自采样决策模块。ADC 的采样保持电路必须快速准确地跟踪被采样的信号 ADCIN。AD 处理总的时间等于采样时间和转换时间之和。

ADC 触发源用于启动 SOC 配置的通道开始 AD 转换。每个 SOC 的触发源可以配置为以下任意一个事件:

  • 软件立即触发
  • ePWM 1-4 的 SOCA 和 SOCB
  • 外部中断 2,GPIO XINT2
  • CPU 定时器 0/1/2 中断
  • ADCINT1 / 2。用 ADC 转换结束中断信号作为触发事件,
  • 可以用于通道的连续转换控制。

ADC 转换的结果保存在结果寄存器 ADCRESULTx 中。保存方式是:顺序采样时,SOCx 触发的通道转换结果保存在对应的 ADCRESULTx 中,序号一一对应。对于同步采样,通常只用偶数的 SOCx,该 SOCx 配置的一对通道转换后结果保存在 ADCRESULTx 和 ADCRESULT(x + 1)中,分别对应 A 组和 B 组的转换结果。

当多个 SOC 被同时触发时,需要通过优先级来决定哪个 SOC 对应的通道优先被转换。采样优先级有两种模式:Round Robin 模式和具有高优先级的 Round Robin 模式。

  • Round Robin 模式:是由 SOC0~SOC15 组成的一个头尾相接,方向固定的循环闭环。优先级由循环指针 RRPOINTER 决定。当前 RRPOINTER 的值表示上一次被转换的 SOC,那么它的下一个 SOC 具有最高的优先级。ADC 模块复位后,RRPOINTER = 20h,表示没有 SOC 被转换,那么 SOC0 具有最高优先级。

  • 具有高优先级的 Round Robin 模式:该模式可以设置某些 SOC 具有高优先级,这些高优先级的 SOC 可以打断 Round Robin 的循环顺序,优先进行转换。多个高优先级的 SOC,序号低的优先级高。

对应于 16 个独立的 SOCx,有相应的 16 个采样结束信号 EOCx。ADC 模块有 9 个中断输出信号,即 ADCINT1~ADCINT9。任意一个 EOCx 脉冲都可以配置为 ADCINTx 的触发源。

3、软件思维导图

CH11 串行通信接口

1、串行通信的基础知识

MCU 通信的数据是以字节为单位进行传输,其中每个字节包括多个数据位,根据数据位传输方式的不同,MCU 通信可分为串行通信和并行通信。

串行通信定义:字节中的数据一位一位依次传送的通信方式,具有传输信号线少、传输距离远等优点,但传输速度慢。

并行通信定义:字节中的所有数据位同时传送的通信方式,传输速度快,但是所需传输信号线多,适用于近距离通信。

SCI 串行通信仅需接收和发送两根信号线,8 位并行通信则需 8 根信号线。这两种通信方式除了信号线外,还需一根零电位参考线

根据电平与数据对应的不同形成不同的编码方式,可分成 RZ 编码(Return Zero Code)、NRZ (Not Return Zero Code) 和 NRZI(Not Return Zero Inverted Code)等。

在 RZ 编码中,正电平代表逻辑 1,负电平代表逻辑 0,并且每传输完一位数据信号返回到零电平

与 RZ 编码不同的是,NRZ 编码电平不需要归零,因此只需采用高、低两种电平即可进行数据传输。

NRZI 编码使用信号的翻转代表一种逻辑,信号保持不变代表另外一种逻辑,如 “0” 对应电平翻转,“1” 电平保持不变。

数据在信号线上传输时需要满足一定的规范,才能使得通信双方正确地收发数据。通常以(frame)为单位进行数据传输。

从开始位到结束位的时间间隔称为一帧,通常一帧数据包括 1 位开始位、8 位数据位、1 到 2 位的停止位。

异步串行通信过程中,通信双方的发送和接收步调要一致才能保证传输数据的正确接收。因此,通过波特率(Boad Rate)来实现通信双方的步调一致,波特率是用来描述数据传输的速率。常用的波特率有 600、2400、4800、9600、19200、38400、57600、115200、128000 等。通信距离越长的时候通常选用越低的波特率。

在一帧数据中增加一位奇偶校验位用于错误检测。奇校验时,如果数据位 1 的个数是奇数,则校验位为 0;如果 1 的个数为偶数,则校验位为 1。偶校验时,如果数据位 1 的个数是奇数,则校验位为 1;如果 1 的个数为偶数,则校验位为 0。

串行通信根据接线的不同,有单工、半双工、全双工三种传输方式。

  • 单工通信:数据传输是单向的,除了地线外,只有一根数据线。
  • 半双工通信:数据传输是双向的,但是只有一根数据线,发送和接收不能同时进行。
  • 全双工通信:数据传输是双向的,有两根独立的数据线,发送和接收可以同时进行。

2、C2000 的 SCI(波特率、数据帧)

SCI 的波特率由时钟 LSPCLK 和波特率配置寄存器控制。LSPCLK 由系统时钟模块的低速外设时钟预分频寄存器配置,波特率选择寄存器为 16 位寄存器,有 65536 种不同的波特率选择。

假设 16 位波特率配置寄存器配置值为 BRR,则对应的波特率计算方法为:

Baud=LSPCLK(BRR+1)∗8,1≤BRR≤65535Baud=\frac{LSPCLK}{(BRR+1)*8}, 1≤BRR≤65535
Baud=LSPCLK16,BRR=0Baud=\frac{LSPCLK}{16}, BRR=0

帧格式配置:

  • 1 位开始位;
  • 1-8 位数据位;
  • 1 位地址和数据的识别位(针对地址位方式的多机模式)
  • 1 位可选的奇偶校验位
  • 1 或 2 位停止位

3、软件思维导图

CH12 实验

1、智能车与本课程 F28027 模块

2、调试错误及处理