⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash_routines.c

📁 用C语言写的用于微新公司数字信号控制器30F6014的
💻 C
字号:
/**********************************************************************
 *	程序说明
 *  
 *  该文件包括用于擦除和烧写一行flash内存(32个指令字)的子程序,
 *  flash内存用于保存BLDC起始和运行参数。
 **********************************************************************/

#include "general.h"

void erase_flash_row(unsigned int );
void program_flash(unsigned int, unsigned int);


//擦除一行flash内存子程序
void erase_flash_row(unsigned int address) 
{ 
	
	//允许擦除行
	asm("mov	#0x4041,W1");
	asm("mov	W1,NVMCON");	
	// 清地址高字节
	asm("clr	NVMADRU");
	// 采用PSV,屏蔽地址(置于W0中)的MS位
	asm("bclr 	W0,#15");
	asm("mov		W0,NVMADR");
	// 擦除flash
	asm("	bset NVMCON,#14"); 
	asm("	mov	#0x55,W1");
	asm("	mov	W1,NVMKEY");
	asm("	mov	#0xaa,W1");  
	asm("	mov	W1,NVMKEY");
	asm("	bset NVMCON,#15");
	Nop();
	Nop();
	return;  
} 

//把值写到flash中指定地址的子程序
void program_flash(unsigned int destination, unsigned int values)
{

	//允许写行
	asm("mov		#0x4001,W3");
	asm("mov		W3,NVMCON");
	// 采用PSV,屏蔽地址(置于W0中)的MS位
	asm("bclr	W0,#15");
	// 采用PSV,设定TBLPAG值为零
	asm("clr	TBLPAG");
	// 清W3,以便写0到MS字节
	asm("clr	W3");
	// 装入32个数值
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 1
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 2
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 3
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 4
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 5
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 6
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 7
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 8
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 9
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 10
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 11
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 12
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 13
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 14
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 15
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 16
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 17
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 18
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 19
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 20
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 21
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 22
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 23
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 24
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 25
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 26
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 27
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 28
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 29
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 30
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 31
	asm("tblwtl.w	[w1++],	[w0]");
	asm("tblwth.w	W3,		[w0++]");		// 字 32
	//开始烧写
	asm("	bset NVMCON,#14"); 
	asm("	mov	#0x55,W1");
	asm("	mov	W1,NVMKEY");
	asm("	mov	#0xaa,W1");  
	asm("	mov	W1,NVMKEY");
	asm("	bset NVMCON,#15");
	Nop();
	Nop();
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -