ITE Super IO 学习 – GPIO

简述

Super IO中的GPIO逻辑设备功能还是挺丰富的,除了通用Simple I/O功能,还支持看门狗(Watch Dog Timer)、SMI输出路由(SMI Ouput Routing)、外部中断路由(External Interrupt Routing)、LED闪烁(LED Blinking)等功能。

Simple I/O

Simple I/O就是普通的GPIO功能,可用于控制设备开关,或LED闪烁等,如LED Blinking主要用在Power LED上,如进入S3后要呼吸或闪烁,S0常亮,S5则是关闭状态。

寄存器说明

GPIO功能主要由几个寄存器控制:

1.Polarity Register:极性控制寄存器,操作它可使相应GPIO的电平翻转,即:高->低,低->高

2.Internal Pull-Up Register:内部上拉控制寄存器,用于提高上拉的驱动能力

3.Simple Enable Register:用于控制相应的PIN是GPIO功能还是复用功能

4.Input/Output Select Register:输入输出选择寄存器,用于选择GPIO是输入功能还是输出功能

5.Input/Ouput Control Register:输入输出控制寄存器,用于控制GPIO的电平,当GPIO为输入时,读它可得到输入电平;当GPIO为输出时,可设置GPIO输出的高低电平

LED Blinking相关寄存器:

IT8625提供了两组控制LED Blinking的寄存器,即可以使用两个LED作为Blinking

1.GP LED Blinking 1 Pin Mapping Register:需要在此寄存器bit0-5填入用于Blinking GPIO的编号,GPIO与编号的对应表可按照说明参考表8-13

2.GP LED Blinking 1 Control Register:

bit0:置1的话这个PIN会一直输出低,可用于控制非S3 LED的状态,如S0的时候,输出低,LED常亮(前提是LED硬件设置的是低电平导通)。

bit3-1:用于设置LED闪烁的频率

其它bit可以不用管


Super IO还提供了一组用于控制LED呼吸效果的寄存器,不过只能设置一个LED有呼吸效果。

1.Breath LED Control Register1:

bit5-4: 呼吸的最大占空比设置

bit3-2: 呼吸递减级别设置

bit1-0:呼吸递增级别设置

要求不高的话这个寄存器可以不用设置,使用默认的即可,不影响工作

2.Breath LED Control Register1:

bit7: 呼吸效果启用寄存器,需置一

bit6-4: 最大占空比延时周期设置,可以不设置

bit2-0: 零占空比延时周期设置,可以不设置

配置步骤

假设GPIO35为Power LED,该LED在不同电源状态的定义为:

S0常亮,S3呼吸,S4、S5常灭,配置步骤如下:

1.设置为GPIO功能。GPIO35属于第三组GPIO,可在Global Configuration Registers,Index=27h处bit5设为1

2.设置GPIO为Output。将Input/Output Select Register Index=CAh处bit5设为1

3.设置GPIO35为Blinking LED。从表8-13可知,GPIO35的编号为011101,即0x1D,填入GP LED Blinking 1 Pin Mapping Register中(注意bit7)

4.启用呼吸功能。Breath LED Control Register1 bit7置一即可

执行完这4步便可以看到呼吸效果了,不过这是S3的状态。在不更改这四个步骤的情况下要让它常亮/灭该怎么设置呢?可以巧用GP LED Blinking 1 Pin Mapping Register的bit0的Output low功能,将它置一便可使GPIO35一直拉低,拉高的话可以在此基础上将GPIO的极性反转(Polarity Register),即可拉高,这样Power LED的三个状态便都实现了。

Input/Ouput Control Register

前文提到配置Power LED最后一步要去控制GPIO的高低电平,巧用Polarity Register去控制,但是要通过Input/Ouput Control Register去控制该怎么做呢?

这个寄存器不在LDN定义的寄存器中,而是在IO Space。

IO SPACE的地址可通过Simple I/O Base address MSB/LSB Register得到,这个地址是需要BIOS配置的,这里假如配置为0x900(需要经过南桥DECODE,不然无法访问),可用RW直接访问此处。地址没问题的话能看到前面几个字节是有数据的,如下图:

前面8个字节代表8组GPIO,将0x02的bit5置一即可将GPIO35拉高,反之则拉低。如果GPIO设置的为input,此处读出来的就是外部的电平。

Watch Dog Timer

Watch Dog Timer 即看门狗,用于系统出现故障后死机,可以得以重置,这样又能继续工作。

看门狗是一个定时器,它会按照设定的时间进行计时,超时后会对系统进行复位。如果不想让它复位,就得在一定时间内给它重新设置超时时间(称为“喂狗”)。实际的应用场景中,这是需要上层APP来配合的,APP的工作就是”喂狗“,假如系统死机,APP ”喂狗“的任务可能会失败,那将触发一次系统重置。

SIO中,复位的方法有软复位和硬复位两种,软复位是SIO内部实现的一种方法,硬复位是直接使用一个GPIO信号去拉CPU中的RESER信号。

寄存器说明

看门狗有4个寄存器,分别是控制寄存器,配置寄存器和超时寄存器(高低Byte各一个)

 

版权声明:
作者:bin
链接:https://ay123.net/mystudy/bios/703/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
ITE Super IO 学习 – GPIO
简述 Super IO中的GPIO逻辑设备功能还是挺丰富的,除了通用Simple I/O功能,还支持看门狗(Watch Dog Timer)、SMI输出路由(SMI Ouput Routing)、外部中断路由(E……
<<上一篇
下一篇>>
文章目录
关闭
目 录