音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

告別在21ic只問(wèn)問(wèn)題的日子,原創(chuàng)swi軟件中斷理解分析

作者:paulsimons 欄目:ARM技術(shù)
告別在21ic只問(wèn)問(wèn)題的日子,原創(chuàng)swi軟件中斷理解分析
Swi軟件中斷理解
什么是軟件中斷不說(shuō)了,自己看書去,直接切入主題

以sh.c中的G_action()為例
其調(diào)用swi_run(0x200,address),通過(guò)platform.h中的
__swi(SemiSWI) void swi_run(int op, int addr)調(diào)用,傳遞的參數(shù)0x200和address在軟件中斷服務(wù)程序中會(huì)使用,R0會(huì)被傳入0x200,R1傳入address,SemiSWI為軟件中斷號(hào).
在PC得到swi的信號(hào)的時(shí)候,pc立即跳轉(zhuǎn)到0x08地址,通常這個(gè)地址范圍在cpu啟動(dòng)的時(shí)候會(huì)擺放異常中斷處理程序,對(duì)應(yīng)軟件中斷應(yīng)該是一條跳轉(zhuǎn)指令,
    Vectors.s文件
……
LDR PC,Swi_Addr
……
Swi_Addr    DCD    TrapSwi    ;在Swi_Addr中擺放了TrapSwi的地址

TrapSwi是Switrap.s文件中的一個(gè)段,用來(lái)解析不同的軟件中斷
INCLUDE except_h.s
    EXPORT    TrapSWI        
    IMPORT    uputchar
    IMPORT  print_sys_buf
    IMPORT     fil_sys_buf
    IMPORT     clock, WEAK
    IMPORT  FileCount    
    IMPORT    heap_info    
    IMPORT    semi_stack    
    IMPORT command_buffer
THUMB_AWARE    EQU    1
AIC_IMR        EQU 0xFFF82114
AIC_MECR    EQU    0xFFF82120
AIC_MDCR    EQU    0xFFF82124

    AREA    Traps, CODE, READONLY
; SWI handler
TrapSWI

    STMFD    sp!, {r0-r1}        ;保護(hù)寄存器R0,R1防止被修改
    LDR    r0, [lr, #-4]            ;得到swi指令的數(shù)據(jù)
    BIC    r0, r0, #0xff000000        ;取出低24位
    LDR    r1, =SWI_Angel            
    CMP    r0, r1                    比較軟件中斷號(hào)
    LDMFD    sp!, {r0-r1}        ;彈出R0,R1
    BNE    ExitSWI                    ;如果不是正確的軟件中斷號(hào)則跳入SWI結(jié)束程序
;根據(jù)R0也就是swi_run的第一個(gè)參數(shù)判斷是哪種中斷程序
    CMP    r0, #angel_SWIreason_EnterSVC
    BEQ    SWIEnterOS    

    CMP r0, #SYS_FILE_OPEN
    BEQ Sys_FileOpenSWI

    CMP r0, #SYS_READ_SWI
    BEQ Sys_ReadSWI

    CMP r0, #SYS_WRITE_SWI
    BEQ Sys_WriteSWI

    CMP r0, #angel_SWI_SYS_WRITEC
    BEQ ttywrch_SWI

    CMP r0, #SYS_CLOCK
    BEQ readtime_SWI

    CMP r0, #0x200
    BEQ sh_run_SWI

    CMP r0, #0x18
    BEQ sh_return_SWI
    
    CMP r0, #0x15
    BEQ sh_get_command_SWI
    
    CMP    r0, #angel_SWI_SYS_HEAPINFO
    BNE    ExitSWI        
    
    STMFD    sp!, {r0-r4}
    LDR    r0, [r1]        
    LDR    r4, =heap_info
    LDR    r3, [r4], #4    ; heap_base
    LDR    r2, [r4], #4    ; heap_limit
    STR    r3, [r0], #4    ; heap_limit
    STR    r2, [r0], #4    ; heap_base
    LDR    r2, [r4], #4    ; stack_base
    LDR    r3, [r4], #4    ; stack_limit
    STR    r2, [r0], #4    ; stack_base  
    STR    r3, [r0]        
    LDMFD    sp!, {r0-r4}        

ExitSWI
    MOV    r0, #0            
    MOVS    pc, lr            

      
SWIEnterOS
    STMFD    sp!, {r0}
    MRS    r0, SPSR        
    TST    r0, #PSR_T_bit        
    ORRNE    r0, r0, #0x13        
    MSRNE    SPSR_cxsf, r0        
    LDMFD    sp!, {r0}        
    MOVNES    pc, lr
    MOV    pc, lr

Sys_FileOpenSWI
    STMFD    sp!, {r4, lr}
    LDR    r0, =FileCount
    LDR    r4, [r0]        
    STR    r4, [r0]
    CMP    r4, #0x03        
    MOVGT    r0, #0xffffffff
    MOVLT    r0, #0x00000000
    LDMFD    sp!, {r4, lr}        
    MOVS    pc, lr

ttywrch_SWI
    STMFD    sp!, {r0, lr}
    LDR    r0, [r1]
    BL    uputchar        
    LDMFD    sp!, {r0, lr}        
    MOVS    pc, lr

Sys_WriteSWI
    STMFD    sp!, {r1-r3, lr}
    ;MOV    r0, r2
    LDR    
2樓: >>參與討論
hotpower
好~~~
 
3樓: >>參與討論
paulsimons
自己支持一下
自己支持一下

4樓: >>參與討論
weixiao11
只對(duì)概念知道皮毛,但是還要頂
支持有共享精神的網(wǎng)友

5樓: >>參與討論
BlankHeart
我一直只知道是軟件中斷,也沒(méi)有去搞清楚是什么樣.
只是套著用,也好好的.嘿嘿.
現(xiàn)在還是不明白.

6樓: >>參與討論
twentyone
re
THX A LOT

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
為個(gè)人學(xué)習(xí)量身打造H9200E AT91RM9200開發(fā)板
深圳遠(yuǎn)峰公司新人報(bào)到
哪位仁兄能推薦一款不是小日本產(chǎn)的液晶?
一個(gè)關(guān)于字庫(kù)的問(wèn)題請(qǐng)教
求教ads1.2的使用
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)