MSP430单片机深入学习笔记
- 格式:docx
- 大小:313.52 KB
- 文档页数:14
第一章MSP430(Mixed Signal Processor混合信号处理器)的特点:优点:1、超低功耗2、强大的处理能力3、高性能模拟技术及丰富的片上外围模块4、系统工作稳定5、方便高效的开发环境缺点:所有总线都在内部,无功能扩展端RAM:随机存储器(可读写),掉电后数据丢失。
ROM:程序存储器(只可读)。
PROM:一次性可编程存储器(只读)。
EPROM:紫外线擦除的可编程存储器(字节写入整片擦除)。
EEPPROM:电擦除可编程存储器(字节写入,字节擦除)。
FLASH:电擦除可编程存储器(字节写入,段擦除/页擦除)。
第二章CPU的编程资源:16位的ALU(算术逻辑运算单元)、16个寄存器、一个指令控制单元。
16个寄存器:程序计数器PC:以字为单位系统堆栈指针SP:压堆栈(PUSH)过程取堆栈(POP)过程状态寄存器SR:类型名称含义状态标志C:进位标志当运算结果产生进位时C置位,否则C复位Z:零标志当运算结果为零时Z置位,否则Z复位N:负标志当运算结果为负时N置位,否则N复位V:溢出标志当运算结果超出有符号数范围时V置位,溢出情况如下:正数+正数=负数负数+负数=正数正数--负数=负数负数--正数=正数控制标志GIE:通用中断允许位控制可屏蔽中断GIE置位CPU可响应可屏蔽中断GIE复位CPU不响应可屏蔽中断CPUOff 置位CPUOff位可是CPU进入闭关模式,可用所有允许的中常数发生寄存器CG1和CG2 :使用常数发生寄存器产生常数的优点:1、不需要特殊的指令2、对6种最常用的常数不需要额外的字操作数3、缩短指令周期:不经过MDB(数据存储器)就能直接访问寻址模式:指在执行一条指令过程中,如何找到操作数地址的方法(指令的操作数包含源操作数和目的操作数)。
访问整个地址空间的不同寻址模式由As(寻址位,源操作数的寻址模式)和Ad(寻址位,目标作数的寻址模式)模式位的内容确定:源操作数可以使用全部的7种寻址方式,而目的操作数只能使用其中4种寻址方式,它们可以访问整个地址空间。
一,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之间,这样会产生击穿电流。
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时钟。
今天学习了MSP430F5系列单片机的RTC模块使用,现总结一下以防忘记。
F5系列单片机的RTC模块可以用作日历模式、可编程闹钟和可校准的时钟计数器。
RTCCTL1寄存器中的RTCMODE位决定RTC工作在日历模式还是计数器模式:RTCMODE 0 32位计数器模式1日历模式计数器模式:此时RTCMODE复位。
计数器的时钟源选择:时钟源可选自ACLK、SMCLK或者是经RT0PS和RT1PS对ACLK、SMCLK 的分频值。
RT0PS和RT1PS分别能输出ACLK和SMCLK的2、4、8、16、32、64、128、256分频。
如下图:另外,还可以看到RT1SSEL中的10、11选项练到了RT0PSDIV的输出。
它的作用是将RT0PS和RT1PS级联。
级联后的输出也可以作为32位计数器的时钟源。
4个独立的8位计数器级联成32位计数器,能提供计数时钟的8位、16位、24位、32位溢出间隔,由RTCCTL1寄存器的RTCTEV位选择其中一种触发条件。
置位RTCTEVIE,一个RTCTEV事件可以触发一个中断。
RT0PS和RT1PS可以被配置成两个8位的计数器,或者级联成一个16位的计数器。
通过设置各自的RT0PSHOLD和RT1PSHOLD位,RT0PS和RT1PS可以暂停功能,还原为独立的模块。
当RT0PS和RT1PS级联的时候,通过置位RT0PSHOLD可以导致RT0PS和RT1PS同时停止。
根据不同的配置,32 位的计数器可以有不同的方法被停止。
如果32位的计数器时钟源直接源于ACLK或者SMCLK,则可以通过置位RTCHOLD而被停止;如果它是源于RT1PS的输出,则可以通过置位RT1PSHOLD或者RTCHOLD而被停止;最后,如果它源于RT0PS和RT1PS的级联,则通过置位RT0PSHOLD、RT1PSHOLD或者RTCHOLD 而被停止。
个人理解:RTC的时钟要么来自ACLK,要么来自SMCLK,要么来自RT1PS对ACLK 或SMCLK的分频,要么来自RT0PS与RT1PS级联后对ACLK或SMCLK的分频。
复位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的钟表振荡器,此时振荡器不需要接负载电容。
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 功能选择寄存器rw2.其他端口:四个控制寄存器(除去中断相关)看看例程二、时钟部分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 ModesMSP430是一个特别强调低功耗的单片机系列,尤其适用于采用电池供电的长时间工作场合。
系统根据应用和节能使用不同的时钟信号,这样可以合理利用系统的电源,实现整个系统的超低功耗。
中断是MSP430微处理器的一大特色。
有效地利用中断可以简化程序,并且提高执行效率和系统稳定性。
几乎所有的msp430系统单片机的每个外围模块都能产生中断,为MSP430针对事件(外围模块产生的中断)进行的编程打下基础。
MSP430在没有事件发生时处于低功耗模式,事件发生时通过中断唤醒CPU,时间处理完毕后CPU再次进入低功耗模式,由于CPU运算速度和推出低功耗的速度很快,所以在应用中,CPU大部分时间都处于低功耗状态,使得系统的整体功耗极大地降低。
第一章MSP430单片机概述MSP430是一种低功耗、高性能的单片机,由德州仪器(Texas Instruments,TI)公司开发。
它采用了超低功耗的电源管理技术,使其在电池供电下能够持续运行数年之久。
MSP430单片机适用于许多应用领域,包括消费电子、医疗设备、工业自动化、智能家居和传感器网络等。
MSP430单片机的核心是RISC架构的16位处理器,具有较小的指令集,运行速度快,并且能够以较低的能耗完成各种任务。
它采用了哈佛结构,具有16位的定长指令格式,有着高效的编码能力。
此外,它还具有多种中断机制,可以快速响应外部事件或实现多任务操作。
MSP430单片机提供了多个不同的系列,以适应不同应用场景的需求。
不同系列的MSP430单片机在处理器速度、内存容量和外设接口等方面有所差异。
其中,MSP430F系列适用于通用应用,而MSP430G系列适用于低成本和功耗敏感的应用。
此外,MSP430FR系列还具有非易失性存储器,可以在掉电情况下保留数据。
MSP430单片机具有丰富的外设接口,包括通用IO口、模拟输入输出、时钟控制器、串口通信、定时器和比较器等。
这些外设接口使得MSP430单片机能够灵活地与其他设备进行通信,并实现多种功能。
MSP430单片机在低功耗方面具有很大优势。
它采用了多种省电技术,包括多级电源管理、动态电压调节和片上电源管理单元等。
这些技术使得MSP430单片机在待机和运行模式下的功耗都非常低,能够更好地满足移动设备和电池供电设备的需求。
总的来说,MSP430单片机是一种低功耗、高性能的单片机,具有丰富的外设接口和完善的开发工具链。
它适用于多种应用领域,可以满足不同需求的设计要求。
随着物联网的快速发展,MSP430单片机的市场前景十分广阔,并且将继续发挥重要作用。
中断Msp430单片机具有中断向量列表,位于Rom最高段512B中,事先要将中断服务程序入口地址装入中断向量表内。
中断发生后,如果改中断被允许,CPU会自动将当前程序地址和CPU的状态寄存器SR压入堆栈,然后跳转到改终端服务程序的入口。
中断向量种类:#define BASICTIMER_VECTOR#define PORT2_VECTOR#define PORT1_VECTOR#define TIMERA1_VECTOR#defineTIMERA0_VECTOR#define USART0TX_VECTOR#define USART0RX_VECTOR#define WDT_VECTOR#defineSD16_VECTOR#define NMI_VECTOR#define RESET_VECTORMsp430单片机的中断源数量很多,比如P1,P2口的每一个IO口都能产生中断,3个ADC 采样结束以及遇到错误都会产生中断,为了便于管理,msp430的中断管理机制把同类的中断合并成一个总的中断源,具体的中断需要由软件判断中断标志位来确定。
例如:P1口的任何一个IO发生中断,程序都会执行P1口中断服务程序,在P1口中断服务程序中,再根据P1IFG标志位来判断具体是哪一根IO口发生了中断。
内部函数标准c语言具有普遍适用性,但是每种cpu都有独特之处,对于某个cpu来说一个简单的操作,用标准c语言表达出来却很复杂,为了解决这个问题,编译器会提供一些内部函数:__low_power_mode_0();__low_power_mode_1();__low_power_mode_2();__low_power_mode_3();上述可以简化为:LPM0;LPM1;LPM2;LPM3__low_power_mode_off_on_exit();这个函数可以退出唤醒cpu__delay_cycles(long int sycles); 靠cpu空操作延迟cycles个时钟周期__enable_interrupt(); _EINT();开总中断__disable_interrupt(); _DINT();关总中断_nop(); 空操作文件管理初学者往往将所有的代码都写在一个c文件中,这是一种非常坏的习惯。
基础篇之统一时钟系统(UCS)接上一篇帖子,一起来学MSP430F6638基础篇之GPIO(2)。
在这篇我主要学习它的时钟系统。
时钟对于单片机就像心脏对于人类,有了它单片机才能正常的运行。
6638的时钟系统很强大,有多个时钟源。
选择合适的时钟源,对于降低MSP430单片机的功耗有很大的帮助。
6638的时钟源有:针对频率稳定的锁频环路控制环路FLL,低功耗低频内部时钟源VLO,低频修整内部参考源REFO,32KHZ晶体XT1,高达32MHZ的高频晶振XT2。
这些时钟源模块可以提供三种时钟信号,ACLK,MCLK,SMCLK。
每一个时钟信号可以进行分频从而降低信号的频率。
ACLK可以选作各个外设模块(比如:ADC,定时器,DAC等),常用于低速外设模块;MCLK主要用于CPU和系统;SMCLK主要用于各个高速外设模块。
学习的必备资料任然是,数据手册和用户指导书。
请经常查阅它们。
资料里有一句话很重要:The UCS module can be configured to operate without any external components,with one or two external crystals,or with resonators,under full software control.它说,统一时钟系统模块可以在一两个晶振或震荡器下完全由软件控制,不需要其他任何外部器件。
就是说,时钟系统可以用软件来控制。
PUC指上电清除,POR指上电复位。
这段英文说,PUC后,UCS模块的默认配置是:1、ACLK的信号来自XT1CLK。
2、MCLK,SMCLK的信号都来自DCOCLKDIV。
3、FLL的参考时钟源来自XT1CLK。
4、XIN和XOUT 两个脚默认为通用IO口,XT1不起作用。
5、XT2IN和XT2OUT也作为普通IO口,XT2不起作用。
为了使能XT1,PSEL必须得置位。
一旦晶振启动,锁频环会使MCLK和SMCLK稳定在1.048576MHZ,而Fdco稳定在2倍的MCLK。
这只是我在学习TI公司生产的16位超的功耗单片机MSP430的随笔,希望能对其他朋友有所借鉴,不对之处还请多指教。
下面,开始430之旅。
讲解430的书现在也有很多了,不过大多数都是详细说明底层硬件结构的,看了不免有些空洞和枯燥,我认为了解一个MCU的操作首先要对其基础特性有所了解,然后再仔细研究各模块的功能。
1、首先你要知道msp430的存储器结构。
典型微处理器的结构有两种:冯 ? 诺依曼结构----程序存储器和数据存储器统一编码;哈佛结构----程序存储器和数据存储器。
MSP430系列单片机属于前者,而常用的mcs51系列属于后者。
0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储,剩下的从0xffff 开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x11002、复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清楚信号PUC。
POR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。
而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误是产生。
但是,无论那种信号触发的复位,都会使MSP430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。
复位后的状态不写了,详见参考书,嘿嘿。
3、系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。
430最多有三个振荡器:DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ-8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。
430有三种时钟信号:MCLK系统主时钟,可分频1/2/4/8,供CPU使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。
msp430单片机教程MSP430单片机是一种经典的低功耗、高性能的微控制器,被广泛应用于嵌入式系统中。
它具有很多特点,比如低功耗、宽工作电压范围、快速启动速度等。
本文将介绍MSP430单片机的基本知识和使用方法。
首先,我们需要了解MSP430单片机的结构。
MSP430包括CPU、内存、I/O接口等多个部分。
CPU是控制单元,负责处理指令和数据。
内存是存储器,用于存储程序和数据。
I/O接口用于与外部设备进行通信。
MSP430单片机使用C语言进行编程。
编程的基本步骤包括初始化、读取输入、处理数据、输出结果等。
编程时,需要了解寄存器的使用方法和I/O接口的配置。
MSP430提供了丰富的库函数和工具,方便开发人员进行程序开发和调试。
MSP430单片机的应用范围广泛。
它可以用于物联网设备、传感器、控制器、无线通信等多个领域。
由于其低功耗的特点,MSP430单片机在电池供电设备中得到了广泛应用。
其性能优越和易用性也使得它成为嵌入式系统中的首选单片机。
MSP430单片机教程包括了一系列基础和高级的内容。
基础教程首先介绍了MSP430单片机的基本知识,包括硬件结构、编程环境和工具的使用等。
然后,通过一系列实践案例,教授学生如何编写简单的程序。
高级教程则深入讲解了MSP430单片机的一些高级特性和应用,如中断、定时器、串口通信等。
在学习MSP430单片机时,还需要学习如何使用开发板和调试工具。
开发板是连接MSP430单片机和计算机的桥梁,提供了丰富的外设接口。
通过合理配置开发板,可以实现多种外设的功能。
调试工具可以帮助开发人员进行程序的调试和性能优化,提高开发效率和质量。
总之,MSP430单片机是一种功能强大、易用且低功耗的微控制器。
学习MSP430单片机的教程可以帮助我们掌握嵌入式系统的开发和应用。
通过学习,我们可以深入了解MSP430单片机的原理和使用方法,为实际应用提供有力的支持。
MSP430学习总结MSP430学习总结前言这次主要看的资料是MSP430F425型号的,与MSP430F169有点区别,但由于MSP430单片机采用模块化结构,在不同型号的单片机中,同一种模块的使用方法和寄存器都是相同的。
下面会对它们的功能和区别加以说明。
一、MSP430单片机的特点1、我觉得MSP430最大的特点就是超低功耗,430之所以能够在低功耗的条件下运行,主要是由于引入了“时钟系统”的概念,和采用模块化结构。
让CPU可以间歇性的工作,节省功耗。
在MSP430单片机中,通过时钟配置可以产生3种时钟:MCLK:主时钟,MCLK是专门为CPU运行提供的时钟,MCLK配置的越高,CPU执行的速度就越快。
一旦关闭MCLKE,CPU 就停止工作,所以在超低功耗中通过间接开启MCLK的方式降低功耗。
SMCLK:子系统时钟,为单片机内部某些高速设备提供时钟,并且SMCLK是独立于MCLK的,关闭MCLK让CPU停止工作,子系统SMCLK开启,仍然可以使外设继续工作。
ACLK:活动时钟;ACLK一般是由32.768KHz晶振直接产生的低频时钟,在单片机运行时一般不关闭,和定时器使用间接唤醒CPU。
时钟系统对于3种时钟不同程度的关闭,就可以进入不同的低功耗模式(低功耗在下面讨论)。
2、MSP430单片机采用模块化结构,每一种模块都具有独立而完整的结构,这样就可以单独开启或者关闭某些模块,只需要激活某些使用的模块,以节省电力。
3、MSP430单片机的内核是16位RISC处理器,其运算能力和速度都具有一定的优势。
MSP430还有其它的一些优势在这里就不一一列举了。
二、MSP430单片机的内部资源1、I/O口寄存器PxIN: Px口输入寄存器PxOUT: Px口输出寄存器PxDIR : Px口方向寄存器 0=输入 1=输出PxSET: Px口第二功能选择寄存器 0=普通I/O 1=第二功能使用总结:以上的4个寄存器是所有I/O都具有的,在使用I/O 口之前首先要设置PxDIR,对于要使用第二功能的还要设置PxSET 下面介绍的是430中P1,P2口引发中断需要设置的寄存器(MSP430单片机只有P1、P2口能引发中断)PxIE : Px口中断允许寄存器 0=不允许 1=允许PxIES : Px口中断沿选择寄存器0=上升沿1=下降沿PxIFG :Px口中断标志位寄存器 0=中断条件不成立1=中断条件曾经成立(说明:无论中断是否被允许,也不论是否正在执行中断服务程序,只要I/O满足中断条件,PxIFG的相应位就会置1,只能通过软件清除,这个可以用来判断哪一位I/O发生了中断,也不会漏掉每一次中断。
第一章基本原理1.冯诺依曼计算机:工作原理为存储程序+程序控制,结构为输入设备,存储器,运算器,控制器,输出设备2.基本概念【Bit:位】【Byte:字节,8个二进制位】【word:字,CPU内部数据处理基本单位,二进制位数和内部寄存器,运算装置,总线宽度一致】3.CPU,存储器,输入输出设备,输入输出设备通过I/O接口和系统连接,各个部位通过总线链接。
4.总线分为:地址总线(AB),数据总线(DB),控制总线(CB)。
地址总线宽度,决定CPU寻址能力,能够使用多大的内存或I/O端口。
数据总线的宽度决定一次最多传送数据的宽度。
5.存储单元:存储信息的基本单元。
存储单元内容:存储的数据。
存储单元地址:每个单元有唯一的编制,译码后可以得到相应的选通信号。
6.读操作:发出地址信号选中存储单元,发出读控制信号,将存储单元的内容通过数据总线传入CPU中。
写操作:CPU发出地址信号,选中相应的存储单元;CPU发出存储器写控制信号;将写的内容通过数据总线写入选中存储单元中。
7.定址原则:任何操作对象都有确定的地址,译码电路将地址信号实现定制功能。
8.微机的工作过程:取指令,将指令取出到CPU并且进行译码。
执行指令,由控制电路发出执行指令所需要的信号,控制CPU执行响应操作。
第二章数字的表示运算9.N进制到十进制:略。
十进制到N进制:整数部分为除n取余,商零为止,先低后高。
小数部分为乘2取整,到零为止,先高后低。
10.二进制数和十六进制数的运算:算术运算,进位和借位都存储在标志寄存器中。
11.无符号数:所有各位都表示数值大小,最高位无符号意义。
用于处理全部是正数的场合。
12.带符号数:用补码来表示带符号数。
求补运算:按位取反,最低位+1,相当于(0-该数)补码:正数的补码:全部为数字位(最高位是0)。
负数的补码:对该数正数进行求补运算(最高位为1)。
补码真值计算:最高位为0,等于二进制的数值。
最高位为1,先求补运算,再求数值大小。
学习笔记-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。
复位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的钟表振荡器,此时振荡器不需要接负载电容。
也可以接450kHz~8MHz的标准晶体振荡器,此时振荡器需要接负载电容。
3.XT2 接450kHz~8MHz的标准晶体振荡器,此时振荡器要接负载电容,不用时可以关闭。
通常低频振荡器用来降低能量消耗,例如使用电池的系统。
高频振荡器用来对事件作出快速反应或者供CPU进行大量运算。
DCO的振荡频率会受周围环境温度和MSP430工作电压的影响而产生变化,并且同一型号的芯片所产生的频率也不相同。
DCO的调节功能可以改善它的性能。
DCO的调节分为以下3步:(1)选择BCSCTL1.RSELx确定时钟的标称频率。
(2)选择DCOCTL.DCOx在标称频率基础上分段粗调。
(3)选择DCOCTL.MODx的值进行细调。
MSP430定义了3种时钟信号,分别为:(1)MCLK 系统主时钟。
除了CPU运算使用此时钟信号外,外围模块也可以使用。
MCLK可以选择任何一个振荡器产生的时钟信号并进行1、2、4、8分频作为其信号源。
(2)SMCLK 系统子时钟。
外围模块可以使用,并且在使用之前可以通过各模块的寄存器实现分频。
SMCLK可以选择任何一个振荡器产生的时钟信号并进行1、2、4、8分频作为其信号源。
(3)ACLK 辅助时钟。
外围模块可以使用,并且在使用之前可以通过各模块的寄存器实现分频。
ACLK只能由LFXT1进行1、2、4、8分频作为其信号源。
PUC结束时,MCLK和SMCLK的信号源为DCO,DCO的振荡频率约为800kHz(详见相关手册)。
ACLK的信号源为LFXT1。
例3.4 设置MCLK 的时钟8 分频。
下列4 条代码均可实现该功能。
BCSCTL2 |= 0x30; //人肉记忆+数脚趾头,原始社会才干的事!BCSCTL2 |= BIT5+BIT4; //需记忆DIVMx在BSCTL中的位置,不推荐!BCSCTL2 |= DIVM1+DIVM0; //由两项组成,看起来不直观,凑合!BCSCTL2 |= DIVM_3; //简洁明了,力荐!在使用按位或操作符“|=”配置寄存器时,要注意宏定义之间的“叠加”效应。
重新用宏定义配置寄存器前,一定要先清零。
(此外,极少数寄存器上电复位后默认值不是0,要特别注意。
)例3.5 先设定MCLK 分频为2,一段时间后改为4 分频。
错误的代码:BCSCTL2 |= DIVM_1; //这确实是2 分频delay( );BCSCTL2 |= DIVM_2; //因为|=赋值的原因,这实际上是8 分频,请自行面壁想清楚正确的代码:BCSCTL2 |= DIVM_1; // 2 分频delay( );BCSCTL2 &= ~( DIVM_0+ DIVM_1+ DIVM_2+ DIVM_3); // 预先把全部相关控制位置0 BCSCTL2 |= DIVM_2; //此时再用|=设置才不出错相关控制位全置0 还可写成:BCSCTL2 &= ~DIVM_3 或BCSCTL2 &=~(DIVM0+DIVM1)低功耗模式上电和外部复位信号产生POR信号,POR信号会引起PUC信号。
看门狗激活时,定时器溢出和安全键值错误也会引起PUC信号。
PUC信号结束后,MSP430进入AM状态。
在AM 状态程序可以选择进入任何一种低功耗模式,然后在适当的时机,由外围模块的中断使CPU 退出低功耗模式。
LPM0(主力休眠,先头部队工作)和LPM3(主力和先头部队都休眠,仅留警戒哨兵)最常用,LPM4 则当关机使用。
中断MSP430可以在没有事件发生时进入低功耗状态,事件发生时,通过中断唤醒CPU,事件处理完毕后,CPU再次进入低功耗状态。
MSP430的中断分为:系统复位、不可屏蔽中断、可屏蔽中断。
系统复位前面已经作过介绍,其中断向量为0xFFFE。
不可屏蔽中断向量为0xFFFC,产生不可屏蔽中断的原因如下:(1)RST/NMI管脚功能选择为NMI时,RST/NMI管脚上产生一个上升沿或者下降沿(具体是上升沿还是下降沿由寄存器WDTCTL中的NMIES位决定)。
NMI中断可以用WDTCTL中的NMIIE位屏蔽。
需要注意的是,当RST/NMI管脚功能选择为NMI时,不要让RST/NMI 管脚上的信号一直保持在低电平。
原因是如果发生了PUC,则RST/NMI管脚的功能被初始化为复位功能,而此时它上面的信号一直保持低电平,使CPU一直处于复位状态,不能正常工作。
(2)振荡器失效中断允许时,振荡器失效。
(3)FLASH存储器的非法访问中断允许时,对FLASH存储器进行了非法访问。
不可屏蔽中断可由各自的中断允许位禁止或打开。
当一个不可屏蔽中断请求被接受时,相应的中断允许位自动复位。
退出中断程序时,如果希望中断继续有效,则必须用软件将相应中断允许位置位。
中断使用的步骤:1)配置子模块中断相关的寄存器,比如外部中断的上升沿触发还是下降沿触发,定时中断的计数方式和定时值。
2)依模板写中断服务子函数框架,添加中断后要干什么的代码(事件处理函数)。
3)使能子模块的中断,使能总中断。
4)一旦中断发生,CPU 停下主函数的活,并标记位置。
进入中断服务子函数里干活,完事后回到主函数标记位置处继续干活。
我们来看MSP430 的中断子函数模板,加粗斜体部分是允许用户“创意”的地方,其他则是固定格式。
其中,PORT1_VECTOR 是中断向量表中的地址宏定义,直接决定了这个中断子函数是响应哪个中断源。
PORT1_ISR 是中断子函数名,这个最好按标准写法取名字,便于理解。
中断向量表和标准的中断子函数名可见头文件<MSP430G2553.h>。
在MSP430 单片机中,中断资源是比较“宝贵的”,很多中断都是共用一个“中断向量入口”。
比如上面写的是P1 口的中断服务子函数,当P1 的8 个IO 口任何一个检测到中断事件(上升沿或下降沿),就会进入中断子函数。
我们需要在子函数里,查询中断标志位#pragma vector = PORT1_VECTOR__interrupt void PORT1_ISR(void){//中断后想干的事写这里;}LaunchPad 口袋实验平台—MSP-EXP430G2 篇50(特殊功能寄存器),判断一下到底是哪个IO 口“出事”了。
& 按位与, | 按位或, ^ 按位异或AND (位与&) OR ( 位或| ) XOR ( 位异或^ )1 & 1 = 1 1 | 1 = 1 1 ^ 1 = 01 & 0 = 0 1 | 0 = 1 1 ^ 0 = 10 & 1 = 0 0 | 1 = 1 0 ^ 1 = 10 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0C语言提供的位运算符列表:运算符含义描述& 按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或若参加运算的两个二进制位值相同则为0,否则为1~ 取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0<< 左移用来将一个数的各二进制位全部左移N位,右补0>> 右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0写位操作:在对某字节使用“=”进行写操作时,所有位的值都将被改变。
如果先将原字节读出来,再使用“按位”操作符对原字节进行赋值,则可“等效”实现对单个位的写操作。
将P1.0 置1、P1.1 置0、P1.2 取反,不影响其他位。
P1OUT |= 0x01; P1OUT |= BIT0; //“按位或”,相当于置1P1OUT &= ~0x02; P1OUT &= ~BIT1; //取反后再“按位与”,相当于置0 P1OUT ^= 0x04; P1OUT ^= BIT2;//“按位异或”,相当于取反也可以用加号对多位同时操作。
将P1.0、P1.1、P1.2 均置1,不影响其他位。
P1OUT |= BIT0+BIT1+BIT2; //可用加法进行批量设置读位操作:读位操作主要是通过if 语句判断的方法得到的。
同样,这种变通的办法不意味着MSP430 单片机可以对位进行读取,这种方法同样需要对1 个字节的8 位都操作。
Eg:将P2.0 的输出设置成与P1.1 输入相反,读取P1.0 状态到变量Temp。
unsigned char Temp=0;if((P1IN&BIT1)==0) P2OUT |= BIT0; //读P1.1 写P2.0else P2OUT &= ~BIT0;if(P1IN&BIT0) Temp=1; //读P1.0 写Tempelse Temp=0;寄存器配置小结1)一般情况下,均使用宏定义去配置寄存器,这样做省事省力,可读性好。