久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2346|回復: 0
打印 上一主題 下一主題
收起左側

STM32 FSMC總線深入研究

[復制鏈接]
跳轉到指定樓層
樓主
ID:140343 發表于 2016-9-25 11:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

由于CPU與FPGA通信的需要,以及對8080總線的熟悉,首選采用了STM32的FSMC總線,作為片間通信接口。FSMC能達到16MHz的寫入速度,理論上能寫20fps的1024*768的圖片哈哈。(當然實際上是不可能的,就算是DMA傳輸,數據源也跟不上,實際上刷模擬的圖片每秒10fps,刷的很high)當然這不是本篇的要點,這里主要研究STM32的FSMC接口,將速度提升到極限。
1. FSMC協議分析
如下為ILI9325的8080接口的協議
CS(片選信號):低電平片選有效,高電平失能(默認為高:失能)
RS(數據寄存器):低電平寫寄存器,高電平寫數據(默認為高:寫數據)FSMC默認為低。。。。
RD(讀信號) :低電平有效,上升沿寫入數據,高電平失能(默認為高,失能)
WR(寫信號) :低電平有效,上升沿寫入數據,高電平失能(默認為高,失能)
FSMC寫SRAM模式如下:
(1)讀操作
(2)寫操作
HCLK為系統時鐘72MHz
綜上,分析出FSMC與8080接口協議異同點
(1)同:CS,RS,RD有效電平都一樣,單個字節的寫入與讀取時序完全一樣
(2)異:
A:8080 默認RS為高,而FSMC默認RS為低
B:8080接口協議能保持CS,RS等有效,連續寫數據,而FSMC以此只能輸出一個數據。
C:8080協議沒有地址線,而FSMC還有地址線,這使得數據輸出不連續。
2. FSMC時序研究
下圖為FSMC寫命令與數據的時序圖,從中根據上圖可以分析出FSMC可以實現16M的數據寫入。FSMC的信號線翻轉非常快,這使得IC或者FPGA時序設計上得非常嚴謹。FSMC最大實現了72MHz(66.7到100MHz之間,實際為72MHz,HCLK)的翻轉速度,這要求外部器件支持那么高的速率。
寄存器配置(寄存器+數據)
連續數據寫入(0xBB:寫數據開始),命令后,RS默認拉低(FSMC和標準不一樣的地方)
數據建立很快
寫數據,然后默認RS拉低
整體的時序可模擬為:
task task_writecmd;
input [15:0] cmd;
begin
mcu_cs = 0;
mcu_rs = 0;
mcu_data = cmd;
#20;
mcu_we = 0;
#20;
mcu_we = 1;
#15;
mcu_rs = 1;
mcu_cs = 1;
#20;
end
endtask
task task_writedata;
input [15:0] data;
begin
mcu_cs = 0;
mcu_rs = 1;
mcu_data = data;
#20;
mcu_we = 0;
#20;
mcu_we = 1;
#15;
mcu_rs = 1;
mcu_cs = 1;
#20;
end
endtask
3. FSMC接口初始化
根據手冊,相關參數如下表所示。這里我發現所謂最小值還能設置為最小,但實際速度差不多。FSMC協議時間參數如下所示:
有人跟我說,手冊是保守的;有人跟我說,在小就是默認值了。我不太理解。感覺速度每提升,應該在小就是默認了。不過,反正我追求速度的極限。
以下是FSMC-SRAM模式下的初始化代碼,分享的同時,希望對你有用。
  1. /* Private typedef -----------------------------------------------------------*/
  2. typedef struct
  3. {
  4.   vu16 LCD_REG;
  5.   vu16 LCD_RAM;
  6. } LCD_TypeDef;
  7. #define    LCD_WriteCmd(cmd)    LCD->LCD_REG = cmd
  8. #define    LCD_WriteData(data)    LCD->LCD_RAM = data


  9. /* LCD is connected to the FSMC_Bank1_NOR/SRAM4 and NE4 is used as ship select signal */
  10. #define LCD_BASE    ((u32)(0x60000000 | 0x0C000000))
  11. #define LCD         ((LCD_TypeDef *) LCD_BASE)

  12. void LCD_FSMCConfig(void)
  13. {   
  14.   FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  15.   FSMC_NORSRAMTimingInitTypeDef  p;

  16. /*-- FSMC Configuration ------------------------------------------------------*/
  17. /*----------------------- SRAM Bank 4 ----------------------------------------*/
  18.   /* FSMC_Bank1_NORSRAM4 configuration */
  19.     //標準
  20. //     p.FSMC_AddressSetupTime = 1;
  21. //     p.FSMC_AddressHoldTime = 2;
  22. //     p.FSMC_DataSetupTime = 2;   
  23. //     p.FSMC_BusTurnAroundDuration = 1;
  24. //     p.FSMC_CLKDivision = 1;
  25. //     p.FSMC_DataLatency = 2;
  26.    
  27.     //超快
  28.   p.FSMC_AddressSetupTime = 0;
  29.   p.FSMC_AddressHoldTime = 0;
  30.   p.FSMC_DataSetupTime = 1;   
  31.   p.FSMC_BusTurnAroundDuration = 0;
  32.   p.FSMC_CLKDivision = 0;
  33.   p.FSMC_DataLatency = 0;


  34.    
  35.     p.FSMC_AccessMode = FSMC_AccessMode_A;

  36.   /* Color LCD configuration ------------------------------------
  37.      LCD configured as follow:
  38.         - Data/Address MUX = Disable
  39.         - Memory Type = SRAM
  40.         - Data Width = 16bit
  41.         - Write Operation = Enable
  42.         - Extended Mode = Enable
  43.         - Asynchronous Wait = Disable */
  44.   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
  45.   FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  46.   FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  47.   FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  48.   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  49.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  50.   FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  51.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  52.   FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  53.   FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  54.   FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  55.   FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;    //2.0
  56.   FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  57.   FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  58.   FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  59.   FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  

  60.   /* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */
  61.   FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
  62. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本精品久久久久久久 | 久久综合香蕉 | 日日av| ririsao久久精品一区 | 久久国产麻豆 | 国产精品乱码一区二区三区 | 九九精品网 | 麻豆久久久久久 | 特级毛片www| 欧美美女爱爱视频 | 狠狠久| 伊人网99 | 国产a区 | 精品国产一级 | 精品欧美二区 | 日韩中文字幕一区 | 手机在线一区二区三区 | 亚洲欧美在线观看视频 | 成人在线视频网站 | 天天看天天操 | 欧美极品少妇xxxxⅹ免费视频 | 亚洲+变态+欧美+另类+精品 | 久久久精 | 亚洲区一区二 | 在线观看视频福利 | 黄色免费在线观看网站 | 99成人 | av影音资源 | 婷婷综合激情 | 亚洲精品在线免费观看视频 | 天天干天天操天天看 | 日韩精品久久一区二区三区 | 亚洲a一区二区 | 久久久久久久久91 | av黄色免费在线观看 | 亚洲成av人影片在线观看 | 嫩草一区二区三区 | 九九成人 | 精品一区二区三区在线播放 | 久久亚洲一区二区 | 国产欧美一区二区三区日本久久久 |