首页 > 其他 > 详细

HalpInitializePICs

时间:2020-11-05 17:51:12      阅读:30      评论:0      收藏:0      [点我收藏+]

i8259A的初始化编程

--- 命令 ---
PICsInitializationString   dw      PIC1_PORT0 //主片 control port,,, +1 为data port
                           db      ICW1_ICW + ICW1_EDGE_TRIG + ICW1_INTERVAL8 + ICW1_CASCADE + ICW1_ICW4_NEEDED     // icw1  0001 1001
                           db      PIC1_BASE                                                                        // icw2
                           db      1 SHL PIC_SLAVE_IRQ                                                              // icw3  1 << 2 == 0000 0100
                           db      ICW4_NOT_SPEC_FULLY_NESTED + ICW4_NON_BUF_MODE + ICW4_NORM_EOI + ICW4_8086_MODE  // icw4  0000 0001
                        
                           dw      PIC2_PORT0 // 从片
                           db      ICW1_ICW + ICW1_EDGE_TRIG + ICW1_INTERVAL8 + ICW1_CASCADE + ICW1_ICW4_NEEDED
                           db      PIC2_BASE
                           db      PIC_SLAVE_IRQ
                           db      ICW4_NOT_SPEC_FULLY_NESTED + ICW4_NON_BUF_MODE +  ICW4_NORM_EOI + ICW4_8086_MODE
                           dw      0               ; end of string
// 主片                  从片
// icw1 = 0001 1001      icw1 = 0001 1001
// icw2 = 0x30           icw2 = 0x38
// icw3 = 0000 0100      icw3 = 2           // 主片的哪一位为1,从片为对应的数值,如主片第7位[1000 0000],那从片的值为 0000 0111
// icw4 = 0000 0001      icw4 = 0000 0001

--- 函数 ---
cPublicProc _HalpInitializePICs       ,1
cPublicFpo 0, 0

        push    esi                             ; save caller‘s esi
        pushfd
        cli                                     ; disable interrupt
        
        lea     esi, PICsInitializationString
        lodsw                                   ; (AX) = PIC port 0 address 
Hip10:  movzx   edx, ax                         // 一个循环把 icw1输入到control_port , icw2,3,4 输入到data_port
        outsb                                   ; output ICW1
        IODelay
        inc     edx                             ; (DX) = PIC port 1 address  /// +1 变为对应的 data_port
        outsb                                   ; output ICW2
        IODelay
        outsb                                   ; output ICW3
        IODelay
        outsb                                   ; output ICW4
        IODelay
        mov     al, 0FFH                        ; mask all 8259 irqs
        out     dx,al                           ; write mask to PIC
        lodsw                                    // 从片 control port
        cmp     ax, 0                           ; end of init string?
        jne     short Hip10                     ; go init next PIC

        ...

每一位的含义,http://blog.sina.com.cn/s/blog_70dd169101019wzw.html 说的很清楚
参照 https://www.cnblogs.com/xuanyuan/p/5506508.html

HalpInitializePICs

原文:https://www.cnblogs.com/asmalleyu/p/13932741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!