📄 flash.lst
字号:
< //////////////////////////////////////////////////
< .EXTERNAL R_InterruptStatus
< //////////////////////////////////////////////////
<
<
< .EXTERNAL F_SP_RampUpDAC1
< .EXTERNAL F_SP_RampDnDAC1
< .EXTERNAL F_SP_RampUpDAC2
< .EXTERNAL F_SP_RampDnDAC2
<
< .EXTERNAL F_SP_InitQueue
< .EXTERNAL F_SP_InitQueue_A2000
< .EXTERNAL F_SP_InitQueue_S480
< .EXTERNAL F_SP_InitQueue_S240
< .EXTERNAL F_SP_InitQueue_MS01
< .EXTERNAL F_SP_InitQueue_DVR
<
< .EXTERNAL F_SP_ReadQueue
< .EXTERNAL F_SP_ReadQueue_A2000
< .EXTERNAL F_SP_ReadQueue_S480
< .EXTERNAL F_SP_ReadQueue_S240
< .EXTERNAL F_SP_ReadQueue_MS01
< .EXTERNAL F_SP_ReadQueue_DVR
<
< .EXTERNAL F_SP_WriteQueue
< .EXTERNAL F_SP_WriteQueue_A2000
< .EXTERNAL F_SP_WriteQueue_S480
< .EXTERNAL F_SP_WriteQueue_S240
< .EXTERNAL F_SP_WriteQueue_MS01
< .EXTERNAL F_SP_WriteQueue_DVR
<
< .EXTERNAL F_SP_TestQueue
< .EXTERNAL F_SP_TestQueue_A2000
< .EXTERNAL F_SP_TestQueue_S480
< .EXTERNAL F_SP_TestQueue_S240
< .EXTERNAL F_SP_TestQueue_MS01
< .EXTERNAL F_SP_TestQueue_DVR
<
< .EXTERNAL F_SP_ReadQueue_NIC // Read queue with no index change
< .EXTERNAL F_SP_ReadQueue_NIC_A2000
< .EXTERNAL F_SP_ReadQueue_NIC_S480
< .EXTERNAL F_SP_ReadQueue_NIC_S240
< .EXTERNAL F_SP_ReadQueue_NIC_MS01
< .EXTERNAL F_SP_ReadQueue_NIC_DVR
<
<
< .EXTERNAL F_SP_SACM_A2000_Init_
< .EXTERNAL F_SP_SACM_S480_Init_
< .EXTERNAL F_SP_SACM_S240_Init_
<
< .EXTERNAL F_SP_SACM_MS01_Init_
< .EXTERNAL F_SP_PlayMode0_
< .EXTERNAL F_SP_PlayMode1_
< .EXTERNAL F_SP_PlayMode2_
< .EXTERNAL F_SP_PlayMode3_
<
< .EXTERNAL F_SP_SACM_DVR_Init_
< .EXTERNAL F_SP_SACM_DVR_Rec_Init_
< .EXTERNAL F_SP_SACM_DVR_Play_Init_
<
< .EXTERNAL F_SP_GetResource
<
< //////////////////////////////////////////////////////////////////
< // Reserve old defintion
< // Note: Some user who use old library may use the old name
< //////////////////////////////////////////////////////////////////
< .EXTERNAL F_SP_Send_PWM // Get RAW data
< .EXTERNAL F_SP_Send_DAC1 //
< .EXTERNAL F_SP_Send_DAC2 //
<
< .EXTERNAL F_STD_Send_DAC1 // reserved old
< .EXTERNAL F_STD_Send_DAC2 // reserved old
<
< .EXTERNAL F_RampUpDAC1 // reserved old
< .EXTERNAL F_RampDnDAC1 // reserved old
< .EXTERNAL F_RampUpDAC2 // reserved old
< .EXTERNAL F_RampDnDAC2 // reserved old
< ///////////////////////////////////////////////////////////////////
<
<
<
< //========================================================================================
< // End of hardware.inc
< //========================================================================================
.DEFINE C_FLASH_SIZE 0x8000
.DEFINE C_FLASH_BLOCK_SIZE 0x100
.DEFINE C_FLASH_MATCH 0xAAAA
.DEFINE C_FLASH_PAGE_ERASE 0x5511 //擦除一页
.DEFINE C_FLASH_MASS_ERASE 0x5522 //
.DEFINE C_FLASH_1WORD_PGM 0x5533 //写一个字
.DEFINE C_FLASH_SEQUENT_PGM 0x5544 //写多个字
.DEFINE C_FLASH_MAIN_BLOCK 0x5555
.DEFINE C_FLASH_INFORM_BLOCK 0x5566
0000944C .CODE
//============================================================================================
//函数: F_FlashWrite1Word()
//语法:void F_FlashWrite1Word(int addr,int Value )
//描述:写一个字到FLASH中
//参数:1、被写数据的存储地址 2、被写数据
//返回:无
//===============================================================================================
.PUBLIC _F_FlashWrite1Word
.DEFINE P_Flash_Ctrl 0x7555
_F_FlashWrite1Word: .proc
0000944C 88 DA push bp to [sp]
0000944D 08 0B 01 00 bp = sp+1
0000944F 40 F1 INT OFF
00009450 09 93 AA AA r1 = C_FLASH_MATCH //AAAA
00009452 19 D3 55 75 [P_Flash_Ctrl] = r1
00009454 09 93 33 55 r1 = C_FLASH_1WORD_PGM //5533
00009456 19 D3 55 75 [P_Flash_Ctrl] = r1
00009458 03 92 r1 = [bp+3] //flash address
00009459 04 94 r2 = [bp+4] //data
0000945A C1 D4 [r1] = r2
0000945B 43 F1 INT FIQ,IRQ
0000945C 88 98 pop bp from [sp]
0000945D 90 9A retf
.ENDP
//=============================================================================================
//函数:F_FlashWrite()
//语法:F_FlashWrite(int sector,int &num, int size)
//描述:顺序写多个字
//参数:1、被写数据的起始地址 2、被写数据 3、写数据的数量
//返回:无
//=============================================================================================
.PUBLIC _F_FlashWrite
_F_FlashWrite: .proc
0000945E 88 DA push bp to [sp]
0000945F 40 F1 INT OFF
00009460 08 0B 01 00 bp = sp+1
00009462 03 92 r1 = [bp+3] //flash base address
00009463 04 94 r2 = [bp+4] //data
00009464 05 96 r3 = [bp+5] //多个字节
00009465 0C 99 AA AA r4 = C_FLASH_MATCH //AAAA
00009467 1C D9 55 75 [P_Flash_Ctrl] = r4
L_FlashWriteLoop:
00009469 0C 99 44 55 r4 = C_FLASH_SEQUENT_PGM //5544
0000946B 1C D9 55 75 [P_Flash_Ctrl] = r4
0000946D D2 98 r4 = [r2++]
0000946E D1 D8 [r1++] = r4
0000946F 41 26 r3 -= 1
00009470 48 4E jnz L_FlashWriteLoop
00009471 1B D7 55 75 [P_Flash_Ctrl] = r3 //写结束
00009473 43 F1 INT FIQ,IRQ
00009474 88 98 pop bp from [sp]
00009475 90 9A retf
.ENDP
// ============================================================================================
//函数:F_FlashErase()
//语法:void F_FlashErase(sector)
//描述:擦除256字节
//参数: 1、擦除页的起始地址
//返回:无
// ============================================================================================
.PUBLIC _F_FlashErase
_F_FlashErase: .proc
00009476 88 DA push bp to [sp]
00009477 08 0B 01 00 bp = sp + 1
00009479 09 93 AA AA r1 = C_FLASH_MATCH //AAAA
0000947B 19 D3 55 75 [P_Flash_Ctrl] = r1
0000947D 09 93 11 55 r1 = C_FLASH_PAGE_ERASE //5511
0000947F 19 D3 55 75 [P_Flash_Ctrl] = r1
00009481 03 92 r1 = [bp+3] //擦除一页
00009482 C1 D2 [r1] = r1
00009483 88 98 pop bp from [sp]
00009484 90 9A retf
.ENDP
.END
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -