CC2530学习(二)CC2530通用I/O端口输入和输出介绍

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42398342/article/details/102757858

CC2530引脚概述

CC2530微控制器采用QFN40封装,有40 个引脚。其中,有21个数字I/O端口,其中P0和P1是8 位端口,P2仅有5位可以使用。这21个端口均可以通过编程进行配置。实际上,在P2端口的5个引脚中,有2个需要用作仿真,有2个需要用作晶振,你在CC2530的开发中真正能够使用的只有17个引脚
在这里插入图片描述

什么是SFR

特殊功能寄存器(SFR): 在微控制器内部,有一些特殊功能的存储单元,这些单元用来存放控制微控制器内部器件的命令、数据或运行过程中的一些状态信息。这些存储单元就叫做特殊功能寄存器。

操作微控制器的本质,就是对这些特殊功能寄存器进行读写操作,并且某些特殊功能寄存器可以位寻址。

每一个特殊功能寄存器本质上就是一个内存单元,而标识每个内存单元的是内存地址,不容易记忆。为了便于使用,每个特殊功能寄存器都会起一个名字,在程序设计时,只要引入头文件**“ioCC2530.h”**,就可以直接使用寄存器的名称访问内存地址了。

CC2530的通用I/O端口相关的常用寄存器有下面4个:

<1> PxSEL:端口功能选择,设置端口是通用I/O还是外设功能

<2> PxDIR:作为通用I/O时,用来设置数据的传输方向作为输入或者作为输出)。

<3> PxINP:作为通用输入端口时,选择输入模式是上拉下拉还是三态

<4> Px:数据端口,用来控制端口的输出或获取端口的输入。

设置寄存器中某些位的方法

在编写程序过程中我们常常会对相关寄存器进行写,进行写操作的时候无非就是对寄存器某位或某几位写0写1操作,这我们介绍两种对某位写0写1操作,且不影响其他位的值

对寄存器的某些位清0而不影响其他位

例如:寄存器P1TM的当前值是0x6c,现需要将该寄存器的第1位、第3 位和第5位设置为0,同时不能影响该寄存器其他位的值。

使用**“&=”**将寄存器指定位清0,同时不影响其他位的值。

正确写法:P1TM &= ~0x2A

因为:逻辑“与”操作的特点是,该位有0结果就为0,若为1则保存原来值不变。
首先将字节 0000 0000
要操作的位
设置为1,即0010 1010,在将该数值取反,即1101 0101,也就是**~0x2A**。再将该值与寄存器P1TM“相与”,那么有0的位,即1、3、5位将被清0,其余的位会保持原来的值不变。
所以:P1TM的当前值为0x6c,即0110 1100,
0110 1100 && 1101 0101 = 0100 0100,即1、3、5位清0,其他位不变。

<注意>:该方法只能操作多位同时清0,或者某一位清0的情况,如果要将寄存器的位既要清0又要置1,则不能采用这种写法。(其中原因自己思考一下)
在不少嵌入式应用的源码程序中,对于寄存器的第n位的清0操作也可以写成:寄存器 &= ~(0x01<<(n));其道理是一样的。

对寄存器的某些位置1而不影响其他位

例如:寄存器P1TM的当前值是0x6c,现需要将该寄存器的第1位、第4位和第5位设置为1,同时不能影响该寄存器其他位的值。

使用**“|=”**将寄存器指定位置1,同时不影响其他位的值。

正确写法:P1TM |= 0x32

因为:逻辑“或”操作的特点是,该位有1结果就为1,若为0则保存原来值不变。
首先将字节 0000 0000
要操作的位
设置为1,即0011 0010,也就是0x32。 再将该值与寄存器P1TM“相或”,那个有1的位,即1、4、5位将被设置为1,其余的位会保持原来的值不变。
所以:P1TM的当前值为0x6c,即0110 1100,
0110 1100 || 0011 0010 = 0111 1110,即1、4、5位置1,其他位不变。
同样要注意:该方法只能操作多位同时置1,或者某一位置1的情况。
对于寄存器的第n位的清0操作也可以写成:寄存器 |= (0x01<<(n))

常用寄存器介绍

端口功能选择

微控制器的大部分I/O端口都是功能复用的,在使用的时候需要通过功能选择寄存器来配置端口的功能
在这里插入图片描述

端口传输方向设置

在这里插入图片描述

对于输入的端口要设置其输入方式

输入方式用来从外界器件获取输入的电信号,当CC2530的引脚为输入端口时,该端口能够提供**“上拉”、“下拉”和“三态”三种输入模式**,可以通过编程进行设置。CC2530复位后,各个I/O端口默认使用的就是上拉模式。

在这里插入图片描述

通用I/O端口寄存器配置的基本思路

在这里插入图片描述
本次介绍就到这了,谢谢大家的观看!

猜你喜欢

转载自blog.csdn.net/qq_42398342/article/details/102757858