MSP430学习

来源:互联网 发布:迅雷未知错误mac 编辑:程序博客网 时间:2024/04/26 05:22

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的发送和接收中断.还有看门狗和晶振出错中断.

中断标志寄存器   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  子系统时钟.可由软件选择来自LFXT1CLKDCOCLK,可者XT2CLKDCOCLK(由具体器件决定),然后经1.2.4.8分步得到.SMCLK主要用于高速外围模块.

     低频振荡器(LFXT1)

    低频振荡器有两个工作状态,一个是低频模式,在外部要接一个固定频率为32768Hz的晶体.这个时候不用在晶体外部接电容.

    另外低频振荡器也可以工作在高频状态.这个时候可以在外部接450K8M的晶体.但是要外电容.

      高频振荡器(XT2)

    与低频振荡器不同的时,高速晶体振荡器要的功耗更大.高整晶体振荡器接在XT2INXT2OUT之间,并且必须接外部电容.高速晶体硅藻器可以作为SMCLKACLK的时钟源.外接450K8M之间的晶体.

  DCO振荡器.

    DCO是内部集成的RC类型的振荡器.DCO的频率会随法度和电压的变化而变化,并且不同芯片的频率也可能不一样.采用DCO方式的时钟信号数度比较差,但是可以通过软件来设置DCOx,MODx,RSELx.来调整DCO的频率,从而增加DCO频率的稳定性.

DCOCTL寄存器:DCO控制寄存器(8)

   这个寄存器分成两组比特,5—7定义了8种频率,可以选定其中一种.

.0—4MODx作用.32个周期为一个大周期,5BIT用于控制在这32个周期中有多个DCO+1个周期,起来一个信号调制的作用.,DCO7,表示已是最高频率,此时就不能利用MODx进行频率调整.

    BCSCTL1  基本时钟模块控制器1 (8)

    在这里可以选择内部的电阻.不同的阻值会有不同的频率.0为最低,7为最高.还可以控制XT2高速振荡器的关毕和开启.

    还能选择低频振荡器是工作在低频模式还是高频模式.

    选择控制ACLK的分步系数.

BCSCTL2  基本时钟模块控制器2(8)

    在这里可以选择MCLK的时钟源.

    可以选择MCLK的分频因子.

    选择SMCLK的时钟源和它的分频因子.

    还可以选择是内部电阻还是外部电阻.

不同的芯片还会有不同的功能.

MCLK选用DCO作用时钟源.频率选用的是最低的.没有调制.

 

 

 

USART模块 

    串口通信分为UART  异步通信 ,SPI   同步通信.

 

UxCTL寄存器  (x可以为12,因为不同的芯片可能有一个或两个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,下一字节是地址.

STC0,SPI4线模式,当为0,SPI3线模式.

TXEFP  发送器空标志.当为0,表示发送缓冲区UTXBUF有数据,当为1,表示发送缓冲区没有数据.

UxRCTL  接收控制寄存器.

   这里主要有帧出错标志,校验出错标志,溢出标志.打断检测标志.

   还有接收出错中断允许位

   还有接收唤醒中断允许位,当为0,当该位为0,每接收到一个字符都使都使标志位URXIFGx,当位1,只有接收到地址字符才能设置URXIFGx

  还有,RXWAKE 接收唤醒标志.当该位为0,接收到的字符是数据.当该位为1,接收到的字符是地址.

    RXERR   接收出错标志.

   UxBR0.UxBR1UxMCTL 是设定波特率的

其中UXBR0为低字节,UXBR1为高字节.这两个字节合起来构成一个16UBR,一般情况下同这个就可以设置我们常用的波特率,但要是所用的波特

是小数,则要UXMCTL,可以达到要求

波特率=BRCLK/(UBR +(UXMCTL)/8).

UxRXBUFUxTXBUF接收和发送缓冲器

UxRXBUF寄存器是用来接收数据的寄存器,当有数据的时候,从该寄存器里读出来.

UxRXBUF 寄存器是用来发送数据的寄存器.当有数据要发送的时候,将数据写入到该寄存器就OK

一般初始化USART,要以下几上地方.(UART为例)

    先通过UXCTL来设定数据长度

   清空发送控制寄存器(UXTCTL),之后现选择波特率发生器,我们一般用SMCLK

    再通过UBR来设定波特率

    再使能相应的TXDRXD中断(通过ME1模块使能寄存器来使能TXDRXD)

然后再IE1中断使能寄存器来RXTX中断.

再将相应管角设定为TXDRXD,并将TXD设定为输出,RXD设定为输入

原创粉丝点击