CC2541本质上是一个8051内核的单片机,对其编程必须了解其寄存器,本文整理了常用的寄存器。
访问模式
符号 |
访问模式 |
R/W |
可读写 |
R |
只读 |
R0 |
读0 |
R1 |
读1 |
W |
只写 |
W0 |
写0 |
W1 |
写1 |
H0 |
硬件清除 |
H1 |
硬件设置 |
时钟相关
时钟控制命令(CLKCONCMD,0xC6)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7 |
OSC32K |
1 |
R/W |
32kHz时钟振荡器选择。设置该位只能发起一个时钟源改变。CLKCONSTA.OSC32K 反映当前的设置。当要改变该位必须选择16MHz RCOSC作为系统时钟。0:32 kHz XOSC;1:32 kHz RCOSC; |
6 |
OSC |
1 |
R/W |
系统时钟 源选择 。设置该位只能发起一个时钟源改变。CLKCONSTA.OSC 反映当前的设置。0:32 MHz XOSC;1:16 MHz RCOSC; |
5:3 |
TICKSPD[2:0] |
001 |
R/W |
定时器标记输出设置。不能高于通过 OSC 位设置的系统时钟设置。000:32 MHz;001:16 MHz;010:8 MHz;011:4 MHz;100:2 MHz;101:1 MHz;110:500 kHz;111:250 kHz;注意 CLKCONCMD.TICKSPD 可以设置为任意值,但是结果受CLKCONCMD.OSC 设置的限制,即如果 CLKCONCMD.OSC=1且 CLKCONCMD.TICKSPD=000,CLKCONCMD.TICKSPD 读出001 且实际 TICKSPD 是 16 MHz。 |
2:0 |
CLKSPD |
001 |
R/W |
时钟速度。不能高于通过 OSC 位设置的系统时钟设置 。 表示当前系统时钟频率。000:32MHz;001:16MHz;010:8MHz;011:4MHz;100:2MHz;101:1MHz;110:500 kHz;111:250 kHz;注意CLKCONCMD.CLKSPD可以设置为任意值,但是结果受CLKCONCMD.OSC设置的限制,即如果CLKCONCMD.OSC=1且CLKCONCMD.CLKSPD=000 , CLKCONCMD.CLKSPD读出001且实际CLKSPD是16MHz。还要注意调试器不能和一个划分过的系统时钟一起工作。当运行调试器,当CLKCONCMD.OSC=0,CLKCONCMD.CLKSPD的值必须设置为000,或当CLKCONCMD.OSC=1设置为001。 |
时钟控制状态(CLKCONSTA,0x9E)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7 |
OSC32K |
1 |
R |
当前选择的 32 kHz 时钟源。0:32kHz XOSC;1:32kHz RCOSC; |
6 |
OSC |
1 |
R |
当前选择的系统时钟。0:32MHz XOSC;1:16MHz RCOSC |
5:3 |
TICKSPD[2:0] |
001 |
R |
当前设置的定时器标记输出。000:32MHz;001:16MHz;010:8MHz;011:4MHz;100:2MHz;101:1MHz;110:500kHz;111:250 kHz; |
2:0 |
CLKSPD |
001 |
R |
当前时钟速度。000:32MHz;001:16MHz;010:8MHz;011:4MHz;100:2MHz;101:1MHz;110:500kHz;111:250 kHz; |
睡眠模式控制命令(SLEEPCMD,0xBE)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7 |
OSC32K_CALDIS |
0 |
R/W |
禁用32-kHz RC振荡器. 0: 使能32-kHz RC振荡器. 1: 禁用32-kHz RC振荡器.在任何时刻都可以设置此bit位,但在片上16-MHz高速RC振荡器起振前设置不会有作用。 |
6:3 |
- |
000 0 |
R0 |
保留 |
2 |
OSC_PD |
1 |
R/W |
设置晶振、振荡器电源。1:关闭未使用振荡器和晶振的电源 0:开启所有振荡器和晶振的电源。 |
1:0 |
MODE[1:0] |
00 |
R/W |
电源模式 00: 活动和空闲模式 01:电源模式1(PM1) 10: 电源模式2(PM2) 11:电源模式3(PM3) |
睡眠模式状态(SLEEPSTA,0x9D)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7 |
OSC32K_CALDIS |
0 |
R |
禁用32-kHz RC振荡器. 0: 使能32-kHz RC振荡器. 1: 禁用32-kHz RC振荡器.在任何时刻都可以设置此bit位,但在片上16-MHz高速RC振荡器起振前设置不会有作用。 |
6:5 |
- |
00 |
R |
保留 |
4:3 |
RST[1:0] |
00 |
R |
记录最终复位信号源。有多种复位,寄存器只保留最后事件,00:上电复位和掉电检测 01:外部复位信号 10:看门狗时钟复位 11:时钟丢失复位。 |
2 |
OSC_PD |
1 |
R |
1:关闭未使用振荡器和晶振的电源 0:开启所有振荡器和晶振的电源。 |
1 |
- |
0 |
R |
保留. |
0 |
CLK32K |
0 |
R |
32kHz时钟信号,与系统时钟同步。 |
IO寄存器
端口寄存器(P0,P1,P2)
端口 |
Bit位 |
名称 |
初始化 |
读写 |
描述 |
P0 |
7:0 |
P0[7:0] |
0XFF |
R/W |
端口0,通用I/O端口,可以位寻址。 XDATA (0x7080). |
P1 |
7:0 |
P1[7:0] |
0XFF |
R/W |
端口1,通用I/O端口,可以位寻址。 XDATA (0x7090). |
P2 |
7:5 |
|
000 |
R0 |
未使用 |
P2 |
4:0 |
P2[4:0] |
0x1F |
R/W |
端口2,通用I/O端口,可以位寻址。 XDATA (0x70A0). |
方向寄存器(P0DIR,P1DIR,P2DIR)
端口 |
Bit位 |
名称 |
初始化 |
读写 |
描述 |
P0DIR |
7:0 |
DIRP0_[7:0] |
0x00 |
R/W |
P0.7--P0.0的方向(0:输入 1:输出) |
P1DIR |
7:0 |
DIRP1_[7:0] |
0x00 |
R/W |
P1.7--P1.0的方向(0:输入 1:输出) |
P2DIR |
7:6 |
PRIP0[1:0] |
00 |
R/W |
端口0外设优先级控制,当PERCFG分配给一些外设相同引脚的时候,这些位将确定优先级。优先级从前到后如下:00:USART 0,USART 1,Timer 1; 01:USART 1,USART 0,Timer 1; 10:Timer 1 channels 0-1,USART 1,USART 0,Timer 1 channels 2-3; 11:Timer 1 channels 2-3,USART 0,USART 1,Timer 1 channels 0-1 |
P2DIR |
5 |
--- |
0 |
R0 |
未使用 |
P2DIR |
4:0 |
DIRP2_[4:0] |
00000 |
R/W |
P2.4—P2.0的方向(0:输入 1:输出) |
外设控制(PERCFG)
端口 |
Bit位 |
名称 |
初始化 |
读写 |
描述 |
PERCFG |
7 |
--- |
0 |
R0 |
未使用 |
PERCFG |
6 |
T1CFG |
0 |
R/W |
计时器1的I/O位置:0:位置1; 1:位置2 |
PERCFG |
5 |
T3CFG |
0 |
R/W |
计时器3的I/O位置:0:位置1; 1:位置2 |
PERCFG |
4 |
T4CFG |
0 |
R/W |
计时器4的I/O位置:0:位置1; 1:位置2 |
PERCFG |
3:2 |
--- |
00 |
R/W |
未使用 |
PERCFG |
1 |
U1CFG |
0 |
R/W |
USART 1的I/O位置:0:位置1; 1:位置2 |
PERCFG |
0 |
U0CFG |
0 |
R/W |
USART 0的I/O位置:0:位置1; 1:位置2 |
功能选择(P0SEL,P1SEL,P2SEL)
端口 |
Bit位 |
名称 |
初始化 |
读写 |
描述 |
P0SEL |
7:0 |
SELP0_[7:0] |
0x00 |
R/W |
P0.7--P0.0的功能选择(0:通用I/O 1:外设功能) |
P1SEL |
7:0 |
SELP1_[7:0] |
0x00 |
R/W |
P1.7--P1.0的功能选择(0:通用I/O 1:外设功能) |
P2SEL |
7 |
--- |
0 |
R0 |
未使用 |
P2SEL |
6 |
PRI3P1 |
0 |
R/W |
端口1外设优先级控制,当PERCFG分配USART0和USART1相同引脚的时候,这些位将确定优先级。0:USART 0 优先; 1:USART 1 优先 |
P2SEL |
5 |
PRI2P1 |
0 |
R/W |
端口1外设优先级控制,当PERCFG分配USART1和TIMER3相同引脚的时候,这些位将确定优先级。0:USART 1 优先; 1:TIMER 3 优先 |
P2SEL |
4 |
PRI1P1 |
0 |
R/W |
端口1外设优先级控制,当PERCFG分配TIMER1和TIMER4相同引脚的时候,这些位将确定优先级。0:TIMER 1 优先; 1:TIMER 4 优先 |
P2SEL |
3 |
PRI0P1 |
0 |
R/W |
端口1外设优先级控制,当PERCFG分配USART0和TIMER1相同引脚的时候,这些位将确定优先级。0:USART 0 优先; 1:TIMER 1 优先 |
P2SEL |
2:0 |
SELP2_[2:0] |
000 |
R/W |
P2.2--P2.0的功能选择(0:通用I/O 1:外设功能) |
输入模式(P0INP,P1INP,P2INP)
端口 |
Bit位 |
名称 |
初始化 |
读写 |
描述 |
P0INP |
7:0 |
MDP0_[7:0] |
0x00 |
R/W |
P0.7--P0.0的输入模式: 0:上拉/下拉(具体看PDUP0设置); 1:三态 |
P1INP |
7:2 |
MDP1_[7:2] |
000000 |
R/W |
P1.7—P1.2的输入模式:0:上拉/下拉(具体看PDUP1设置);1:三态 |
P1INP |
1:0 |
--- |
00 |
R0 |
未使用 |
P2INP |
7 |
PDUP2 |
0 |
R/W |
端口2上拉/下拉选择,对所有端口2引脚设置为上拉/下拉输入:0:上拉;1:下拉 |
P2INP |
6 |
PDUP1 |
0 |
R/W |
端口1上拉/下拉选择,对所有端口1引脚设置为上拉/下拉输入:0:上拉;1:下拉 |
P2INP |
5 |
PDUP0 |
0 |
R/W |
端口0上拉/下拉选择,对所有端口0引脚设置为上拉/下拉输入:0:上拉;1:下拉 |
P2INP |
4:0 |
MDP2_[4:0] |
00000 |
R/W |
P2.4—P2.0的输入模式: 0:上拉/下拉(具体看PDUP2设置);1:三态 |
中断状态标志(P0IFG,P1IFG,P2IFG)
端口 |
Bit位 |
名称 |
初始化 |
读/写 |
描述 |
P0IFG |
7:0 |
P0IF[7:0] |
0x00 |
R/W0 |
端口0,位7至位0输入中断状态标志。当某引脚上有中断请求未决信号时,其相应标志为设1。 |
P1IFG |
7:0 |
P1IF[7:0] |
0x00 |
R/W0 |
端口1,位7至位0输入中断状态标志。当某引脚上有中断请求未决信号时,其相应标志为设1。 |
P2IFG |
7:5 |
--- |
000 |
R0 |
未使用 |
P2IFG |
4:0 |
P2IF[4:0] |
0x00 |
R/W0 |
端口2,位4至位0输入中断状态标志。当某引脚上有中断请求未决信号时,其相应标志为设1。 |
中断控制(PICTL)
端口 |
Bit位 |
名称 |
初始化 |
读写 |
描述 |
PICTL |
7 |
PADSC |
0 |
R/W |
强制引脚在输出模式。选择输出驱动能力,由DVDD引脚提供。0:最小驱动能力;1:最大驱动能力 |
PICTL |
6:4 |
--- |
000 |
R0 |
未使用 |
PICTL |
3 |
P2ICON |
0 |
R/W |
端口2,引脚4至0输入模式下的中断配置,该位为端口2的4-0脚的输入选择中断请求条件。0:输入的上升沿引起中断;1:输入的下降沿引起中断 |
PICTL |
2 |
P1ICONH |
0 |
R/W |
端口1,引脚7至4输入模式下的中断配置,该位为端口1的7-4脚的输入选择中断请求条件。0:输入的上升沿引起中断;1:输入的下降沿引起中断 |
PICTL |
1 |
P1ICONL |
0 |
R/W |
端口1,引脚3至0输入模式下的中断配置,该位为端口1的3-0脚的输入选择中断请求条件。0:输入的上升沿引起中断;1:输入的下降沿引起中断 |
PICTL |
0 |
P0ICON |
0 |
R/W |
端口0,引脚7至0输入模式下的中断配置,该位为端口0的7-0脚的输入选择中断请求条件。0:输入的上升沿引起中断;1:输入的下降沿引起中断 |
中断屏蔽(P0IEN,P1IEN,P2IEN)
端口 |
Bit位 |
名称 |
初始化 |
读写 |
描述 |
P0IEN |
7:0 |
P0_[7:0]IEN |
0x00 |
R/W |
端口0,位7至位0中断使能。0:中断禁止;1:中断使能 |
P1IEN |
7:0 |
P1_[7:0]IEN |
0x00 |
R/W |
端口1,位7至位0中断使能。0:中断禁止;1:中断使能 |
P2IEN |
7:6 |
--- |
00 |
R0 |
未使用 |
P2IEN |
5 |
DPIEN |
0 |
R/W |
USB D+ 中断使能。 |
P2IEN |
4:0 |
P2_[4:0]IEN |
00000 |
R/W |
端口2,位4至位0中断使能。0:中断禁止;1:中断使能 |
ADC输入配置(APCFG)
端口 |
Bit位 |
名称 |
初始化 |
读写 |
描述 |
APCFG |
7:0 |
APCFG[7:0] |
0x00 |
R/W |
模拟外围I/O配置(ADC输入配置),APCFG[7:0]选择P0.7—P0.0作为模拟输入口。0:模拟输入(ADC输入)禁止; 1:模拟输入(ACD输入)使能 |
串口及SPI相关
USART0的控制和状态(U0CSR,0x86)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7 |
MODE |
0 |
R/W |
USART模式选择: 0:SPI模式;1:UART模式 |
6 |
RE |
0 |
R/W |
UART接收器使能。注意在UART完全配置之前不使能接收。0:禁用接收器;1:接收器使能 |
5 |
SLAVE |
0 |
R/W |
SPI主或者从模式选择.0:SPI主模式;1:SPI从模式; |
4 |
FE |
0 |
R/W0 |
UART帧错误状态.0:无帧错误检测;1:字节收到不正确停止位级别 |
3 |
ERR |
0 |
R/W0 |
UART奇偶错误状态.0:无奇偶错误检测;1:字节收到奇偶错误 |
2 |
RX_BYTE |
0 |
R/W0 |
接收字节状态。URAT模式和SPI从模式。当读U0DBUF该位自动清除,通过写0清除它,这样有效丢弃U0DBUF中的数据 。0:没有收到字节;1:准备好接收字节 |
1 |
TX_BYTE |
0 |
R/W0 |
传送字节状态。URAT模式和SPI主模式.0:字节没有被传送;1:写到数据缓存寄存器的最后字节被传送 |
0 |
ACTIVE |
0 |
R |
USART传送/接收主动状态、在SPI从模式下该位等于从模式选择。0:USART空闲;1:在传送或者接收模式USART忙碌 |
UART的控制(U0UCR,0xC4)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7 |
FLUSH |
0 |
R0/W1 |
清除单元。当设置时,该事件将会立即停止当前操作并且返回单元的空闲状态。 |
6 |
FLOW |
0 |
R/W |
UART硬件流使能。用RTS和CTS引脚选择硬件流控制的使用。0:流控制禁止.1:流控制使能. |
5 |
D9 |
0 |
R/W |
UART奇偶校验位。当使能奇偶校验,写入D9的值决定发送的第9位的值,如果收到的第9位不匹配收到字节的奇偶校验,接收时报告ERR。如果奇偶校验使能, 那么该位设置以下奇偶校验级别。0:奇校验;1:偶校验. |
4 |
BIT9 |
0 |
R/W |
UART 9位数据使能。当该位是1时, 使能奇偶校验位传输(即第9位)。如果通过PARITY使能奇偶校验,第9位的内容是通过D9给出的。0:8位传送;1:9位传送 |
3 |
PARITY |
0 |
R/W |
UART奇偶校验使能。除了为奇偶校验设置该位用于计算,必须使能9位模式。0:禁用奇偶校验;1:奇偶校验使能 |
2 |
SPB |
0 |
R/W |
UART停止位的位数。选择要传送的停止位的位数.0:1位停止位;1:2位停止位 |
1 |
STOP |
1 |
R/W |
UART停止位的电平必须不同于开始位的电平.0:停止位低电平;1:停止位高电平 |
0 |
START |
0 |
R/W |
UART起始位电平。闲置线的极性采用选择的起始位级别的电平的相反的电平。0:起始位低电平;1:起始位高电平 |
USART0的通用控制(U0GCR,0xC5)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7 |
CPOL |
0 |
R/W |
SPI的时钟极性.0:负时钟极性;1:正时钟极性; |
6 |
CPHA |
0 |
R/W |
SPI时钟相位.0:当SCK从CPOL倒置到CPOL时数据输出到MOSI,并且当SCK从CPOL倒置到CPOL时数据输入抽样到 MISO。1:当SCK从CPOL倒置到CPOL时数据输出到MOSI,并且当SCK从CPOL倒置到 CPOL 时数据输入抽样到 MISO 。 |
5 |
ORDER |
0 |
R/W |
传送位顺序.0:LSB先传送;1:MSB先传送; |
4:0 |
BAUD_E[4:0] |
0 |
0000 |
R/W 波特率指数值。BAUD_E 和 BAUD_M 决定了 UART 波特率 和 SPI 的主 SCK 时 |
USART0的数据缓存(U0BUF,0xC1)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7:0 |
DATA[7:0] |
0x00 |
R/W |
USART接收和传送数据 。 当写这个寄存器的时候数据被写到内部,传送数据寄存 |
USART0波特率(U0BAUD,0xC2)
Bit位 |
名称 |
初始化 |
读写 |
描述 |
7:0 |
BAUD_M[7:0] |
0x00 |
R/W |
波特率小数部分的值。 BAUD_E和 BAUD_M决定了UART的波特率和SPI的主SCK |