原创 MSP430F5418使用总结

2011-8-10 16:37 4029 12 15 分类: 消费电子

        到目前为止,已工作一月有余。培训的时候领导就说,硬件工程师一定要清楚自己的定位,我们并不只是设计一下电路,画画原理图和PCB就可以的,硬件相关的驱动程序也是要由我们来完成的,这也是硬件工程师的一项基本技能。

 

        公司的产品是基于MSP430F5418开发的,虽然在学校基于其他处理器也编写过不少驱动程序,但是面对一款新的处理器,仍然需要一个熟悉的过程,在程序的调试过程中也或多或少地遇到过一些问题,现总结如下。

 

        1)UCS

 

        时钟如同处理器的心脏,每一个周期就是心脏的一次脉动。以前使用其他处理器时,只需要选择合适频率的晶体,接在XT1和XT2两端,再加两个电容就可以了。而MSP430F5418的时钟系统略显复杂,容易让刚开始接触它的人一头雾水。5418的时钟设置由UCS(Unified Clock System)来管理,使用起来比较灵活,其结构图如下所示。

 

ucs.jpg

 

        UCS模块有XT1CLK和XT2CLK两个外部时钟源,以及VLOCLK、REFOCLK和DCOCLK(DCOCLKDIV是DCOCLK的分频输出)三个内部时钟源。其中XT1CLK、REFOCLK和XT2CLK可以作为FLLREFCLK输入到FLL单元来改变DCO的输出。所有这些时钟源经分频后都可以作为MCLK、SMCLK和ACLK输出。

 

        下面是一个UCS设置的例子,使用32768Hz的内部时钟源REFOCLK,并通过FLL倍频使MCLK为16.384MHz。

 

void UCS_Init(void)
{
  UCSCTL3 |= SELREF__REFOCLK;             // 选取REFOCLK作为FLLREFCLK
 
  __bis_SR_register(SCG0);                            // 禁止FLL
  UCSCTL0 = 0x0000;
  UCSCTL1 = DCORSEL_6;
  UCSCTL2 = FLLD_1 + 499;                           // 将REFOCLK 500倍频到16.384MHz
  __bic_SR_register(SCG0);                            // 使能FLL
  UCSCTL5 |= DIVS__32;                                 // SMCLK 32分频后输出
  UCSCTL4 |= SELA__REFOCLK;                  // 选取REFOCLK为ACLK
  do
  {// 清除时钟错误标志位
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
    SFRIFG1 &= ~OFIFG;                                    // 清除时钟错误中断标志
  } while (SFRIFG1 & OFIFG);                           // 等待时钟稳定
}    

                                                                                                                                                     

        2)SPI

 

        在进行SPI接口的设置时,如果处理器作为主器件,那么一定要根据从器件的时序确定正确的时钟相位和时钟极性。如果使能了SPI的发送中断,需要注意的一点是,在发送第一个字节来启动整个发送过程时,该字节的发送不是瞬间的,需要等待一定的时间,以UCB1为例即:

 

UCB1TXBUF = data;
 while (UCB1STAT & UCBUSY);   // 等待data发送完毕

 

3)UART

 

        通过串口调试助手向UART发送数据时,如果使能了接收中断,那么每接收一个字符都会触发一次中断,两次中断之间程序是会回到主程序继续执行的。如何判断接收数据的结束?一种方法是固定指令的长度,以长度来界定;另一种更常用的方法是设计一定的通信协议来针对不定长的指令,如把每个指令都封装成帧,给其加上特定的帧头、帧尾。

 

4)RTC

 

        MSP430F5418的RTC在日历模式下存在BUG,直接对日期及时间寄存器赋值经常会不成功。解决的方法是读写日期和时间寄存器时使用TI公司在RTC_Workaround中给出的例程。

 

5)其他

 

        设计中应尽量避免中断嵌套,中断服务程序中的代码量尽量少。

 

 

文章评论3条评论)

登录后参与讨论

用户1229813 2013-3-23 17:25

谢谢

用户1181495 2013-1-31 20:06

概念清晰

用户1395591 2011-9-15 12:26

帮顶一下吧。

用户1586031 2011-8-14 23:27

新手飘过

用户1602177 2011-8-10 14:05

感谢分享~

用户1277994 2010-11-24 09:21

谢谢博主。
相关推荐阅读
用户1362633 2013-10-22 11:00
LPC3250的启动过程
1.bootstrap   复位后,LPC3250从内部ROM开始执行。内置的16KB ROM中包含有一段启动程序,称为bootstrap,它将代码从UART5、SSP0(SPI模式)、E...
用户1362633 2013-07-01 16:17
初识TQ2440开发板
         刚拿到开发板,有点儿无从下手。查看光盘资料,按照《裸奔三部曲》折腾,一开始就遇到了问题,不知道如何将原厂程序烧写进开发板。         根据书里的说明,首先安装了光盘里“...
用户1362633 2011-09-08 16:45
弄懂SPI接口
        SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用。         1...
用户1362633 2010-08-16 10:24
LPC2138串口中断总结
      LPC2138的串口带有16字节的接收和发送FIFO,并且接收FIFO的触发点可设为1,4,8,14字节。            1)接收      当接收到的字节数达到设置的触发点(通过...
用户1362633 2009-07-02 16:39
Windows下NS2的详细安装过程
简单的说,NS-2是一个网络模拟器,所以经常被用到网络课的教学中。NS-2是OpenSource的,最早的版本是在linux/unix下运行的,后来有了windows下用vc编译运行的版本,但从2.2...
我要评论
3
12
关闭 站长推荐上一条 /2 下一条