打印
[PIC®/AVR®/dsPIC®产品]

从 C 代码中使用 SFR

[复制链接]
706|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21mengnan|  楼主 | 2024-3-12 19:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
特殊功能寄存器 (Special Function Register, SFR)是一些控制器件上 MCU 操作或外设模块各个方面的寄存器。其中大多数寄存器都进行了存储器映射,这意味着它们会位于器件数据存储空间中的一些特定地址处,并可以使用这些地址进行访问。一些寄存器中的各个位控制独立的特性。一些寄存器是只读的;一些是只写的。
存储器映射的 SFR 通过一些置于寄存器地址处的特殊 C 变量进行访问。
SFR 变量在头文件中预定义,在源代码中包含 <xc.h> 头文件 之后即可访问它们。头文件中同时定义了位变量和带位域的结构,所以可以在源代码中使用这两种形式中任一种来访问寄存器中的位。
对于映射到寄存器以及这些寄存器中的位的 C 变量,其名称将基于器件数据手册中指定的名称。但是,由于寄存器内的某些位名称可能会重复,所以命名可能会有差异。
存放位域的结构的名称通常为相应寄存器的名称后跟随 bits。例如,下面显示了一个代码示例,它包含了通用头文件、将 PORTA 作为一个整体清零、使用位变量将 PORTA的 bit 0 置 1,以及使用结构 / 位域定义将 PORTA 的 bit 2 置 1。
#include <xc.h>
void main(void)
{
PORTA = 0x00;
RA0 = 1;
PORTAbits.RA2 = 1;
}
要确认与所用器件有关的名称,请查看 <xc.h> 将包含的特定于器件的头文件,确定每个变量的定义。这些文件将位于编译器的 include 目录,并具有一个代表该器件的名称。
器件和将通过 <xc.h> 包含的头文件的名称存在一对一关系,例如,针对 PIC16LF1826器件进行编译时,<xc.h> 将包含头文件 <pic16lf1826.h>。请记住,不需要在源代码中包含这个特定于芯片的文件;它由 <xc.h> 自动包含。

从 C 代码或嵌入到 C 代码的汇编代码中访问一些 SFR 时需要小心。编译器使用一些寄存器来保存计算的中间值,直接写入这些寄存器可能导致代码失败。当 SFR 由于 C 或汇编代码直接写入它们而发生改变时,编译器并不会检测到发生了这种情况。



使用特权

评论回复
沙发
小灵通2018| | 2024-3-14 15:30 | 只看该作者
支持位操作吗

使用特权

评论回复
板凳
小灵通2018| | 2024-3-14 15:30 | 只看该作者
这个比51好像还简单啊,包含头文件就行了,不用自己再生命sbit

使用特权

评论回复
地板
dongnanxibei| | 2024-3-18 22:23 | 只看该作者
这些头文件里是如何实现的呢

使用特权

评论回复
5
小明的同学| | 2024-3-26 21:17 | 只看该作者
PORTAbits.RA2这种定义很方便操作。

使用特权

评论回复
6
小明的同学| | 2024-3-26 21:31 | 只看该作者
相当于位操作。

使用特权

评论回复
7
LEDyyds| | 2024-3-27 17:06 | 只看该作者
从 C 代码或嵌入到 C 代码的汇编代码中访问一些 SFR 时需要小心。编译器使用一些寄存器来保存计算的中间值,直接写入这些寄存器可能导致代码失败。

使用特权

评论回复
8
问天少年| | 2024-3-28 11:25 | 只看该作者
存储器映射的 SFR 通过一些置于寄存器地址处的特殊 C 变量进行访问

使用特权

评论回复
9
lix1yr| | 2024-3-28 11:26 | 只看该作者
在嵌入式系统中,SFR(Special Function Register)是用于控制和配置微控制器硬件功能的特殊寄存器。在C代码中使用SFR通常涉及直接访问这些寄存器,以配置和控制微控制器的硬件功能

使用特权

评论回复
10
ex7s4| | 2024-3-28 12:30 | 只看该作者
通常,开发人员会使用宏定义来简化对SFR的访问。例如,可以定义一系列宏来代表不同的SFR地址,以及对应的位操作。这样可以使代码更易读和易维护

使用特权

评论回复
11
w2nme1ai7| | 2024-3-28 13:34 | 只看该作者
宏定义操作呗,其实我觉得宏还是很好用的

使用特权

评论回复
12
q1d0mnx| | 2024-3-28 14:37 | 只看该作者
在C语言中,可以使用volatile关键字来告诉编译器,这些变量可能会在未经通知的情况下被更改,因此编译器不应该进行优化

使用特权

评论回复
13
b5z1giu| | 2024-3-28 16:42 | 只看该作者
需要注意的是,直接访问SFR需要谨慎,因为这可能会影响微控制器的正常运行

使用特权

评论回复
14
p0gon9y| | 2024-3-28 18:15 | 只看该作者
在使用SFR时,应该遵循相关的数据手册和技术文档,确保对SFR的访问是正确的,并且不会导致不可预测的行为

使用特权

评论回复
15
q1ngt12| | 2024-3-29 06:22 | 只看该作者
SFR我好像还没用过的吧

使用特权

评论回复
16
l1uyn9b| | 2024-3-29 07:36 | 只看该作者
这种特殊寄存器话说STM32是否也具有?

使用特权

评论回复
17
d1ng2x| | 2024-3-29 09:10 | 只看该作者
其实就是应用,看官方demo如何应用的呗,倒时候就可以用了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

906

帖子

1

粉丝