学习目标:I/O口的配置,掌握I/O外设功能及位置分布,寄存器“PERCFG”、“P2SEL”和“P2DIR”。
前面CC2541蓝牙学习——I/O口介绍过CC2541有21个I/O引脚,这些引脚可以作为通用I/O引脚,同时通过独立编程还可以作为外设I/O引脚用作ADC、串口、定时器和调试接口。当设置为外设I/O时,需要将对应的寄存器位PxSEL置1,每个外设单元对应两组可以选择的I/O引脚,即“外设位置1”和“外设位置2”,如下表所示。
![](https://i-blog.csdnimg.cn/blog_migrate/a1295c306a249280d286603182c4bfe1.png)
从表中我们可以看出整个P0口都可作为ADC使用,因此可以使用多达8个ADC输入引脚,但是同一时刻只有一个引脚的ADC工作,此时P0引脚必须配置为ADC输入。APCFG寄存器可以配置P0的某个引脚为一个ADC输入(模拟输入功能),相应的位置1则为ADC输入功能,这个寄存器的默认值选择端口0引脚为非ADC输入,即数字输入/输出;
串口USART0和USART1均有两种模式:异步UART模式和同步SPI模式,并且每种模式下对应的外设引脚有两种位置;
定时器1有5个捕获/比较通道;
定时器3和定时器4各有2个捕获/比较通道;
端口P2.1和P2.2可分别用于调试数据和时钟信号,当处于调试模式时,调试接口控制这些引脚的方向,并且在这些引脚上禁用上拉和下拉。
外设I/O位置的选择使用寄存器PERCFG来控制,PERCFG寄存器的定义如下表。
![](https://i-blog.csdnimg.cn/blog_migrate/c65f37931a5e68ab9f6f51a22fdab91c.png)
可以根据具体电路的引脚资源分配来选择外设的位置,例如设置串口USART0为位置1则
PERCFG &= ~0x01;
我们从I/O外设位置的分布可以看出,有些I/O位置是重叠的,我们可以通过寄存器P2SEL和P2DIR来设置优先级,这两个寄存器前面已经介绍过,是选择端口2引脚的I/O功能(通用I/O还是外设I/O)和方向(作为输入还是输出),由于P2端口只有5个引脚,剩下的寄存器位得到了充分的利用,看来还真是不浪费啊!
P2SEL寄存器主要用来设置端口1外设的优先级,P2DIR寄存器主要设置端口0外设的优先级,没有端口2的优先级设置寄存器,因为端口2的引脚功能比较单一。这两个寄存器的定义如下。
![](https://i-blog.csdnimg.cn/blog_migrate/c6158318ebdc5b8f7c477c6f01cf322e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1dab353c5be90276a21871b645bd548e.png)