亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? reentrant_irq.s

?? T-Kernel下PCF8563的驅(qū)動程序開發(fā)
?? S
字號:
;********************************************************************************
;*                                                                              *
;*    Copyright (C) 2001-2002 Oki Electric Industry Co., LTD.                   *
;*                                                                              *
;*    System Name    :  uPLAT series                                            *
;*    Module Name    :  Reentrant irq handler routine                           *
;*    File   Name    :  reentrant_irq_handler.s                                 *
;*    Revision       :  01.10                                                   *
;*    Date           :  2001/12/20 initial version                              *
;*                      2002/12/02 add checking 'I' bit of spsr                 * 
;*                                                                              *
;********************************************************************************

        AREA    REENTRANT_IRQ, CODE, READONLY

;   <<< bit field of status registers (CPSR, SPSR) >>>
;   31  30  29  28        7   6   5   4   3   2   1   0
; +---+---+---+---+-----+---+---+---+---+---+---+---+---+
; | N | Z | C | V | - - | I | F | T | M4| M3| M2| M1| M0|
; +---+---+---+---+-----+---+---+---+---+---+---+---+---+
; M0-M4 10010 : IRQ mode
;       11111 : SYSTEM mode
;   T       0 : ARM mode
;           1 : THUMB mode
;   F       0 : FIQ is allowed
;           1 : FIQ is not allowed
;   I       0 : IRQ is allowed
;           1 : IRQ is not allowed
; N,Z,C,V     : condition flags. flags change with the results of ALU.
;
;
;   <<< use situation of registers >>>
;        IRQ         change to       handler   change to  IRQ
;       start         SYS mode     start  end  IRQ mode   end
;       --|--------------|-----------|-----|-----|--------|-->
;      r0 +--+--+--W========R========R--X--+--+--+--+--+--+ r0
;      r1 +--+--+--+--+--+--+--W=====R--X--+--+--+--+--+--+ r1
;      r2 +--+--+--+--+--+--+--+--+--@--X--+--+--+--+--@--+ r2
;      r3 +--+--+--+--+--@--+--+--+--+--X--+--+--@--+--+--+ r3
;      r4 +--W========R=================O=====R=====R--+--+ r4
;      r5 +--+--W==R====================O==============R--+ r5
;  r6-r11 +--+--+--+--+--+--+--+--+--+--O--+--+--+--+--+--+ r6-r11
;     r12 +--+--+--+--+--+--+--+--+--+--X--+--+--+--+--+--+ r12
;  lr_IRQ @=============== = = = = = = = = = = = =========R lr_IRQ
;  lr_USR - - - - - - - - --+--+--W=====O==R--+-- - - - - - lr_USR
;spsr_IRQ ================ = = = = = = = = = = = =========R spsr_IRQ
;         |<------------>|<--------------------->|<------>|
;             IRQ mode           SYS mode         IRQ mode
; 

        INCLUDE define.s        ; common definitions
        
;; definition of alias of registers
sp_IRQ               RN      sp ; r13
lr_IRQ               RN      lr ; r14
sp_USR               RN      sp ; r13
lr_USR               RN      lr ; r14
irn                  RN      r0 ; value of IRN register is saved.
irq_handler_table    RN      r1 ; address of irq_handler_table is saved.
cil_clear            RN      r2 ; value of this is set to CILCL register.
address_of_handler   RN      r2 ; address of handler corresponding to 
                                ; intrrupt factor is sabed.
cpsr_tmp             RN      r3 ; 
saved_spsr_irq       RN      r4 ; value of spsr_irq is saved.
irq_base             RN      r5 ; base address of registers about IRQ is saved.

        IMPORT  IRQ_HANDLER_TABLE
    IF :DEF: |ads$version|
        IMPORT  SWI
        REQUIRE SWI		; SDT don't support "require" directive
    ENDIF
        EXPORT  IRQ
        EXPORT  irq_en
        EXPORT  irq_dis
        EXPORT  get_irq_state

;**********************************************************************
;*  IRQ Handler                                                       *
;*  Function : void IRQ(void)                                         *
;*      Parameters                                                    *
;*          input  : nothing                                          * 
;*          output : nothing                                          *
;**********************************************************************
IRQ
        ENTRY
        SUB     lr_IRQ, lr_IRQ, #4; construct the return address

        ;; registers which may be overwritten are saved.(IRQ mode)
        ;; r0-r5 : these are used in this handler.
        ;; lr_IRQ(r14) : if IRQ handler is reentered, this is overwritten.
        ;; registers which may be overwritten are r0-r5,lr_IRQ(r14).
        STMFD   sp_IRQ!, {r0-r5, lr_IRQ}

        ;; spsr_IRQ is saved to saved_spsr_irq(r4).
        ;; if IRQ handler is reentered, spsr_IRQ is overwritten.
        MRS     saved_spsr_irq, spsr

        ;; check 'I' bit of spsr
        ;; please refer to the following section of FAQ at the ARM website for details.
        ;;   FAQ - ARM Cores
        ;;     4. Interrupt behaviour:
        ;;       - What happens if an interrupt occurs as it is being disabled?
        TST     saved_spsr_irq, #I_Bit
        LDMNEFD sp_IRQ!, {r0-r5, pc}^

        ;; IRQ number is got from IRN register. IRQ number is saved to irn(r0).
        ;; after the value of IRN register is read,
        ;; the bit of CIL register corresponding to interrupt level is set.
        MOV     irq_base, #IRQ_BASE     ; IRQ_BASE(0x78000000) is saved to irq_base(r5).
        LDR     irn, [irq_base, #0x14]  ; IRQ number is saved to irn(r0).

        ;; mode is changed into SYS mode. and IRQ is enabled.
        ;; if IRQ is enabled before a CIL register is set,
        ;; this program does not operate appropriately.
        ;; in SYS mode, USR mode registers are used.
        TST     saved_spsr_irq, #F_Bit; FIQ is available ?
        MOVEQ   cpsr_tmp, #Mode_SYS     ; available
        MOVNE   cpsr_tmp, #Mode_SYS:OR:F_Bit; not abailable
        MSR     cpsr_c, cpsr_tmp        ; change to SYS mode and enable IRQ

        ;; check IRQ number
        ;; if IRQ number is invalid(irn > IRQSIZE),
        ;; this routine doesn't branch to handler corresponding to interrupt's factor.
        CMP     irn, #IRQSIZE
        BCS     LABEL

        ;; USR mode registers which may be overwritten
        ;; and registers which are not saved by callee are saved.
        ;; -- USR mode registers which may be overwritten --
        ;; lr_USR(r14) : this is overwritten.
        ;; -- registers which is not saved by callee --
        ;; r0-r3,r12 : these aren't saved by callee.
        ;;             but there is no influence even if values of r0-r3 change.
        ;; registers which need to be saved are r12 and lr_USR.
        STMFD   sp_USR!, {r12, lr_USR}; R12 and lr_USR(r14) are saved.

        ;; address of IRQ_HANDLER_TABLE is got.
        ;; address of IRQ_HANDLER_TABLE is saved to irq_handler_table(r1).
        LDR     irq_handler_table, =IRQ_HANDLER_TABLE

        ;; branch to handler corresponding to interrupt's factor
        BL      BRANCH_TO_HANDLER

        LDMFD   sp_USR!, {r12, lr_USR}; R12 and link register is restored.
LABEL

        ;; mode is changed to IRQ mode. and IRQ is disabled.
        ;; if IRQ is still being allowed after CIL register is cleared,
        ;; this program does not operate appropriately.
        TST     saved_spsr_irq, #F_Bit; FIQ is available ?
        MOVEQ   cpsr_tmp, #Mode_IRQ:OR:I_Bit; available
        MOVNE   cpsr_tmp, #Mode_IRQ:OR:I_Bit:OR:F_Bit; not abailable
        MSR     cpsr_c, cpsr_tmp        ; change to IRQ mode and disable IRQ
        MSR     spsr_cf, saved_spsr_irq       ; spsr_IRQ is restored.

        ;; the most significant '1' bit of CIL register is cleared.
        ;; if arbitrary value is written in CILCL register,
        ;; the most significant '1' bit of CIL register will be cleared.
        STR     cil_clear, [irq_base, #0x28]; arbitrary value is written to
                                            ; CILCL register.

        ;; saved registers are restored, and control is returned from IRQ.
        LDMFD   sp_IRQ!, {r0-r5, pc}^
; end of IRQ_Handler

;**********************************************************************
;*  Branch to handler corresponding to interrupt's factor.            *
;*  Handler doesn't return to this function.                          *
;*  Handler directry returns to IRQ_Handler.                          *
;*  Function : void BRANCH_TO_HANDLER(void)                           *
;*      Parameters                                                    *
;*          input  : nothing                                          * 
;*          output : nothing(This function doesn't return.)           *
;**********************************************************************
BRANCH_TO_HANDLER
        ;; address of handler and information that handler is ARM or THUMB
        ;; is saved at irq_handler_table + irn*4.
        LDR     address_of_handler, [irq_handler_table, irn, lsl #2]; 
        BX      address_of_handler      ; branch to handler corresponding to
                                        ; interrupt's factor
; end of BRANCH_TO_HANDLER

;**********************************************************************
;*  Enable IRQ                                                        *
;*  Function : UWORD irq_en(void)                                     *
;*      Parameters                                                    *
;*          input  : nothing                                          * 
;*          output : IRQ state before change                          *
;*                   0 : Enable                                       *
;*                   others : Disable                                 * 
;**********************************************************************
irq_en
        SWI     SWI_IRQ_EN
        BX      lr
; end of irq_en

;**********************************************************************
;*  Disable IRQ                                                       *
;*  Function : UWORD irq_dis(void)                                    *
;*      Parameters                                                    *
;*          input  : nothing                                          * 
;*          output : IRQ state before change                          *
;*                   0 : Enable                                       *
;*                   others : Disable                                 * 
;**********************************************************************
irq_dis
        SWI     SWI_IRQ_DIS
        BX      lr
; end of irq_dis

;**********************************************************************
;*  Get IRQ State                                                     *
;*  Function : UWORD get_irq_state(void)                              *
;*      Parameters                                                    *
;*          input  : nothing                                          * 
;*          output : IRQ state                                        *
;*                   0 : Enable                                       *
;*                   others : Disable                                 * 
;**********************************************************************
get_irq_state
        MRS     r0, CPSR        ; get CPSR
        AND     r0, r0, #I_Bit
        BX      lr
; end of get_irq_state 

        END     ; end of reentrant_irq_handler.s

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产电影在线观看| 亚洲国产va精品久久久不卡综合| 国产欧美日韩三级| 亚洲午夜电影网| 国产成人啪免费观看软件 | 国产一区二区三区免费观看| 在线免费观看一区| 精品国产免费视频| 亚洲一区二区成人在线观看| 国产成人福利片| 精品国产乱码久久久久久图片 | 国产亚洲福利社区一区| 亚洲成a人v欧美综合天堂下载| 国产69精品久久久久毛片| 欧美一区二区在线观看| 亚洲午夜av在线| 色哟哟国产精品免费观看| 欧美激情一区二区三区四区| 麻豆国产一区二区| 欧美日韩一区二区在线视频| 国产精品国产三级国产aⅴ无密码| 狠狠色丁香久久婷婷综| 91麻豆精品国产91久久久久久| 樱花影视一区二区| 91啪九色porn原创视频在线观看| 国产清纯白嫩初高生在线观看91| 久久不见久久见免费视频7| 欧美精品丝袜中出| 亚洲午夜激情av| 欧美日韩视频专区在线播放| 一区二区三区中文字幕电影| 色域天天综合网| 亚洲精品日韩一| 欧美亚洲国产bt| 性感美女极品91精品| 欧美日韩久久一区二区| 午夜成人免费电影| 91麻豆精品国产91久久久久| 日韩高清在线观看| 日韩一级免费一区| 久久精品国产亚洲一区二区三区| 日韩欧美在线不卡| 激情综合网av| 国产精品女主播在线观看| 91网站在线观看视频| 亚洲精品欧美综合四区| 欧美日韩精品一区二区三区| 日韩主播视频在线| 欧美videofree性高清杂交| 麻豆精品视频在线观看免费| 久久久一区二区三区捆绑**| 成人免费电影视频| 夜色激情一区二区| 69成人精品免费视频| 久久99精品久久久| 国产精品美女久久久久av爽李琼| 99久久国产免费看| 偷拍日韩校园综合在线| 337p粉嫩大胆色噜噜噜噜亚洲| 成人看片黄a免费看在线| 亚洲精品老司机| 日韩三级视频中文字幕| 国产a久久麻豆| 亚洲国产精品一区二区www在线| 日韩一二三区视频| 风流少妇一区二区| 亚洲一区二区三区中文字幕| 日韩美女在线视频 | 另类欧美日韩国产在线| 国产视频一区二区在线观看| 色噜噜狠狠成人中文综合| 青草av.久久免费一区| 国产片一区二区| 这里只有精品视频在线观看| 国产精品综合二区| 亚洲高清免费在线| 国产日韩亚洲欧美综合| 欧美色中文字幕| 懂色av一区二区夜夜嗨| 视频在线观看国产精品| 国产精品久久久久国产精品日日| 欧美日产在线观看| 99视频精品免费视频| 蜜臀久久久久久久| 一区二区三区日本| 国产精品丝袜一区| 精品三级在线观看| 欧美在线观看18| 成人黄色片在线观看| 久久精品国产亚洲高清剧情介绍| 亚洲视频 欧洲视频| 久久精品一区二区三区四区| 欧美日韩夫妻久久| 色婷婷久久99综合精品jk白丝| 国产一区 二区 三区一级| 一区二区三区四区在线播放| 日本一二三不卡| 久久中文娱乐网| 精品久久久久久久久久久院品网| 欧美日韩免费电影| 欧美色涩在线第一页| 99免费精品视频| 成人少妇影院yyyy| 国产精品一区二区不卡| 国模冰冰炮一区二区| 麻豆精品一区二区av白丝在线| 婷婷综合另类小说色区| 亚洲影视在线观看| 亚洲国产日韩a在线播放性色| 亚洲美女区一区| 亚洲男女毛片无遮挡| 亚洲欧洲av色图| 亚洲视频1区2区| 亚洲一区二区在线观看视频 | 国产a精品视频| 国产精品91一区二区| 国产麻豆视频一区| 韩国精品久久久| 国内精品嫩模私拍在线| 国产一区二区在线观看免费| 精品一区二区三区香蕉蜜桃| 六月丁香综合在线视频| 久久99精品久久久久久久久久久久| 奇米精品一区二区三区四区| 老司机精品视频一区二区三区| 另类小说视频一区二区| 国产麻豆欧美日韩一区| 不卡欧美aaaaa| 色婷婷激情综合| 7777女厕盗摄久久久| 欧美v日韩v国产v| 国产精品乱人伦| 一区二区三区在线不卡| 天天影视网天天综合色在线播放| 午夜久久福利影院| 韩国av一区二区三区四区| 成人国产在线观看| 在线观看精品一区| 欧美一区二区三区思思人| 精品国产3级a| 国产精品毛片a∨一区二区三区| 亚洲综合一区二区| 久久99最新地址| a美女胸又www黄视频久久| 欧美在线观看视频在线| 久久男人中文字幕资源站| 亚洲欧洲av一区二区三区久久| 水野朝阳av一区二区三区| 国产在线国偷精品免费看| 99久久99久久精品免费观看| 色狠狠色噜噜噜综合网| 精品卡一卡二卡三卡四在线| 亚洲天堂中文字幕| 美国毛片一区二区三区| www.亚洲国产| 欧美一区二区三区视频免费| 国产精品麻豆久久久| 青青国产91久久久久久 | 欧美日韩在线免费视频| 精品国产91洋老外米糕| 一区二区三区精密机械公司| 国产在线国偷精品免费看| 日本韩国欧美一区二区三区| 欧美不卡视频一区| 一区二区高清在线| 国产精品一区2区| 这里只有精品免费| 一区二区三区视频在线观看| 国产一区二区三区免费看| 制服丝袜亚洲网站| 亚洲欧美综合色| 国产精品一区一区| 91精品国产综合久久久蜜臀粉嫩 | 一本久久a久久免费精品不卡| 91精品国产福利| 亚洲一区二区三区三| 95精品视频在线| 亚洲精品伦理在线| 国产一区二区三区日韩| 欧美一区二区国产| 亚洲成人av资源| 色女孩综合影院| 综合av第一页| 国产91综合网| 国产午夜精品福利| 激情综合五月婷婷| 日韩精品一区二区三区视频播放| 一级精品视频在线观看宜春院 | 精品裸体舞一区二区三区| 亚洲国产wwwccc36天堂| 91久久精品网| 亚洲另类在线视频| 91在线你懂得| 亚洲日本中文字幕区| av成人免费在线| 中文字幕色av一区二区三区| 成人午夜视频福利| 国产精品久久久久久妇女6080| 波多野结衣在线一区| 欧美激情一区二区三区全黄|