(完整版)cc2530常用寄存器讲解

  • 格式:docx
  • 大小:38.83 KB
  • 文档页数:9

一. CC2530控制外设的基本方法(通用 I/O 口)

CC2530的 I/O 控制口一共有 21 个,分成 3 组,分别是 P0、 P1和 P2;由上面的对照表

可以看出 LED1所对应的 I/O 口为 P1_0, LED2所对应的 I/O 口为 P1_1,LED3所对应的

I/O 口为 P1_4,LED4所对应的 I/O 为 P0_1。

相对应的常用 SFR有:

P1DIR(P1方向寄存器, P0DIR同理): 0:输入 1:输出

D7

D6

D5 D4 D3 D2 D1 D0

P0_7 方

向 P0 向6方 P0_5 方

向 P0_4 方

向 P0_3 方

向 P0_2 方

向 P0_1 方

向 P0_0 方

P1SEL(P1 功能选择寄存器, P0SEL同理):

D D 5 D D 3 D D 1 D 0 D

功 的 7

1 P 功 的 6

1 P 功 的 5 P1 功 的 4

1 P 功 的 3

1 P 功 的 2

1 P 功 的 1

1 P 功 的 0

1 P

能 能 能 能 能 能 能 能

普 0 通

普 0 通

普 0 通

普 0 通

普 0 通

普 0 通

普 0 通

普 0

O O O O O O O O

功 设 外 1 功 设 外 1 功 设 外 1 功 设 外 1 功 设 外 1 功 设 外 1 功 设 外 1 功 设 外 1

能 能 能 能 能 能 能 能

P0SEL(P1SEL相同):各个 I/O 口的功能选择, 0 为普通 I/O 功能,1 为外设功

P2SEL:( D0到 D2位)端口 2 功能选择和端口 1 外设优先级控制 什么是外设优先级:当 PERCFG分配两个外设到相同的引脚时,需要设置这两个 外设的优先级,确定哪一个外设先被响应

D7 D6 D5 D4 D3 D2 D1 D0

用 0 :

USART

0 优先

1 :

USART

1 优先 0 :

USART

1 优先

1 : 定时器

3 优先 0: 定

时器 1

优 先

1 : 定时 器 4

优先 0:USART

0 优先

1 : 定时器

1 优先 P2_4 功

能选择 P2_3 功

能选择 P2_0 功

能选择

P0DIR(P1DIR相同):设置各个 I/O 的方向, 0 为输入, 1 为输出

D7 D6 D5 D4 D3 D2 D1 D0

P0_7 方 P0_6 方 P0_5 方 P0_4 方 P0_3 方 P0_2 方 P0_1 方 P0_0 方

向 向 向 向 向 向 向 向

P2DIR : D0~D4设置 P2_0到 P2_4 的方向

D7、D6位作为端口 0 外设优先级的控制

D7

D 6 D5 D4 D3 D2 D1 D0

X X 未使用 P2 4 方向 P2 3 方向 P2 2 方向 P2 1 方向 P2 0 方向

D7D6 意义

00 第1 优先级: USART 0

第 2 优先级: USART 1

第 3 优先级:定时器 1

01 第 1 优先级: USART 1

第 2 优先级: USART 0

第 3 优先级:定时器 1

10

第 1 优先级:定时器 1 通道 0-1 第 2 优先级: USART 1 第 3 优先级: USART 0 第4优先级:定时器 1 通道2 –3

11

第 1 优先级:定时器 1 通道 2-3 第 2 优先级: USART 0 第 3 优先级: USART 1 第4优先级:定时器 1 通道0 –1

寄存器的设置: 将控制寄存器的某一位置 1: 例: P1DIR |= 0X02 ;

解释:” |= “表示按位或运算, 0X02为十六进制数,转换成二进制数为 0000 0010 ,若 P1DIR 原来的值为 0011 0000 ,或运算后 P1DIR 的值为 0011 0010 。根据上面给出的取值表可知,按位 与运算后

P1_1 的方向改为输出,其他 I/O 口方向保持不变。

将控制寄存器某一位清 0:

例: P1DIR &= ~0X02 ;

解释:”&=“表示按位与运算, ”~“运算符表示取反, 0X02为 0000 0010,即~0X02为 1111 1101

若 P1DIR 原来的值为 0011 0010 ,与运算后 P1DIR 的值为 0011 0000 。

二.通过中断控制 LED,如何捕获一个外部中断和 CC2530 捕获外部中断后的处理 流程

P0IEN(P1IEN相同): 各个控制口的中断使能, 0为中断禁止, 1 为中断使能。

D7 D6 D5 D4 D3 D2 D1 D0

P0_7 P0_6 P0_5 P0_4 P0_3 P0_2 P0_1 P0_0 P0INP(P1INP意义相似 ) :设置各个

I/O 口的输入模式, 0为上拉 /下拉, 1为三 态模式

D7 D6 D5 D4 D3 D2 D1 D0

需要注意的是: P1INP中,只有 D7~D2分别设置对应 I/O 口的输入模式。

D1D0

两位无作用。

PICTL:D0~D3设置各个端口的中断触发方式, 0 为上升沿触发, 1 为下降沿触

发。

D7 控制 I/O 引脚在输出模式下的驱动能力。 选择输出

驱动能力增强来补偿引脚 DVDD的低 I/O 电压,确保在较低的电压下的驱动能力

和较高电压下相同。 0 为最小驱动能力增强。 1为最大驱动能力增强。

D7 D6 D5 D4 D3 D2 D1 D0

I/O 驱动能力 未用 未用 未用 P2 0~P2 4 P1 4~P1 7 P 0~P1 3 P0 0 ~P0 7

IEN0:中断使能 0,0 为中断禁止, 1 为中断使能

D7 D6 D5 D4 D3 D2 D1 D0

总中

断 EA 未

用 睡眠定

时器中

断 AES 加密 /

解密中断 USART1 RX

中断 USART0 RX

中断 ADC 中断 RF TX/RF

FIFO 中断

IEN1:中断使能 1,0 为中断禁止, 1 为中断使能

D7 D6 D5 D4 D3 D2 D1 D0

未用 未用 端口 0 定时器 4 定时器 3 定时器 2 定时器 1 DMA 传输

P0IFG(P1IFG相同):中断状态标志寄存器,当输入端口有中断请求时,相应 的标志位将置 1。

D7 D6 D5 D4 D3 D2 D1 D0

P0_7 P0_6 P0_5 P0_4 P0_3 P0_2 P0_1 P0_0

P2INP: D0~D4控制 P2_0~P2_4的输入模式, 0为上拉/ 下拉,1 为三态;

D5~D7设置对 P0、P1 和 P2 的上拉或下拉

的选择。 0 为上拉, 1 为下拉;

7 D 6 D 5 D D 3 D D 1 D 0 D

选 0择 口 端 选 1择 口 端 选 2择 口

端 模 _4

式 2 模 _3

式 2 模 _2

式 2 模 2_1

式 2 模 _0

式 2

P2IFG:D0~D4为 P2_0~P2_4的中断标志位

D5为 USBD +中断状态标志,当 D+线有一个中断请求未决时设置

该标志,用于检测 USB挂起状态下的 USB恢复事件。当 USB控制器没有挂起时

不设置该标志。

D7 D6 D5 D4 D3 D2 D1 D0

未用 未用 USB D+ P2 4 P2 3 P2 2 P2 1 P2 0

P2IEN:D0~D4控制 P2_0~P2_4的中断使能

D5 控制 USB D+的中断使能

D7 D6 D5 D4 D3 D2 D1 D0

未用 未用 USB D+ P2 4 P2 3 P2 2 P2 1

P2 0

IEN2:中断使能 2,0 为中断禁止, 1 为中断使能

D7 D6 D5 D4 D3 D2 D1 D0

未用 未用 看门狗定时器 端口 1 USART1 TX

U SART0 TX 端口 2 RF 一般中断

CC2530中断机制:

① 当按键 S1按下时,因为 S1所对应的 I/O 口为 P0_1,所以 P0 端口将会发出一个中断请

求,并自动将 P0IFG 寄存器对应位(即 D1位)置 1,等待 CPU响应。

② CPU 在执行完一条指令之后就会检测是否有中断请求,如果检测到中断请求并且 IEN1 的D5位为 1和P0IEN的 D1为 1 时,对应的中断使能位中断使能, 则根据中断类型号获 得中断向量,根据中断向量得到中断服务子程序的地址,执行终端服务子程序。当中断 服务子程序执行完毕 后返回执行原来的程序。

中断服务子程序的写法:

头文件中已定义部分代码:

#define T1_VECTOR VECT( 9, 0x4B

#define T2_VECTOR VECT( 10, 0x53 )

#define T3_VECTOR VECT( 11, 0x5B )

#define T4_VECTOR VECT( 12, 0x63 )

#define P0INT_VECTOR VECT( 13, 0x6B ) ⋯

格式如下:

#pragma vector = 中断向量

__interrupt void 任意函数名 (void)

{

// 中断处理, 处理完成后通常