基于FPGA的OLED微显示器的IIC控制模块设计(2)
- UID
- 1029342
- 性别
- 男
|
基于FPGA的OLED微显示器的IIC控制模块设计(2)
1.3 控制方案概述
通过对OLED微显示器及IIC接口的分析,基于FPGA设计了OLED微显示器IIC接口的IIC控制模块,如图1所示。该控制模块包括写数据存储模块、读数据存储模块和数据读写模块。写数据存储模块用于存储从机地址、寄存器地址以及寄存器写入数据,读数据存储模块用于存储从机地址、寄存器地址以及寄存器读入数据,数据读写模块用于读写相应的数据。
FPGA采用Altera公司Cyclone II系列中的 EP2C8-Q208C8。EP2C8Q208C8拥有8 256个逻辑单元、1.1 Mbit内部RAM、150个18×18乘法器、4个PLL环和85个I/O接口,最高数据率可以达到260 Mb/s,完全满足本系统要求的60 MHz系统时钟需求。与其他FPGA产品不同,Cyclone II FPGA性能提高了60%,同时功耗降为原来的一半,非常经济实用[5]。
2 IIC控制模块设计
2.1 写数据存储模块
写数据存储模块由reg型数据存储8 bit数据,包括从机地址加写标志位,由memory型数据构成寄存器存储器和写入数据存储器,每一个存储单元大小为8 bit,用于存储寄存器地址和寄存器写入数据,存储单元的数量可以根据需要自行定义。
自定义的存储单元的数量决定了寄存器存储器和写入数据存储器的大小。写数据存储模块内部有一个与数据读写模块通信的计数变量,通过改变计数变量,可将寄存器存储器中新的地址和写入数据存储器中新的数据传输给读写数据模块。图2为写数据存储模块。
2.2 读数据存储模块
读数据存储模块由reg型数据存储8 bit数据,包括从机地址加读标志位,由memory型数据构成寄存器存储器和读入数据存储器,每一个存储单元大小为8 bit,用于存储寄存器地址和寄存器读入数据,存储单元的数量可以根据需要自行定义。
自定义的存储单元的数量决定了寄存器存储器和读入数据存储器的大小。读数据存储模块内部有一个与数据读写模块通信的计数变量,通过改变计数变量,可将寄存器存储器中新的地址传输给读写数据模块,并将从读写数据模块传回的寄存器数据存储到读数据存储器中。图3为读数据存储模块。
本设计采用的时钟源频率为40 MHz,由于SCL的频率要求在100 kHz~1 MHz范围内,本设计将时钟源进行100分频,因此SCL的频率设定为400 kHz。考虑到IIC起始、读写以及停止的时序要求,将SCL的时钟周期平均分为上升沿、高电平、下降沿和低电平4个状态。在上升沿状态或下降沿状态时,设定SCL=1或SCL=0,而在高电平状态或低电平状态时,SDA才允许进行数据变化,这样就能保证SDA进行数据变化时SCL已经处于高电平或者低电平状态,从而能够避免SDA与SCL同时经历上升沿或下降沿而带来的时序功能不确定性的问题。
为了实现对OLED微显示器内部寄存器的读写操作,本设计采用两个状态机:一个写状态机,一个读状态机。读/写状态机由外部按键进行切换。
写状态机由空闲状态、起始状态、从机地址传输写状态、响应1状态、寄存器地址传输状态、响应2状态、数据传输状态、响应3状态、中间停止返回状态以及最终停止状态构成。在从机地址传输写状态、寄存器地址传输状态及数据传输状态中,当SCL处于低电平状态时,SDA随着计数器在0~7范围的逐次增加而改变,直到传输完8 bit数据。在响应状态中,由于SDA的三态设置,此时将SDA置于高阻状态,从而响应从机的应答。同时,写状态机设置有计数变量,计数变量随着写状态机循环次数的增加而增加。状态之间的切换如图5所示。在计数变量小于等于设定写入次数时,数据读写模块向OLED微显示器的内部寄存器写入数据。
读状态机由空闲状态、起始状态、从机地址传输写状态、响应1状态、寄存器地址传输状态、响应2状态、重新起始状态、从机地址传输读状态、响应3状态、数据传输状态、响应4状态、中间停止返回状态以及最终停止状态构成。其中读状态机中从机地址传输写状态、寄存器地址传输状态、从机地址传输读状态以及响应状态与写状态机中的相应状态类似。不同的是,在数据传输状态中,在SCL处于高电平状态时,通过将SDA置于高阻状态,把OLED微显示器寄存器的数据逐位传输给8 bit的寄存器,然后传递给读数据存储模块。读状态机的状态切换如图6所示。同样,在读状态机中也设有计数变量,当计数变量小于等于设定读入次数时,OLED微显示器寄存器的数据通过读写数据模块传输给读数据存储模块。
2.4 IIC控制模块
通过对写数据模块、读数据模块以及数据读写模块的设计,完成了IIC控制模块的设计。IIC控制模块的原理图如图7所示。
|
|
|
|
|
|