雖然呼叫巨集REGPUT(),REGGET(),REGFPT(),REGFGT()。可以分別達成多位設定及控制暫存器操作,監測暫存器操作,設定及控制旗標群操作,以及 監測旗標群操作。但是無法MCU在讀寫前先檢查接腳,先前是否己被設定為其它功能並改變其設定而造成,先設功能的錯誤。同時前述的通用巨集非針對特定硬體,並無硬體特性的限制訊息因此也無法在執行設定前先確認與硬體是否匹配。
在前述的巨集執行前,先執行硬體功能限制輸出入方向的檢測,以及原始設定是否己被更動,並包裝成針對特定硬體暫存器及旗標群的暫存器讀寫函式xxx_put(),xxx_get(), 以及旗標群讀寫函式xxx_fpt(),xxx_fgt()。其中xxx為週邊硬體的名稱。例如本單元平行輸出入埠硬體我們用DIO來代表。四者分別為DIO_put(),DIO_get(),DIO_fpt(),DIO_fgt() 可以執行對平行埠設定暫存器,及平行埠旗標群先檢察讀寫合理性,合理時再執行讀寫。
在開發應用程式之初期可以用暫存器及旗標讀寫函式協助預防錯誤,等到確認所有設定及讀寫都是正常的,再抽換暫存器與旗標群讀寫函式,以相對的巨集來替代,借以減少檢察來提高程式執行效率。
為了協助使用者記憶各類錯誤訊息,所有檢察錯誤代碼不論任何硬體的暫存器或旗標群讀寫,均統一其錯誤碼如下表。
暫存器及旗標群讀寫錯誤碼一欄表
DIO_put()
uint8_t DIO_put(uint8_t* HWREG_p, uint8_t Bytes, void*Data_p);
簡介:呼叫函式可以由PORT平行埠輸出控制數位訊號。
參數:同REGPUT()請參考PORT硬體暫存器寫入參數表。
回應RETURN:參考錯誤編碼表
DIO_get()
uint8_t DIO_get(uint8_t HWREG_p, uint8_t Bytes, void *Data_p)
簡介:呼叫函式可以由PORT平行埠輸入接收數位訊號。
參數:同REGGET()請參考DIO硬體暫存器讀取參數表。
前置動作:引入dio.h
回應RETURN:參考錯誤編碼表
平行埠旗標群蓋寫函式 DIO_fpt()
uint8_t DIO_fpt(uint8_t* HWREG_p,uint8_t Mask,uint8_tShift,uint8_t Data);
簡介: 配合PORT參數快查表協助使用者完成,平移資料,遮罩資料並蓋寫暫存器工作。取用Data提供的資料,經過左移Shift後以Mask選寫性蓋寫 HWREG_p的暫存器相應位元。
參數:同REGFPT(),參考DIO硬體旗標蓋寫參數表。
前置動作:引入dio.h
回應RETURN:參考錯誤編碼表
DIO_fgt()
uint8_t DIO_fgt(uint8_t* HWREG_p, uint8_t Mask, uint8_t Shift, uint8_t Data);
簡介:呼叫函式讀取平行埠PORT相關暫存器內旗標
參數:同REGFGT(),請參考DIO硬體旗標擷取參數表。
前置動作:引入dio.h
回應RETURN:參考錯誤編碼表
使用在REGPUT(),DIO_put()以及其他巨集或驅動函式的取捨使用時,可以依據程式開發階段來選用,初期撰寫程式時,可能有機會發生輸出入選用衝突。可用函式來執行以便取得錯誤的回報,待程式除錯完成之後,不會再有這類錯誤出現時,就可以用對應的巨集來取代函式,其傳參不變。