返回網站
返回網站

Functional-Register-Based (Macro)通用暫存器或旗標讀寫巨集(一)

C4M-OS 硬體設定暫存器寫入巨集REGPUT()

· 程式編輯的基本知識,機器人程式教學

Functional-Register-Based (Macro)通用暫存器或旗標讀寫巨集

透過暫存器或旗標的讀寫,雖然可以達成硬體的監控,但執行時需組合,暫存器讀寫,遮罩及平移,等指令組合才能完成,這些指令組合的順序基本上相同,不同的是,暫存器位址,遮罩,平移或則位元組數。經過C4M-OS歸納整理將這些指令群整合成通用且具有參數的巨集,為各種設定或操作硬體動作找出了對應的參數組合,並整理出對應每種設定操作的參數快查表。使用者只要依據所想執行的設定或操作動作,從參數快查表中找出參數,再呼叫巨集並套用所查到的參數,即可用單一呼叫指令達成該一設定或操作的動作。

將多個指令組合在成單一呼叫指令的方式有兩種,其一是巨集(Macro),其二是函式。巨集在使用上不論是參數或呼叫使用,基本上與函式是相同的。不同的是,函式碼會事先編譯成可執行碼再在呼叫處進行鏈結執行,而巨集則是一段原始程式碼,在編譯時會被復寫並取代被叫呼叫的巨集,然後再編譯。

C4M-OS 硬體設定暫存器寫入巨集REGPUT()

常見的硬體暫存器為單位元組,但也有硬體暫存器佔用了2個位元組,甚至4個位元組,提供這些暫存器資料的變數也是多位元組變數,讀寫時需要拆解來源變數的位元組,再逐一位元組寫入暫存器。C4M-OS提供了巨集,可以自動,拆分變數,逐一寫入暫存器。使用C4M-OS巨集,可以讓程式更簡潔,不因太多小細節混亂了整體架構。

REGPUT(HWREG_p,Bytes,Data_p)

簡介:配合參數快查表協助使用者完成,指定位元組數暫存器資料寫入工作。讀取以 Data_p 為住址變數內容存入HWREG_p 為住址暫存器

變數:

HWREG_p:硬體暫存器位址。

Bytes:暫存器位元組數

Data_p:提供寫入值的變數位址。

前置動作:引入巨集定義檔bits_op.h

註:To do a 16-bit write, the high byte must be written before the low byte.  (因為這是8位元機器,寫入時,要先把高位元會存入TEMP,到寫低位元時自動一齊寫入)

MCU的每一週邊硬體的使用,一般都可分為兩個階段,第一階段是執行週邊硬體的工作模式設定,完成設定後隨才可執行第二階段工作亦即控制硬體執行訊號輸出入。不論是設定週邊硬體工作模,或是操控它執行輸出入,都可以視為一個動作ACTION。

設定或輸出的每一個動作ACTION都可以用呼叫REGPUT()寫入暫存器來達成。而且對應於每個動作,快查表會提供一組固定參數,包括硬體暫存器位址HWREG_p,位元組數Bytes,以及準備寫入值Data_p內容的規則提示。

C4M-OS參考MCU使用手冊,針對每一種MCU的硬體週邊,整理出它所允許的設定及操作動作,找出每一動動作對應的固定參數及與寫入值內容決定提示,整理成一份設定快查表,以及一份操作快查表。以供使用者快速查詢使用。

以下為數位輸出入埠相關的設定及操作參數快查表:

DIO硬體設定暫存器參數快查表 (呼叫REGPUT()/DIO_put()執行)

DIO硬體設定暫存器參數快查表 (呼叫REGPUT()/DIO_put()執行)

 

表格中,Action行以下為各式設定動作,HWREG_p行以下為同列設定動作應寫入暫存器的指標值,Bytes行以下為同列設定動作應寫入暫存器的位元組數,*Data_p 行以下為同列設定動作之設定值建構原則說明。Field 行以下郥是保留給同列設定動作,設定值結構體的欄位名稱,未來有機會會有詳細說明。 

 

DIO硬體控制操作參數快查表 (呼叫REGPUT()/DIO_put()執行) 

DIO硬體控制操作參數快查表 (呼叫REGPUT()/DIO_put()執行)

 

表格中,Action行,HWREG_p行,Bytes行,*Data_p行均與設定快查表義意相同,操作動作無需Field 行。 

範例:

假如我們希望由平行埠C的8支接腳中偶數接腳輸出5V,奇數接腳輸出0V。

 

            • 硬體設定:首先要設定平行埠C為全數輸出,這涉及DIO設定,可以查找DIO硬體設定暫存器參數快查表。動作是要設定PORTn埠輸出入方向,其右邊HWREG_p行又可分割為&DDRA...&DDRF等不同列。由於我們是要使用平行埠C因此選用&DDRC。Bytes欄唯一選擇為1。依據*Data_p欄的指示,我們要設定全體位元都是輸出,因此提供此數據的變數的所有位元均應為1。

uint8_t AllOut=0xFF;

REGPUT(&DDRC,1,&AllOut);

            • 輸出操作:查找DIO硬體控制操作參數快查表,要由平行埠C 輸出,故HWREG_p欄可選用&PORTC,Bytes欄唯一選擇為1。依據*Data_p欄說明,對偶位元輸出HI →1,奇位元輸出Lo→ 0,變數應為OutData=0x66=0b1010 1010,再取用這個變數的指標, &OutData做為呼叫參數。

uint8_t OutData=0x66;

REGPUT(&PORTC,1,&OutData);

上一篇
ASA M128 單板電腦平行埠(二)
下一篇
Functional-Register-Based (Macro)通用暫存器或旗標讀寫巨集(二)
 返回網站
strikingly iconStrikingly出品
Cookie的使用
我們使用cookie來改善瀏覽體驗、保證安全性和資料收集。一旦點擊接受,就表示你接受這些用於廣告和分析的cookie。你可以隨時更改你的cookie設定。 了解更多
全部接受
設定
全部拒絕
Cookie 設定
必要的Cookies
這些cookies支援安全性、網路管理和可訪問性等核心功能。這些cookies無法關閉。
分析性Cookies
這些cookies幫助我們更了解訪客與我們網站的互動情況,並幫助我們發現錯誤。
偏好的Cookies
這些cookies允許網站記住你的選擇,以提升功能性與個人化。
儲存