今天使用LPC54102的SPI口来驱动TFT LCD,SPI的原理就不具体介绍了,硬件有4根线:SSEL、SCK、MISO、MOSI。驱动ILI9163的TFT屏只需要主机发送数据,因此SPI口接3根线即可:片选SSEL0、时钟SCK、主机输出MOSI。此外还要用1个GPIO口连接到TFT屏的A0(寄存器选择),具体参照http://bbs.eeworld.com.cn/thread-461864-1-1.html。
LPCOpen Platform for LPC5410Xmicrocontrollers文档中给出了SPI口的配置过程,这里进一步说明一下。
1. 初始化SPI:配置SPI口和SPI引脚,使能时钟
这里选择了SPI0,对应板子上的J3口:P0.11-P0.14。
使能时钟如下:
2. 开辟内存,用于drivercontext
3. 初始化驱动:调用ROM_SPIM_Init()函数,配置SSEL0有效为0
4. 配置SPI传输参数:
比特率设为1MHz,延时均设为0。
根据ILI9163的时序可确定:低位先发送,数据位为8位
选择对应的SPI模式:SPI空闲时SCK时钟极性为低电平,在SCK的奇数边沿采集数据,选择模式0,如下图:
5. 注册回调函数
6. 设置传输缓存区、片选线等
由于主机不需要接收数据,这里设为Receive Ignore
7. 开始传输
ROM_SPIM_Transfer(spimHandle, &mXfer);
8. 一直传输直至完成
while (mXfer.status == ERR_SPI_BUSY) {
ROM_SPIM_TransferHandler(spimHandle);
}
通过上面的配置可完成SPI0口的数据传输,实现TFT驱动的3个基本函数:
void write_command(uint_least8_t addr1);//写命令
void write_para(uint_least8_t para1); //写命令的参数
void write_data(uint_least16_t dat); //写数据
从而将TFT驱动程序移植到LPC54102上,相比GPIO口模拟SPI时序的方式,硬件SPI方式虽然配置复杂,但不需要写程序实现发送的时序,有效利用了片内资源,也更为可靠。
原文地址 http://bbs.eeworld.com.cn/thread-461865-1-1.html