<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32之FSMC

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏

          STM32 FSMC總線深入研究

          本文引用地址:http://www.ex-cimer.com/article/201611/316161.htm

          由于CPU與FPGA通信的需要,以及對8080總線的熟悉,首選采用了STM32的FSMC總線,作為片間通信接口。FSMC能達(dá)到16MHz的寫入速度,理論上能寫20fps的1024*768的圖片哈哈。(當(dāng)然實際上是不可能的,就算是DMA傳輸,數(shù)據(jù)源也跟不上,實際上刷模擬的圖片每秒10fps,刷的很high)當(dāng)然這不是本篇的要點,這里主要研究STM32的FSMC接口,將速度提升到極限。

          1. FSMC協(xié)議分析

          如下為ILI9325的8080接口的協(xié)議

          CS(片選信號):低電平片選有效,高電平失能(默認(rèn)為高:失能)

          RS(數(shù)據(jù)寄存器):低電平寫寄存器,高電平寫數(shù)據(jù)(默認(rèn)為高:寫數(shù)據(jù))FSMC默認(rèn)為低。。。。

          RD(讀信號) :低電平有效,上升沿寫入數(shù)據(jù),高電平失能(默認(rèn)為高,失能)

          WR(寫信號) :低電平有效,上升沿寫入數(shù)據(jù),高電平失能(默認(rèn)為高,失能)

          FSMC寫SRAM模式如下:

          (1)讀操作

          (2)寫操作

          HCLK為系統(tǒng)時鐘72MHz

          綜上,分析出FSMC與8080接口協(xié)議異同點

          (1)同:CS,RS,RD有效電平都一樣,單個字節(jié)的寫入與讀取時序完全一樣

          (2)異:

          A:8080 默認(rèn)RS為高,而FSMC默認(rèn)RS為低

          B:8080接口協(xié)議能保持CS,RS等有效,連續(xù)寫數(shù)據(jù),而FSMC以此只能輸出一個數(shù)據(jù)。

          C:8080協(xié)議沒有地址線,而FSMC還有地址線,這使得數(shù)據(jù)輸出不連續(xù)。

          2. FSMC時序研究

          下圖為FSMC寫命令與數(shù)據(jù)的時序圖,從中根據(jù)上圖可以分析出FSMC可以實現(xiàn)16M的數(shù)據(jù)寫入。FSMC的信號線翻轉(zhuǎn)非??欤@使得IC或者FPGA時序設(shè)計上得非常嚴(yán)謹(jǐn)。FSMC最大實現(xiàn)了72MHz(66.7到100MHz之間,實際為72MHz,HCLK)的翻轉(zhuǎn)速度,這要求外部器件支持那么高的速率。

          寄存器配置(寄存器+數(shù)據(jù))

          連續(xù)數(shù)據(jù)寫入(0xBB:寫數(shù)據(jù)開始),命令后,RS默認(rèn)拉低(FSMC和標(biāo)準(zhǔn)不一樣的地方)

          數(shù)據(jù)建立很快

          寫數(shù)據(jù),然后默認(rèn)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接口初始化

          根據(jù)手冊,相關(guān)參數(shù)如下表所示。這里我發(fā)現(xiàn)所謂最小值還能設(shè)置為最小,但實際速度差不多。FSMC協(xié)議時間參數(shù)如下所示:

          有人跟我說,手冊是保守的;有人跟我說,在小就是默認(rèn)值了。我不太理解。感覺速度每提升,應(yīng)該在小就是默認(rèn)了。不過,反正我追求速度的極限。

          以下是FSMC-SRAM模式下的初始化代碼,分享的同時,希望對你有用。

          /* Private typedef -----------------------------------------------------------*/typedef struct{vu16 LCD_REG;vu16 LCD_RAM;} LCD_TypeDef;#define    LCD_WriteCmd(cmd)    LCD->LCD_REG = cmd#define    LCD_WriteData(data)    LCD->LCD_RAM = data/* LCD is connected to the FSMC_Bank1_NOR/SRAM4 and NE4 is used as ship select signal */#define LCD_BASE    ((u32)(0x60000000 | 0x0C000000))#define LCD         ((LCD_TypeDef *) LCD_BASE)void LCD_FSMCConfig(void){    FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef  p;/*-- FSMC Configuration ------------------------------------------------------*//*----------------------- SRAM Bank 4 ----------------------------------------*//* FSMC_Bank1_NORSRAM4 configuration *///標(biāo)準(zhǔn)//     p.FSMC_AddressSetupTime = 1;//     p.FSMC_AddressHoldTime = 2;//     p.FSMC_DataSetupTime = 2;    //     p.FSMC_BusTurnAroundDuration = 1;//     p.FSMC_CLKDivision = 1;//     p.FSMC_DataLatency = 2;//超快p.FSMC_AddressSetupTime = 0;p.FSMC_AddressHoldTime = 0;p.FSMC_DataSetupTime = 1;    p.FSMC_BusTurnAroundDuration = 0;p.FSMC_CLKDivision = 0;p.FSMC_DataLatency = 0;p.FSMC_AccessMode = FSMC_AccessMode_A;/* Color LCD configuration ------------------------------------LCD configured as follow:- Data/Address MUX = Disable- Memory Type = SRAM- Data Width = 16bit- Write Operation = Enable- Extended Mode = Enable- Asynchronous Wait = Disable */FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;    //2.0FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  /* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);}


          關(guān)鍵詞: STM32FSM

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();