硬件架構的藝術 第七八九章
處理字節順序
字節順序定義數據在計算機系統中的存儲格式。它描述存儲器中地址的最高有效位MSB和最低有效位LSB的位置。
- 大端模式(Big Endian):將MSB保存在最低存儲器地址處
- 小端模式(Little Endian):將LSB保存在最低存儲器地址處
大端小端的特點
小端模式:因爲最低位字節偏移值爲0,並首先訪問,訪問1、2、4或更長字節數的彙編語言指令能按同樣方式處理所有格式,而且由於地址偏移量與字節數1:1的關係,多精度的數學程序也相對容易編寫。
大端模式:因爲先訪問高階字節,所以很容易通過查看偏移量爲0的字節來判斷數值的正負,所以無須接收所有字節包就能知道符號信息。由於數字同時也以打印的次序保存,所以對從二進制轉化爲十進制的程序有效。大端模式讀取和轉存
例如:以兩種不同形式保存十六進制數0x12345678
大多數位圖圖像(顯示和內存安排)映射成“MSB在左側”的方案即大端方式,可以使體系結構能夠自然地移動和存儲大於一個字節的圖像元素。
處理字節順序不匹配問題
在兩臺設備通信時,每個處理器和每種通信協議必須選擇一種字節順序,如果需要通過存儲器通信,兩種不同字節順序的處理器就會產生衝突。例如:小端模式處理器訪問大端模式網絡時需要用軟件對字節重新排序。
(而TCP/IP所有的協議層都定義爲大端模式,即如(IP地址、包或校驗和)必須首先發送或接收最高有效字節),所以即使各終端計算機都是小端模式,之間所傳輸的數據必須先轉化爲大端模式,然後在接受端轉化爲小端模式。
方法:
- 處理字節順序不匹配最簡單的方法就是爲系統選擇一種“字節順序類型”,並將全部其他不同字節順序的模塊轉化爲目標“字節順序類型”。
而字節順序類型由CPU體系結構的實現決定,所以在對第三方IP選型時要考慮是否支持“雙字節順序”結構,方便編程爲“大端模式”或“小端模式”。 - 保持數據完整性(數據不變,改變地址)
域左邊爲MSB,右邊爲LSB。即如果用16位域表示整數並進行加操作,會對LSB加1,並且所有進位從LSB向MSB進行,大端或小端地址體系結構是相同的。
首先接收到連續幀的頭部,然後是幀的其餘部分
接收到的連續幀以“Type”、“H2"、”H1"和“H0"的順序保存在外設存儲器中。幀中的域可能跨多個字節並不在字節邊界終止。
需要對訪問外設RAM的存儲器的地址進行修改,對地址的改動基於傳送數據的大小。
所以即對地址總線最後兩位LSB取反,數據不變。
使用上面的方案可以使字節順序轉換對軟件透明,並能確保數據完整性在字節順序轉換過程中不會被破壞
該方法的數據流:
1、DMA發出對外設存儲器的讀字節操作
2、此時系統產生的地址爲0x00,但是小端模式設備所看到的地址爲0x03
3、設備存儲器對該地址解碼,訪問位31:24
4、DMA對系統的大端模式存儲器發出按字節方式的寫操作
5、產生0x00地址(字節訪問)
6、大端模式存儲器將該訪問解碼爲寫入位31:24
7、由於來自於小端模式存儲器的數據處於同樣的字節區域,所以可以保持數據的完整性。
-
保持相同的地址區間(地址不變,改變數據)
某些應用程序或系統不需要數據保持特定的次序,但是需要在字節順序轉換後數據字節保持在同樣的地址區域,這時需要使用地址不變的字節順序轉換。
對於地址不變的系統,訪問字節”Type“的地址偏移量永遠是0x3,而如果使用上一節的方法,訪問該字節需要使用不同的地址偏移量。需要修改或交換從外設RAM存儲器中讀到的數據值。
-
軟件字節變換
-
交換匯編指令
-
用於交換字節的軟件庫宏
-
協議特定的交換函數
-
制定的交換函數
消抖技術
抖動
在電子設備內兩個金屬觸點隨着觸點的斷開閉合便產生了多個信號,當觸點撞擊在一起,慣性和彈性形成抖動,導致產生一個快速的脈衝電流而不是從0電流到全電流的轉換。這個影響在交流電源線路不明顯,由於抖動太快不至於影響大多數設備。但在某些模擬和邏輯電路中可能產生問題(如數字計時器、個人計算機或微處理器等設備的輸入)
開關行爲
下面是一個簡單的帶有上拉電阻的開關。並展示了當按鍵按下和釋放時相應的輸出。
如果是計算機或者微處理器等設備的輸入,則會產生問題。計數器將出現多次計數而不是一次計數。
開關種類
消抖技術
RC消抖
RC消抖是最常見的,最容易的消抖電路,就是把一個電阻和電容連接在一起,開關連接至中間。
開關未使用的默認狀態的高電平,當開關閉合後,輸出電壓通過電容緩慢減低至0;當開關打開後,輸出電壓通過電容緩慢上升至0;以此減小抖動的影響(即使電壓不會瞬變)。R2使電容器緩慢充放電,同樣限制了流過開關觸點,防止電容器由於瞬間大量電湧燒壞觸點。但是如果時間常數過大則開關對快速”斷開“或”閉合“可能無法反應。
硬件消抖電路
這是另一種硬件方法,它使用了由一對與非門電路製作的交叉耦合閂,提供一種完全的消抖而不用考慮延時限制,而且響應速度和觸點一樣塊。
當開關處於位置”a“時,門電路”1“的輸出就是邏輯高,而門電路拉至邏輯低;如果開關在觸點間移動並不在這兩點間的區域短暫停止,由於電路2將邏輯0送回門電路1 使其保持狀態,保證鎖存器的輸出爲非抖動。
軟件消抖電路
在足以讓抖動停止後的時間讀出開關
即每400-500毫秒讀出開關,並設置狀態標誌指示開關狀態。但是響應時間慢,如果開關操作時間小於500毫秒就會失敗(上述的方法不提供EMI保護,通過爲開關提供足夠的時間來停止抖動可以減小絕大多數隨機噪聲脈衝,但取開關狀態單一短脈衝干擾可能被當作觸點轉換,修改軟件在每500毫秒循環多次讀取輸入)
開關啓動時中斷CPU並在中斷服務程序(ISR)中消抖
通常,在激活觸點時,會產生中斷,調用一個子程序(中斷服務程序)
在程序中,DR調用一個子程序DELAY,其作用就是消耗足夠長的時間使得觸點停止抖動,此時DR檢查觸點是否在激活狀態(即用戶按下開關,但是開關還沒有鬆開)。如果處於激活狀態,DR等待觸點清零。
使用計數器消除噪聲並驗證開關狀態
製作一個計數器,在信號爲邏輯低時計數,在邏輯爲高時重置計數器。如果計數器到達某個固定值,該值應當比噪聲脈衝大一至兩倍,意味着電流脈衝爲有效脈衝。
- 與消抖相關的CPU開銷應當最小化
- 非消抖開關必須連接已編程序的I/O引腳,絕不能連接CPU的中斷,否則抖動會引起多重中斷,同樣會增加CPU的負擔,每次中斷CPU都會執行中斷服務程序(ISR)
與開關狀態相關的中斷不應當用作時鐘或觸發器的數據信號 - 開關輸入取樣的頻率不應當與外界事件同步,否則產生週期性的EMI。(以常用50/60HZ頻率取樣應當避免)
- 系統應當對開關輸入立即響應(LED或顯示屏,以避免顯示器或LED出現混亂的情況) 使用定時器有規律地中斷CPU,而不是用延時來等待輸入穩定
電磁兼容性能設計指南
電磁兼容設計(EMC)以避免系統內有害的電磁干擾。
電磁兼容性是一個系統在預期的電磁環境中運行而不對其他系統產生不利影響或不受其他系統不利影響的能力。
一個系統電磁兼容性應滿足:
- 不敢收其他系統
- 不易受其他系統的干擾
- 自身不受干擾
系統電磁兼容性包括輻射,免疫和兼容性。
電磁干擾理論
影響集成電路抗干擾性能的幾個因素
- 作爲噪聲源的微控制器(電源和地線中的電流,振盪器行爲,系統時鐘電路,輸出行爲,開關噪聲,I/O開關)
- 電壓,頻率,接地,電路板