特殊功能寄存器(Special Function Register, SFR) 是嵌入式系统(如单片机、微控制器)中用于控制和访问硬件外设的一类特殊存储器。它们通常位于CPU的地址空间内,用于配置、管理和监控芯片的各种功能模块,如定时器、串口、ADC、GPIO等。
专用性:每个SFR对应特定的硬件功能(如控制定时器、串口通信等)。
直接映射:通常位于固定的内存地址(如8051单片机的80H~FFH)。
可读写性:大部分SFR可被程序读写,但部分可能只读(如状态寄存器)。
位寻址能力:许多SFR支持位操作(如P1.0 = 1
单独控制某个IO口)。
类型 | 功能 | 示例(以8051为例) |
---|---|---|
控制寄存器 | 配置外设工作模式 | TMOD (定时器模式控制) |
状态寄存器 | 反映外设状态(如中断标志) | TCON (定时器控制/状态) |
数据寄存器 | 存储输入/输出数据 | SBUF (串口数据缓冲) |
IO寄存器 | 控制GPIO端口 | P0 、P1 (IO端口寄存器) |
中断寄存器 | 管理中断使能、优先级 | IE (中断使能)、IP (优先级) |
直接地址访问(如8051):
TMOD = 0x20; // 直接赋值(TMOD地址为0x89)
位操作(支持位寻址的SFR):
c
P1 ^= 0x01; // 对P1.0取反
指针访问(C语言):
c
volatile unsigned char *SFR = (unsigned char *)0x80; // 直接访问SFR地址 *SFR = 0xFF;
寄存器 | 地址 | 功能说明 |
---|---|---|
ACC | 0xE0 | 累加器,用于算术运算 |
B | 0xF0 | 乘法/除法辅助寄存器 |
PSW | 0xD0 | 程序状态字(进位、奇偶校验等) |
SP | 0x81 | 堆栈指针 |
DPTR | 0x82-83 | 数据指针(16位) |
特性 | SFR | 普通RAM |
---|---|---|
用途 | 控制硬件外设 | 存储临时数据 |
地址范围 | 固定(由芯片手册定义) | 可自由分配 |
访问速度 | 通常更快(直接操作硬件) | 依赖存储器总线速度 |
位操作 | 多数支持位寻址 | 通常不支持 |
查阅芯片手册:不同微控制器的SFR地址和功能可能不同(如STM32的寄存器与8051完全不同)。
易失性(volatile):在C语言中操作SFR时需加volatile
关键字,防止编译器优化。
初始化顺序:某些SFR需按特定顺序配置(如先使能时钟再配置外设)。
ARM Cortex-M的SFR:通过内存映射寄存器(MMR)访问,如STM32的GPIOA->ODR
。
RISC-V的CSR:采用控制状态寄存器(CSR)管理特权模式和异常。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。