📄 flashstr.asm
字号:
;============================================================================;
; Project : Startup Code, Trap Functions for Hyflash ControlProgram ;
; Module : FLASHSTR.ASM ;
; ;
; Copyright : hyperstone AG ;
; Line Eid Stra醗 3 ;
; D-78467 Konstanz, Germany ;
; ;
; Date : January 26, 2004 ;
;============================================================================;
include "FLASHSTR.INC"
include "SYSCONST.INC"
include "SAMSUNG.INC"
include "PCMRTK.INC"
LED EQU 0
ROM_ACTIVE EQU 1
XREF _main
XREF _ClockDown
XREF _CopyBuffer
XREF _AnchorBuffer
XREF _SaveAnchorBuffer
XREF G7Base
XREF G8Base
XREF _ResetCardEntry
XREF _UpdateFCRTrapEntry
XREF _UpdateMCRTrapEntry
XREF _SetTimer
XREF _WriteSectorBuffer
XREF _ChipSelectSkipOpcTrapEntry
XREF _ChipSelectTrapEntry
XREF _FlashIdleTrapEntry
XREF _SetOpcTrapEntry
XREF _SetAddrTrapEntry
XREF _PollForReadyTrapEntry
XREF _ReadStatusTrapEntry
XREF _ReadWordTrapEntry
XREF _WriteWordTrapEntry
XREF _WaitForReadyTrapEntry
XREF _SetOverlappedTrapEntry
XREF _WriteChunkTrapEntry
XREF _ReadChunkTrapEntry
XREF _ReadSectorFromFlash
XREF _ReadDeviceIdTrapEntry
XREF _WriteSectorToFlash
XREF _SectorToPageTrapEntry
XREF _NextSectorTrapEntry
XREF _SetColumnTrapEntry
XREF _ClearSectorTrapEntry
XREF _PcmciaInterruptEntry
XREF _FlashReadyInterruptEntry
XREF _FlashReadyInterruptEntryForRemap
XREF PowerDown
XREF TimerInterruptEntry
XREF WaitGuardEntry
XREF WaitGuardMaxEntry
XREF DelayByTrapEntry
XREF _UpdateBCRTrapEntry
XREF _FlashIdle1TrapEntry
XREF _FlashReadyInterrupt2Entry
if defined(SD) || defined(MMC)
XREF _CommandCode
endif
SEGMENT SysTableSegment
SysTrap63: ADDI PC, #Main-PC
SysTrap62: MOVI PC, #_ResetCardEntry
SysTrap61: ADDI PC, #UninitializedIntEntry-PC
SysTrap60: ADDI PC, #UninitializedIntEntry-PC
SysTrap59: ADDI PC, #UninitializedIntEntry-PC
SysTrap58: ADDI PC, #UninitializedIntEntry-PC
SysTrap57: ADDI PC, #UninitializedIntEntry-PC
SysTrap56: ADDI PC, #UninitializedIntEntry-PC
SysTrap55: MOVI PC, #TimerInterruptEntry
SysTrap54: ADDI PC, #UninitializedIntEntry-PC
SysTrap53: MOVI PC, #_PcmciaInterruptEntry
SysTrap52: MOVI PC, #_FlashReadyInterrupt2Entry
SysTrap51: ADDI PC, #UninitializedIntEntry-PC
SysTrap50: ADDI PC, #UninitializedIntEntry-PC
ifdef REMAP
SysTrap49: MOVI PC, #_FlashReadyInterruptEntryForRemap
else
SysTrap49: MOVI PC, #_FlashReadyInterruptEntry
endif
SysTrap48: ADDI PC, #UninitializedIntEntry-PC
SysTrap47: MOVI PC, #WaitGuardEntry
SysTrap46: MOVI PC, #WaitGuardMaxEntry
SysTrap45: MOVI PC, #_FlashIdle1TrapEntry
SysTrap44: MOVI PC, #DelayByTrapEntry
if !(defined(HITACHI) || defined(HITA256) || defined(HITA512))
SysTrap43: ADDI PC, #_ChipSelectSkipOpcTrapEntry-PC
else
SysTrap43: ADDI PC, #UninitializedIntEntry-PC
endif
SysTrap42: MOVI PC, #_UpdateFCRTrapEntry
SysTrap41: MOVI PC, #_UpdateMCRTrapEntry
SysTrap40: MOVI PC, #_UpdateBCRTrapEntry
SysTrap39: MOVI PC, #_ChipSelectTrapEntry
SysTrap38: MOVI PC, #_FlashIdleTrapEntry
SysTrap37: MOVI PC, #_SetOpcTrapEntry
SysTrap36: MOVI PC, #_SetAddrTrapEntry
SysTrap35: MOVI PC, #_PollForReadyTrapEntry
SysTrap34: MOVI PC, #_ReadStatusTrapEntry
SysTrap33: MOVI PC, #_ReadWordTrapEntry
SysTrap32: MOVI PC, #_WriteWordTrapEntry
SysTrap31: MOVI PC, #_WaitForReadyTrapEntry
SysTrap30: MOVI PC, #_SetOverlappedTrapEntry
SysTrap29: MOVI PC, #_WriteChunkTrapEntry
SysTrap28: MOVI PC, #_ReadChunkTrapEntry
SysTrap27: MOVI PC, #_ReadSectorFromFlash
SysTrap26: MOVI PC, #_ReadDeviceIdTrapEntry
SysTrap25: MOVI PC, #_SectorToPageTrapEntry
if !(defined(HITACHI) || defined(HITA256) || defined(HITA512))
SysTrap24: MOVI PC, #_NextSectorTrapEntry
SysTrap23: MOVI PC, #_SetColumnTrapEntry
SysTrap22: MOVI PC, #_ClearSectorTrapEntry
endif
if defined(SD) || defined(MMC)
SysTrap21: D.WU _CommandCode
endif
ifdef REMAP
XREF _RegisterErrorTrapEntry
SysTrap20: MOVI PC, #_RegisterErrorTrapEntry
endif
XDEF _FirmwareVersion
_FirmwareVersion:
Version: D.Bc[8] "040409CD"
ifdef SD
ifdef B128
D.Bc[4] " SD8"
else
D.Bc[4] " SD "
endif
endif
ifdef MMC
D.Bc[4] " MMC"
endif
SEGMENT StackSegment
STACK_SIZE EQU 128
Stack: D.WU[STACK_SIZE] [STACK_SIZE]$aa55aa55
StackEnd:
if LED
SEGMENT trapcode
XDEF _SetRedLed
XDEF _SetGreenLed
XDEF _ClearRedLed
XDEF _ClearGreenLed
MCR_ADDR EQU $000013B8 | (4 << 13)
_SetRedLed: FRAME L3, L0
LDW.IOA 0, L2, MCR_ADDR
ORI L2, 1<<2
STW.IOA 0, L2, MCR_ADDR
RET PC, L0
_SetGreenLed:
FRAME L3, L0
LDW.IOA 0, L2, MCR_ADDR
ORI L2, 1<<3
STW.IOA 0, L2, MCR_ADDR
RET PC, L0
_ClearRedLed:
FRAME L3, L0
LDW.IOA 0, L2, MCR_ADDR
ANDNI L2, 1<<2
STW.IOA 0, L2, MCR_ADDR
RET PC, L0
_ClearGreenLed:
FRAME L3, L0
LDW.IOA 0, L2, MCR_ADDR
ANDNI L2, 1<<3
STW.IOA 0, L2, MCR_ADDR
RET PC, L0
endif
SEGMENT trapcode
;============================================================================;
; Function : UninitializedInterrupt ;
;============================================================================;
UninitializedIntEntry:
if LED
if 1
frame L6,L0
LDW.IOA 0, L3, 150994952 ;read_isr
MOVI L4, 1<<11 ; need Addressbus for Leds
MOVI L5, 0
UpdateFCR
LDW.IOA 0, L5, MCR_ADDR ; Red Led
ORI L5, 1<<2
STW.IOA 0, L5, MCR_ADDR
movi L4, $4000f000
stw.p L4, L0
stw.p L4, L1
;stw.p L4, L3 ; isr
stw.p L4, G14 ; DebugAddress
stw.p L4, G2 ; NumberOfTwins
stw.p L4, G3 ; ErrorReg
stw.p L4, G4 ; StatusReg
stw.p L4, G6 ; EventFlags
stw.p L4, G7 ; BaseReg
stw.p L4, G10 ; BCR
stw.p L4, G9 ; TwinEntry
stw.p L4, G13 ; OverlappedFlags
setadr L3
stw.p L4, L3 ; StackAddr
loop:
Ldw.s L3, L5, 0
addi L3, -4
stw.p L4, L5
cmpi L4, $4000f200
bne loop
else
SECTOR_NUMBER EQU $1ffe0
;MCR_ADDR EQU $000013B8 | (4 << 13)
LDW.IOA 0, G6, MCR_ADDR ; Red Led
ORI G6, 1<<2
STW.IOA 0, G6, MCR_ADDR
xref _ERASE_COUNT
xref _WriteSector
xref _ReadSectorFromFlash
xref _ChunkTab
frame L8,L0
movi L3, SECTOR_NUMBER+2
movi L4, $c0003c00
movi L5, _ChunkTab
movi L6, WITH_ECC
movi L7, $12345678
call L8, 0, #_WriteSector
movi L4, $c0003c00
stw.p L4, L0
stw.p L4, G2
stw.p L4, G9
setadr L3
stw.p L4, L3
loop:
Ldw.s L3, L5, 0
addi L3, -4
stw.p L4, L5
cmpi L4, $c0003e00
bne loop
movi L4, -1
stw.a 0, L4, #_ERASE_COUNT
movi L3, SECTOR_NUMBER
movi L4, $c0003c00
movi L5, _ChunkTab
movi L6, WITH_ECC
movi L7, $12345678
call L8, 0, #_WriteSector
movi L3, SECTOR_NUMBER+1
movi L4, #_AnchorBuffer
movi L5, _ChunkTab
movi L6, WITH_ECC
movi L7, $12345678
call L8, 0, #_WriteSector
movi L0, SECTOR_NUMBER-32
movi L1, $c0000000
movi L2, 32
loop1:
movd L3, L0
movi L5, _ChunkTab
movi L6, WITH_ECC
movi L7, $12345678
call L8, 0, #_WriteSector
addi L0, 1
addi L1, 512
addi L2, -1
bne loop1
movi L3, 0
movi L4, $c0003c00
call L5, 0, #_ReadSectorFromFlash
movi L3, 0
movi L4, $c0003c00
stw.r L4, 0
movi L5, _ChunkTab
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -