研究了幾天的F4的FSMC方式驅動觸摸屏,得到一些認識,現(xiàn)在列舉如下,流水帳般沒有組織的記錄僅供自己以后參考
使用的是一款叫微雪電子的F407的開發(fā)板,但是他們的客服卻不太愿解答用戶提出的問題。
觸摸屏是以前購買火牛的時候帶的一塊LCD屏,屏上有HY32D字樣,里面含有控制電路,相關硬件是SSD1289和ADS7843,SSD1289控制LCD,ADS7843通過SPI控制觸摸屏。
配合開發(fā)板附帶的測試代碼,總是不明白FSMC的工作原理,因為沒有看到如何選擇哪個塊,哪個區(qū),而且硬件電路也沒看很懂。
總結如下
1、NEx是四個塊的第一塊的4個區(qū)(每個64M)的選擇信號,比如你選擇FSMC_Bank1_NORSRAM4,即NE4,你要做的就是把NE4的GPIO腳設置成復用,其他就不用管了,因為這個NE4會自動控制,不需要人為控制它的高低,比如在讀寫數(shù)據(jù)的時候它自動會低,所以硬件上可以將這個腳跟LCD的片選CS接一起。
2、相關的還有RD、WR腳也不需要自己控制,復用完就可以了
3、還有文檔里有HADDR[27:26]這個量,搞了半天,原來這貨是內部的,你是看不到,控制不了的,它的意思是說第一塊的四個區(qū)的選擇可以表現(xiàn)到這2bit上,就是說,你選了NE4,HADDR[27:26]的值就是11;選了NE1,HADDR[27:26]的值就是00。
4、看下面的圖,這個LCD的CS由三個腳控制,看了下這個74LVC139,發(fā)現(xiàn)它的規(guī)律有一項是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一直拉高,所以在讀寫數(shù)據(jù)的時候NE4又會自動變低,這個時候的LCD_CS 就低了,此時數(shù)據(jù)讀寫什么的都不成問題了。其實可以看到這個地址的高8位--0x6C的后4bit是1100,其中11按照地址總線算應該是第27、26位,因為是16位寬度的,所以地址都右移了一位,那么A23和24對應的就是1100的00兩位,所以是0x6F了。
5、其中一位RS比較重要,因為這個腳是讀寫數(shù)據(jù)或者命令的選擇腳,為高寫數(shù)據(jù),為低寫命令,所以地址就變成了0x6F000000和0x6F010000,因為這個電路把A15接到RS上了