同步佇列序列介面QSPI的應用

2021-06-20 11:26:02 字數 3279 閱讀 9830

1 qspi工作原理

qspi模組的結構如圖1所示。與spi相比,qspi結構最大的特點是以80位元組的ram取代了spi的傳送和接收資料暫存器。80位元組的ram分成3部分:16字的傳送ram,16字的接收ram和16位元組的命令ram。這3部分形成了具有16個qspi傳輸控制組的傳輸佇列

,每個qspi傳輸控制組由1個命令ram、1個傳送ram和1個接收ram組成。每個qspi傳輸的資料長度、片選等資訊可由該qspi傳輸控制組的命令ram單獨決定。

由於spl只有1個8位的傳送資料暫存器,所以cpu每次最多只能準備乙個位元組的待傳送資料。而qspi擁有具有16個qspi傳輸控制組的傳輸佇列,所以cpu每次最多可以準備16個待傳輸的資料,並且可以通過命令ram設定每個待傳輸資料的長度。

在qspi模組的qwr暫存器中,newqp和endqp域分別決定了傳輸佇列的起始點和結束點。起始點和結束點可以是16個qspi

傳輸控制組的任意乙個。當qspi傳輸啟動時,qspi模組將從起始點開始依次傳送準備好的資料直到結束點,整個過程無需cpu干預。典型的qspi傳輸流程如圖2所示,其中qp為傳輸佇列指標,指向即將傳輸的資料。

qspi模組具有7個引腳:qspi_din為序列資料輸入引腳;qspi_dout為序列資料輸出引腳;qspi_clk為序列時鐘輸出;qspi_cs[3:0]為片選訊號,通過外接解碼器可以選擇多達16個裝置。一次典型的16位qspi傳輸時序如圖3所示。該時序假設片選訊號低電平有效,時鐘空閒時為低電平,在時鐘的下降沿取樣序列資料。其中,時鐘空閒電平和取樣時鐘沿由qmr暫存器的cpol和cpha域決定。

2 4線電阻式觸控螢幕晶元ads7843簡介

ads7843是一款具有同步序列介面的4線電阻式觸控螢幕控制晶元,具有12位模/數轉換精度。ads7843的4個模擬電壓輸入引腳x+、x-、y+、y-連線觸控螢幕的4個電極,觸控螢幕通過這4個引腳將觸點電壓送到ads7843進行量化。具體來說,如果要獲取觸點y座標,ads7843會在y十和y-之間施加乙個電壓,觸點將x+與y+和y-間電阻網路的一點導通,與觸點位置相關的分壓值就會通過x+送入ads7843,通過量化這個分壓值就可以獲取觸點的y座標。x座標的獲取也是相同的道理。量化台階由基準電壓和每個樣點量化後的位數n決定,為基準電壓的1/2」。

2.1 ads7843工作模式

ads7843具有兩種工作模式:單端模式和差分模式。兩種模式的區別在於基準電壓採用了不同的構成方式。基準電壓是ads7843內部模/數轉換模組的正負參考電壓+ref和-ref之差。當處於單端模式時,+ref來自外部參考電壓輸入,一般選取ads7843的供電電壓+ vcc,-ref接地,所以基準電壓為+vcc。假設在該模式下獲取觸點y座標,由於+vcc是通過三極體施加在y+和y一之間,所以三極體的導通電阻始終會分去一部分電壓。這樣無論觸點在**,都不可能獲得滿量程。這個問題可以通過工作在差分模式解決。在該模式下,當要獲取觸點y座標時,晶元內部自動將y+與+ref相連,y-與-ref相連,這樣y+與y-之間的電壓始終為基準電壓,消除了**管導通電阻的影響。

2.2 ads7843的數字介面

ads7843的數字介面包括片選cs、序列資料輸入din、序列資料輸出dout、時鐘輸入dclk、中斷訊號penirq五個引腳,能與具有序列介面的微控制器或數字訊號處理器進行資料交換。處理器與ads7843之間需要24個序列時鐘週期才能完成一次完整的轉換。前8個時鐘週期用於向ads7843提供乙個控制位元組,該控制位元組組成如下:

s位為「1」時表明控制位元組的開始;a[2:0]用於選擇量化通道,「001」選擇x通道,「101」選擇y通道;mode位為「1」時選擇8位量化精度,為「0」時選擇12位量化精度;ser/dfr位為「1」時選擇單端模式,為「0」時選擇差分模式;pd[1:0]用於選擇一種省電模式。控制字傳輸完後,接下來的16個時鐘週期用於傳輸量化後的座標資料。

ads7843數字介面還有以下特點:片選低電平有效,時鐘空閒時為低電平,時鐘的上公升沿取樣序列資料。

3 基於coldfire處理器qspi介面的觸控螢幕驅動設計

3.1 硬體電路

觸控螢幕控制晶元ads7843與coldfire系列處理器的硬體連線圖如圖4所示。

ads7843數字介面的4個引腳與coldfire處理器qs-pi模組對應引腳相連,中斷訊號引腳penirq與處理器外部中斷引腳irq4相連。注意,需要10kω上拉電阻。

3.2 軟體設計

從觸控發生到獲取觸控點座標的過程如下:觸控發生時,ads7843會通過penirq引腳觸發乙個中斷,在中斷子程式中首先應延遲10~20 ms以去除抖動帶來的影響,然後向ads7843傳送控制字獲取x、y座標。

獲取乙個座標的值需要向ads7843輸入24個時鐘週期。對qspi模組來說,可以把這24個週期作為3次8位的傳輸佇列,或1次8位、1次16位的傳輸佇列。這裡選擇3次8位傳輸佇列的方式。qspi初始化**如下:

獲取y座標函式**同獲取x座標函式**基本一致,只需要將傳送給ads7843的控制命令修改為0xd0,表示選擇y通道,12位精度,差分模式。

為觀察qspi模組與ads7843是否能正確地進行通訊,使用agilent1673g邏輯分析儀對4個引腳的時序進行了捕捉。圖5顯示了讀取x座標時的時序圖,4個引腳從上到下依次是片選cs、序列時鐘dclk、序列資料輸入din、序列資料輸出dout。從圖中可以清楚地看到,在前8個時鐘週期,處理器向ads7843輸入了控制字;在第10個時鐘處,ads7843開始輸出12位的量化資料;最後3個時鐘,ads7843將輸出線拉低。

結 語

qspi模組的佇列機制加快了資料傳輸速度,減少了cpu的干預。除此之外,該模組提供了對時鐘有效電平、取樣沿、片選電平、傳輸資料位數等的自由配置,使其能靈活地與各種具有序列介面的裝置進行通訊。

同步佇列的死鎖問題

main.m import import person.h int main int argc,const char argv nslog end 死鎖2 外層 在主線程佇列裡面新增乙個任務,因為是非同步,所以不用任何新增的任務執行完就可以繼續往下走,因此能夠輸出end 裡層 用同步新增任務到主線程...

同步器AQS中的同步佇列與等待佇列

在單純地使用鎖,比如reentrantlock的時候,這個鎖元件內部有乙個繼承同步器aqs的類,實現了其抽象方法,加鎖 釋放鎖也只是涉及到aqs中的同步佇列而已,那麼等待佇列又是什麼呢?當使用condition的時候,等待佇列的概念就出來了。condition的獲取一般都要與乙個鎖lock相關,乙個...

CLH同步佇列是怎麼實現非公平和公平的

the wait queue is a variant of a clh craig,landin,and hagersten lock queue.clh locks are normally used for spinlocks 1 名稱 clh 由三個人名字組成 craig,landin,an...