?? sst39vf160.s
字號(hào):
;******************************************************************************
; 文件名:SST39VF160.S
; 功能:對(duì)SST39VF160進(jìn)行全片擦除,然后寫兩字節(jié)數(shù)據(jù)到芯片0地址,再讀出來校驗(yàn),
; 若校驗(yàn)通過則蜂鳴器響一聲,否則不斷地蜂鳴報(bào)警。
; 說明:將跳線器JP9短接,JP4斷開。
;******************************************************************************
INCLUDE LPC2294.INC
EXPORT MAIN
BEEPCON EQU 0x00000080 ; P0.7引腳控制B1,低電平蜂鳴
FLASH_ADDR EQU 0x81000000 ; FLASH的起始地址(分配為Bank1塊)
ADDR_5555H EQU (FLASH_ADDR|0xAAAA) ; 由于SST39VF160的A0是與LPC2210的A1相連,所以0x5555要左移1位。
ADDR_2AAAH EQU (FLASH_ADDR|0x5554) ; 由于SST39VF160的A0是與LPC2210的A1相連,所以0x2AAA要左移1位。
AREA SST39VF160C,CODE,READONLY ; 聲明程序代碼塊
ENTRY ; 程序入口
MAIN LDR R0,=PINSEL0 ; 裝載寄存器地址,PINSEL0
MOV R1,#0x00000000 ; 設(shè)置數(shù)據(jù),即設(shè)置管腳連接GPIO
STR R1,[R0] ; R1 -> [R0]
LDR R0,=PINSEL1
STR R1,[R0]
LDR R0,=IO0DIR
LDR R1,=BEEPCON
STR R1,[R0] ; 設(shè)置BEEP控制口為輸出
BL FLASH_ERASE
CMP R0,#1
BNE OP_ERR
LDR R0,=0
LDR R1,=0x55AA
BL FLASH_WRITE
CMP R0,#1
BNE OP_ERR
LDR R1,=BEEPCON ; 設(shè)置GPIO控制參數(shù)
BEEPCLR LDR R0,=IO0CLR
STR R1,[R0] ; BEEP控制I/O復(fù)位
BL DELAYS
BL DELAYS
BL DELAYS
BL DELAYS
BEEPSET LDR R0,=IO0SET
STR R1,[R0] ; BEEP控制I/O置位
BL DELAYS
B .
OP_ERR LDR R1,=BEEPCON ; 設(shè)置GPIO控制參數(shù)
LDR R0,=IO0CLR
STR R1,[R0] ; BEEP控制I/O復(fù)位
BL DELAYS
LDR R0,=IO0SET
STR R1,[R0] ; BEEP控制I/O置位
BL DELAYS
B OP_ERR
;******************************************************************************
; 名稱:FLASH_WRITE
; 功能:半字(16位)數(shù)據(jù)編程。
; 入口參數(shù):R 0 編程地址(SST39VF160內(nèi)部地址)
; R1 編程數(shù)據(jù)(低16位有效)
; 出口參數(shù):R0 為1時(shí)表示操作成功,為0時(shí)表示操作失敗
; 占用資源:R0、R1、R2、R3
;******************************************************************************
FLASH_WRITE
MOV R2,R0 ; 將編程地址復(fù)制到R2
MOV R3,R1 ; 將編程數(shù)據(jù)復(fù)制到R3
LDR R0,=ADDR_5555H
MOV R1,#0xAA
STRH R1,[R0] ; 第一個(gè)寫周期,地址0x5555,數(shù)據(jù)0xAA
LDR R0,=ADDR_2AAAH
MOV R1,#0x55
STRH R1,[R0] ; 第二個(gè)寫周期,地址0x2AAA,數(shù)據(jù)0x55
LDR R0,=ADDR_5555H
MOV R1,#0xA0
STRH R1,[R0] ; 第三個(gè)寫周期,地址0x5555,數(shù)據(jù)0xA0
LDR R0,=FLASH_ADDR
LDR R1,=0x1FFFFF
AND R2,R2,R1
ADD R0,R0,R2
STRH R3,[R0] ; 第四個(gè)寫周期,地址Addr,數(shù)據(jù)Data
WAIT_WRITE LDRH R1,[R0] ; 等待操作完成 (若編程操作沒有完成,每次讀操作DQ6會(huì)跳變)
LDRH R2,[R0]
CMP R1,R2
BNE WAIT_WRITE
CMP R1,R3
MOVEQ R0,#1
MOVNE R0,#0
MOV PC,LR
;******************************************************************************
; 名稱:FLASH_ERASE
; 功能:芯片全片擦除。
; 入口參數(shù):無
; 出口參數(shù):R0 為1時(shí)表示操作成功,為0時(shí)表示操作失敗
; 占用資源:R0、R1、R2
;******************************************************************************
FLASH_ERASE
LDR R0,=ADDR_5555H
MOV R1,#0xAA
STRH R1,[R0] ; 第一個(gè)寫周期,地址0x5555,數(shù)據(jù)0xAA
LDR R0,=ADDR_2AAAH
MOV R1,#0x55
STRH R1,[R0] ; 第二個(gè)寫周期,地址0x2AAA,數(shù)據(jù)0x55
LDR R0,=ADDR_5555H
MOV R1,#0x80
STRH R1,[R0] ; 第三個(gè)寫周期,地址0x5555,數(shù)據(jù)0x80
MOV R1,#0xAA
STRH R1,[R0] ; 第四個(gè)寫周期,地址0x5555,數(shù)據(jù)0xAA
LDR R0,=ADDR_2AAAH
MOV R1,#0x55
STRH R1,[R0] ; 第五個(gè)寫周期,地址0x2AAA,數(shù)據(jù)0x55
LDR R0,=ADDR_5555H
MOV R1,#0x10
STRH R1,[R0] ; 第六個(gè)寫周期,地址0x5555,數(shù)據(jù)0x10
WAIT_ERASE LDRH R1,[R0] ; 等待操作完成 (若擦除操作沒有完成,每次讀操作DQ6會(huì)跳變)
LDRH R2,[R0]
CMP R1,R2
BNE WAIT_ERASE
LDR R2,=0xFFFF
CMP R1,R2
MOVEQ R0,#1
MOVNE R0,#0
MOV PC,LR
;******************************************************************************
; 名稱:DELAYS
; 功能:軟件延時(shí)
; 入口參數(shù):無
; 出口參數(shù):無
; 占用資源:R7
;******************************************************************************
DELAYS
MOV R7,#0x00005F00 ; 延時(shí)參數(shù)
DELAYS_L1 SUBS R7,R7,#1 ; R7 = R7-1
BNE DELAYS_L1 ; 判斷R7-1結(jié)果是否為0,若不為0則跳轉(zhuǎn)
MOV PC,LR ; 返回
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -