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

📄 self_prog.c

📁 程序下载在M16中后
💻 C
字号:
/****************************************Copyright (c)*****************************
 文件名:			self_prog.c
 修改日期:			2006-1-24 13:00
 描述: 				SPM操作函数
 版本:				V1.0,根据machao程序改编
 主控  芯 片:		M16  晶振频率:7.3728MHZ
********************************************************************************/
#include<iom16v.h>
#include<macros.h>
#include"define.h"
#include"extern.h"


/**********************************************************************
functionName:void someNop(void)
description: 擦除(code=0x03)和写入(code=0x05)一个Flash页 
**********************************************************************/
void boot_page_ew(uint16 pageAddr,uint08 code) 
{ 
   	asm("mov r30,r16\n" 
        "mov r31,r17\n");            	//将页地址放入Z寄存器和RAMPZ的Bit0中 
   	SPMCR = code;                		//寄存器SPMCSR中为操作码 
   	asm("spm\n");                    	//对指定Flash页进行操作 
}         

/**********************************************************************
functionName:void boot_page_fill(uint16 address,uint16 data)  
description: 填充Flash缓冲页中的一个字 
**********************************************************************/
void boot_page_fill(uint16 address,uint16 data) 
{ 
    asm("mov r30,r16\n" 
    	"mov r31,r17\n"             //Z寄存器中为填冲页内地址 
    	"mov r0,r18\n" 
        "mov r1,r19\n");            //R0R1中为一个指令字 
    SPMCR = 0x01; 
    asm("spm\n"); 
} 

/**********************************************************************
functionName:void wait_page_rw_ok(void) 
description: 等待一个Flash页的写完成 
**********************************************************************/
void wait_page_rw_ok(void) 
{ 
	while(SPMCR & 0x40) 
	{ 
    	while(SPMCR & 0x01); 
        SPMCR = 0x11; 
        asm("spm\n"); 
     } 
} 




/**********************************************************************
functionName:void write_lock_bits (unsigned char val)
description:写锁定位
**********************************************************************/
void write_lock_bits (unsigned char val)
{
	asm("mov r0,r16\n");
	SPMCR=0x09;
	asm("spm\n");
	while(SPMCR&BIT(0));
	SPMCR = 0x11; 
    asm("spm\n"); 
}

/**********************************************************************
functionName:uint08 read_program_memory (uint16 addr,uint08 cmd)
description: 返回addr地址数据,以字节为单位
cmd:
0:读flashrom
1:读熔丝位或者锁定位 
addr=0x0001		锁定位
addr=0x0000		熔丝位低字节
addr=0x0003 	熔丝位高字节
**********************************************************************/
uint08 read_program_memory(uint16 addr,uint08 cmd)
{
	asm("mov r30,r16\n" 		
        "mov r31,r17\n");  
    if(cmd)
    {
    	SPMCR=0x09;
    }               
	asm("lpm r0,z\n");
	return(R0);
}

⌨️ 快捷键说明

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