📄 lab-03-flash.c
字号:
//****************************************************************************
// MSP430xG46x Demo - Flash In-System Programming, Copy SegA to SegB
//
// Description: This program first erases flash seg A, then it increments all
// values in seg A, then it erases seg B, then copies seg A to seg B.
// Assumed MCLK 550kHz - 900kHz.
// //* Set Breakpoint on NOP in the Mainloop to avoid Stressing Flash *//
//
// MSP430xG461x
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
//
// FengLF
// LSD SCIENCE& TECHNOLOGY CO.,LTD
// 2007.06
// Built with IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include <msp430xG46x.h>
char value;
void write_SegA (char value);
void copy_A2B (void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
FCTL2 = FWKEY + FSSEL0 + FN1; // Flash 时钟 MCLK 3分频
value = 0; // 初始化写入FLASH的数据
while(1) // 循环
{
write_SegA(value++); // 写FLASH的A段 value值加1
copy_A2B(); // 复制A段到B段
_NOP(); // 设置断点处
}
}
void write_SegA (char value)
{
char *Flash_ptr; // Flash 指针
unsigned int i;
Flash_ptr = (char *) 0x1080; // 初始化 Flash 指针 0X1080
FCTL1 = FWKEY + ERASE; // 置擦除位
FCTL3 = FWKEY; // 清Lock 位
*Flash_ptr = 0; // 空写
FCTL1 = FWKEY + WRT; // 写操作
for (i=0; i<128; i++)
{
*Flash_ptr++ = value; // 写入数据到 flash 中
}
FCTL1 = FWKEY; // 清 WRT 位
FCTL3 = FWKEY + LOCK; // 置 LOCK 位
}
void copy_A2B (void)
{
char *Flash_ptrA; // flash A 段指针
char *Flash_ptrB; // flash B 段指针
unsigned int i;
Flash_ptrA = (char *) 0x1080; // 初始化 Flash A 段指针
Flash_ptrB = (char *) 0x1000; // 初始化 Flash B 段指针
FCTL1 = FWKEY + ERASE; // 置擦除位
FCTL3 = FWKEY; // 清Lock 位
*Flash_ptrB = 0; // 空写
FCTL1 = FWKEY + WRT; // 写操作
for (i=0; i<128; i++)
{
*Flash_ptrB++ = *Flash_ptrA++; // 复制A内容段到B段
}
FCTL1 = FWKEY; // 清 WRT 位
FCTL3 = FWKEY + LOCK; // 置 LOCK 位
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -