📄 intvecs.asm.aptix
字号:
MIF_CS1_reg .word 0xFFFECC14MIF_CS2_reg .word 0xFFFECC18MIF_CS3_reg .word 0xFFFECC1CARM_IDLECT2_reg .word 0xFFFECE08ARM_RSTCT2_reg .word 0xFFFECE14MIF_DIV_BY2_MASK .word 0x00000001 ARM_CKCTL_reg .word 0xFFFECE00; bit 1 set to 1 allow to set ARM Peripheral clock divider by 4; bit 2 set to 1 allow to set LCD clock divider by 2; bit 4 set to 0 allow to set ARM clock divider by 1; bit 8 set to 1 allow to set TC clock divider by 2; bit 12 set to 1 allow to set TIMER clock divider by 2; bit 13 set to 0 allow to turn off DSP clock; bit 14 set to 1 allow to use ARM clock and not TC clock for interrupt handler;;; ARM_CKCTL_val .word 0x00005106;;; Modify by FVDB (12/04/02) to match DSP MMU at 100MhzARM_CKCTL_val .word 0x00005506 AddrDpll .word 0xFFFECF00;ValueDpll .word 0x00003E32 ;; [b 0011_(1110_0)(01)1_0010] : mult 28 ------ div 2 for 168MHz ;; multp divValueDpll .word 0x00003812 ;; [b 0011_(1000_0)(00)1_0010] : mult 16 ------ div 1 for 192MHz; ;; multp div;ValueDpll .word 0x00003892 ;; [b 0011_(1000_1)(00)1_0010] : mult 17 ------ div 1 for 204MHz ;; multp div;ValueDpll .word 0x00003A32 ;; mult 20 ------ div 2;ValueDpll .word 0x00003F52 ;; mult 30 ------ div 3ulpd_cam_clk_ctrl_addr .word 0xFFFE087Cconf_pull_dwn_ctrl_4_addr .word 0xFFFE10AC .text .state32 ;; INT_Swi(unsigned stack, unsigned stackSize); R0 R1;; Enable exception and set up a stack; Works only if called from 16-bit (THUMB) mode;;INT_Swi: LDRH r4, [LR, #-2] ; retrieve SWI parameter AND r4, r4, #0xFF ; keep the argument only CMP r4, #0xFA BEQ SetSupervisor CMP r4, #0xFB BEQ SetUser CMP r4, #0xFC BEQ EnableFIQ CMP r4, #0xFD BEQ EnableIRQ CMP r4, #0xF5 BEQ Set_SVC_Stack CMP r4, #0xF4 BEQ Set_AbortD_Stack CMP r4, #0xF0 BEQ SetIRQBit CMP r4, #0xF1 BEQ ClearIRQBit CMP r4, #0xF2 BEQ SetFIQBit CMP r4, #0xF3 BEQ ClearFIQBit B ExitSwi ; not handled SetSupervisor: MRS r7, SPSR ; Take a copy of Program Status Register BIC r7,r7,#MODE_MASK ; Clear the mode bits ORR r7,r7,#SUP_MODE ; Set Supervisor Mode MSR SPSR, r7 ; Write back the modified SPSR B ExitSwi ; not handled SetUser: MRS r7, SPSR ; Get copy of Program Status Register BIC r7, r7, #MODE_MASK ; Clear mode bits ORR r7, r7, #USR_MODE ; Set User Mode MSR SPSR, r7 ; Write back modified SPSR B ExitSwi ; not handledEnableIRQ: MOV r5, #IRQ_MODE MOV r6, #IRQ_MASK B DoItEnableFIQ: MOV r5, #FIQ_MODE MOV r6, #FIQ_MASK B DoItSet_SVC_Stack: ;STACK MANIPULATION MOV SP, r0 ; stack address MOV r1,r1,lsl #2 ; convertion from word size to byte size ADD SP, r1, SP ; add size to get initial SP B ExitSwiSet_AbortD_Stack: MRS r2, CPSR BIC r2, r2, #MODE_MASK ORR r2, r2, #ABORT_MODE MSR CPSR, r2 ; set abort mode ;STACK MANIPULATION MOV SP, r0 ; stack address MOV r1,r1,lsl #2 ; convertion from word size to byte size ADD SP, r1, SP ; add size to get initial SP BIC r2, r2, #MODE_MASK ORR r2, r2, #SUP_MODE MSR CPSR, r2 ; restore supervisor mode B ExitSwi SetIRQBit: MOV r5, #IRQ_MASK MOV r6, #SET_BIT B SetClearFIQIRQClearIRQBit: MOV r5, #IRQ_MASK MOV r6, #CLEAR_BIT B SetClearFIQIRQ SetFIQBit: MOV r5, #FIQ_MASK MOV r6, #SET_BIT B SetClearFIQIRQClearFIQBit: MOV r5, #FIQ_MASK MOV r6, #CLEAR_BIT B SetClearFIQIRQSetClearFIQIRQ: MRS r7, SPSR ; read saved PSR BIC r7, r7, r5 ; clear FIQ or IRQ bit of saved PSR CMP r6, #CLEAR_BIT ; if equal to #CLEAR_BIT BEQ STORE_SPSR ; do not set any bit of saved PSR ORR r7, r7, r5 ; set FIQ or IRQ bit of saved PSRSTORE_SPSR: MSR SPSR, r7 ; store saved PSR to set or clear FIQ or IRQ bit B ExitSwi DoIt: ;Set FIQ or IRQ mode before reset I/F bit to prevent interruption MRS r4, CPSR ; read current PSR BIC r4,r4,#MODE_MASK ; remove all mode bits ORR r4,r4,r5 ; set desired mode MSR CPSR, r4 ; set current mode to disable FIQ or IRQ catch ;STACK MANIPULATION MOV SP, r0 ; stack address MOV r1,r1,lsl #2 ; convertion from word size to byte size ADD SP, r1, SP ; add size to get initial SP BIC r4,r4,#MODE_MASK ; remove all mode bits ORR r4,r4,#SUP_MODE MSR CPSR, r4 ; reset supervisor mode MRS r4,SPSR ; read stored status reg BIC r4,r4,r6 ; Enable exception MSR SPSR,r4 ; set stored status regExitSwi: MOVS PC, R14 ; return from SWI .state16$INT_SetSupervisor MOV r3, LR SWI #0xFA ; 0xFA : Enable INT_Swi MOV PC, r3 $INT_SetUser: MOV r3, LR SWI #0xFB ; 0xFB : Enable INT_Swi MOV PC, r3 ;; INT_EnableIRQ(unsigned stack, unsigned stackSize); R0 R1;; Enable IRQ and set up a stack - perform SWI to switch to supervisor mode;$INT_EnableIRQ: MOV r3, LR SWI #0xFD ; 0xFD : Enable IRQ MOV PC, r3 ;; INT_EnableFIQ(unsigned stack, unsigned stackSize); R0 R1;; Enable FIQ and set up a stack - perform SWI to switch to supervisor mode;$INT_EnableFIQ: MOV r3, LR SWI #0xFC ; 0xFE : Enable FIQ MOV PC, r3;; INT_Set_SVC_Stack(unsigned stack, unsigned stackSize); R0 R1;; Set up a stack for supervisor mode - perform SWI to switch to supervisor mode;$INT_Set_SVC_Stack: MOV r3, LR SWI #0xF5 ; 0xF5 : Set Supervisor Stack MOV PC, r3 ;; INT_Set_SVC_Stack(unsigned stack, unsigned stackSize); R0 R1;; Set up a stack for supervisor mode - perform SWI to switch to supervisor mode;$INT_Set_AbortD_Stack: MOV r3, LR SWI #0xF4 ; 0xF4 : Set AbortD Stack MOV PC, r3 ;; INT_SetIRQBit;; Set IRQ bit of PSR (Program Status Register); (Disable IRQ);$INT_SetIRQBit: MOV r3, LR SWI #0xF0 ; 0xF0 : Set IRQ Bit of PSR MOV PC, r3 ;; INT_ClearIRQBit;; Clear IRQ bit of PSR (Program Status Register); (Enable IRQ);$INT_ClearIRQBit: MOV r3, LR SWI #0xF1 ; 0xF1 : Clear IRQ Bit of PSR MOV PC, r3 ;; INT_SetFIQBit;; Set FIQ bit of PSR (Program Status Register); (Disable FIQ);$INT_SetFIQBit: MOV r3, LR SWI #0xF2 ; 0xF2 : Set FIQ Bit of PSR MOV PC, r3 ;; INT_ClearFIQBit;; Clear FIQ bit of PSR (Program Status Register); (Enable FIQ);$INT_ClearFIQBit: MOV r3, LR SWI #0xF3 ; 0xF3 : Clear FIQ Bit of PSR MOV PC, r3 .end ; Terminate assembly
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -