歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OK6410匯編程序練習

嘗試使用一下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

Copyright © Linux教程網 All Rights Reserved