19.6.102. PinConfig(引脚配置描述符宏)
语法 :
Macro:
PinConfig (Shared/Exclusive, PinConfigType, PinConfigValue, ResourceSource,
ResourceSourceIndex, ResourceUsage, DescriptorName, VendorData) {Pin List}
参数
Shared 是一个可选参数,可以是 Shared 或 Exclusive。如果未指定,则假定为 Exclusive。位字段名称 _SHR 会自动创建以引用资源描述符的这一部分。
PinConfigType 可以是下面“引脚配置类型和值”中描述的配置类型之一。位字段 _TYP 会自动创建以引用资源描述符的这一部分。
PinConfigValue 是下面“引脚配置类型和值”中描述的配置值之一。位字段 _VAL 会自动创建以引用资源描述符的这一部分。
ResourceSource 是一个字符串,用于唯一标识此描述符所引用的引脚控制器。ResourceSource 可以是完全限定名、相对名称,或者使用命名空间搜索规则的名称段。
ResourceSourceIndex 是一个可选参数,在本修订版中假定为 0。
ResourceUsage 是一个可选参数,在本修订版中假定为 ResourceConsumer。
DescriptorName 是一个可选参数,用于指定一个整数常量的名称,该常量将在当前作用域中创建,并包含此资源描述符在当前资源模板缓冲区中的偏移量。可以将预定义的描述符字段名称附加到该名称后,以便通过 Buffer Field 运算符访问描述符中的各个字段。
VendorData 是一个可选参数,用于指定一个 RawDataBuffer,其中包含由 OS 驱动程序解码的供应商定义字节数据。位字段名称 _VEN 会自动创建以引用资源描述符的这一部分。
PinList 是 ResourceSource 上由此描述符描述的引脚编号列表。位字段名称 _PIN 会自动创建以引用资源描述符的这一部分。
表 19.37 引脚配置类型和值
| 引脚配置类型 | 引脚配置值 | 说明 |
|---|---|---|
| 0x00 = 默认 | N/A | 默认配置。不应用任何配置。 |
| 0x01 = 偏置上拉 | 上拉电阻,单位为欧姆。 | 这表示该引脚通过一定欧姆数被上拉到隐式提供的 VDD 电源轨。 |
| 0x02 = 偏置下拉 | 下拉电阻,单位为欧姆。 | 这表示该引脚通过一定欧姆数被下拉到 GND 电源轨。 |
| 0x03 = 默认偏置 | N/A | 如果硅片具有默认偏置模式,则将引脚重置为该模式。 |
| 0x04 = 禁用偏置 | N/A | 将禁用该引脚上的任何可由软件选择的偏置设置。 |
| 0x05 = 高阻抗偏置 | N/A | 这表示该引脚被配置为高阻抗模式,实质上与外部世界断开。如果有电源轨连接到该引脚,它将不会影响信号状态,因此这是一个良好的默认模式。 |
| 0x06 = 总线保持偏置 | N/A | 这会使引脚处于弱锁存状态,在三态总线上弱驱动最后一个值。 |
| 0x07 = 开漏驱动 | N/A | 这会将引脚配置为开漏(开集电极)状态。 |
| 0x08 = 开源驱动 | N/A | 这会将引脚配置为开源(开发射极)状态。 |
| 0x09 = 推挽驱动 | N/A | 这会将引脚配置为显式推挽状态。如果上电默认状态例如为开漏或高阻抗状态,这会很有用。 |
| 0x0A = 驱动强度 | 驱动强度,单位为毫安 | 这将把引脚的输出驱动器设置为提供一定毫安数的电流,通常通过激活多个驱动级来实现。 |
| 0x0B = 转换速率 | 自定义格式 | 这控制引脚的转换速率,影响速度,也影响边沿的陡峭程度,从而影响板上的噪声。硬件特定参数说明要配置哪种转换速率 |
| 0x0C = 输入去抖 | 去抖时间,单位为微秒。 | 这将使能引脚信号的去抖(例如按键输入)。 |
| 0x0D = 输入施密特触发器 | 启用 = 1,禁用 = 0 | 这将为该线路启用施密特触发器支持。 |
| 0x0E - 0x7F = 保留 | 保留 | 保留 |
| 0x80 - 0xFF = 供应商定义值 | 自定义基值 | 从这里开始,列出供应商和硬件特定的配置。 |
说明
PinConfig 宏求值为一个缓冲区,其中包含一个引脚配置资源描述符,如第 6.4.3.10 节所述。此宏设计用于 ResourceTemplate(资源到缓冲区转换宏)内部。
注 : GpioIo/GpioInt/PinFunction 和 PinConfig 描述符所设置的属性之间存在一些重叠。例如,它们都会设置上拉之类的属性。如果针对同一组引脚由多个描述符指定了相同属性,则这些属性的应用顺序是不确定的。为避免任何冲突,在使用 PinConfig 时,GpioInt/GpioIo/PinFunction 应为这些属性提供默认值。如果使用 PinConfig 设置引脚偏置,则 GpioIo/GpioInt/PinFunction 应使用 PullDefault。如果使用 PinConfig 设置去抖超时,则 GpioIo/GpioInt 应使用 0。如果使用 PinConfig 设置驱动强度,则 GpioIo 应使用 0。_
示例 :
//
// Description: GPIO
//
Device (GPI0)
{
Name (_HID, "PNPFFFE")
Name (_UID, 0x0)
Method (_STA)
{
Return(0xf)
}
Method (_CRS, 0x0, NotSerialized)
{
Name (RBUF, ResourceTemplate()
{
Memory32Fixed(ReadWrite, 0x4FE00000, 0x20)
Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) {0x54}
})
Return(RBUF)
}
}
//
// Description: I2C controller 1
//
Device (I2C1)
{
Name (_HID, "PNPFFFF")
Name (_UID, 0x0)
Method (_STA)
{
Return(0xf)
}
Method (_CRS, 0x0, NotSerialized)
{
Name (RBUF, ResourceTemplate()
{
Memory32Fixed(ReadWrite, 0x4F800000, 0x20)
Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) {0x55}
PinFunction(Exclusive, PullDefault, 0x5, "\\_SB.GPI0", 0, ResourceConsumer, ) {2, 3}
// Configure 10k Pull up for I2C SDA/SCL pins
PinConfig(Exclusive, 0x01, 10000, "\\_SB.GPI0", 0, ResourceConsumer, ) {2, 3}
})
Return(RBUF)
}
}
//
// Description: Physical display panel
//
Device (SDIO)
{
Name (_HID, "PNPFFFD")
Name (_UID, 0x0)
Method (_STA)
{
Return(0xf)
}
Method (_CRS, 0x0, NotSerialized)
{
Name (RBUF, ResourceTemplate()
{
Memory32Fixed(ReadWrite, 0x4F900000, 0x20)
Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) {0x57}
GpioIo(Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPI0",) {2, 3}
// Configure 20k Pull down
PinConfig(Exclusive, 0x02, 20000, "\\_SB.GPI0", 0, ResourceConsumer, ) {2, 3}
// Enable Schmitt-trigger
PinConfig(Exclusive, 0x0D, 1, "\\_SB.GPI0", 0, ResourceConsumer, ) {2, 3}
// Set slew rate to custom value 3
PinConfig(Exclusive, 0x0B, 3, "\\_SB.GPI0", 0, ResourceConsumer, ) {2, 3}
})
Return(RBUF)
}
}