📄 flash_routines.c
字号:
/***********************************************************************/
/* 7.6.2002修改:毛武斌 */
/* 增加段拷贝功能,从代码区指定地址拷贝128字节到FSEG_B */
/* 2.25.2004 用 do..while 循环代替 for 循环,减少代码 */
/***********************************************************************/
#include "includes.h"
void flash_init(void) //flash初始化
{
//FCTL2 = 0xA560; //1/17MCLK
FCTL2 ^= FXKEY + FN2 + FN1 + FN0; // Set FLASH timing generator 447.5Khz
}
/***********************************************************************/
/* Flash_clr */
/* erases 1 Segment of flash memory */
/***********************************************************************/
void Flash_clr( int *Data_ptr )
{
flash_init();
FCTL3 = FWKEY; // Unlock the flash
FCTL1 = FWKEY + ERASE; // Enable flash segment erase
*Data_ptr=0; /* erase Flash segment */
}
/***********************************************************************/
/* */
/* secure all flash 上锁,防止Flash被意外擦写 */
/***********************************************************************/
void Flash_secure(void)
{
FCTL1 = FWKEY; // Disable flash segment erase
FCTL3 = FWKEY + LOCK; // Lock the flash
}
//************************************ *********************************/
// 从指定地址开始拷贝64字到FSEG_A或FSEG_B
//***********************************************************************/
int Flash_copy_fseg( int *source_ptr, int *dest_ptr ){
int w;
//stop_WDG;
flash_init();
//clear dest seg
Flash_clr(dest_ptr);
//set to write mode to prepare for copy
//_DINT();
FCTL3 = 0x0A500; /* Lock = 0 */
FCTL1 = 0x0A540; /* WRT = 1 */
//copy from source to dest
w = 64 + 1;
while(--w)
{
*dest_ptr++=*source_ptr++;
};
Flash_secure();
// 校验
w = 64 + 1;
while(--w)
{
if(*--dest_ptr != *--source_ptr)
return(-1);
};
return(1);
}
//************************************ *********************************/
// 从指定地址拷贝count字节到指定地址
//***********************************************************************/
int Flash_copy_char(char *source_ptr,char *dest_ptr,unsigned char count)
{
int w;
//stop_WDG;
//clear dest seg
flash_init();
Flash_clr((int *)dest_ptr);
//set to write mode to prepare for copy
_DINT();
FCTL3 = 0x0A500; /* Lock = 0 */
FCTL1 = 0x0A540; /* WRT = 1 */
//copy from source to dest
w = count + 1;
while(--w)
{
//while((FCTL3 & BUSY) == BUSY);
*dest_ptr++=*source_ptr++;
};
//*/
while((FCTL3 & BUSY) == BUSY);
Flash_secure();
// 校验
w = count + 1;
_EINT();
while(--w)
{
if(*--dest_ptr != *--source_ptr)
return(-1);
};
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -