Msp430学习笔记
电设工作小结之 MSP430G2553学习笔记―2
电设工作小结之 MSP430G2553学习笔记―2电设工作小结之-msp430g2553学习笔记―2电设工作小结之――msp430g2553学习笔记――2接通一篇:(四),adc101,adc10就是十位的ad,在g2553上加a0~a7八个可以外接的ad地下通道,a10收到片上的温度传感器上,其他的地下通道都直奔在内部的vcc或gnd上。
因为就是10为的ad所以计算公式如下:2,adc参考电压的选择:adc的参考电压可以为:由adc掌控寄存器0adc10ctl0掌控。
但是必须提升adc的精度的话,尽量不要用内部的参照电压,最出色外接一个比较稳定的电压做为参照电压,因为内部的产生的参照电压不是特别平衡或精度不是特别的高。
比如我在采用时碰到的情况如下:vref设为2.5v但实际的值大概为2.475v,选择vccvss作为参考,用电压表测得大概为3.58v还是不小的偏差的。
另外,在有可能的情况下,尽量使用很大的vr+和vr-,以增大纹波对取样结果的影响。
3,adc10的取样方式存有:单通道单次取样,单通道多次取样,多通道单次取样,多通道多次取样。
4,dtc:因为adc10只有一个采样结果存储寄存器adc10mem,所以除了在单通道单次采样的模式下,其他的三个模式都必须使用dct,否则转换结果会不停地被新的结果给覆盖。
dtc是转换结果传送控制,也就是转换结果可以不用cpu的干预,就可以自动地存储在指定的存储空间内。
使用这种方式转换速度快,访问方便,适用于高速采样模式中。
dtc的使用可以从下面的例子中很容易看明白:#include#include\uchars1[]={\uchars2[]={\voidadc_init(){adc10ctl1=conseq_3+inch_1;//2通道多次转换,最大转换通道为a1adc10ctl0=adc10sht_2+msc+adc10on+adc10ie;//adc10on,interruptenabl参照电压选默认值vcc和vss//采样保持时间为16xadc10clks,adc内核开,中断使能msc多次转换选择开//如果msc置位,则第一次开始转换时需要触发源触发一次,以后的转换会自动进行中断使能//采用dtc时,当一个块传输完结,产生中断//数据传送控制寄存器0adc10dtc0设置为默认模式:单传送块模式,单块传送完停止adc10dtc1=0x04;//数据传送控制寄存器14conversions定义在每块的传送数目一共采样4次所以单块传送4次//以后就暂停了传输因为就是两地下通道的,所以就是每个地下通道取样数据传输2次adc10ae0|=bit0+bit1;//p1.0p1.1adcoptionselect使能模拟输入脚a0a1//不晓得为什么,当p10p11都悬空时,取样值相同,用电压表测得悬空电压相同,但是当都接通取样源的时候,//取样就是相同的}voidmain(void){uintadc_sample[8]={0};//存储adc序列取样结果wdtctl=wdtpw+wdthold;bcsctl1=calbc1_12mhz;//设定cpu时钟dco频率为12mhzdcoctl=caldco_12mhz;p2dir|=bit3+bit4;//液晶的两条线init_lcd();adc_init();wr_string(0,0,s1);wr_string(0,3,s2);for(;;){adc10ctl0&=~enc;//adc不使能够其实这句话可以放到紧接着cpu唤起之后的,因为cpu唤起了,表明我们想的//转换数据传送完成了,如果adc继续转换,那么转换结果也不再传输,是无用的。
MSP430单片机笔记
1、MSP430 端口功能P1、P2 I/O、中断功能、其他片内外设功能P3、P4、P5、P6 I/O、其他片内外设功能S、COM I/O、驱动液晶2、PxDIR 方向寄存器0 为输入模式1 为输出模式在PUC 后全都为位,作为输入时,只能读;作为输出时,可读可定。
3、PxIN 输入寄存器输入寄存器是只读的,用户不能对它写入,只能读取其IO 内容。
此时引脚方向必须为输入。
4、PxOUT 输出寄存器这是IO 端口的输出缓冲器,在读取时输出缓存的内容与脚引方向定义无关。
改变方向寄存器的内容,输出缓存的内容不受影响。
5、PxIFG 中断标专寄存器标志相应引脚是否有待处理中断信息。
0 没有中断请求1 有中断请求6、PxIES 中断触发沿选择寄存器0 上升沿使相应标志置位1 下降沿使相应标志置位7、PxIE 中断使能寄存器0 禁止中断1 允许中断8、PxSEL 功能择寄存器0 择引脚为I/O 功能。
1 择引脚为外围模块功能9、关于端口P3、P4、P5、P6端口P3、P4、P5、P6 是没有中断功能的,其它功能与P1、P2 相同。
所以在此不再作详尽说明。
10、关于端口COM、S这些端口实现与LCD 片的驱动接口,COM 端是LCD 片的公共端,S 端为LCD片的段码端。
LCD 片输出端也可以用软件配置为数字输出端口,详情使用请查看其册。
11、WDT 看门狗看门狗定时器实际上是一个特殊的定时器,它的的功能是当程序运行发生故障序时能使系统从新启动。
其原理就是发生的故障的时间满足规定的定时时间后,产一个非屏蔽中断,使系统的位。
12、定时器各种定时器功能看门狗定时器基本定时,当程序发生错误时执行一个受控的系统重启动。
基本定时器基本定时,支持软件和各种外围模块工作在低频率、低功耗条件下。
定时器A基本定时,支持同时进行的多种时序控制、多个捕获、比较功能和多种输出波形(PWM),可以以硬件方式支持串行通信。
定时器B基本定时,功能基本同定时器A,但比较定时器 A 灵活,功能更强大。
MSP430f5529学习笔记
发板或目标板,同时也会得到很好的技术支持。如果自己制作的话也行, 也未尚不可,那就看个人水平了。
软件工具,因为现在都有学习板的工具软件,如 I建议还是使用 IAR 软件较方便, 因为使用的人群 较多,有问题还可请教,容易解决。
MSP430学习资料及教程,<<MSP430系列16位超低功耗单片机原理与应
(一)通用 I/O 口的设置-1
1.1 I/O 的简介 特点:①多种复用和设置(即可控制是否输入、是否输出、是否接上拉电 阻、是否接下拉电阻、是否可接受中断) ; ②一般情况下, P1和 P2都是具有中断能力的。 从 P1和 P2接口的各个 I/O 管脚引入的中断可以独立的被使能并且设置为上升沿或者下降沿触发。对应 的中断向量表分别为 P1IV 和 P2IV,它们只能进行字操作,并且 PAIV 这个寄存器 根本不存在。 ③P1、P2可合为 PA,P3、P4可合为 PB,…PC、PD。所以 P1为8位 BCD 0x00,PA 为16位 BCD 0x0000。当进行字操作写入 PA 口时,所有的16位都被 写入这个端口;当利用字节操作写入 PA 口的低字节时,高字节保持不变; ④由于430很多 I/O 和外围电路接线,所以这里常用位操作。如事先 定义(接下来也会用到,先在此声明)BIT0=0X01、BIT1=0X02、 BIT3=0X04…BIT7=0X80, 那么将 P1.1、 P1.3的输出设为1的时候, 就可以这样操作: P1OUT|=(BIT1+BIT3) 。这样显得很清楚。 ⑤没有用到的 I/O,要统一拉低为好。此外,当读入的数据长短小于 端口最大长度时,那些没有用到的位会被视零。 1.2 I/O 的简单配置 430I/O 的配置是用软件来实现的, 是通过相应的配置寄存器来实 现的。 (用到某个 I/O 时,一定要先配置好该 I/O,否则易出错) 1.2.1 I/O 方向设定寄存器 PXDIR 如设定 P1.1和 P1.2为输出状态 操作为: P1DIR |=(BIT1+BIT2)等价于 PADIR |=(BIT1+BIT2) 也等价于 PADIR_L|=(BIT1+BIT2。 拉高设定为输出,拉低设定为输入(默认) 。 1.2.2 I/O 输入设定寄存器 PXIN 如设定 P1.1和 P1.2的输入为低电平 操作为: P1IN &=~(BIT1+BIT2) 。 1.2.3 I/O 输出设定寄存器 PXOUT ①当只用为简单的输出时: 如设定 P1.1和 P1.2输出高电平 操作为: P1OUT |=(BIT1+BIT2) 。 ②如果该引脚为正常 I/O 功能,且当前已设定为输入方向,且上拉/ 下拉电阻寄存器是有效地。那么 PXOUT 可以用来配置上拉和下拉电阻: 低电平为下拉电阻; 高电平为上拉电阻; 1.2.4 上拉/下拉电阻使能寄存器 PXREN 低电平该寄存器为无效状态; 高电平该寄存器为有效状态;
MSP430f247单片机笔记
POR信号产生源:1.给器件上电2.复位管脚产生复位信号超级电压监视电路发现电压不稳时,产生POR信号PUC信号产生源:1.产生了POR信号2.看门狗定时器溢出3.看门狗定时器安全密匙错误空间安全密匙错误系统复位后器件的初始化状态:POR信号后NMI管脚为复位模式O被切换到输入状态3.外设模块和相应的寄存器被初始化到确定的状态4.状态寄存器被复位5.看门狗定时器被打开回到以确定位置重新开始读取数据软件初始化:1.设置看门狗2.配置外设资源430单片机中断种类有三种:1.系统复位2.非可屏蔽中断3.可屏蔽中断非可屏蔽中断产生有三种情况:1.非可屏蔽管脚RST/NMI被配置为NMI模式时,产生了用户设定的电平跳变2.振荡器失效3.对FLASH空间的错误访问非屏蔽中断NMI为多源中断,只有一个中断向量,该中断向量对应着多个中断标志,进入该中断向量后用户先要判断那种原因导致了非可屏蔽中断(通过标志位判断,OFIFG=1,振荡器失效中断;ACCVIFG=1,.对FLASH空间的错误访问中断;NMIFG=1,非可屏蔽管脚RST/NMI被配置为NMI模式时,产生了用户设定的电平跳变产生的中断;),这些中断的中断标志位都要通过软件进行手动清除;可屏蔽中断:可通过状态寄存器中的通用中断标志位GIE来使能控制;可屏蔽中断的执行过程:1.可屏蔽中断发生到执行一般需要大约6个机器周期2.单源中断的中断标志位可通过硬件自动清除,多源中断的中断标志位要通过软件清除;状态寄存器被清除,所有低功耗模式结束,CPU进入活跃模式,同时GIE通用中断标志位被清除,其它中断无法打断,用户可通过软件再次打开;4.中断返回时,SR状态寄存器被还原,CPU置为中断前的模式,GIE重新置位,GIE=1;在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下。
(1). 清OSCOFF/XT2(开启外部晶振)(2). 清OFIFG(3). 延时等待至少50uS(4). 再次检查OFIFG,如果仍置位,则重复(1)~(4)步,直到OFIFG=0为止。
MSP430单片机深入学习笔记
复位1.POR信号只在两种情况下产生:➢微处理器上电。
➢RST/NMI管脚被设置为复位功能,在此管脚上产生低电平时系统复位。
2.PUC信号产生的条件为:➢POR信号产生。
➢看门狗有效时,看门狗定时器溢出。
➢写看门狗定时器安全健值出现错误。
➢写FLASH存储器安全键值出现错误。
3.POR信号的出现会导致系统复位,并产生PUC信号。
而PUC信号不会引起POR信号的产生。
系统复位后(POR之后)的状态为:➢RST/MIN管脚功能被设置为复位功能。
➢所有I/O管脚被设置为输入。
➢外围模块被初始化,其寄存器值为相关手册上注明的默认值。
➢状态寄存器(SR)复位。
➢看门狗激活,进入工作模式。
➢程序计数器(PC)载入0xFFFE(0xFFFE为复位中断向量)处的地址,微处理器从此地址开始执行程序。
4.典型的复位电路有以下3种:(1)由于MSP430具有上电复位功能,因此,上电后只要保持RST/NMI(设置为复位功能)为高电平即可。
通常的做法为,在RST/NMI管脚接100kΩ的上拉电阻,如图1-5(a)所示。
(2)除了在RST/NMI管脚接100kΩ的上拉电阻外,还可以再接0.1μF的电容,电容的另一端接地,可以使复位更加可靠。
如图1-5(b)所示。
(3)由于MSP430具有极低的功耗,如果系统断电后立即上电,则系统中电容所存储的电荷来不及释放,此时系统电压不会下降到最低复位电压以下,因而MSP430不会产生上电复位,同时RST/NMI管脚上也没有足够低的电平使MSP430复位。
这样,系统断电后立即上电,MSP430并没有被复位。
为了解决这个问题,可增加一个二极管,这样断电后储存在复位电容中的电荷就可以通过二极管释放,从而加速电容的放电。
二极管的型号可取1N4008。
如图1-5(c)所示。
系统时钟振荡器:1.DCO 数控RC振荡器,位于芯片内部。
不用时可以关闭2.LFXT1 可以接低频振荡器,典型的如32.768kHz的钟表振荡器,此时振荡器不需要接负载电容。
MSP430f5438初学者笔记
MSP430f5438初学者笔记一、简介1.1CPU:16-bit RISC除program-flow指令外所有指令都在寄存器和7种源操作数寻址方式及4种目的操作数合作下执行16个寄存器,register-to-register指令执行时间是一个CPU时钟R0 程序计数器寄存器20-bitR1 堆栈指针20-bitR2 状态寄存器16-bitR3 不变的产生器R4~R15 通用寄存器1.2指令集:51指令3格式7中寻址方式附加指令1.3操作模式6个可软件设置的LOW-POWER模式一个中断事件可以唤醒5个模式中的任何一个,响应请求,并从中断程序中返回原模式Mode ACTIVE DISABLEDActive mode (AM) 所有时钟ACTIVELow-power mode 0 (LPM0) ACLK SMCLK FLL CPU MCLK LPM1 ACLK SMCLK CPU FLL MCLK LPM2 DCO发生器ACLK CPU MCLK FLL DCOCLK LPM3 ACLK CPU MCLK FLL DCOCLK DC发生器LPM4 晶振关闭完整数据保留LPM5 内部调节器关闭无数据保留通过RST和IO唤醒1.4中断矢量地址:FFFF~FF80H1.5 SFR处于最低地址空间可以进行字访问和字节访问1.6存储256K闪存空间64K程序存储器16KRAM 512BBSL程序装载器用于编程存储器串连接口1.7外围时钟:支持统一的时钟系统UCS包括:32K手表晶振(XT1 低频模式)内部低频振荡器VLO内部平衡低频振荡器REFO内部集成数字控制器DCO高频晶振(XT1高频模式or XT2)FLL锁频环连同一个数字调节器使得DCO构成一个多倍可编程的手表晶振时钟信号:ACLK 32K手表晶振、高频晶振、VLO、REFO、DCO MCLK CPU用,来源同ACLKSMCLK 用于外围来源同ACLK多分频ACLK电源管理模块(PMM)包括一个集成的PMM电压调节器,提供核心电压设备和包含可编程的产出水平,来提供电力的优化。
MSP430G2553学习笔记(数据手册)概要
MSP430G2553学习笔记(数据手册)MSP430G2553性能参数(DIP-20) 工作电压范围:1.8~3.6V。
5种低功耗模式。
16位的RISC结构,62.5ns指令周期。
超低功耗:运行模式-230µA;待机模式-0.5µA;关闭模式-0.1µA;可以在不到1µs的时间里超快速地从待机模式唤醒。
基本时钟模块配置:具有四种校准频率并高达16MHz的内部频率;内部超低功耗LF振荡器;32.768KHz晶体;外部数字时钟源。
两个16 位Timer_A,分别具有三个捕获/比较寄存器。
用于模拟信号比较功能或者斜率模数(A/D)转换的片载比较器。
带内部基准、采样与保持以及自动扫描功能的10位200-ksps 模数(A/D)转换器。
16KB闪存,512B的RAM。
16个I/O口。
注意:MSP430G2553无P3口!MSP430G2553的时钟基本时钟系统的寄存器DCOCTL-DCO控制寄存器DCOxDCO频率选择控制1MODxDCO频率校正选择,通常令MODx=0注意:在MSP430G2553上电复位后,默认RSEL=7,DCO=3,通过数据手册查得DCO频率大概在0.8~1.5MHz之间。
BCSCTL1-基本时钟控制寄存器1XT2OFF不用管,因为MSP430G2553内部没有XT2提供的HF时钟XTS不用管,默认复位后的0值即可DIV Ax设置ACLK的分频数00 /101 /210 /411 /8RSELxDCO频率选择控制2BCSCTL2-基本时钟控制寄存器2SELMxMCLK的选择控制位00 DCOCLK01 DCOCLK10 LFXT1CLK或者VLOCLK11 LFXT1CLK或者VLOCLK DIVMx设置MCLK的分频数00 /101 /210 /411 /8SELSSMCLK的选择控制位0 DCOCLK1 LFXT1CLK或者VLOCLK DIVSx设置SMCLK的分频数00 /101 /210 /411 /8DCORDCO直流发生电阻选择,此位一般设00 内部电阻1 外部电阻BCSCTL3-基本时钟控制寄存器3XT2Sx不用管LFXT1Sx00 LFXT1选为32.768KHz晶振01 保留10 VLOCLK11 外部数字时钟源XCAPxLFXT1晶振谐振电容选择00 1pF01 6pF10 10pF11 12.5pFmsp430g2553.h中基本时钟系统的内容/************************************************************* Basic Clock Module************************************************************/#define __MSP430_HAS_BC2__ /* Definition to show that Module is available */SFR_8BIT(DCOCTL); /* DCO Clock Frequency Control */SFR_8BIT(BCSCTL1); /* Basic Clock System Control 1 */SFR_8BIT(BCSCTL2); /* Basic Clock System Control 2 */SFR_8BIT(BCSCTL3); /* Basic Clock System Control 3 */#define MOD0 (0x01) /* Modulation Bit 0 */#define MOD1 (0x02) /* Modulation Bit 1 */#define MOD2 (0x04) /* Modulation Bit 2 */#define MOD3 (0x08) /* Modulation Bit 3 */#define MOD4 (0x10) /* Modulation Bit 4 */#define DCO0 (0x20) /* DCO Select Bit 0 */#define DCO1 (0x40) /* DCO Select Bit 1 */#define DCO2 (0x80) /* DCO Select Bit 2 */#define RSEL0 (0x01) /* Range Select Bit 0 */#define RSEL1 (0x02) /* Range Select Bit 1 */#define RSEL2 (0x04) /* Range Select Bit 2 */#define RSEL3 (0x08) /* Range Select Bit 3 */#define DIVA0 (0x10) /* ACLK Divider 0 */#define DIVA1 (0x20) /* ACLK Divider 1 */#define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */ #define XT2OFF (0x80) /* Enable XT2CLK */#define DIVA_0 (0x00) /* ACLK Divider 0: /1 */#define DIVA_1 (0x10) /* ACLK Divider 1: /2 */#define DIVA_2 (0x20) /* ACLK Divider 2: /4 */#define DIVA_3 (0x30) /* ACLK Divider 3: /8 */#define DIVS0 (0x02) /* SMCLK Divider 0 */#define DIVS1 (0x04) /* SMCLK Divider 1 */#define SELS (0x08) /* SMCLK Source Select 0:DCOCLK /1:XT2CLK/LFXTCLK */#define DIVM0 (0x10) /* MCLK Divider 0 */#define DIVM1 (0x20) /* MCLK Divider 1 */#define SELM0 (0x40) /* MCLK Source Select 0 */#define SELM1 (0x80) /* MCLK Source Select 1 */#define DIVS_0 (0x00) /* SMCLK Divider 0: /1 */#define DIVS_1 (0x02) /* SMCLK Divider 1: /2 */#define DIVS_2 (0x04) /* SMCLK Divider 2: /4 */#define DIVS_3 (0x06) /* SMCLK Divider 3: /8 */#define DIVM_0 (0x00) /* MCLK Divider 0: /1 */#define DIVM_1 (0x10) /* MCLK Divider 1: /2 */#define DIVM_2 (0x20) /* MCLK Divider 2: /4 */#define DIVM_3 (0x30) /* MCLK Divider 3: /8 */#define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */#define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */#define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */#define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */#define LFXT1OF (0x01) /* Low/high Frequency Oscillator Fault Flag */#define XT2OF (0x02) /* High frequency oscillator 2 fault flag */#define XCAP0 (0x04) /* XIN/XOUT Cap 0 */#define XCAP1 (0x08) /* XIN/XOUT Cap 1 */#define LFXT1S0 (0x10) /* Mode 0 for LFXT1 (XTS = 0) */#define LFXT1S1 (0x20) /* Mode 1 for LFXT1 (XTS = 0) */#define XT2S0 (0x40) /* Mode 0 for XT2 */#define XT2S1 (0x80) /* Mode 1 for XT2 */#define XCAP_0 (0x00) /* XIN/XOUT Cap : 0 pF */#define XCAP_1 (0x04) /* XIN/XOUT Cap : 6 pF */#define XCAP_2 (0x08) /* XIN/XOUT Cap : 10 pF */#define XCAP_3 (0x0C) /* XIN/XOUT Cap : 12.5 pF */#define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */ #define LFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */#define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */#define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 : Digital input signal */#define XT2S_0 (0x00) /* Mode 0 for XT2 : 0.4 - 1 MHz */#define XT2S_1 (0x40) /* Mode 1 for XT2 : 1 - 4 MHz */#define XT2S_2 (0x80) /* Mode 2 for XT2 : 2 - 16 MHz */#define XT2S_3 (0xC0) /* Mode 3 for XT2 : Digital input signal */基本时钟系统例程(DCO)MSP430G2553在上电之后默认CPU执行程序的时钟MCLK来自于DCO时钟。
[MSP430学习笔记] 430加密总结
MSP430单片机常见加密总结1、为什么要加密,如何加密?当您的产品推向市场的时候,您的竞争对手就开始盯上它了,如果您的产品硬件很容易被模仿,而且您使用的MSP430单片机没有被加密的话,那么您辛辛苦苦的劳动成功就很容易成为您竞争对手的产品了,使用JTAG调试工具FET虽然可以将程序下载到芯片内部,但只有使用专业编程器能够防止程序被窃取。
2、JT AG、BSL、BOOTLOADER、熔丝的区别和关系是什么?JTAG接口能够访问MSP430单片机内部所有资源,通过JTAG可以对芯片进行程序下载、代码调试、内存修改等等,通过JTAG还能烧断加密熔丝,熔丝一旦被烧断,JTAG接口绝大部分功能失效,就再也不能通过它进行编程了。
BSL接口是利用芯片内部驻留的bootloader程序实现的自编程,通过特定的时序使得CPU进入bootloader代码断,然后利用每个MSP430芯片内部都有的Timer A构成一个软件串口来与上位机通讯,这样可以将代码下载到芯片内部。
实现BSL除了JTAG接口的一些引脚外,还需要用到两个TA0功能引脚,因此在设计产品时如果需要加密,则应该考虑将这两个引脚也连出来。
注意:A、要烧断熔丝(加密)必须使用JTAG接口;B、烧断熔丝后只能通过BSL 或者用户代码来实现编程更新。
3、BSL的验证密码是怎么回事?BSL也能读出芯片内部的代码,这样可以实现编程后的校验等功能。
通过BSL擦除所有Flash信息时不需要验证密码,但是要进一步操作,就得输入32字节密码进行验证。
BSL 的协议规定这32字节密码为芯片FLASH区域的最高32字节,也就是程序的16个中断向量,如果您拥有这段程序的最后32字节,就能通过BSL将芯片内部所有代码读取出来。
4、为什么要使用高级加密?32字节的密码看似几乎完全没可能使用穷举法来实现破解,但是各位别忘了,msp430的16个中断向量未必每一个都用到了,没用到的中断向量为0xffff,如果您的程序只用到了复位向量,那么破解者只需尝试最多32768次(中断向量为偶数,所以除以2)就能将其破解,另外,如果芯片本身Flash容量较小,比如4K字节,那么破解者只需尝试最多2K次就能将其破解。
430学习1
MSP430学习笔记之二:时钟模块MSP430系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控制振荡器(DCO),锁频环(FLL)及FLL+等模块构成。
由于430系列单片机中的型号不同,而时钟模块也将有所不同。
虽然不同型号的单片机的时基模块有所不同,但这些模块产生出来的结果是相同的.在MSP430F13、14中是有TX2振荡器的,而MSP430F11X,F11X1中是用LFXT1CLK 来代替XT2CLK时钟信号的.在时钟模块中有3个(对于F13,F14)时钟信号源(或2个时钟信号源,对于F11X、F11X1):1-LFXT1CLK: 低频/高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较常使用的晶体振荡器是32768HZ。
2-XT2CLK: 高频时钟源.由外接晶体振荡器。
需要外接两个振荡电容器,较常用的晶体振荡器是8MHZ。
3-DCOCLK: 数字可控制的RC振荡器。
1-ACLK: 辅助时钟信号.由图所示,ACLK是从FLXT1CLK信号由1/2/4/8分频器分频后所得到的.由BCSCTL1寄存器设置DIVA相应为来决定分频因子.ACLK可用于提供CPU外围功能模块作时钟信号使用.2-MCLK: 主时钟信号.由图所示,MCLK是由3个时钟源所提供的。
他们分别是LFXT1CLK,XT2CLK(F13、F14,如果是F11,F11X1则由LFXT1CLK代替),DCO时钟源信号提供.MCLK主要用于MCU和相关系统模块作时钟使用。
同样可设置相关寄存器来决定分频因子及相关的设置。
3-SMCLK: 子系统时钟,SMCLK是由2个时钟源信号所提供.他们分别是XT2CLK(F13、F14)和DCO,如果是F11、F11X1则由LFXT1CLK代替TX2CLK。
同样可设置相关寄存器来决定分频因子及相关的设置。
MSP430X1X1系列产品中,其中XT1时钟源引脚接法有如3种应用。
F13、14的XT1相同。
MSP430学习笔记
一,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之间,这样会产生击穿电流。
MSP430单片机定时器学习笔记
MSP430单片机定时器学习笔记
msp430 定时器学习笔记
_BIS_SR(LPM2_bits + GIE) //进入LPM3 低功耗模式和开总中断允许
中断
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
}
TACTL timerA 控制寄存器
TAR timerA 计数器
CCTL0 捕获/比较控制寄存器0
CCRO 捕获/比寄存器0(具有最高中断优先级别,单独使用一个中断向量) CCTL1 捕获/比较寄存器1
CCR1 捕获/比较寄存器1
CCTL2 捕获/比较寄存器2
CCR2 捕获/比较寄存器2
TAIV 中断向量寄存器
其中,定时器,CCR2,CCR1 三者共用一个中断向量
TimerA 输出模式:
输出模式0 输出模式:输出信号OUTx 由每个捕获/比较模块的控制寄存器CCTLx 中的OUTx 位定义,并在写入该寄存器后立即更新。
最终位OUTx 直通。
输出模式1 置位模式:输出信号在TAR 等于CCRx 时置位,并保持置位到。
msp430 学习笔记 - 定时器
// 停止看门狗WDT // 设置P1.0口方向为输出。 // 时钟源选择为SMCLK,选择计数模式,定时器中断开
_BIS_SR(LPM0_bits + GIE); }
//进入低功耗模式LPM0和开中断
// Timer_A3 中断向量(TAIV)处理 #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A(void) {
2. 定时器相关寄存器 ................................................................................................................... 2 2.1. TACTL .......................................................................................................................... 3 2.2. TAR ............................................................................................................................. 4 2.3. TACCRx ....................................................................................................................... 4 2.4. TACCTLx ...................................................................................................................... 5 2.5. TAIV ............................................................................................................................ 6
msp430 学习笔记 - 系统时钟
2.2. VLO 设置
使用超低功耗低频振荡器 VLO 可以很大程度地降低系统功耗, 下面的例子是设置 ACLK 为 VLO, MCLK 为 VLO 的 8 分频:
#include <msp430g2553.h>
3
msp430 学习笔记 - 系统时钟
//1延时 //#define CPU_F ((double)16000000) //cpu frequency16000000 #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))
6 SELM.0
5 DIVM.1
4 DIVM.0
3 SELS
2 DIVS.1
1 DIVS.0
0 DCOR
• SELM.0,SELM.1 选择 MCLK 时钟源。 • 0 : 时钟源为 DCOLCK (默认时钟源); • 1 : 时钟源为 DCOCLK ; • 2 : 时钟源为 LFXTlCLK ( 对于 MSP430F11/12X ), 时钟源为 XT2CLK ( 对于 MSP430F13/14/15/16X );
• XT2CLK 高频时钟源 ---- 存在于X13X、X14X、X15X、X16X、X43X、X44X等
• DCOCLK ( Digitally Controlled Oscillator ) 内部数字控制 RC 振荡器, 频率在0~16MHz
SDLu的MSP430入门学习笔记定时器TimerA比较输出PWM
S.D.Lu的MSP430入门学习笔记(8):定时器TimerA(3)比较输出PWM本篇笔记介绍如何使用TimerA的比较模式输出PWM信号。
PWM信号有两个参数,周期T和脉宽D。
为了实现PWM的控制,我们将通过TACCR0控制周期,通过TACCR1控制脉宽。
输出选择模式7(或模式6)。
在本例中,输出模式6和输出模式7只是第一个周期输出可能不同,从第二个周期开始输出是一样的。
CCR1单元的输出引脚是P1.2。
如下图,请参考MSP430G2x52、G2x12系列数据手册。
将P1.2的功能按下图配置,请参考MSP430G2x52、G2x12系列数据手册。
程序如下:程序运行结果是P1.2口输出占空比为20%的PWM信号。
在本例中,TIME用于控制PWM周期,DUTY指的是占空比,取值范围0~100。
需要特别注意的是,在14行中用到了乘法和除法运算,如果不注意,乘法非常容易产生溢出。
本例中将TIME定义为(1000ul),其中1000是TIME的数值,ul为后缀,它表示1000是一个unsigned long类型的数据,这是IAR编译环境定义的。
将TIME定义为unsigned long类型之后,14行右边的乘法运算结果将保存为32位长度,这样就避免了溢出。
如果将TIME定义改为#define TIME (1000),则当TIME * DUTY的值大于0xFFFF时,就会出现溢出,无法得到我们预想的结果。
本例中,9~17行的代码被执行一次之后,CPU就进入LPM0模式,不再执行任何语句。
PWM信号不是由CPU控制IO口产生的,而是由ACLK驱动TimerA产生的。
从图12-12可以看出,模式1、4、5不能用于输出PWM信号,模式2-模式6、模式3-模式7是两对反相的输出模式。
输出模式2,3,6,和7对于输出单元0无效,因为在这些模式下,EQUx=EQU0。
因此,CCR0单元需要以控制IO的方式才能输出PWM信号。
msp430学习经验总结
msp430学习经验总结最近学习MSP430,把自己的一些经验分享下,这是我在网上发现的一篇很不错的文章,归纳得很好,简洁明了。
1.MSP430开发环境建立1.安装IAR dor msp430 软件,软件带USB仿真器的驱动。
2.插入USB仿真器,驱动选择安装目录的/drivers/TIUSBFET3.建立一个工程,选择"option"选项,设置a、选择器件,在"General"项的"Target"标签选择目标器件b、选择输出仿真,在"Linker"项里的"Output"标签,选择输出"Debug information for C-SPY",以输出调试信息用于仿真。
c、若选择"Other",Output下拉框选择"zax-m"即可以输出hex 文件用以烧录,注意,此时仿真不了。
d、选择"Debugger"项的"Setup"标签,"Driver"下拉框选择"FET Debugger"e、选择"FET Debugger"项的"Setup"标签,"Connection"下拉框选择"Texas Instrument USB-I"4.仿真器的接口,从左到右分别为 " GND,RST,TEST,VCC"2.IO口数字输入/输出端口有下列特性:□每个输入/输出位都可以独立编程。
□允许任意组合输入、输出。
□ P1 和 P2 所有 8 个位都可以分别设置为中断。
□可以独立操作输入和输出数据寄存器。
□可以分别设置上拉或下拉电阻。
在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。
MSP430学习笔记
图和下方CCR2的框图是一样的。此处省略不写。在CCR中, 左上角为一个捕获源选择寄存器。可以从CCI2A、CCI2B、 GND或者VCC选择捕获源,选择捕获源后有一个选择捕获模 式寄存器Capture Mode,然后过来有一个捕获溢出状态寄 存器COV,SCS同步/异步捕获模式选择位,然后连接到捕获 比较寄存器。下方为模式选择寄存器,具体设置可以查看相 应的寄存器设置。 这里仅是大概介绍一下Timer0的寄存器,具体的设置使用还 看参考相应的寄存器并结合例程慢慢学习理解。
//以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。 if((P1IFG&BIT0) == BIT0) { P2OUT&=~BIT0; //处理P1IN.0中断 P1IFG &= ~BIT0; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT1) ==BIT1) { P2OUT&=~BIT1; //处理P1IN.1中断 P1IFG &= ~BIT1; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT2) ==BIT2) { P2OUT&=~BIT2; //处理P1IN.2中断 P1IFG &= ~BIT2; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT3) ==BIT3) { //处理P1IN.3中断 P1IFG &= ~BIT3; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT4) ==BIT4) { P2OUT&=~BIT4; //处理P1IN.4中断 P1IFG &= ~BIT4; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT5) ==BIT5) { //处理P1IN.5中断 P1IFG &= ~BIT5; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT6) ==BIT6) { //处理P1IN.6中断 P1IFG &= ~BIT6; //清除中断标志 //以下填充用户代码
学习笔记-CCS-MSP430F5529[快速入门篇二]
学习笔记-CCS-MSP430F5529[快速⼊门篇⼆] 由于2021的全国电赛延期了,从今天开始打算好好整理⼀下使⽤CCS编程的经验,本篇笔记会好好整理⼀下我备赛期间⽤CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输⼊捕获,PWM波输出,UART,OLED(IIC),MPU6050,内容涵盖了硬件和软件部分。
鉴于笔者⽔平有限和能⼒不⾜,⽂中有不到之处还请看者多包涵,我的⼯程源代码链接会在⽂章末尾贴出。
先贴⼀张peripheral图,MSP430的外部引脚及其复⽤功能都可在图⾥查到。
⼀·外部中断 外部中断的操作⽅式与GPIO⼀样是使⽤寄存器操作,所以学习相关的寄存器是不可避免的,不过MSP430的寄存器不算太多,操作外部中断主要要⽤到以下寄存器:1.PxIV 中断向量表(字),P1端⼝的中断函数⼊⼝地址应该都放在⾥⾯,只是⼀个地址;2.PxIE 中断使能寄存器,相应引脚位置1表⽰允许产⽣中断;置0表⽰该引脚不产⽣中断;3.PxIES 中断触发⽅式选择寄存器,相应引脚位置1表⽰下降沿触发,置0表⽰上升沿触发;4.PxIFG 中断标志,由于MSP430的中断使能需要使能总中断,所以仅当总中断GIE和中断使能寄存器PxIE都打开后,PxIFG⾼电平表⽰有中断请求等待待响应,等中断服务函数结束时需要软件清该标志位; 这些寄存器在TI的msp430f5xx_6xxgeneric.h头⽂件有如下定义下⾯看⼀个外部中断程序,所⽤引脚为P2.1,对应MSP430F5529⽕箭板的板载按键S1,初始化为下降沿触发void EXTI_Init(){/*按键中断*/P2IE |= BIT1; //P2.1中断使能P2IES |= BIT1; //设置为下降沿触P2IFG &= ~BIT1; //清中断标志位P2REN |= BIT1; //上拉电阻P2OUT |= BIT1; //初始化置⾼}/*中断服务函数*/#pragma vector=PORT2_VECTOR__interrupt void P2_ISR(void){if(P2IFG & BIT1){delay(2); //延时2ms消抖动/*这⾥是函数算法部分*/}P2IFG &=~BIT1; //清空中断标志}⼆·定时器MSP430的定时器资源还算丰富,共有两类共四个定时器,分别是3个TimerA和1TimerB,由于我对TimerA使⽤较多,所以本⽂着重来讲TimerA,三个TimerA分别为Timer0_A(5个捕获/⽐较寄存器),Timer1_A(3个捕获/⽐较寄存器),Timer2_A(3个捕获/⽐较寄存器),下⾯是TimerA的结构图我们结合TimerA的寄存器讲解⼀下这张图上半部分是整个定时器的基础,整个上半部分可通过TACTL控制寄存器来编程,从功能⾓度来讲从左往右分别是,⾃⾝时钟源配置TASSEL,第⼀次分频选择ID,定时器清零位TACLR,计数值存放寄存器TAR,⼯作模式控制位MC,中断标志位TAIFG以及没有在结构图出现的定时器中断使能TAIE。
msp430f149学习笔记
1.复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清除信号PUC。
POR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。
而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误时产生。
但是,无论那种信号触发的复位,都会使msp430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。
复位后的状态不写了,详见参考书,嘿嘿。
2.首先你要知道msp430的存储器结构。
典型微处理器的结构有两种:冯。
诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。
0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储剩下的从0xffff开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x11003.系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。
430最多有三个振荡器,DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ -8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。
430有三种时钟信号:MCLK系统主时钟,可分频1 2 4 8,供cpu 使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。
4.中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430可以在没有任务时进入低功耗状态,有事件时中断唤醒cpu,处理完毕再次进入低功耗状态。
整个中断的响应过程是这样的,当有中断请求时,如果cpu处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下一条指令的pc值压入堆栈;如果有多个中断请求,先响应优先级高的;执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志位自动复位,而多中断的标志位需要软件复位;然后系统总中断允许位SR.GIE复位,相应的中断向量值装入pc,程序从这个地址继续执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Msp430学习笔记一、简介
图1 基本结构
图2 pin designation
结论:
1.基本每个管脚都可以复用
2.外围功能模块丰富
端口介绍(32 I/O pins)
1.端口P1和P2
具有输入、输出、中断和外部模块功能。
这些功能可以通过各自的7个控制寄存器的设置来实现。
(1)PxDIR 输入输出方向寄存器rw
(2)PxIN 输入寄存器r
(3)PxOUT 输出寄存器r
(4)PxIFG 中断标志寄存器r
(5)PxIES 中断触发沿选择寄存器rw
(6)PxIE 中断使能寄存器rw
(7)PxSEL 功能选择寄存器rw
2.其他端口:四个控制寄存器(除去中断相关)看看例程
二、时钟部分
1.时钟寄存器设置
SCFQCTL 系统时钟控制寄存器(倍频,反馈后默认是31,31+1=32)
SCFI0 系统时钟频率调整器0(锁频环反馈中的分频(实质最终是倍频))
SCFI1 系统时钟频率调整器1(自动控制调整,无需软件设置)
FLL_CTL0 FLL+控制器0 (反馈中是否分频、选择LFXT1晶振的有效电容)
FLL_CTL1 FLL+控制器1 (振荡器控制、时钟源对应的振荡器的选择,默认情况下:振荡
器打开,MCLK选择DCOCLK,SMCLK选择DCOCLK)
图时钟模块
2.工作模式:One Active Mode、Five Power Saving Modes
MSP430是一个特别强调低功耗的单片机系列,尤其适用于采用电池供电的长时间工作场合。
系统根据应用和节能使用不同的时钟信号,这样可以合理利用系统的电源,实现整个系统的超低功耗。
中断是MSP430微处理器的一大特色。
有效地利用中断可以简化程序,并且提高执行效率和系统稳定性。
几乎所有的msp430系统单片机的每个外围模块都能产生中断,为MSP430针对事件(外围模块产生的中断)进行的编程打下基础。
MSP430在没有事件发生时处于低功耗模式,事件发生时通过中断唤醒CPU,时间处理完毕后CPU再次进入低功耗模式,由于CPU运算速度和推出低功耗的速度很快,所以在应用中,CPU大部分时间都处于低功耗状态,使得系统的整体功耗极大地降低。
MSP430中断可分为三种:1.系统复位中断;2.不可屏蔽中断;3.可屏蔽中断。
多个中断请求发生时,响应最高优先级中断。
响应中断时,MSP430单片机会将不可屏蔽中断控制位SR.GIE(总中断允许位)复位。
因此,一旦响应了中断,即使有优先级更高的可屏蔽中断出现,也不会中断当前正在响应的中断而去响应更高优先级的中断。
但SR.GIE复位不会影响不可屏蔽中断,所以仍可接收不可屏蔽中断的中断请求。
使用中断时要开总中断:
_EINT(); // Enable general interrupts。