当前位置:
文档之家› 第2章MSP430F149单片机基础知识
第2章MSP430F149单片机基础知识
2.2 Flash操作 2.2.1 存储空间组织 存储器中的数据: 字节数据可以定位在偶 地址或奇地址; 字数据定位在偶地址: 低字节在偶地址,高字节 在下一个奇地址。
片内RAM、FLASH组织
其余空间:0~200h用于外围接口及部件的地址
2.2.2 Flash操作
Flash存储器: Flash存储器分为信息Flash和程序Flash 以MSP430F449为例: 信息Flash的地址为1000h~10FFh(256字节),程 序Flash的地址为1100h~FFFFh(60K)。 从硬件和功能上来说,信息Flash和程序Flash没有本 质的不同,程序首地址可以是1100h,也可以是1000h; 信息也可以放在1000h~FFFFh的任何位置。
ROM 0FF16h 0FF14h 0FF12h 00000h 4AEBh 0xxxxh PC
0FA34h 0FA32h 0FA30h
0xxxxh 05BC1h 0xxxxh
寄存器 R10 R11 0FA33h
002A8h 002A7h
0xxh 012h 0xxh
002A8h 002A7h 002A6h
//定义Flash 写操作安全值(高位0xA5)
//定义Flash 段擦除允许位(低位0x02)
#define LOCK
(0x0010)
//擦除锁存位,Lock = 1:Flash被锁存(只读)
char *addr; addr = 0xA000;
//申明地址指针变量 //指针指向0xA000
while(FCTL3 & BUSY){} //测试等待BUSY复位位 FCTL1 = FWKEY + ERASE; //允许FLASH段擦除 FCTL3 = FWKEY; //清楚写锁存位 for(addr =(char *) 0xA000;addr<(char *)0xB000; addr += 0x200) *addr = 0;
2#中断请求
2#中断允许 2#中断源
n#中断允许 n#中断源
n#中断请求
状态寄存器SR
N:负数位 运算结果为负时置位。
字运算: N位设置为运算结果的15位。 例如:0 - 1 = FFFFh,1→N; 字节运算:N位设置为运算结果的7位。 例如:0 - 1 = FFh,1→N。
状态寄存器SR
Z:零位 运算结果为0时置位,不为0复位。
目标地址 0FF16h +1192h 010A82h ROM 0FF16h 0FF14h 0FF12h 01192h 00045h 040B0h PC 操作前RAM 操作后RAM 010AAh 010A8h 010A6h 0xxxxh 00045h 0xxxxh
010AAh 010A8h 010A6h
01116h 01114h 1112h
0xxxxh 01234h 0xxxxh
01116h 01114h 1112h
0xxxxh 0A123h 0xxxxh
符号模式:MOV EDE, TONI
; ( EDE)→(TONI)
如果 PC = 0FF12h,EDE = 0F016h,TONI = 01114h
x = EDE – PC = 0F016h - 0FF14h = 0F102h; y = TONI – PC = 01114h - 0FF16h = 11FEh; 相当于 MOV x(PC),y(PC) ;(PC+x)→(PC+y)
ROM 0FF16h 0FF14h 0FF12h 011FEh 0F102h 04090h 源地址 0FF14h +0F102h (1)F016h 目标地址 0FF16h +011FEh (1)1114h PC 操作前RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh 操作后RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh
指令的时钟周期的总体规律(续) :
3周期:数据从CPU之外读写,且目标地址为Rx,源 地址需要换算,如: MOV 2(R5),R7 ;(R5+2) → R7 ADD &EDE,R6 ;ADD EDE,R6 ;EDE = PC+x BR @R9+ ;R9→PC,R9+2 BR #DATA ;(DATA)→ PC PUSH R5 ;R5 →( SP)
0xxh 05Bh 0xxh
002A7h 002A6h
间接模式:MOV
@R10,0(R11) ;(R10)→(R11 + 0), ;MOV传送字(16位数据)
操作前RAM 0FA34h 0xxxxh 05BC1h 0xxxxh 操作后RAM 0FA34h 0FA32h 0FA30h 0xxxxh 05BC1h 0xxxxh
/定义Flash 写操作安全值(高位0xA5)
#define WRT
(0x0040)
//写操作使能位
#define LOCK
(0x0010)
//Lock = 1:Flash被锁存 (只读)
char *addr,*buf; //申明地址指针变量 const char dat ={0x02,0x78,0x12,0x33,0x54,0x6A}; char cont; addr = 0xA000; buf = &dat[0]; cont = 6; while(FCTL3 & BUSY){} //测试等待BUSY复位位 FCTL3 = FWKEY; //清楚写锁存位 FCTL1 = FWKEY + WRT; //设置写使能 for(cont = 0;cont < 6;cont++) *addr++ = buf[cont]; //写数据flash,且地址指针加1 FCTL1 = FWKEY; //擦除所有使能,防止误操作 FCTL3 = FWKEY + LOCK; // Flash被锁存(只读)
等价与:MOV INCD
@R10,0(R11) R0
在执行时寄存器的自动增量在取操作数之后:
立即模式:MOV #45h,TONI
; #45h →(TONI)
如果 PC = 0FF12h,TONI = 10A8h y = TONI–PC = 10A8h - 0FF16h = 1192h ; 相当于 MOV #45h ,y(PC) ; #45h →(PC+y)
第 2章
MSP430F149单片机基础知识
2.1 CPU概述 CPU寄存器
程序计数器PC 系统堆栈指针SP 第三次放入的数据 第二次放入的数据 第一次放入的数据
压堆栈( 取堆栈( PUSH POP)过程 )过程
SP-6 SP-4 SP-2
状态寄存器SR
V:溢出位 FFFFh + 1 将产生溢出,1→V
常数发生寄存器CG1和CG2
使用常数发生寄存器产生常数的优点: 1、不需要特殊的指令 2、对7种最常用的常数不需要额外的字操作数 3、缩短指令周期:不经过MDB就能直接访问
寻址模式 访问整个地址空间的不同寻址模式由As(寻址位, 源操作数的寻址模式)和Ad(寻址位,目标作数的 寻址模式)模式位的内容确定:
ROM 0FF16h 0FF14h 0FF12h 00000h 4AABh 0xxxxh PC
0FA32h 0FA30h
寄存器 R10 R11 0FA32h 002A6h
002A8h 002A6h 002A4h
0xxxxh 012xxh 0xxxxh
002A8h 002A6h 002A4h
0xxxxh 05BC1h 0xxxxh
x 0
也产生溢出,1→V
状态寄存器SR
低功耗工作模式控制
工作模式 AM LPM0 SCG1 0 0 SCG0 0 0 OSCOff 0 0 CPUOff 0 1
LPM1
LPM2 LPM3
0
1 1
1
0 1
0
0 0
1
1 1
LPM4
1
1
1
1
状态寄存器SR
GIE
1#中断允许 1#中断源 1#中断请求
GIE :通用中断允许位
01084h 01082h 01080h
0xxxxh 01234h 0xxxxh
01084h 01082h 01080h
0xxxxh 01234h 0xxxxh
绝对模式:MOV &EDE,&TONI ;EDE→TONI 如果 EDE = 0F016h,TONI = 01114h
ROM 0FF16h 0FF14h 0FF12h 01114h 0F016h 04292h PC 操作前RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh 操作后RAM 0F018h 0F016h 0F014h 0xxxxh 0A123h 0xxxxh
间接增量模式:MOV.B @R10+,0(R11) 与 MOV.B @R10,0(R11)的操作结果一样, 仅仅在结束时R10 = R0 + 1
等价与:MOV.B @R10,0(R11) INC R0 间接增量模式:MOV @R10+,0(R11) 与 MOV @R10,0(R11)的操作结果一样,仅 仅在结束时R10 = R0 + 2
//被擦除段的首地址写(0~0xFF)
FCTL1 = FWKEY; //擦除所有使能,防止误操作 FCTL3 = FWKEY + LOCK; // Flash被锁存(只读)
FLASH写操作举例:
将0x02,0x78,0x12,0x33,0x54,0x6A写入 0xA000为首地址的FLASH:
#define FWKEY (0xA500)