?? self_prog.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 + -