在MAPS-Dock上,板载了一个128x64单色LCD屏,而在K64-SDK开发包中,给出了相应的示例代码,本帖就根据官方提供的示例,来驱动MAPS-Dock上LCD的显示。
一、硬件分析
1 MAPS-Dock上的LCD屏
在MAPS-Dock上,板载了一个单色LCD显示屏,如下图所示:
在板子的背面,如下图所示,可见该模块用了8根线,进行连接驱动控制
2 MAPS-Dock原理图
MAPS-Dock上关于LCD的原理图,如下图所示,它使用了SPI接口来驱动,而由于在MAPS-K64板上的控制芯片,含有多个(3个)SPI接口,故需要通过DIN接口,来决定到底LCD连接到了那一个SPI上。
3 MAPS-K64原理图
经查,最后定位到如下图的位置,可见,使用了SPI2来驱动MAPS-Dock上的LCD。
二、软件实现
1 DSPI接口代码
(1)第一次听说DSPI接口,它到底和SPI有什么关系呢?在K64P144M120SF5数据手册中,查到了下面一段话:
大体说,DSPI的全称是DMA SPI接口,在主从工作模式下,它提供一个同步的串行总线,而且传输的特性是可以编程定义的,具体的信息,查找对应的参考手册。而从K64P144M120SF5RM参考手册中,可得知,MAPS-K64上的控制芯片,含有3个DSPI模块,分别为SPI0、SPI1、SPI2,SPI的时钟来自总线时钟。SPI模块含有一个FIFO的缓冲区,而且支持DMA模式,可以大提高SPI总线的读写速度和传输效率。也就是说,DSPI相对于传统的SPI,传输可以控制,速度更快等。
(2)相关代码
在抽像层,根据用户手册,对DSPI进行了最基本的定义
在驱动层,分别定义了DSPI工作在主模式和从模式的相关驱动代码以及相关通用的函数接口
2 LCD显示代码
在K64-SDK中,提供了一个驱动示例,在示例中,封装了驱动MAPS-Dock上LCD的驱动函数,主要包括:
其中LCD_PutChar是用来显示字符的,LCD_PutString是用来显示字符串的,LCD_FillAll是用来显示图片的。
3 测试代码
(1)将示例中的源码,移植到模板工程中
(2)具体的代码,可查看示例代码,具体位于MAPS-K64_KSDK_1.0.0demosdspi_lcdsrc。这里有说的是,使用SPI,首先要对引脚的复用进行设置,如下
具体的功能,为什么是kPortMuxAlt2,由参考手册中定义,如下图所示:
(3)显示字符串
三、总结
1 DSPI第一次接触,有点陌生,需要继续学习,尤其是相关参考手册和数据手册
2 LCD显示可以正常,模块化的提供示例代码后,可以方便后续开发,提高效率
3 MAPS-Dock下载程序不是可取,经常卡死
|