1. 程式人生 > >理解嵌入式開發中的一些硬體相關的概念

理解嵌入式開發中的一些硬體相關的概念

I/O埠

    前面提到了外設(晶片)),現在是對外設進行分類的時候了。大體上外設分為兩類,一類是儲存器外設,而另一類是非儲存器外設,後者常被稱之為I/O裝置,這裡的I/O是Input/Output的簡寫,即輸入、輸出。可見,I/O外設是一個非常寬泛的概念。對於儲存器外設,其特點是,它所佔用的空間是連續的一片。比如,SDRAM記憶體就是屬於儲存器外設,如果其容量是8M位元組,那麼其佔用的地址空間也會是8M的。與儲存器外設所不同的是,I/O外設所點用的地址一般都很少。比如一個I/O外設可能存在多個控制暫存器,這些控制暫存器從處理器來看就是多個I/O埠(地址),向這個地址寫資料就是向外設所對應的暫存器寫資料,反之,也可以是讀。比如,一個串列埠晶片可能存在多個暫存器,一個用來查詢晶片的狀態,一個用來設定晶片的功能,另一個用來讀取晶片從串列埠線所收到的資料,最後,還有一個用來向晶片寫資料以向串列埠線上傳送資料。對於這一串列埠晶片的暫存器,從處理器的角度來看,都是獨立的I/O埠。
        I/O埠存在讀、寫性問題,有的埠是隻讀的,有的埠是隻寫的,還有的埠是即可讀也可寫,其讀寫性是由外設晶片的暫存器所決定的,在晶片的資料手冊中能找到。需要指出的是,有些儲存器外設也存在I/O埠,以對其進行一定的控制。從I/O埠這一名字來看,對於處理器來說,就是對從外面讀入資料或是向外面輸出資料的一個介面總稱。

中斷

      中斷從硬體的角度來看就是一個能產生高、低電平的一根訊號線,但理解它需要從處理器的角度出發。我們說過了,處理器從微觀上看,所做的工作是按順序進行的,其對程式的處理只能是一條指令一條指令的執行。如果存在需要對外設晶片進行訪問,而有可能從處理器發出讀、寫命令後,由於外設通常比處理器慢很多,所以外設晶片需要一些時間來準備好所需的資料。在這種情況下,如果處理器一直等外設晶片的返回資料再執行後續的指令的話,將耗費寶貴的時間,這些時間完全可以用來做其它的工作。別忘了,從巨集觀上看來處理器常常是多工的,任務是指作業系統所提供的排程單位。當一個任務因為等待外設晶片的資料而阻塞時,我們可以切換到另外的任務,從而提高處理效率。這就有一個問題,當處理器去處理另一個任務時,如果外設晶片的資料好了的話,如果告訴處理器呢?對了!就是通過中斷訊號。中斷訊號的高、低電平可以用來表示是否有中斷需要處理器注意以處理特定的事件(比如,外設資料準備好了的事件)。
        由此看來,中斷的引入能大大的提高處理器的運用效率。為了使用處理器上的中斷,一開始我們需要初始化好處理器的中斷控制器,比如安裝好所需的中斷服務程式或稱之為ISR(Interrupt Service Routine),然後,開啟中斷遮蔽位。中斷服務程式中需要做如下的操作:
  1. 從外設讀入或向外設寫資料。讀還是寫通常需要讀取外設的中斷狀態暫存器來決定。
  2. 清除外設的中斷訊號。我們知道,中斷訊號是由外設晶片驅動的,為了告訴外設晶片,處理器已經處理完了所需做的工作,那麼處理器需要通過一定的方式通知外設晶片。這種方式就是向外設晶片的暫存器中的某一位寫入一個數據,比如,可能是寫入1表示清中斷,也可能是寫入0表示清中斷,這通常在外設的資料手冊中能查到。當外設收到了處理器的清中斷請求後,其就會驅動中斷線使其無效。比如,一個外設的中斷線是當其為低電平表示有中斷,將其從低電平變為高電平就是驅動為無效。
  3. 清除處理器的中斷訊號標識。處理器中往往也會儲存外部中斷訊號是否發生過,當我們處理完了外設晶片的中斷時,我們也需要清除處理器上的標識,從而為下一次中斷做準備。需要注意的是,清外設的中斷必須發生在請處理器中斷標識之前!
        中斷還存在一個觸發方式問題。有兩種觸發方式 ,一種是電平觸發,另一種是沿觸發。電平觸發是指電平的高低表示外設是否有中斷,而沿觸發則是能過中斷線上的電平的升或降來表示的,顯然,存在兩種沿觸發方式。一種是中斷線從低電平變為高電平,我們稱之為上升沿觸發,另一處是中斷線從高電平轉換為低電平,我們稱之為下降沿觸發。總的來說中斷的觸發方式有電平觸發、上升沿觸發和下降沿觸發。電平觸發方式中處理中中斷設定很重要的一個步驟。

萬用表

        萬用表通常是用來檢視電平的高低、電阻的大小等的,是常用且必不可少的工具之一。在嵌入式系統開發中,我們常用的是數字萬用表。

示波器

       在嵌入式系統開發中,我們不可避免的要與外設晶片打交道。除錯驅動程式時,除了需要完全看明白晶片的資料手冊,且在軟體高度的過程中,還需要看我們所期望的訊號電平是否發生在晶片上。比如,我們在寫驅動程式時,需要通過寫I/O埠來對外設晶片進行操作,當寫相應的I/O埠時,我們知道所對應晶片的片選訊號應當有效,有時,我們需要驗證是否按預期發生了,這就需要用到示波器。一般的示波器是能同時觀測兩個訊號線的訊號狀態的。示波器都提供一定的功能,比如設定訊號撲捉的方式等等。示波器很重要的一個引數據是其採集頻率,根據Nyquist採集定理,如果我們想用示波器檢視頻率是100M赫茲的訊號,那麼其取樣頻率必須至少是其兩倍,即200M赫茲。有人可能會問:為什麼不用萬用表來看呢?因為萬用表的採集頻率很底,無法採集到很快的訊號變化。

邏輯分析儀

       簡單的說邏輯分析器就是具有很多訊號通道的示波器。通過邏輯分析儀,我們可以看到地址匯流排和資料匯流排上的資料。邏輯分析儀都提供一定的程式設計能力,用於程式設計什麼時候開始對總線上的資料進行採集。