Files
yanghongfeng f25132cbe3 修复开关控制组控的控制异常问题
修改PB开关状态组控处理,解决后32路的开关状态会复用上前32个回路的数据
2026-01-19 15:35:56 +08:00

214 lines
3.7 KiB
ArmAsm

//start from __start,
//(0)initialize vector table
//(1)initialize all registers
//(2)prepare initial reg values for user process
//(3)initialize supervisor mode stack pointer
//(4)construct ASID Table
//(5)prepare PTE entry for user process start virtual address
//(6)creat a mapping between VPN:0 and PFN:0 for kernel
//(7)set VBR register
//(8)enable EE and MMU
//(9)jump to the main procedure using jsri main
#define UserOption 0x55aa0005
.export vector_table
//.import VecTable
.align 10
vector_table: //totally 256 entries
// .long __start
// .rept 128
// .long __dummy
// .endr
.long __start
.long MisalignedHandler
.long AccessErrHandler
.long DummyHandler
.long IllegalInstrHandler
.long PriviledgeVioHandler
.long DummyHandler
.long BreakPointHandler
.long UnrecExecpHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long Trap0Handler
.long Trap1Handler
.long Trap2Handler
.long Trap3Handler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long DummyHandler
.long PendTrapHandler
.long CORETHandler
.long SYSCONIntHandler
.long IFCIntHandler
.long ADCIntHandler
.long EPT0IntHandler
.long DummyHandler//EPT0EMIntHandler
.long WWDTHandler
.long EXI0IntHandler
.long EXI1IntHandler
.long GPT0IntHandler
.long DummyHandler//GPT1IntHandler
.long DummyHandler
.long RTCIntHandler
.long UART0IntHandler
.long UART1IntHandler
.long UART2IntHandler//USARTIntHandler
.long DummyHandler
.long I2CIntHandler
.long DummyHandler
.long SPI0IntHandler
.long SIO0IntHandler
.long EXI2to3IntHandler
.long EXI4to9IntHandler
.long EXI10to15IntHandler
.long CNTAIntHandler
.long TKEYIntHandler
.long LPTIntHandler
.long DummyHandler//LEDIntHandler
.long BT0IntHandler
.long BT1IntHandler
.long DummyHandler//BT2IntHandler
.long DummyHandler//BT3IntHandler
.long UserOption
.text
.export __start
.long 0x00000000
.long 0x00000000
// .long __start
__start:
//initialize all registers
movi r0, 0
movi r1, 0
movi r2, 0
movi r3, 0
movi r4, 0
movi r5, 0
movi r6, 0
movi r7, 0
//movi r8, 0
//movi r9, 0
//movi r10, 0
//movi r11, 0
//movi r12, 0
//movi r13, 0
//movi r14, 0
//movi r15, 0
//set VBR
lrw r2, vector_table
mtcr r2, cr<1,0>
//enable EE bit of psr
mfcr r2, cr<0,0>
bseti r2, r2, 8
mtcr r2, cr<0,0>
////set rom access delay
// lrw r1, 0xe00000
// lrw r2, 0x7
// st.w r2, (r1,0x0)
////enable cache
// lrw r1, 0xe000f000
// movi r2, 0x2
// st.w r2, (r1,0x0)
// lrw r2, 0x29
// st.w r2, (r1,0x4)
// movi r2, 0x1
// st.w r2, (r1,0x0)
//disable power peak
lrw r1, 0xe000ef90
movi r2, 0x0
st.w r2, (r1, 0x0)
//initialize kernel stack
lrw r7, __kernel_stack
mov r14,r7
subi r6,r7,0x4
//lrw r3, 0x40
lrw r3, 0x04
subu r4, r7, r3
lrw r5, 0x0
INIT_KERLE_STACK:
addi r4, 0x4
st.w r5, (r4)
//cmphs r7, r4
cmphs r6, r4
bt INIT_KERLE_STACK
__to_main:
lrw r0,__main
jsr r0
mov r0, r0
mov r0, r0
lrw r15, __exit
lrw r0,main
jmp r0
mov r0, r0
mov r0, r0
mov r0, r0
mov r0, r0
mov r0, r0
.export __exit
__exit:
lrw r4, 0x20003000
//lrw r5, 0x0
mov r5, r0
st.w r5, (r4)
mfcr r1, cr<0,0>
lrw r1, 0xFFFF
mtcr r1, cr<11,0>
lrw r1, 0xFFF
movi r0, 0x0
st r1, (r0)
.export __fail
__fail:
lrw r1, 0xEEEE
mtcr r1, cr<11,0>
lrw r1, 0xEEE
movi r0, 0x0
st r1, (r0)
__dummy:
br __fail
.export DummyHandler
DummyHandler:
br __fail
.data
.align 10
.long __start