2 有16个寄存器,其中有四个特殊寄存器.程序计数器,PC.堆栈指针SP.状态寄存器和常数发处理器.
程序寄存器用来存放下一条指令的地址.
堆栈指针是当程序进入子程序或是中断的时候用来保护现场的.
常数发生器是用来产生常数的
以上三个特殊寄存器在写C程序时不用考虑.
状态寄存器SR(16位)是用来反应CPU的状态的.在写C时,都要来设置或读取某些位.来控制CPU的行为.在程序寄存器里可以读取ALU的状态,设置总中断控制位,设置系统时钟的工作状态.
3 外围模块寄存器
外围模块寄存有的是8 位的,有的是16位的.
1 中断使能寄存器1 IE1 (8 位)
在这里主要能应用到的是设置的USART0的发送完毕和接收完毕的中断控制位.
2 中断使能寄存器2 IE2(8 位)
在这里主要设置 USART1的发送和接收的中断
3 中断标志寄存器 IFG1(8位)
这里主要是一些模块的中断标志位,CPU根据这些标志们来进入中断.
这个寄存器是RW的,也就是这些标志可能是单片机进行某些操作后自己标志的,也可以是人为写的,这样可以方便打操作.
我们主要用的是USART0的发送和接收中断.还有看门狗和晶振出错中断.
4 中断标志寄存器 IFG2(8 位)
这主要是控制读写USART1的中断标志位,作用和IFG1相同.
5 模块使能寄存器 ME1 (8位)
用来使能USART0的传输和接收.
6 模块使能寄存器 ME2(8位)
用来使能USART1的传输和接收.
看门狗
看门狗有两个定时器 WDTCTL 看门狗控制寄存器
WDTCNT 看门狗计数器.
在默认的情况下,看门狗处于工作状态.(有两个位控制,一个是控制时钟输入,一个是,选择看门狗的工作模式,是普通定时器的模式,还是看门狗模式.)
选用的信号是SMCLK,计数频率是SMCLK/32786.
并且RST/NMI做为复位管角.
一般情况下,要停止看门狗的工作,只要不让有时钟输入就可以了.
NMI是由晶体失效时产生的中断.这个时候DCO时钟会自动被选用做MCLK的时钟源.
定时器A
TACTL 定时器A控制寄存器
可以选择时钟源(外部管角时钟源,ACLK,MCLK,或外部输入时钟)以及时钟源的分频系数,工作模式(停止,增加,连续,增减).还能对定时器A进行清0,并使能其中断,还有中断标志
默认情况下用的是个部管角做为输入信号,没有分频,定显示停止工作,也没有中断使能..
TAR 定时器A计数器 (16位)
当计数器的时钟不是MCLK时,写入该寄数器的时候应停止计数器的计数,因为它与CPU不同步.CPU用的是MCLK做为工作时钟.
TAIV 中断向量寄存器
因为定时器A可以有三个中断方式,一个是溢出中断,也可以是来自己于捕获比较定时器.这些中断向量用同一个中断标志位,所以这个寄存里就存着中定时器A产生的不同中断的向量表,是固定的,不能写的.
CCTLn 定时器A捕获比较控制寄存器
定时器A有多个捕获比较模块.每个模块都有一个CCTLn.
定时器A有三种中断方式,普通溢出方式,捕捉方式,还有比较方式
普通方式.就是在TAR溢出后产生中断
捕捉方式 有一个固定的外部管角,如果在这个固定的管角上发生脉冲触发沿,则TAR寄存器中的值将会被写入CCRn中,所以晕种模式经常用于确定事件的发生时间.
比较模式 即在CCRn中写入一个固定的数值,当TAR数值变化为CCRn时,就会产生中断.
这个寄存器,可以设定的是捕获模式还是比较模式.
当是捕获模式时,可是设定是同步捕获还是异步捕获.异步捕获模式允许在请求时,立即将CCIFG置位,和捕获定时器值.适用于捕获信号同期远大于定时器时钟周期的情况.如果定时器时钟和捕获信号发生时间竞争,则捕寄存器的可能出错,所以实际上我们一般用同步捕获.
捕获模式下,我们可以设定是地上升沿捕获还是下降沿捕获.还可以选择不同的不同的捕获事件输入源(有不同的管角).
在比较模式时,还可以设定输入方式(如PWM CTC等).
还可以设定中断允许,还有中断标志等.
定时器B
时钟系统
一般来说,MSP430单片机的时钟系统由高速晶体,低速晶体和数字控制振荡器(DCO)等器件构成.这三个模式会产生三个不同的时钟供不同的模块使用.产生的时钟为 ACLK(辅助时钟),MCLK(主系统时钟).SMCLK(子系统时钟).当我们选用不同的时钟信号,也就是频率不同,就可以达到低功耗的作用.一般情况下,频率越低,功耗越小.
三种基础时钟模块作用.
ACLK 辅助时钟由XFXT1CLK信号经1.2.4.8分频后得到.ACLK可由软件选做各外围模块的时钟信号.一般用于低速外设.
MCLK 系统主时钟.可由软件选择来自LFXT1CLK,TX2CLK,DCOCLK三者之一.然后经过1.2.4.8分频后得到.MCLK主要用于CPU和系统.
SMCLK 子系统时钟.可由软件选择来自LFXT1CLK和DCOCLK,可者XT2CLK和DCOCLK(由具体器件决定),然后经1.2.4.8分步得到.SMCLK主要用于高速外围模块.
低频振荡器(LFXT1)
低频振荡器有两个工作状态,一个是低频模式,在外部要接一个固定频率为32768Hz的晶体.这个时候不用在晶体外部接电容.
另外低频振荡器也可以工作在高频状态.这个时候可以在外部接450K到8M的晶体.但是要外电容.
高频振荡器(XT2)
与低频振荡器不同的时,高速晶体振荡器要的功耗更大.高整晶体振荡器接在XT2IN和XT2OUT之间,并且必须接外部电容.高速晶体硅藻器可以作为SMCLK和ACLK的时钟源.外接450K到8M之间的晶体.
DCO振荡器.
DCO是内部集成的RC类型的振荡器.DCO的频率会随法度和电压的变化而变化,并且不同芯片的频率也可能不一样.采用DCO方式的时钟信号数度比较差,但是可以通过软件来设置DCOx,MODx,RSELx.来调整DCO的频率,从而增加DCO频率的稳定性.
DCOCTL寄存器:DCO控制寄存器(8)
这个寄存器分成两组比特,5—7定义了8种频率,可以选定其中一种.
.0—4是MODx作用.以32个周期为一个大周期,这5个BIT用于控制在这32个周期中有多个DCO+1个周期,起来一个信号调制的作用.当,DCO为7时,表示已是最高频率,此时就不能利用MODx进行频率调整.
BCSCTL1 基本时钟模块控制器1 (8)
在这里可以选择内部的电阻.不同的阻值会有不同的频率.0为最低,7为最高.还可以控制XT2高速振荡器的关毕和开启.
还能选择低频振荡器是工作在低频模式还是高频模式.
选择控制ACLK的分步系数.
BCSCTL2 基本时钟模块控制器2(8)
在这里可以选择MCLK的时钟源.
可以选择MCLK的分频因子.
选择SMCLK的时钟源和它的分频因子.
还可以选择是内部电阻还是外部电阻.
不同的芯片还会有不同的功能.
在MCLK选用DCO作用时钟源.频率选用的是最低的.没有调制.
USART模块
串口通信分为UART 异步通信 ,SPI 同步通信.
UxCTL寄存器 (x可以为1或2,因为不同的芯片可能有一个或两个USART接口)
USART基本控制寄存器
在这里可以设定是有没有校验,
是奇校验还是偶校验,
有没有停止位
字符长度
有无反馈
是异步还是同步
多机模式选择
还有控制位SWRST.这一位比较重要,它的状态影响着其他一些控制位和状态位的状态.
一次正确的USART模块初始化应该是这样的 先使SWRST=1来设置串口,然后使SWRST=0.也就是说说在SWRST时,用来设置串口的功能,当SWRST=0时,再来使用.如果要设置中断,可以在SWRST=0时的时候来设定.
UxTCL 发送控制寄存器
CKPH (BIT7) 时钟相位控制
0 在SPI模式下,使用正常的UXLK时钟
1 在SPI模式下,UCLK时钟信号被延迟半个周期后用作SPICLK信号
CDPL (BIT6) 时钟极性控制位
0 信号的低电平为无效电平,数据在UCLK的上升沿输出.输入数据在UCLK的上升沿被锁存.
1 与之下相反.
以上两位之有在SPI模式下才有用,UART时没有用.
在这里还可以设定波特率发生器的时钟源,可以是外部UCLK,也可以是ACLK,或SMCLK.一般选用SMCLK.
通过URXSE 当为0时,表明不骨接收到数据,为1时,接收到数据,请求中断服务.
通过TXWAKE,当为0时,下一字节是数据,为1时,下一字节是地址.
STC为0时,SPI是4线模式,当为0时,SPI是3线模式.
TXEFP 发送器空标志.当为0时,表示发送缓冲区UTXBUF有数据,当为1时,表示发送缓冲区没有数据.
UxRCTL 接收控制寄存器.
这里主要有帧出错标志,校验出错标志,溢出标志.打断检测标志.
还有接收出错中断允许位
还有接收唤醒中断允许位,当为0时,当该位为0时,每接收到一个字符都使都使标志位URXIFGx,当位1时,只有接收到地址字符才能设置URXIFGx
还有,RXWAKE 接收唤醒标志.当该位为0时,接收到的字符是数据.当该位为1时,接收到的字符是地址.
RXERR 接收出错标志.
UxBR0.UxBR1和UxMCTL 是设定波特率的
其中UXBR0为低字节,UXBR1为高字节.这两个字节合起来构成一个16位UBR,一般情况下同这个就可以设置我们常用的波特率,但要是所用的波特
是小数,则要UXMCTL,可以达到要求
波特率=BRCLK/(UBR +(UXMCTL)/8).
UxRXBUF和UxTXBUF 接收和发送缓冲器
UxRXBUF寄存器是用来接收数据的寄存器,当有数据的时候,从该寄存器里读出来.
UxRXBUF 寄存器是用来发送数据的寄存器.当有数据要发送的时候,将数据写入到该寄存器就OK
一般初始化USART时,要以下几上地方.(以UART为例)
先通过UXCTL来设定数据长度
清空发送控制寄存器(UXTCTL),之后现选择波特率发生器,我们一般用SMCLK
再通过UBR来设定波特率
再使能相应的TXD和RXD中断(通过ME1模块使能寄存器来使能TXD和RXD)
然后再IE1中断使能寄存器来RX和TX中断.
再将相应管角设定为TXD和RXD,并将TXD设定为输出,RXD设定为输入