嵌入式編程之時序圖講解
對於芯片驅動的編寫,需要嚴格按照芯片手冊上的時序圖上的定義。看懂時序圖這是每個合格嵌入式軟件工程師都要掌握的基本技能,為此特意找到下面這個例子,用這個例子介紹時序圖還是比較直觀的。
圖中時序線的名稱及作用
RS:數據/狀態字選擇線 RS = L:傳輸狀態字 RS = H:傳輸數據;
RW:讀/寫操作選擇線 RW = L:寫狀態 RW = H:讀狀態;
E:片選 E = L:芯片處於關閉狀態 E = H:芯片處於使能狀態;
DB:數據傳輸總線;
圖中標注處說明
1處:高電平;
2處:低電平;
3處:包含了高低線,控制線代表配置為高低均可,數據線代表傳輸的是數據;
4處:豎線代表的是生命線,代表一個對象在一段時間內的存在;
大家仔細觀察會發現有很多t開頭的標注,這些標注是非常重要的,時序圖是一定要有時間定義的。下圖為時序圖的時序參數,在編寫代碼的時候一定要參照圖中定義的時間。
時序圖讀操作編程
INT8U ReadData(void)
{
INT8U iResult;
E = L; /* 芯片處於關閉狀態 */
RS = H; /* 選擇傳輸數據模式 */
RW = H; /* 選擇讀操作 */
DelayNS(30); /* tSP1 最小值:30ns 注意:在這里這么寫只想讓大家對時間概念深刻記憶一下, 根據控制器的執行速度可以省略掉,在很多單片機中一條指令執行時間大於30ns*/
E = H; /* 芯片使能 tR 代表IO口翻轉速度,速度取決於控制器硬件性能 */
DelayNS(30); /* tD為數據建立穩定時間,最大為100ns */
iResult = DB; /* 讀出數據,DB代表的是實際控制器數據IO口 */
DelayNS(120); /* tPW為片選信號的保持時間 */
E = L; /* 關閉芯片,停止數據讀取 */
DelayNS(10); /* tHD1為地址信號的保持時間 */
RS = L;
RW = L;
return iResult;
}
轉自:https://blog.csdn.net/snail_turbo/article/details/20568237