【MSP430F2619】基础简介及基础设计、操作
一、特性
· 供电 1.8V ~ 3.6V
· 最高时钟频率 16MHz
· 16位RISC架构,62.5ns指令周期
· 120KB + 256字节(信息存储区) 闪存
· 4KB RAM
· 三通道内部DMA
· 12位 ADC 和 12位DAC
· 具有3个捕获/比较寄存器的 16位定时器 TimerA
· 具有7个捕获/比较寄存器的 16位定时器 TimerB
· 片上比较器A+ (Comparator_A+)
` 四个通用串行接口(USCI)
- USCI_A0 / USCI_A1
· UART
· SPI
· 红外数据通讯(IrDA)编码器 和 解码器
- USCI_B0 / USCI_B1
· IIC
· SPI
二、CPU架构
CPU包含16个 16bit的 寄存器,其中 R0 - R3 具有专用功能, R4 - R15为普通工作寄存器。
1、程序计数器PC (R0寄存器)
16bit程序计数器 PC指向 将执行的下一条指令。每条指令使用偶数个字节(2/4/6...),PC相应地递增。64KB地址空间中的指令访问在 字 边界上执行 ,PC与偶数地址对齐。
2、堆栈指针SP (R1寄存器)
CPU使用堆栈指针 SP来存储 子例程调用 和 中断的返回地址。它使用一个先递减、后递增的机制 。SP可被具有所有指令和寻址模式的软件所使用 。SP由用户初始化到 RAM中(__set_SP_register(); ) ,并与偶数地址对齐。
3、状态寄存器SR (R2寄存器)(重要)
状态寄存器SR 用作 源寄存器 或 目标寄存器 ,可用于仅通过字指令寻址的寄存器模式。其余的寻址模式组成用于支持常数发生器。
注意 :使用时 需配置 MSP430内联函数使用,不可直接赋值!!!!!
| 15-9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 保留 | V | SCG1 | SCGO | OSCOFF | CPUOFF | GIE | N | Z | C |
| rw-0 | |||||||||
V :溢出位。当算术运算从信号量范围内(向上向下)溢出时,置1。
N :负位。当字节或字操作的结果为 负时 置1 。
Z :零位。当字节或字操作的结果为 0时 置1 。结果 不为0 时清除 。
C :进位 位。当字节或字操作的结果 产生进位时 置1 。未发生进位时清除。
GIE :通用中断使能。置1 -- 启用可屏蔽中断 ; 复位0 -- 所有可屏蔽中断被禁用 。
SCG1 :系统时钟发生器1。 置1 --- 关闭SMCLK 。
SCG0 :系统时钟发生器0。
置1 --- 关闭 DCO直流发生器(前提 :DCOCLK不用于MCLK 或SMCLK。)
OSCOFF :LFXT1振荡器关闭。
置1 --- 关闭 LFXT1晶体振荡器 (前提 :LFXT1CLK不用于MCLK或SMCLK。)
CPUOFF :CPU关闭。置1 --- 关闭CPU 。
4、常数发生器CG1 和 CG2 (R3寄存器)
可生成 6个 常用常数,无需额外的16位程序代码字。可以使用源寄存器寻址模式(“作为”)来选择常数。
三、地址空间
1、外设区域(重要)
(1)、特别功能寄存器(SFR)(重要)
SFR位于地址空间的16个低字节(0x00h - 0x0Fh),并按字节组织,只能使用字节指令来进行访问。
SFR中断使能1 IE1寄存器 (0x00h)
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| UTXIE0 | URXIE0 | ACCVIE | NMIIE | 保留 | 保留 | OFIE | WDTIE |
| rw-0 | rw-0 | rw-0 | rw-0 | rw-0 | rw-0 |
UTXIE0:UART0 发送中断使能。 0 --- 未使能 1 --- 中断使能
URXIE0:UART0接收中断使能 。 0 --- 未使能 1 --- 中断使能
ACCVIE: 闪存访问权限中断启用 。 0 --- 未使能 1 --- 中断使能 (ACCVIFG位于FCTL3寄存器)
NMIIE:(不可)屏蔽中断使能 。 0 --- 未使能 1 --- 中断使能
OFIE:振荡器故障中断使能 。 0 --- 中断未使能 1 --- 中断使能
WDTIE:安全装置定时器+ 中断使能 。该位启用 间隔定时器模式下的WDTIFG中断。安全装置模式没有必要设置此位 。
0 --- 中断未使能 1 --- 中断使能
SFR中断使能2 IE2寄存器 (0x01h)
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 保留 | 保留 | UTXIE1 | URXIE1 | UCB0TXIE | UCB0RXIE | UCA0TXIE | UCA0RXIE |
| rw-0 | rw-0 | rw-0 | rw-0 | rw-0 | rw-0 |
UTXIE1:UART1发送中断使能 0 ---- 未使能 1 ----- 使能中断
URXIE1:UART1接收中断使能 0 --- 未使能 1 --- 使能中断
UCB0TXIE:USCI_B0 发送中断使能 0 --- 禁用中断 1 --- 启用中断
UCB0RXIE:USCI_B0接收中断使能 0 --- 禁用中断 1 --- 启用中断
UCA0TXIE:USCI_A0 发送中断启用 0 --- 禁用中断 1 --- 启用中断
UCA0RXIE:USCI_A0 接收中断启用 0 --- 禁用中断 1 --- 启用中断
SFR中断标志1 IFG1寄存器 (0x02h)
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| UTXIFG0 | URXIFG0 | 保留 | NMIIFG | RSTIFG | PORIFG | OFIFG | WDTIFG |
| rw-1 | rw-0 | rw-0 | rw-(0) | rw-(1) | rw-1 | rw-(0) |
UTXIFG0:USART0发送中断标志。 U0TXBUF为空时,置位。 0 -- 无中断 1 -- 有中断挂起
URXIFG0:USART0接收中断标志。U0RXBUF非空时,置位。 0 -- 无中断 1 --- 有中断挂起
NMIIFG:中断标志 。 必须由软件复位 。 0 --- 无中断挂起 1 --- 有中断挂起
RSTIFG:复位NMI模式中,引脚输入高电平, CPU在复位向量中存储的字地址 0FFFEh处开始执行,并设置 RSTIFG标志。
PORIFG:上电复位中断标志 , Vcc上电时 置1.
OFIFG:振荡器故障中断标志 。 0 --- 中断未挂起 1 --- 中断挂起
WDTIFG:安全装置定时器+ 中断标志 。在安全装置模式下 ,WDTIFG保持直到被软件复位 。
在间隔模式下 ,通过处理中断自动复位 WDTIFG ,或可以由软件 复位。
0 --- 无中断 1--有中断
SFR中断标志2 IFG2寄存器 (0x03h)
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 保留 | 保留 | UTXIFG1 | URXIFG1 | UCB0TXIFG | UCB0RXIFG | UCA0TXIFG | UCA0RXIFG |
| rw-1 | rw-0 | rw-1 | rw-0 | rw-1 | rw-0 |
UTXIFG1:USART1发送中断标志 。U1TXBUF为空时,置位。 0 -- 无中断 1 -- 有中断挂起
URXIFG1:USART1接收中断标志。 U1RXBUF非空时,置位。 0 -- 无中断 1 -- 有中断挂起
UCB0TXIFG:USCI_B0发送中断标志 。UCB0TXBUF为空时,置位 。0--无中断 1 -- 有中断
UCB0RXIFG:USCI_B0接收中断标志 。UCB0RXIFG非空时,置位。 0 -- 无中断 1 -- 有中断
UCA0TXIFG:USCI_A0发送中断标志 。UCA0TXBUF为空时,置位。 0 -- 无中断挂起 1--有
UCA0RXIFG:USCI_A0接收中断标志。 UCA0RXBUF非空时,置位。 0 -- 无中断 1 -- 有中断
SFR模块使能1 ME1 0x04h
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| USPIE0 | |||||||
| RW-0 |
USPIE0:针对 USART0 的 SPI 模式启用。 0 -- 未使用 1 -- 启用模块
SFR模块使能2 ME2 0x05h
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| USPIE1 | |||||||
| rw-0 |
USPIE1:针对 USART1 的 SPI 模式启用。 0 -- 未使用 1 -- 启用模块
(2)、字节(8bit)访问区域。 0x0010 --- 0x00FF
共计240字节,用于使用字节指令外设模块的寄存器访问。如果使用字指令写入,则会忽略高位字节,写入低字节。
(3)、字(16bit)访问区域 0x0100 --- 0x01FF
共计256字节,用于使用字指令外设模块的寄存器访问。
2、RAM区域
易失性内存,掉电数据丢失,一般用于程序运行时的临时数据存储,比如变量、堆栈等,大小为4KB。
地址1 :0x0200 --- 0x09FF 2KB
地址2 :0x1100 --- 0x18FF 地址空间1的镜像区域 2KB
地址3 :0x1900 --- 0x20FF 扩展区域2KB
3、BOOT区域
所有型号统一为 1KB的 ROM区域,地址为 0x0C00 --- 0x0FFFF。这是芯片内置的固化引导程序区域,用于实现串口等方式的在线编程、芯片启动自检等底层功能,用户无法编译。
4、FLASH区域
(1)、信息存储区
256B字节大小,属于独立的小容量 Flash区域,掉电数据不丢失,通常用于存储用户自定义的配置参数、校准数据等不需要频繁修改的关键信息。
地址1 :0x10C0 --- 0x10FF 段A 64B
地址2 :0x1080 --- 0x10BF 段B 64B
地址3 :0x1040 --- 0x107F 段C 64B
地址4 :0x1000 --- 0x103F 段D 64B
(2)、主FLASH区
用于存放用户程序代码 和 非易失性参数数据。地址为 0x2100 --- 0x1FFFF,共计120KB
(3)、中断向量表区域
所有型号地址统一为 0xFFC0 --- 0xFFFF,共64字节。用于存放所有中断服务程序的入口地址。
四、仿真
内部集成了 JTAG、SBW 、BSL 三种下载方式。
JTAG :下载速度快、可以仿真。 需要连接 TDI 、TDO 、TMS 、TCK
SBW :内部有一个SBW控制器,可以解码SBW信号转换成JTAG信号 ,需要连接 SWDIO(TDO) 、 SWCLK(TCK)
BSL : 是MSP430 FLASH系列独有的一项功能。
在程序空间、ROM之外有1KB左右的引导区,用来存放MSP430的BOOTROM(引导ROM)。 这个引导程序是固化在BOOTROM空间内,用户不能直接使用和修改。 当外界给芯片提供一种特定的激励时,芯片内的引导程序开始工作,引导外部 数据写入片内ROM、RAM。 在烧写过程中,如果设定了密码或使能了熔断丝,则会导致JTAG 和 SBW 均无法正常烧写程序,这时可以使用BSL进行大量擦除。 BSL可以设定密码,防止MCU内部程序被窃取。
外部数据由串口UART提供。 需要连接 BSL_TX(P1.1) BSL_RX(P2.2) TCK--RTS RESET--DTR
五、内联函数(重要)
内联函数定义在 instrinsics.h中,使用时需包含。<MSP430.h> 中已包含。
(1)、__bic_SR_register() ; / _BIC_SR();
将 CPU中SR状态寄存器中的某些位 清零。 例如 :__bic_SR_register(GIE); //关中断
(2)、__bis_SR_register() ; / _BIS_SR();
将 CPU中SR状态寄存器中的某些位 置1。
(3)、__bic_SR_register_on_exit() ; / _BIC_SR_IRQ();
用于一个中断函数 或者 不可中断函数(标志为__monitor) 返回时 ,将CPU内SR寄存器中的某些位 清0。
(4)、__bis_SR_register_on_exit() ; / _BIS_SR_IRQ();
用于一个 中断函数 或者 不可中断函数(标志位__monitor) 返回时,将CPU内SR寄存器中的某些位 置1 。
(5)、__get_SR_register();
用于 获取 状态寄存器 SR的值
(6)、__get_SR_register_on_exit() ;
用于一个中断函数 或者 不可中断函数(标志位__monitor) 返回时,获取SR寄存器中的值
(7)、__get_SP_register() ;
用于获取 堆栈指针寄存器 SP的值。
(8)、__set_SP_register();
用于设置 堆栈指针寄存器SP的值。
(9)、__interrupt
放于函数前面 ,标志该函数为 中断函数。
#pragma vector = 中断向量值 (无 ;) 在中断函数前方需加该语句
(10)、__monitor
放于函数前面, 声明当该函数执行时自动关闭中断。(尽量少使用该关键字)
(11)、__no_init
放在全局变量前 ,使程序启动时不需为该变量赋初始值。
(12)、__disable_interrupt() ; / _DINT() ;
关闭总中断
(13)、__enable_interrupt(); / _EINT();
开总中断
(14)、__even_in_range(a , b);
判断 a 是否为偶数,且 ≤ b ,只与 switch配合使用 ,可提高效率
常被用在多源中断的查询中 ,如 switch( __even_in_range(TAIV , 10))
意思是:只有在 TAIV 的值 在 0 -- 10 内的偶数时才会执行。
(15)、__no_operation(); / _NOP();
空操作。
(16)、__bcd_add_short( unsigned short , unsigned short);
两个 16位的 BCD格式的数字相加 ,返回和
(17)、__bcd_add_long( unsigned long ,unsigned long);
两个 32位 的BCD格式的数字相加,返回和。
(18)、__delay_cycles(x);
系统自带的精确延时 。x 必须是常量 或者 常量表达式 。不允许是变量。
延时时间 = x * MCLK时钟周期。
(19)、内部函数
//向 地址(16bit) 中写入 数据(20bit)
void __data16_write_addr(unsigned short, unsigned long);
//从 地址(16bit) 中 读取数据(20bit)
unsigned long __data16_read_addr(unsigned short);
//向 地址(20bit) 中写入 数据(8bit)
void __data20_write_char(unsigned long, unsigned char);
//向 地址(20bit) 中写入 数据(16bit)
void __data20_write_short(unsigned long, unsigned short);
//向 地址(20bit) 中写入 数据(20bit)
void __data20_write_long(unsigned long, unsigned long);
//从 地址(16bit) 中 读取数据(8/16/20bit)
unsigned char __data20_read_char(unsigned long);
unsigned short __data20_read_short(unsigned long);
unsigned long __data20_read_long(unsigned long);
六、最小系统设计
七、新建工程
1、File ---> New ---> CCS Project
2、选择 对应型号单片机、连接的仿真器、工程名称 及 新建工程样式(空工程或带mian.c工程)
