AM3730 GPMC匯流排與FPGA通訊

2021-06-06 20:08:49 字數 1208 閱讀 7335

最近這一兩個月研究am3730的gpmc與fpga的通訊,我負責的主要是涉及到gpmc這一塊,由於之前就沒有linux基礎,剛開始的時候進展很慢,還時不時的面臨來自外界的壓力,所以那會很痛苦。前乙個月用來熟悉linux和摸清乙個方向,摸清gpmc在核心的目錄之後,開始真正的gpmc之旅。

整個gpmc做完之後會發現其實它很簡單,只是在剛開始做的時候會對它的控制機制不太清楚,花費不少時間去讀技術手冊和到ti的官網查。gpmc相比於我以前所做過的微控制器,主要有兩點大的區別。第一是gpmc的片選定址機制,第二是gpmc的資料輸出時的寫法。

首先來講講gpmc的片尋,gpmc總共有八個片尋cs0-cs7,其中cs0-1是用來做flash的,和fpga通訊可以從cs2-cs7裡面選。在gpmc的暫存器裡,一般用到的也就是config1-config7這七個配置暫存器,關於片尋的在config7裡。config7的意義在於,當處理器檢測到你往乙個位址裡寫資料,如果這個位址在gpmc的位址範圍內的話(對am3730是0x00000000-0x40000000),它就將位址送到gpmc的位址解碼器,在位址解碼器裡,它將這個位址與各個config7裡的掩碼位相與,如果相與後得到的新位址與config7的base address相同,則相應的片尋位置位,就是變成低電平。

理解了片尋的置位過程後,再來講講gpmc資料輸出。以前做微控制器的時候,微控制器總會為你提供乙個data暫存器或者輸出埠的位址,往這兩個的位址裡寫好資料它會自動按規則將資料送到埠輸出,依照這樣的思路我在3730的技術手冊裡不斷的找gpmc資料暫存器或者是輸出埠的位址位址,找了好久沒找到,後來我分析網口和flash的**時發現,他們對硬體位址的寫入操作只涉及到config1-7這七個暫存器,並沒有特定的位址暫存器或者埠位址,然後直接往config7申請好的位址裡寫資料就行了,以此我就猜測gpmc的位址資料輸出都是由硬體自動完成的,根本不需要有特定的資料暫存器,或者可以理解為申請好的與片尋對應的位址空間都是資料暫存器,往這些位址裡寫資料就能直接在輸出的資料埠檢測到,同時位址線的輸出也是由3730的硬體自動完成的,只要是在片尋位址空間內的位址,他都會往gpmc的位址線上輸出。後來用示波器來檢測確實證實了我這一猜想,對我來說這有點像是顛覆了我對資料口控制的認識,只能說硬體的設計越來越智慧型化,很多協議和時序上的東西越來越多由硬體自己就完成,而減少了開發人員在硬體上所耗費的時間。

理解了這兩點,其實gpmc就做的差不多了,接下來的就只是在時序上與下位機的匹配問題,調一調時序就基本上能通訊了。

BZOJ3730 點分樹 震波

鏈結自己找,bzoj還沒開 也很顯然是點分樹維護,對每個點開兩個樹狀陣列,維護點分樹上子樹之和,然後修改詢問仍然暴力爬樹,詢問也是用兩個樹狀陣列作差消掉當前子樹影響 code include using namespace std inline intread while isdigit ch re...

AM解調的FPGA實現

功能 am解調 平台 vivado 2016.4 和 matlab r2017a 簡單說明一下對資料取反的思路 如果是無符號數,則不存在符號位,也就是說資料都是正數,不需要取絕對值 如果是有符號數,通過檢測最高位的符號位,如果符號位是1,則表示資料是負數,對資料取反,如果符號位是0,則表示資料是正數...

動態點分治 bzoj 3730,bzoj 1095

總結一下動態點分治的模板。對於乙個樹,把它點分的同時記錄每個點的所有父親 logn個 並記錄點距其父親的距離。具體實現就是dfs的時候fa x dep x u,dis x dep x d bzoj1095 您需要寫乙個程式支援反轉點的顏色,求距離最遠的黑色點對的距離。解析 在每個點u存乙個堆st記錄...