MSP430学习笔记(一)
----------------------------------------------------------------
MSP430 学习笔记
一、开发环境建立
1.硬件 CPU:MSP430F149 仿真器:MSP430-FET
2.软件:IAR
3.实验板 LT-1C
二、第一个练习
1.生成新工作空间
File->New->WorkSpace
出现一个新的工作空间,没有要求保存,这和我用的PCB软件AD9的WorkSpace工作空间的概念一样。
这时用File->Save WorkSpace
没有任何变化.
----------------------------------------------------------------------------------------------------------------
Project->Creat New Project
自动生成如下一个文件:
- #include "io430.h"
- int main( void ){ // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;
- return 0;}
这时再用:
File->Save WorkSpace
保存,则要求保存为一个eww文件。
2.工程设置
单击Project->Option打开设置对话框
生成带调试的文件
生成TXT格式输出文件
如果在进入调试时看到下面的提示:
说明选错了生成方式
设置调试方式,选择Debugger,选择FET Debug
再次单击左侧框中的FET Debugger,在右侧对话框中单击Connect,选择Elprotronic USB-FPA
三、讨论2个知识点
LT-1C给出的例子程序如下所示:
- /***************************************************程序功能:控制8个LED闪烁,用于测试下载功能是否正常---------------------------------------------------测试说明:观察LED闪烁***************************************************/#include #include "BoardConfig.h"
- /****************主函数****************/void main(void){ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯 /*这两行不必理会*/ CCTL0 = CCIE; //使能CCR0中断 CCR0 = 2047; //设定周期0.5S TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式 P2DIR = 0xff; //设置P2口方向为输出 P2OUT = 0xff; _EINT(); //使能全局中断LPM3; //CPU进入LPM3模式/*这里使用了LPM3直接进入LPM3模式*/}
关于LPM3有很多介绍,不过我最能理解的是这样一句:MSP430的低功耗事件驱动模式。
MSP430系列单片机的各个模块都可以独立运行,如定时器、输入/输出端口、A/D转换、看门狗、液晶显示器等都可以在CPU休眠的状态下独立工作。若需要主CPU工作,任何一个模块都可以通过中断唤醒CPU,从而使系统以最低功耗运行。
让CPU工作于突发状态可以充分利用CPU的低功耗性能。通常,使用软件将CPU设定到某一低功耗模式,在需要时使用中断将CPU从休眠状态中唤醒,完成工作后又可以进入相应的休眠状态。如:让CPU工作在LPM3状态,通过中断事件转换到AM活动模式,根据运行需要,又可以从AM状态进入相应的低功耗模式:LPM0/LPM3或LPM4。
于是想要查找LPM3这个符号表示什么,习惯性地按下F12(keil中的查找方式),发现IAR和keil居然一样。找到msp430x14x.h文件中有两处,其中一处是:
而另一处是:
显然,应该是执行的这一处指令,,,不过,两个符号会冲突吗?
- /*******************************************函数名称:Timer_A功 能:定时器A的中断服务函数参 数:无返回值 :无********************************************//*#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){ P2OUT ^= 0xff; //P2口输出取反}*/
2.TMR A
TMRA是一个16位的定时器/计数器,有3个"捕获/比较寄存器",定时器(TA)与"捕获/比较寄存器"(CCRx)工作是相对独立的.
其中CCR0是捕获、比较通道0,我关心为何CCR0设定为2047就是定时0.5s?
先看这一行:
TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
而查找符号TASSEL_1则有这样的定义:
查找ID_3则得到下面的定义:
#define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */
查找MC_1得到下面的定义:
#define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to CCR0 */
这个是关键。它是定义Timer A的模式控制增量到CCR0。也就是计数器每增加到CCR0中的值就从头开始了。
所以每计2048次就是一次循环。至于2048次为何是0.5s,那肯定和时钟有关了,但这个暂且放一放吧。
拿ACLK的32768HZ八分频得到4096HZ,2048/4096=0.5S,为什么是2047而不是2048,不解。
顶上去 正学习
msp430 低功耗呀
看看
学习笔记做成这样,嗯,学习了。
这个不错
顶
现在好多新兴起来的芯片
谢谢小编啊
赞
不错
想下载
谢了
为了参加今年的竞赛不得不学习MSP430呀。
谢谢 学习 了
全是好东西啊
11111
单片机 博大精深啊...太多了...
学习了