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