C4M-OS 硬體監測暫存器讀取巨集REGGET()
除提供設定及控制操作之外,C4M-OS也提供了巨集REGGET(),讀回指定位元組數的暫存器並組合成多位元組的變數,以指標存回變數。
REGGET(HWREG_p,Bytes,Data_p)
簡介:配合參數快查表協助使用者完成,讀取指定位元組數暫存器資料工作。讀取以 HWREG_p 為住址暫存器內容存入Data_p 為住址變數。
變數:
HWREG_p:硬體暫存器位址。
Bytes:暫存器位元組數
Data_p:提供讀回值存入變數位址。
前置動作:引入巨集定義檔bits_op.h
註: For a 16-bit read, the lowbyte must be read before the high byte. (因為這是8位元機器,讀取時讀低位元會自動把高位元TEMP起來,再讀高立元組時其實所讀的是高位元組)
MCU在完成第一階段是的硬體工作模式設定後,第二階段也可能是要求硬體週邊擷取外部資料。此外,若應用程式撰寫者需要了解監測預設工作狀態以利決定程式流程時,也可以利用讀取暫存器的方式監測設定值。監測週邊硬體設定模式,或是監測硬體輸入,也都可以視為一個動作ACTION。
不論是監測設定或輸入的動作ACTION,都是以呼叫REGGET()來執行狀態監測。相同於REGPUT(),對應於各個監測動作,也有固定的對應參數。包含,硬體暫存器位址HWREG_p,位元組數Bytes,以及準備提供空間以存放讀得回狀態值。
C4M-OS針對監測硬體週邊,也參考MCU使用手冊,也將各個週邊硬體所允許的監測動作,找出其應對的參數,與輸入值內容變數解讀方式,整理成一個DIO硬體監測暫存器操作參數快查表以供使用者快速查詢使用。以下為數位輸入埠相關硬體暫存器讀取參數快查表:
DIO硬體監測暫存器操作參數快查表:(呼叫REGGET()/DIO_get()執行)
表格中,Action行,HWREG_p行,Bytes行,*Data_p 行均與設定快查表義意相同,操作動作無需Field 行。
範例:
希望由平行埠D的8支接腳讀回接腳的HI/LO。首先要設定平行埠D為全數輸入,然後準備變數來存放讀回值。
• 硬體設定:首先要設定平行埠D為全數輸入,這涉及DIO設定,可以查找DIO硬體設定暫存器參數快查表。動作是要設定PORTn埠輸出入方向,其右邊HWREG_p行又可分割為&DDRA...&DDRF等不同列。由於我們是要使用平行埠D因此選用&DDRD。Bytes欄唯一選擇為1。依據*Data_p欄的指示,我們要設定全體位元都是輸入,因此提供此數據的變數的所有位元均應為0。
uint8_t AllIn=0x00;
REGPUT(&DDRD,1,&AllIn);
• 監測操作:查找DIO硬體監測暫存器操作參數快查表,要由平行埠D 輸,入故HWREG_p欄可選用&PIND,Bytes欄唯一選擇為1。定義輸入值變數InData,再取用這個變數的指標,&InData做為呼叫參數。
uint8_t InData;
REGGET(&PIND,1,&InData);
printf(“Input Value %d”,InData);