嘗試使用一下6410的匯編,發現跟當年的51差不多,一步一步的學習
;*************************************************************************************************************
;* 文件名: ok6410.s
;* 功能: S3C6410 匯編
;* 作者: [email protected]
;* 創建時間: 2013年1月4日21:27
;* 最後修改時間:2013年1月4日
;* 詳細:
;*************************************************************************************************************/
TINT_CSTAT EQU 0x7F006044 ;定時器中斷控制和狀態寄存器
VIC0ADDRESS EQU 0x71200F00 ;當前矢量地址寄存器0,寫入任意數據清除中斷
VIC1ADDRESS EQU 0x71300F00 ;當前矢量地址寄存器1,寫入任意數據清除中斷
;調用外部函數
IMPORT LED1_flash ;LED1閃爍程序
;外部調用函數
EXPORT Time_Isr ;時鐘中斷服務程序
PRESERVE8;
AREA S3C6410_CPU, CODE, READONLY
;定時器1中斷服務程序,注意:進入中斷後6410自動切換為IRQ模式,並關閉了IRQ中斷,退出的時候需要自己開啟,或者還原CPSR
Time_Isr
STMFD SP!, {R0,R1,LR} ;R0,R1,LR入棧
LDR R0, =TINT_CSTAT
LDR R1, [R0] ;讀取寄存器 TINT_CSTAT
ORR R1, R1, #0x01<<6 ;寫BIT6,清除定時器1中斷
STR R1, [R0] ;回寫寄存器
BL LED1_flash ;調用LED閃爍程序
LDR R0, =VIC0ADDRESS ;寫VIC的當前中斷地址寄存器清除中斷
LDR R1, =0xffffffff
STR R1, [R0]
LDR R0, =VIC1ADDRESS
STR R1, [R0]
LDMFD SP!, {R0,R1,LR} ;R0,R1,LR出棧
;之前使用SUB,發現程序從中斷退出後並沒有從SPSR恢復,也就是中斷屏蔽沒有去除,添加-S後,這條指令會影響CPSR中標志位,在這也就是恢復了SPSR_IRQ到CRSP
SUBS PC, LR, #4 ;從中斷程序中退出,LR需要減4放入PC,子程序調用則不需要-4,應該是由於流水線的指令預取造成的
END