📄 flashrom.lst
字号:
< .DEFINE C_LINE 0x0002 //
< .endif
< //----------------------------------------------
<
<
< // Define for P_DAC_Ctrl
< //----------------------------------------------
< .if BODY_TYPE == SPCE061A
< .DEFINE C_DAC1_Direct 0x0000; // b8 b7: DAC1 latch
< .DEFINE C_DAC1_LatchA 0x0080; // Latch data to DAC1 by TimerA
< .DEFINE C_DAC1_LatchB 0x0100; // Latch data to DAC1 by TimerB
< .DEFINE C_DAC1_LatchAB 0x0180; // Latch data to DAC1 by TimerA or TimerB
<
< .DEFINE C_DAC2_Direct 0x0000; // b6 b5: DAC2 latch
< .DEFINE C_DAC2_LatchA 0x0020; // Latch data to DAC2 by TimerA
< .DEFINE C_DAC2_LatchB 0x0040; // Latch data to DAC2 by TimerB
< .DEFINE C_DAC2_LatchAB 0x0060; // Latch data to DAC2 by TimerA or TimerB
<
< .DEFINE C_ADC_Direct 0x0000; // b4 b3: ADC latch
< .DEFINE C_ADC_LatchA 0x0008; // Latch data to ADC by TimerA
< .DEFINE C_ADC_LatchB 0x0010; // Latch data to ADC by TimerB
< .DEFINE C_ADC_LatchAB 0x0018; // Latch data to ADC by TimerA or TimerB
< .endif
<
< .if BODY_TYPE == SPCE500A
< .DEFINE C_PushPull 0x0000 // b0, (default)
< .DEFINE C_DoubleEnd 0x0001 // b0
< .DEFINE C_DAC_Mode 0x0000 // b1, (default)
< .DEFINE C_PWM_Mode 0x0002 // b1
<
< .DEFINE C_D1_Direct 0x0000 // DAC1 latch
< .DEFINE C_D1_LatchA 0x0008 //
< .DEFINE C_D1_LatchB 0x0010 //
< .DEFINE C_D1_LatchAB 0x0018 //
<
< .DEFINE C_D2_Direct 0x0000 // DAC2 latch
< .DEFINE C_D2_LatchA 0x0020 //
< .DEFINE C_D2_LatchB 0x0040 //
< .DEFINE C_D2_LatchAB 0x00C0 //
< .endif
< //----------------------------------------------
<
< // Define for P_LVD_Ctrl
< //----------------------------------------------
< .if BODY_TYPE == SPCE061A
< .DEFINE C_LVD24V 0x0000; // LVD = 2.4V; b1b0
< .DEFINE C_LVD28V 0x0001; // LVD = 2.8V
< .DEFINE C_LVD32V 0x0002; // LVD = 3.2V
< .endif
<
< .if BODY_TYPE == SPCE500A
< .DEFINE C_LVD26V 0x0000 // LVD = 2.6V
< .DEFINE C_LVD30V 0x0001 // LVD = 3.0V
< .DEFINE C_LVD36V 0x0002 // LVD = 3.6V
< .DEFINE C_LVD40V 0x0003 // LVD = 4.0V
< .endif
<
< .DEFINE C_LVD_Result 0x8000; // b15 = 1: below the selected LVD level
< //----------------------------------------------
<
<
< // SPCE061 flash operation instruction definition
< //----------------------------------------------
< .if BODY_TYPE == SPCE061A
< .DEFINE C_EnableFlashAccess 0xAAAA;
< .DEFINE C_EraseFlashPage 0x5511;
< .DEFINE C_ProgramFlash 0x5533;
< .endif
< //----------------------------------------------
<
<
<
< //===============================================================
< // Sunplus APIs for SPCE 061A
< //===============================================================
< //////////////////////////////////////////////////
< // Note: This register will map to the P_INT_Ctrl
< // (0x7010), The SACMvxx.lib use this register to
< // combine with user's interrupt setting.
< // In SPCE061, it is not necessary since the
< // P_INT_Mask(0x702D) already does this. It is for
< // compatibility to keep it here.
< //////////////////////////////////////////////////
< //.EXTERNAL R_InterruptStatus
<
< //========================================================================================
< // End of SPCE061A.inc
< //========================================================================================
<
<
<
00008009 .TEXT
//--------------------------------------------------------------------
//-- Procedure: _SP_PageErase
//-- Decription: Erase a page in flash
//-- Syntax: SP_PageErase(page addr)
//-- Parameter:
// R1 = page addr
//-- Return:
// None
//--------------------------------------------------------------------
.PUBLIC _SP_PageErase
_SP_PageErase: .proc
00008009 88 DA PUSH BP,BP TO [SP];
0000800A 08 0B 01 00 BP = SP + 1;
0000800C 03 92 R1 = [BP+3];
0000800D 40 F0 11 80 call F_PageErase;
0000800F 88 98 POP BP,BP FROM [SP];
00008010 90 9A retf
.endp
//////////////////////////////////////////////////////////////////
// F_PageErase
// Function: Erase a flash page in SPCE061
// R1: page address (0x8000~0xFFFF)
// Used register: r1,r2
//////////////////////////////////////////////////////////////////
.PUBLIC F_PageErase
F_PageErase: .PROC
00008011 88 D4 PUSH R2,R2 to [SP];
// INT OFF;
00008012 01 95 R2 = R1;
// Enable Write/Erase
00008013 09 93 AA AA R1 = C_EnableFlashAccess;
00008015 19 D3 55 75 [P_Flash_Ctrl] = R1;
// Erase instruction
00008017 09 93 11 55 R1 = C_EraseFlashPage;
00008019 19 D3 55 75 [P_Flash_Ctrl] = R1;
// Write any value to erase page
0000801B C2 D2 [R2] = R1;
// INT FIQ,IRQ;
0000801C 88 92 POP R2,R2 from [SP];
0000801D 90 9A retf;
.endp
//--------------------------------------------------------------------
//-- Procedure: _SP_WriteWord
//-- Syntax: SP_WriteWord(page addr,data)
//-- Parameter:
// R1 = page addr
// R2 = data
//-- Return:
// None
//--------------------------------------------------------------------
.PUBLIC _SP_WriteWord
_SP_WriteWord: .proc
0000801E 88 DA PUSH BP,BP TO [SP];
0000801F 08 0B 01 00 BP = SP + 1;
00008021 03 92 R1 = [BP+3];
00008022 04 94 R2 = [BP+4];
00008023 40 F0 27 80 call F_WriteWord;
00008025 88 98 POP BP,BP FROM [SP];
00008026 90 9A retf
.endp
//////////////////////////////////////////////////////////////////
// F_WriteWord
// Function: write a word to the flash of SPCE061
// R1: page address (0x8000~0xFFFF)
// R2: data to write
// Used register: r1,r2,r3
//////////////////////////////////////////////////////////////////
.PUBLIC F_WriteWord
F_WriteWord: .PROC
00008027 88 D6 PUSH R3,R3 to [SP];
// INT OFF;
00008028 01 97 R3 = R1;
// Enable Write/Erase
00008029 09 93 AA AA R1 = C_EnableFlashAccess;
0000802B 19 D3 55 75 [P_Flash_Ctrl] = R1;
// Program instruction
0000802D 09 93 33 55 R1 = C_ProgramFlash;
0000802F 19 D3 55 75 [P_Flash_Ctrl] = R1;
// Write Flash
00008031 C3 D4 [R3] = R2;
// INT FIQ,IRQ;
00008032 88 94 POP R3,R3 from [SP];
00008033 90 9A retf;
.ENDP
//--------------------------------------------------------------------
//-- Procedure: _SP_ReadWord
//-- Syntax: SP_ReadWord(page addr)
//-- Parameter:
// R1 = page addr
//-- Return:
// R1 = data
//--------------------------------------------------------------------
.PUBLIC _SP_ReadWord
_SP_ReadWord: .proc
00008034 88 DA PUSH BP,BP TO [SP];
00008035 08 0B 01 00 BP = SP + 1;
00008037 03 92 R1 = [BP+3];
00008038 40 F0 3C 80 call F_ReadWord;
0000803A 88 98 POP BP,BP FROM [SP];
0000803B 90 9A retf
.endp
//////////////////////////////////////////////////////////////////
// F_ReadWord
// Function: read a word from the flash of SPCE061
// R1: page address (0x8000~0xFFFF)
// return: R1 the data red
// Used register: r1,r2,r3
//////////////////////////////////////////////////////////////////
.PUBLIC F_ReadWord
F_ReadWord: .PROC
0000803C 88 D4 PUSH R2,R2 to [SP];
// Read data
0000803D C1 94 R2 = [R1];
0000803E 02 93 R1 = R2;
0000803F 88 92 POP R2,R2 from [SP];
00008040 90 9A retf;
.ENDP
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -