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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32通過FSMC進行數據讀寫信號時序

[復制鏈接]
跳轉到指定樓層
樓主
ID:85764 發表于 2015-7-15 16:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
      
因為工作項目需求,需要使用STM32與FPGA通信進行聯合開發,兩者通信,自然首選STM32自帶的FSMC通信接口。為了搞清楚FSMC的時序與尋址細節,特使用邏輯分析儀對FSMC的8位、16位、32位數據寫操作進行了抓取分析,從而得到了FSMC的時序與尋址細節。時間匆忙,少了很多廢話的部分,具體的后面再完善吧,具體意圖見本文標題。腰好痛啊,最近身體和大腦一直超負荷運轉,是該出去轉轉,出去運動運動了。
8位操作方式:
對地址65534寫8位的數i代碼
      *(vu8*)(Bank1_SRAM3_ADDR+65534)=i;
      i++;
   
對地址65534寫8位的數i時序波形
對地址65535寫8位的數i代碼
      *(vu8*)(Bank1_SRAM3_ADDR+65534)=i;
      i++;
   
對地址65535寫8位的數i時序波形
STM32通過FSMC寫8位數據
C代碼中地址為實際要寫入的地址字節,若將FSMC 的數據位寬配置為16位,則每次尋址實際都尋址了兩個字節,例如,FSMC的地址總線值為0,則實際位于地址0有16位,兩個字節,因此需要通過高低字節控制信號來區分,即LB和UB信號(注意:所有控制信號都是低電平有效)。例如當希望對地址0上的高字節進行尋址時,則FSMC總線地址值任然為0,同時LB無效(高電平)UB有效(低電平),即可實現對地址0上的高字節單獨尋址。假設C代碼中的要寫入的地址為C_Addr,則實際FSMC總線上地址線的值與LB、UB值的狀態為:
FSMC_ADDR = C_Addr/2
FSMC_LB = C_Addr%2
FSMC_UB =~ (C_Addr%2)
16位操作方式:
對地址65534寫16位的數6555代碼
      *(vu16*)(Bank1_SRAM3_ADDR+65534)=6555;
   
對地址65534寫16位的數6555時序波形

對地址65535寫16位的數6555代碼
      *(vu16*)(Bank1_SRAM3_ADDR+65535)=6555;
   
對地址65535寫16位的數6555時序波形
STM32通過FSMC寫16位數據
C代碼中地址為實際要寫入的地址字節,若將FSMC 的數據位寬配置為16位,則每次尋址實際都尋址了兩個字節,例如,FSMC的地址總線值為0,則實際位于地址0有16位,兩個字節,因此需要通過高低字節控制信號來區分,即LB和UB信號(注意:所有控制信號都是低電平有效)。例如當希望對地址0上的高字節進行尋址時,則FSMC總線地址值任然為0,同時LB無效(高電平)UB有效(低電平),即可實現對地址0上的高字節單獨尋址。假設C代碼中的要寫入的地址為C_Addr,則實際FSMC總線上地址線的值與LB、UB值的狀態為:
如果C_Addr為偶數,則
FSMC_ADDR = C_Addr/2
FSMC_LB = FSMC_UB = 0;
FSMC一次性即可完成16位數據的寫入。
如果C_Addr為奇數,則實際FSMC會將數據分成兩個8位的數據來進行操作,因此效率會低很多。
先寫C_Addr,寫入數據字節為待寫入數據的高字節
FSMC_ADDR = C_Addr/2
FSMC_LB =1;
FSMC_UB =0;
然后寫C_Addr + 1地址,寫入數據字節為待寫入數據的低字節
FSMC_ADDR = (C_Addr + 1) /2
FSMC_LB =0;
FSMC_UB =1;
32位操作方式:
對地址65534寫32位的數1265536(0x134F80)代碼
      *(vu32*)(Bank1_SRAM3_ADDR+65534)= 1265536;
   
對地址65534寫32位的數0x134F80時序波形
對地址65535寫32位的數1265536(0x134F80)代碼
      *(vu32*)(Bank1_SRAM3_ADDR+65535)= 1265536;
   
對地址65535寫32位的數0x134F80時序波形
對地址65536寫32位的數1265536(0x134F80)代碼
      *(vu32*)(Bank1_SRAM3_ADDR+65536)= 1265536;
   
對地址65536寫32位的數0x134F80時序波形
對地址65537寫32位的數1265536(0x134F80)代碼
      *(vu32*)(Bank1_SRAM3_ADDR+65537)= 1265536;
   
對地址65537寫32位的數0x134F80時序波形
STM32通過FSMC寫32數據
C代碼中地址為實際要寫入的地址字節,若將FSMC 的數據位寬配置為16位,則每次尋址實際都尋址了兩個字節,例如,FSMC的地址總線值為0,則實際位于地址0有16位,兩個字節,因此需要通過高低字節控制信號來區分,即LB和UB信號(注意:所有控制信號都是低電平有效)。例如當希望對地址0上的高字節進行尋址時,則FSMC總線地址值任然為0,同時LB無效(高電平)UB有效(低電平),即可實現對地址0上的高字節單獨尋址。假設C代碼中的要寫入的起始地址為C_Addr,則實際FSMC總線上地址線的值與LB、UB值的狀態為:
如果C_Addr為4的倍數,則FSMC首先在起始地址處寫入待寫入數據的低字節和次低字節:
FSMC_ADDR = C_Addr/2
FSMC_LB = FSMC_UB = 0;
然后FSMC再在起始地址+2處寫入待寫入數據的低字節和次低字節:
FSMC_ADDR = (C_Addr+2)/2
FSMC_LB = FSMC_UB = 0;
只需要兩次16位數據寫入操作即可完成一個32位數據的寫入,因此效率較高。
如果C_Addr為奇數,則實際FSMC會將數據分成兩個8位的數據和一個16位的數據來進行操作,需要3次寫入操作才能完成32位數據的寫入(效率較低)。
FSMC首先在起始地址(C_Addr)位置以8位寫入方式寫入待寫入數據的低字節:
FSMC_ADDR = C_Addr/2
FSMC_LB = 1;
FSMC_UB = 0;
然后FSMC再在起始地址+2處(C_Addr + 2)以16位數據方式寫入帶寫入數據的次低字節和次高字節:
FSMC_ADDR = (C_Addr+2)/2
FSMC_LB = FSMC_UB = 0;
最后FSMC再在起始地址+4處(C_Addr + 2)以8位寫入方式寫入待寫入數據的高字節:
FSMC_ADDR = (C_Addr+4)/2
FSMC_LB = 0;
FSMC_UB = 1;
小梅哥FPGA設計思想與驗證方法教程系列文檔
2015年07月10號于Snow Dream電子工作室




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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美v日韩 | 中文在线一区二区 | 日本一区二区高清不卡 | 色天堂影院| 欧美一区二区三区的 | 精品一区二区三区在线视频 | 福利视频网站 | 国产1区 | 免费能直接在线观看黄的视频 | h视频在线免费观看 | 国产在线一区二 | 日韩中文不卡 | 日本污视频 | 特级生活片 | 日韩在线观看中文字幕 | 久久久高清 | 一区视频在线 | 国产成人精品999在线观看 | 欧美日韩亚洲一区 | 亚洲精品一区中文字幕乱码 | 久久精品国产一区 | 日本精品一区二区在线观看 | 老外几下就让我高潮了 | 在线视频日韩精品 | 男女国产网站 | 91视频一区 | 国产99视频精品免费播放照片 | 久久久久欧美 | 午夜精品久久久久久 | 国产精品一区免费 | 精品一区二区在线看 | 男人的天堂在线视频 | 国产精品久久久久久久岛一牛影视 | 精品欧美一区二区在线观看欧美熟 | 美女在线观看av | 国产精品视频一二三区 | 国精品一区二区 | 伊人免费观看视频 | www.黄网| 精品久久久久久久久久久下田 | 91xxx在线观看 |