版主: 51FPGA |
zhizihua209
![]()
最后登陆时间:2015-01-13 22:11:52 |
在上期的博客中,我们同时研究了如何通过Zynq SoC的PS(处理器系统)MIO和PL(可编程逻辑)EMIO来使用SPI通信。本期博客中为了给OLED模块进行上电,我们将通过EMIO同时使用SPI和GPIO。 为了控制OLED模块,我们需要使用下表中定义的和在第81部分中简要提到的一些GPIO:
在EMIO模式下我们使用这些GPIO的方式和在MIO模式下的方式完全一致。我们需要驱动这些信号来满足下图中定义的时序:
为了实现上述目的,我们可以使用Zynq SoC的CPU中的私有定时器。一旦通过使用GPIO信号实现这些时序后(t1 = 3us,t2 = 3us,toff = 100ms),接着我们就可以进行初始化,然后通过SPI总线把命令发送到OLED模块了。 想要使用EMIO中的GPIO需遵循以下步骤: • 包含头文件xgpiops.h • 使用XGpioPs类型声明GPIO • 使用XGpioPs_Config类型来声明一个GPIO配置指针 • 使用XGpioPs_LookupConfig()函数来查询GPIO配置 • 使用XGpioPs_CfgInitialize()函数来初始化GPIO 一旦我们已经初始化好GPIO并准备好传送信号之后,我们需要声明信号的方向,并且假如需要,我们还要使能它。所有这些信号都是输出,因此我们把它们声明为输出,并且在定义信号初始状态之前,将这些输出使能。下面是一个演示以上步骤的例程: #define vdd 55 XGpioPs_SetDirectionPin(&Gpio, vdd, 1); XGpioPs_SetOutputEnablePin(&Gpio, vdd, 1); XGpioPs_WritePin(&Gpio, vdd, 1); OLED模块正确上电之后,我们现就可以给OLED模块发送命令了。 但发什么命令呢? 为了初始化OLED模块,我们需要配置它的构建控制器,这就需要发送一个23字节的配置字符串来把OLED控制器置为显示信息的状态。在下一期的博客中,接着我们会开始把显示的信息发送到OLED面板中,但是现在,我们需要通过OLED面板数字手册中提供的SPI链路来发送以下命令: 1. 关掉显示 2. 设置好时钟、频率、分频器和倍频器设置 3. 设置显示偏移和开始线 4. 配置好电源供应来驱动OLED面板 5. 配置好映射、扫描方向和引脚硬件配置 6. 设置预供电时段 7. 开启显示 如上面所说,这7个命令需要23个字节。为了简化该过程,我声明了一个包含了所有这些配置字的u8数组,我们写SPI总线的时候可以把它们循环发送出去。在配置文件的最后,我们可以看到OLED已经启动了,虽然上面还没有任何显示的内容。下面是配置代码的片段: u8 init_vector[23] = {0xae, 0xd5, 0x80, 0xa8, 0x1f, 0xd3, 0x00, 0x40, 0x8d, 0x14, 0xa1, 0xc8, 0xda, 0x02, 0x81, 0x8f, 0xd9, 0xf1, 0xdb, 0x40, 0xa4, 0xa6, 0xaf}; for(i =0; i<23; i++){ wr_buff[0] = (u8) init_vector[i]; XGpioPs_WritePin(&Gpio, dc, 0); // 设置DC为命令 XSpiPs_SetSlaveSelect(&SpiInstance_EMIO, 0x01); //选择从机 XSpiPs_PolledTransfer(&SpiInstance_EMIO, wr_buff, NULL, 1); //写控制字 XGpioPs_WritePin(&Gpio, dc, 1); // 设置DC为数据 } |
|||||||||||||||||||||||||
共1条 1/1 1 |