msp430g2553内部资源总结.docx
- 文档编号:2034715
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:35
- 大小:35.82KB
msp430g2553内部资源总结.docx
《msp430g2553内部资源总结.docx》由会员分享,可在线阅读,更多相关《msp430g2553内部资源总结.docx(35页珍藏版)》请在冰豆网上搜索。
msp430g2553内部资源总结
电设工作小结之——MSP430G2553学习笔记——1
一,MSP430G2553单片机的各个功能模块
?
?
(一),IO口模块,
?
?
1,我们所用的MSP430G2553有两组IO口,P1和P2。
?
?
2,IO口的寄存器有:
方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN,?
IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。
?
?
3,所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。
所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。
?
?
?
4,中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。
注意:
在设置PxIESx时根据PxINx有可能会引起相应的PxIFGx置位(具体的情况见用户指南),所以在初始化完IO口中断以后,正式使用IO中断前要先将对应的PxIFGx清零。
程序如下:
void?
IO_interrupt_init()?
?
?
?
?
//IO中断初始化函数
{
?
?
P1REN?
|=?
BIT4+BIT5+BIT6+BIT7;?
?
?
?
?
//?
pullup?
内部上拉电阻使能
?
?
//使用中断时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,防止悬空时电平跳变不停的触发中断
?
?
P1OUT?
=?
BIT4+BIT5+BIT6+BIT7;?
?
?
//?
当引脚上的上拉或下拉电阻使能时,PxOUT选择是上拉还是下来
?
?
?
?
?
?
?
?
?
?
//0:
下拉,1:
上拉
?
?
P1IE?
|=?
BIT4+BIT5+BIT6+BIT7;?
?
?
?
?
?
?
//?
interrupt?
enabled?
P13中断使能
?
?
P1IES?
|=?
BIT4+BIT5+BIT6+BIT7;?
?
?
?
?
?
?
?
?
?
//?
Hi/lo?
edge?
?
下降沿中断
?
?
//P1IES?
&=?
~BIT3;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//上升沿触发中断
?
?
P1IFG?
&=?
~(BIT4+BIT5+BIT6+BIT7);?
?
?
?
?
?
?
?
?
//中断标志位清零
}
5,PxOUT:
如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:
下拉,1:
上拉
6,当IO口不用时,最好不要设为输入,且为浮动状态(这是IO口的默认状态),因为当输入为浮动时,输入电压有可能会在VIL和VIH之间,这样会产生击穿电流。
所以不用的IO口可以设为输出状态,或设为输入状态但通过外围电路接至VCC或GND,或接一个上拉/下拉电阻。
7,当使用msp430g2553的IO口时要注意,因为g2553的IO口寄存器的操作,不像51,它不能单独针对某一位进行操作,必须对整个寄存器进行操作。
所以就不像51,g2553不可以定义bit型的数据。
所以在使用msp的IO口时要注意对需要位的操作,而不要影响其他无关的位,可以?
用?
|?
?
&?
?
^等按位操作的符号。
在使用IO都控制其他外围模块时也要注意要使用的IO口的定义,可以用如下的定义方法:
#define?
CLR_RS?
P2OUT&=~BIT0;?
?
?
?
//RS?
=?
P2.0
#define?
SET_RS?
P2OUT|=BIT0;
#define?
CLR_RW?
P2OUT&=~BIT1;?
//RW?
=?
P2.1
#define?
SET_RW?
P2OUT|=BIT1;
#define?
CLR_EN?
P2OUT&=~BIT2;?
//EN?
=?
P2.2
#define?
SET_EN?
P2OUT|=BIT2;
#define?
DataPort?
?
?
?
P1OUT
8,g2553的P27和P26脚分别接外部晶体的输出和输入脚XOUT和XIN,默认是自动设为了晶振管脚功能,但是当想把它们用为普通的IO时,也可以,设置对应的SEL设为普通的IO即可,如下:
P2DIR?
|=?
BIT6+BIT7;?
?
?
?
//把P26和P27配置为普通IO?
并为输出脚?
?
默认为晶振的输入和输出引脚?
作为dac0832的
?
?
?
?
P2SEL?
&=?
~(BIT6+BIT7);?
?
?
//cs和wr控制端
?
?
?
?
P2SEL2?
&=?
~(BIT6+BIT7);
(二),时钟系统
?
?
?
?
?
1,msp430能做到超低功耗,合理的时钟模块是功不可没的。
但是功能强大的时钟模块设置起来也相对复杂一些。
?
?
?
?
?
2,msp430的时钟源有:
(1),外接低频晶振LFXT1CLK:
低频模式接手表晶体32768Hz,高频模式450KHz~8MHz;
(2),外接高速晶振XT2CLK:
8MHz;
(3),内部数字控制振荡器DCO:
是一个可控的RC振荡器,频率在0~16MHz;
(4),超低功耗低频振荡器VLO:
不可控,4~20KHz?
典型值为12KHz;
?
?
?
?
?
3,时钟模块:
430的时钟模块有MCLK?
?
SMCLK?
?
ACLK?
:
(1),主系统时钟MCLK:
提供给MSP430的CPU时钟。
可以来自LFXT1CLK?
?
XT2CLK?
?
DCO?
?
VLO可选,默认为DCO。
(2),子系统时钟SMCLK:
?
提供给高速外设。
可以来自LFXT1CLK?
?
XT2CLK?
?
DCO?
?
VLO可选,默认为DCO。
(3),辅助系统时钟ACLK:
提供给低速外设。
可来自LFXT1CLK?
?
VLO。
?
?
?
?
?
?
4,内部的振荡器DCO和VLO提供的时钟频率不是很精确,随外部环境变化较大。
DCO默认的频率大概为800KHz,但我用示波器观察的为1.086MHz左右,当DCO设置的过高时,用示波器可以看到波形不再是方波,而是类似于正弦波。
DCO可以用CCS提供的宏定义进行相对比较精确的设置,如下:
DCOCTL?
=?
CALDCO_12MHZ;?
?
?
//DCO设为12MHz?
?
?
这种方法设DCO频率比较精确,实际测得为12.08MHz左右?
正弦波
BCSCTL1?
=?
CALBC1_12MHZ;
用这种方法可以设置1,8,12,16MHz
宏定义如下:
#ifndef?
__DisableCalData
SFR_8BIT(CALDCO_16MHZ);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
SFR_8BIT(CALBC1_16MHZ);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
SFR_8BIT(CALDCO_12MHZ);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
SFR_8BIT(CALBC1_12MHZ);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
SFR_8BIT(CALDCO_8MHZ);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
SFR_8BIT(CALBC1_8MHZ);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
SFR_8BIT(CALDCO_1MHZ);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
SFR_8BIT(CALBC1_1MHZ);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
#endif?
5,使用超低功耗低频振荡器VLO可以很大程度地降低系统功耗,下面的例子是设置ACLK为VLO,MCLK为VLO的8分频:
#include?
?
//1延时
cpu
#define?
CPU_F?
((double)1630)//cpu?
frequency1630?
?
?
//CPU的实际MCLK大约为13.05/8=1.63KHz
#define?
delay_us(x)?
__delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define?
delay_ms(x)?
__delay_cycles((long)(CPU_F*(double)x/1000.0))
void?
main(void)
{
?
?
volatile?
unsigned?
int?
i;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
Volatile?
to?
prevent?
removal
?
?
WDTCTL?
=?
WDTPW?
+?
WDTHOLD;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
Stop?
watchdog?
timer
?
?
BCSCTL3?
|=?
LFXT1S_2;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
LFXT1?
=?
VLO?
?
低频时钟选择为VLO?
ACLK选为VLO
?
?
IFG1?
&=?
~OFIFG;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
Clear?
OSCFault?
flag?
?
清除振荡器错误中断标志
?
?
__bis_SR_register(SCG1?
+?
SCG0);?
?
?
?
?
?
?
?
?
?
?
//?
Stop?
DCO?
?
SCG1禁止SMCLK?
?
SCG0禁止DCO
?
?
BCSCTL2?
|=?
SELM_3?
+?
DIVM_3;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
MCLK?
=?
LFXT1/8
?
?
//因为前面已经选择了LFXT1?
=?
VLO?
所以MCLK选为VLO?
?
8分频?
?
所以CPU的MCLK大约为1.5KHz
?
?
P1DIR?
=?
0xFF;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
All?
P1.x?
outputs
?
?
P1OUT?
=?
0;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
All?
P1.x?
reset
?
?
P2DIR?
=?
0xFF;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
All?
P2.x?
outputs
?
?
P2OUT?
=?
0;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
All?
P2.x?
reset
?
?
P1SEL?
|=?
BIT0+BIT4;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
//?
P10?
P14options?
?
功能选择为外围模块
?
?
//p10输出ACLK,来自VLO,p14输出SMCLK,?
?
因为禁止了SMCLK,所以P14脚无波形输出
?
?
//VLO典型值为12KHz?
?
实际用示波器测得为:
13.05KHz?
左右波动
?
?
//所以CPU的实际MCLK大约为13.05/8=1.63KHz
?
?
for?
(;;)
?
?
{
?
?
?
?
P1OUT?
^=?
BIT6;?
?
?
?
?
?
?
?
?
?
//?
P1.6?
闪烁
?
?
?
?
delay_ms(1000);
?
?
}
}
?
?
6,如上面的程序所示,其中的延迟函数用那种方法,使用系统的延迟周期函数__delay_cycles(int?
n);?
可以达到比较精确的延迟,如下:
//more_
//1延时
cpu
#define?
CPU_F?
((doublecpu
#define?
delay_us(x)?
__delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define?
delay_ms(x)?
__delay_cycles((long)(CPU_F*(double)x/1000.0))
//2空函数
#define?
nop()?
_NOP();
?
?
?
7,系统上电后默认使用的是DCO时钟,DCO默认的频率大概为800KHz,但我用示波器观察的为1.086MHz左右,当DCO设置的过高时,用示波器可以看到波形不再是方波,而是类似于正弦波。
?
(三),定时器Timer_A
?
?
?
1,MSP430g2553具有两个16位的定时器:
Timer0_A?
?
?
Timer1_A。
分别具有三个捕捉/比较寄存器,具有输入捕捉,输出比较功能。
可以产生定时中断,也可以产生PWM。
?
?
?
2,产生PWM,例子如下:
#include?
?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- msp430g2553 内部 资源 总结