微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PCI总线与接口技术

PCI总线与接口技术

时间:12-12 来源:互联网 点击:

改善代码的执行速度。

PCI对于不同的系统和处理器配置都应该包含其编码映像。每个映像由ROM首区(映像开始处)+数据配置区(映像的第64KB范围内)组成。

ROM首区内容

偏移

长度

说明

00H~01H

2

55AAH

ROM标签字节

02H~17H

22

XX

保留

18H~19H

2

XX

到PCI数据结构指针

数据配置区

偏移量

长度

说明

偏移量

长度

说明

00H~03H

4

标签,字符串"PCID"

0DH~0FH

3

分类代码

04H~05H

2

供应商识别码

10H~11H

2

映像长度

06H~07H

2

设备识别码

12H~13H

2

代码数据的修改级别

08H~09H

2

对重要产品数据的指针

14H~14H

1

代码类型

0AH~0BH

2

PCI数据结构长度

15H~15H

1

指示标志

0CH~0CH

1

PCI数据结构修改

16H~17H

2

保留

8、关于PCI设备的初始化

系统POST首先检查PCI设备在配置空间是否使用了扩展ROM基地址寄存器(即是否有扩展ROM),若使用了,POST将ROM映射到地址空间中一个未用的部分。

9、PCI BIOS

其主要作用有以下两点:

  • 为应用软件或者PCI总线设备或者板卡提供服务调用。
  • 初始化每个系统PCI设备。PCI BIOS轮流查询每个PCI插槽,查找存在的PCI设备,读取存在设备配置空间的头标区,以决定设备的厂商号,类型和存储需求等内容。并且将分配的I/O或存储空间地址回写到每个设备配置空间的基地址寄存器中。
  • PCI BIOS调用的入口以及返回值说明,对80x86机器,调用功能号为1AH,入口参数在AX中,返回值在AH中。下面列举的是比较常用的,更多说明请参考PCI BIOS规则说明书。

功能说明

入口参数(AX)

返回值说明

出口参数(AH)

PCI BIOS存在查询

B101H

成功调用

00H

查找PCI 设备

B102H

不支持的功能

81H

查找PCI 设备的类代码

B103H

错误的厂商号

83H

产生特殊周期

B106H

未找到设备

86H

读配置寄存器-单字节操作

B108H

错误的寄存器号

87H

读配置寄存器-单字操作

B109H

设置失败

88H

读配置寄存器-双字操作

B10AH

缓冲区太小

89H

写配置寄存器-单字操作

B10BH

写配置寄存器-单字节操作

B10CH

写配置寄存器-双字节操作

B10DH

取得中断线路选项

B10EH

设置PCI中断

B10FH

  • 下面是一个关于通过PCI BIOS调用读PCI配置寄存器的例子:
    1. .386
    2. ;FUNCTIONCODE
    3. PCI_FUNCTION_ID=0B1H
    4. PCI_BIOS_PRESENT=01H
    5. FIND_PCI_DEVICE=02H
    6. FIND_PCI_CLASS_CODE=03H
    7. GENERATE_SPECIAL_CYCLE=06H
    8. READ_CONFIG_BYTE=08H
    9. READ_CONFIG_WORD=09H
    10. READ_CONFIG_DWORD=0AH
    11. WRITE_CONFIG_BYTE=0BH
    12. WRITE_CONFIG_WORD=0CH
    13. WRITE_CONFIG_DWORD=0DH
    14. GET_IRQ_ROUTING_OPTIONS=0EH
    15. SET_PCI_IRQ=0FH
    16. ;RETURNCODE
    17. SUCCESSFUL=00H
    18. FUNC_NOT_SUPPORTED=81H
    19. BAD_VENDOR_ID=83H
    20. DEVICE_NOT_FOUND=86H
    21. BAD_REGISTER_NUMBER=87H
    22. SET_FAILED=88H
    23. BUFFER_TOO_SMALL=89H
    24. VID=0H
    25. DID=2H
    26. PCICMD=4H
    27. PCISTS=6H
    28. RID=8H
    29. CLCD=9H
    30. CALN=0CH
    31. LAT=0DH
    32. HDR=0EH
    33. BIST=0FH
    34. BADR0=10H
    35. BADR1=14H
    36. BADR2=18H
    37. BADR3=1CH
    38. BADR4=20H
    39. BADR5=24H
    40. EXPOM=30H
    41. INTLN=3CH
    42. INTPIN=3DH
    43. MINGNT=3EH
    44. MAXLAT=3FH
    45. SSTACKSEGMENTSTACKPARAUSE16
    46. DW64DUP(?)
    47. SSTACKENDS
    48. DATASEGMENTPARAUSE16
    49. MESDBPCICARDNOTFOUND!$
    50. MES0DB***********************PCICONFIGINFO*****************************,13,10,$
    51. MES1DBPCIBIOSNOTFOUND!,10,13,$
    52. MES2DBPCICONFIGREADERROR!$
    53. MES3DBVendorIdentification:10E8$
    54. MES4DBDeviceIdentification:5933$
    55. MES5DBPCICommandRegister:$
    56. MES6DBPCIStatusRegister:$
    57. MES7DBRevisionIdentificationRegister:$
    58. MES8DBClassCodeRegister:$
    59. MES9DBCacheLineSizeRegister:$
    60. MES10DBMasterLatencyTimer:$
    61. MES11DBHeaderType:$
    62. MES12DBBuilt-inSelf-test:$
    63. MES13DBBaseAddressRegister0:$
    64. MES14DBBaseAddressRegister1:$
    65. MES15DBBaseAddressRegister2:$
    66. MES16DBBaseAddressRegister3:$
    67. MES17DBBaseAddressRegister4:$
    68. MES18DBBaseAddressRegister5:$
    69. MES19DBExpansionRomBaseAddress:$
    70. MES20DBInterruptLine:$
    71. MES21DBInterruptPin:$
    72. MES22DBMinimumGrant:$
    73. MES23DBMaximumLatency:$
    74. BNDB?
    75. DN_FNDB?
    76. R_VALUEDD?
    77. V_VIDDW?
    78. V_DIDDW?
    79. V_PCICMDDW?
    80. V_PCISTSDW?
    81. V_RIDDB?
    82. V_CLCDDD?
    83. V_CALNDB?
    84. V_LATDB?
    85. V_HDRDB?
    86. V_BISTDB?
    87. V_BADR0DD?
    88. V_BADR1DD?
    89. V_BADR2DD?
    90. V_BADR3DD?
    91. V_BADR4DD?
    92. V_BADR5DD?
    93. V_EXPOMDD?
    94. V_INTLNDB?
    95. V_INTPINDB?
    96. V_MINGNTDB?
    97. V_MAXLATDB?
    98. DATAENDS
    99. CODESEGMENTPARAUSE16
    100. ASSUMECS:CODE,DS:DATA,SS:SSTACK
    101. START:MOVAX,DATA
    102. MOVDS,AX
    103. MOVAX,0B101H;查找PCIBIOS
    104. INT1AH
    105. JNCJUDGE1;如果CF被置位,则PCIBIOS不存在
    106. MOVDX,OFFSETMES1;显示不存在信息
    107. MOVAH,09H
    108. INT21H
    109. JMPEXIT
    110. JUDGE1:CMPAH,00H
    111. JZJUDGE2;如果不等,则PCIBIOS不存在
    112. MOVDX,OFFSETMES1;显示不存在信息
    113. MOVAH,09H
    114. INT21H
    115. JMPEXIT
    116. JUDGE2:CMPEDX,ICP;如果EDX中放的是"PCI"则说明PCIBIOS存在
    117. JZFIND
    118. MOVDX,OFFSETMES1;否则

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top