文章目录
- 寄存器是什么?
- 举例子—如何去看手册来配置寄存器
- 寄存器地址知识点
- 输出功能
- 具体实现,在linux编写代码的话
- 其他
相关视频
寄存器是什么?
本质就是一个存储器,写内存和写指针都是一样的
寄存器里的值和RAM的值,掉电都会丢失
IO用来控制硬件
RAM内存用来存储数据
寄存器的地址通过单片机的芯片手册来看 每个单片机手册都有memory map写了寄存器的地址
读写程序:ROM
读写数据:RAM
控制硬件:IO
某芯片对应的地址,地址有的是ROM,有的是RAM,有的是spf也就是寄存器
举例子—如何去看手册来配置寄存器
芯片原理图,如图GPX2_7是控制这个LED2的,这个led灯只需要高低电平就可以控制,所以用GPIO控制即可,GPIO就是只发送高低电平;
MCU里面有不同的控制器,比如下图这些,GPIO用他的寄存器来控制GPX2_7
手册中寄存器的描述memory map每个手册都有这个,高诉你寄存器的地址的,往下面翻是有功能描述,这个地址上改什么值就对应什么功能
Base Address:0x1140_0000
offset是地址偏移量,
上一张表后接着有这张表,是更加细节的描述,这个地址上面内容设置为多少所对应的功能
然后看下面分析:
寄存器地址知识点
这个寄存器一共32位从0-31,看这个图,每4bit对应里面CPX2CON[0]…[7],有8个就是32位;
这个32位寄存器的地址是0x1100 0000;注意这个地址表示的都是起始地址
地址上存的内容换成2进制就是0000 0000 0000 0000 0000 0000 0000 0000,每4个0是一个GPX2CON[ ],正好[0]-[8];
还要注意大小端;
分析:GPX2CON7,现在就是要把他28-31位置成0001,就是output 0x1;
输出功能
再往下翻找到这个寄存器,用来设置具体对外输出什么
这个寄存器虽然32位,但是只用前8位,0-7位;
Description描述的是寄存器上0-7位,如果置位1就直接是pin的状态也置位1高电平,0的话就是低电平;
具体实现,在linux编写代码的话
错误示例:
编译器默认这个0x110000c40是一个普通的数,那就不能取地址;
正确示例
(unsigned int )强转为地址;
为什么不是char ,int是4个字节4type = 4x8bit = 32位,就是32位寄存器;
char是1个字节1type,只有8bit;
两个寄存器,1是把寄存器设置成output输出功能、2是让GPX2_7置位1让led灯亮起来,在上面的内容也写了为什么是0x80, 二进制就是 1000 0000,是由手册定义描述的,说了每一位的0、1状态就是第GPX2_第几个输出的电平;
其他
MCU和MPU的区别