`
yidongkaifa
  • 浏览: 4064698 次
文章分类
社区版块
存档分类
最新评论

MSP430开发笔记

 
阅读更多

本文以MSP430F147为例,其它型号可能略有不同

1. 时钟
三个时钟源,一个内部的DCO,一个LFTX1(可工作在低速模式或高速模式),一个XT2(高速时钟);XT2工作方式与LFTX1的高速模式相似,可达450K~8MHz,工作频率与电压有关系,可见数据手册。

*****手册上说在3V时频率最高可达10M,按线性关系计算,3.3V时可达11M,本人试过12M晶振没有问题,运行稳定,也试着上了16M,可以短时间工作,有一两秒种,然后与计算机超频死机现像类似。具体可以稳定工作在多高频率,还没有试,手头没有其它晶体,或稍修改一下外接电容可能也稍会提高,或再加电阻,有时间可以进行超频实验。

MSP430内部分为三种时钟MCLK(系统主时钟)、ACLK(辅助时钟)和SMCLK(子系统时钟),可以根据使用的外设不同及实际情况适当选择和调节时钟的频率。在降低功耗上,可以尽可能地使频率降低,分频后再给外设。

可能振荡器的输出管脚驱动比较弱,把XT2OUT当作输出送到CPLD的一个输入脚,XT2竟然不振,线割断之后才振起来。所以最好通过IO口线的特殊功能引出来。

2、FLASH

MSP430的FLASH可以用作EEPROM使用,在擦除时只能按块擦除,除了信息块A和B为128字节外,其它块都是512字节的块,起始地址从0XFFFF向下。擦除时正在执行的指令所在的块不能被擦除,其它的块都可以被擦除。由于FLASH在写入之前必须先擦除,即将所有字节的值都置为0XFF,然后才能被写入,即FLASH在写入时只能将1写成0而不能将0写成1,若要将某些字节写成全零,不论当前值为何均无需擦除。

实际上,擦除的过程就是将0置成1的过程,写入的过程就将1清成0的过程。

3、中断

MSP430的中断优先级按所在的向量的大小排列,中断向量地址越高优先级就越大,但是默认的MSP430是不能中断嵌套的,要想在执行某一中断时能够响应更高优先级的中断,需要在低优先级的中断程序中手动打开全局中断便能位,因为在进入中断服务子程序时全局中断便能位被清零,即禁止响应其它中断。

4、特殊功能寄存器

MSP430的一些特殊功能寄存器,如SR、PC等通过C语言不能直接访问,在IAR中可以使用一些库函数来实现,但具体是如何实现的,可能是嵌入汇编,但还不是特别清楚。既然是冯氏结构,特殊功能寄存器也就是一个地址,通过该地址的访问应该是可以对这些寄存器进行操作的。

5、串行口(UART)

串行口有SPI模式,这些只说异步模式。

串口有一个波特率微调的寄存器,可以使得波特殊比较准确,但是这些寄存器的值不宜通过公式求得,比较麻烦,可以通过查表的方式,把预先需要的值存入一个表中再根据不同的波特率设置,目前本人还仅知道这个方法。

当然硬件上的支持就是另一种情况,可以先用3.6864M、7.3728M、11.0592M等晶振,这样就无需进行微调,只需将微调的寄存器置0。如果串口通讯用得较多、比较重要的话硬件上的调整是最好的,这样比其它不能被波特率设置寄存器的值整除的晶振的搞干扰性要强一些。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics