⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ics9148.inc

📁 <BIOS研发技术剖析>书的源代码,包括完整的BIOS汇编语言源程序.
💻 INC
字号:
;-----------------------------------------------------------------------;
;                       ICS9148ReadByte                                 ;
;-----------------------------------------------------------------------;
; Input :                                                               ;
; Output:                                                               ;
; Register destroyed: None                                              ;
;-----------------------------------------------------------------------;
ICS9148ReadByte         PROC    PUBLIC
        ret
ICS9148ReadByte         ENDP


;-----------------------------------------------------------------------;
;                       ICS9148WriteByte                                ;
;-----------------------------------------------------------------------;
; Input : (AL) ICS9148 data                                             ;
; Output: None                                                          ;
; Register destroyed: None                                              ;
;-----------------------------------------------------------------------;
ICS9148WriteByte        PROC    PUBLIC
        pusha
        push    ax
        call    PreEnableI2CBus         ;I2C bus Data/Clock active level High
        call    EnableI2CBus            ;Enable I2C bus

StrI2CRd:
        call    StrI2CCycle

        call    CsI2CDummy

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM write
        mov     dh, 01001011b    ; I2C data
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      CommandTimingErr

        call    CsI2CDummy

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM address
        mov     dh, 00000000b    ; I2C data
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      AddressTimingErr

        call    CsI2CDummy

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM address
        mov     dh, 11100000b    ; I2C data, byte count is 07h ( 00000111b )
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      AddressTimingErr

        call    CsI2CDummy

        pop     ax
        mov     dh, al

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM read
;;;     mov     dh, 00101111b    ; I2C data
;       mov     dh, 00010010b    ; I2C data
;          bit 0 ---+|||| |+--- bit 7 , spread spectrum modulation
;          bit 1 ----+||+-+---- bit 6:4 , cpu/pci/agp clock
;                     |+------- bit 3 , frequency selection
;                     +-------- bit 2, must be 0
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      WriteTimingErr

        call    CsI2CDummy

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM read
        mov     dh, 11110000b    ; I2C data
;bit 0 , CPUCLK0 ---+|||+--+--- bit 7:4 , reserved
;bit 1 , CPUCLK1 ----+||
;bit 2 , CPUCLK2 -----+|
;bit 3 , CPUCLK3 ------+
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      WriteTimingErr

        call    CsI2CDummy

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM read
        mov     dh, 11111110b    ; I2C data
;bit 0 , PCICLK0 ---+||||||+--- bit 7 , reserved
;bit 1 , PCICLK1 ----+||||+---- bit 6 , PCICLK_F
;bit 2 , PCICLK2 -----+||+----- bit 5 , AGPO
;bit 3 , PCICLK3 ------+|
;bit 4 , PCICLK4 -------+
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      WriteTimingErr

        call    CsI2CDummy


        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM read
        mov     dh, 11111111b    ; I2C data
;bit 0 , SDRAM 0 ---+||||||+--- bit 7 , SDRAM 7
;bit 1 , SDRAM 1 ----+||||+---- bit 6 , SDRAM 6
;bit 2 , SDRAM 2 -----+||+----- bit 5 , SDRAM 5
;                      |+------ bit 4 , SDRAM 4
;                      +------- bit 3 , SDRAM 3
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      WriteTimingErr

        call    CsI2CDummy

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM read
        mov     dh, 11110000b    ; I2C data
;bit 0 , SDRAM 8 ---+|||+--+--- bit 7:4 , reserved
;bit 1 , SDRAM 9 ----+||
;bit 2 , SDRAM 10 ----+|
;bit 3 , SDRAM 11 -----+
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      WriteTimingErr

        call    CsI2CDummy

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM read
        mov     dh, 11001000b    ; I2C data
;bit 0 , REF1    ---+||||+-+--- bit 7:5 , reserved
;bit 1 , REF0    ----+||+------ bit 4 , AGP1
;                     ++------- bit 3:2 , reserved
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      WriteTimingErr

        call    CsI2CDummy

        mov     ah, 08h          ; 8 bits need to program SDRAM EEPROM read
        mov     dh, 00000000b    ; I2C data
;                   ++++++++--- bit 7:0 , reserved
        mov     dl, 11111111b    ; I2C clock
        call    csI2CCmd

        call    ChkAck
;;;     jc      WriteTimingErr

        call    CsI2CDummy
        call    PreStpI2CCycle
;       jmp     NxtI2CSDRAM

CommandTimingErr:
;       push    dx
;       mov     dx, offset CmdFail_Msg
;       call    Disp_String
;       pop     dx

;       push    dx
;       mov     dx, offset Address_Msg
;       call    Disp_String
;       pop     dx
;       jmp     NxtI2CSDRAM

AddressTimingErr:
;       push    dx
;       mov     dx, offset AddFail_Msg
;       call    Disp_String
;       pop     dx

;       push    dx
;       mov     dx, offset Address_Msg
;       call    Disp_String
;       pop     dx
;       jmp     NxtI2CSDRAM

ReadTimingErr:
;       push    dx
;       mov     dx, offset RdFail_Msg
;       call    Disp_String
;       pop     dx

;       push    dx
;       mov     dx, offset Address_Msg
;       call    Disp_String
;       pop     dx
;       jmp     NxtI2CSDRAM

WriteTimingErr:
;       push    dx
;       mov     dx, offset WrFail_Msg
;       call    Disp_String
;       pop     dx

;       push    dx
;       mov     dx, offset Address_Msg
;       call    Disp_String
;       pop     dx
;       jmp     NxtI2CSDRAM

OutFisTimingErr:
;       push    dx
;       mov     dx, offset NoData_Msg
;       call    Disp_String
;       pop     dx

;       push    dx
;       mov     dx, offset Address_Msg
;       call    Disp_String
;       pop     dx

NxtI2CSDRAM:
        call    PreEnableI2Cbus
I2COK:
        popa
        ret
ICS9148WriteByte        ENDP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -