研究了几天的F4的FSMC方式驱动触摸屏,得到一些认识,现在列举如下,流水帐般没有组织的记录仅供自己以后参考
使用的是一款叫微雪电子的F407的开发板,但是他们的客服却不太愿解答用户提出的问题。
触摸屏是以前购买火牛的时候带的一块LCD屏,屏上有HY32D字样,里面含有控制电路,相关硬件是SSD1289和ADS7843,SSD1289控制LCD,ADS7843通过SPI控制触摸屏。
配合开发板附带的测试代码,总是不明白FSMC的工作原理,因为没有看到如何选择哪个块,哪个区,而且硬件电路也没看很懂。
总结如下 1、NEx是四个块的第一块的4个区(每个64M)的选择信号,比如你选择FSMC_Bank1_NORSRAM4,即NE4,你要做的就是把NE4的GPIO脚设置成复用,其他就不用管了,因为这个NE4会自动控制,不需要人为控制它的高低,比如在读写数据的时候它自动会低,所以硬件上可以将这个脚跟LCD的片选CS接一起。 2、相关的还有RD、WR脚也不需要自己控制,复用完就可以了 3、还有文档里有HADDR[27:26]这个量,搞了半天,原来这货是内部的,你是看不到,控制不了的,它的意思是说第一块的四个区的选择可以表现到这2bit上,就是说,你选了NE4,HADDR[27:26]的值就是11;选了NE1,HADDR[27:26]的值就是00。 4、看下面的图,这个LCD的CS由三个脚控制,看了下这个74LVC139,发现它的规律有一项是1脚为低且2、3脚为高,7脚才为低。所以我一直没搞明白的两句代码 #define LCD_REG (*((volatile unsigned short *) 0x6F000000)) /* RS = 0 */
#define LCD_RAM (*((volatile unsigned short *) 0x6F010000)) /* RS = 1 */
就可以解释了。因为这个地址如果按手册上讲应该是可以写成0x6cxxxxxx的,为什么写成0x6F呢,就是为了把A23和A24一直拉高,所以在读写数据的时候NE4又会自动变低,这个时候的LCD_CS 就低了,此时数据读写什么的都不成问题了。其实可以看到这个地址的高8位--0x6C的后4bit是1100,其中11按照地址总线算应该是第27、26位,因为是16位宽度的,所以地址都右移了一位,那么A23和24对应的就是1100的00两位,所以是0x6F了。
file:///C:/Documents%20and%20Settings/stephen/Application%20Data/Tencent/Users/15601652/QQ/WinTemp/RichOle/9@]%@VHYI)BPYRIQF((_RRR.jpg
5、其中一位RS比较重要,因为这个脚是读写数据或者命令的选择脚,为高写数据,为低写命令,所以地址就变成了0x6F000000和0x6F010000,因为这个电路把A15接到RS上了
|