嵌入式系統入門 日期 : 2019/1/13.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

概率.
MATLAB 程式設計 時間量測 清大資工系 多媒體資訊檢索實驗室.
計算機程式語言實習課.
File Access 井民全製作.
機 器 車 介 紹 & 實做.
主題五 CPU Learning Lab.
題目:十六對一多工器 姓名:李國豪 學號:B
正反器 一、循序邏輯電路 二、動作情形:用時序(timing),其次輸出( )是由外界輸入與( )所共同決定。
Timer & KEYPAD 11/24.
電腦硬體裝修乙級技術士檢定 第一站 檢修卡製作及介面控制 撰寫PLD布林代數:PALASM 4 撰寫BASIC 程式語言
Q101 在701 SDX Linux上的標準安裝與使用程序v2
第七章 MSP430時脈計時器A模組.
5-4 4x4矩陣鍵盤控制實習.
JAVA 程式設計與資料結構 第六章 輸出與輸入.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 閃爍燈 2018年11月23日 8051 單晶片實習---E0901閃爍燈.
PLC电气控制与组态设计 哈尔滨理工大学 第一章 可编程控制器的基本知识 2018/11/28.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
2-1 接腳說明 2018/11/30 第2章 系統分析.
C語言簡介 日期 : 2018/12/2.
數位邏輯設計與實習 Ch06 計數器與暫存器設計.
嵌入式系統進階 日期 : 2018/12/4.
Programmable System-on-Chip™ Cypress MicroSystems (PSoC™) 簡 介
App Inventor2呼叫PHP存取MySQL
第 8 章 Combinational Logic Applications
用開關選擇動作狀態 單晶片微電腦控制實習 輸入埠基礎實習 國立大甲高工 電機科 2019年1月16日
第一單元 建立java 程式.
建立一 function s (type) 可以用來繪製cyclic-harmonic curves
實驗十二: 紅綠燈控制電路設計 規格: Due: Jan. 3, 2008 Tvrl = Thgl + Thgf + Thyl
4-15 WDT HT66F50.
第七單元 正反器 (教科書第四章) 數位系統實驗
8051單晶片 蘇恆生 老師.
TA教育訓練 微處理機系統實習.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
单片机原理与应用 主讲人:张荣刚 福建师范大学福清分校.
語法:結構 實作:Analog in (VR、光敏+七段顯示電壓) 簡報:廖崇義
程式設計期末測驗 通訊一甲 B 楊穎穆.
期末考.
緩衝區溢位攻擊 學生:A 羅以豪 教授:梁明章
基本IO.
SOCKET( ).
4.19 Fsys _ SLOW MODE HT66F70A.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
數位邏輯設計與實習 Ch08實驗室實習.
4-16 SLEEP0 HT66F70A.
挑戰C++程式語言 ──第7章 輸入與輸出.
自停式向下計數器 通訊一甲 B 楊穎穆.
陣列與結構.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
ZigBee PRO教學系統 CC2530 實驗.
一、簡介 電腦硬體設計:純硬體電路(hardware)及韌體電 路(firmware)兩種方式。
利用HT66F50 SIM模組單元中PCK腳位輸出特性 控制speaker 發聲 SIM 串列界面模組
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
可變式計數器 通訊一甲 B 楊穎穆.
資料表示方法 資料儲存單位.
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
查表法&電腦IO Port二進制轉七段顯示器
802.1網路連結技術 802.2LLC 鏈 結 層 實 體 層 媒介擷取層
微算機(二) -- ADC0804 measurement
LED Pili LED 中州技術學院 電子系 副教授 余文俊.
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
Chapter 4 Multi-Threads (多執行緒).
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Unix指令4-文字編輯與程式撰寫.
Lab#9 Serial Port 實驗.
Memory Management 日期 : 2019/11/21.
單晶片實作講義 微電腦控制界面 (LCD) 。.
InputStreamReader Console Scanner
2-4 中斷.
Presentation transcript:

嵌入式系統入門 日期 : 2019/1/13

嵌入式系統的範例 微波爐 數位相機 家用遙測裝置 2 陳鍾誠 - 2019/1/13

微波爐 嵌入式處理晶片 CPU ROM RAM BUS 輸入介面 輸出介面 輸入鍵 開門 馬達 風扇 磁電管 燈具 喇叭 3 陳鍾誠 - 2019/1/13

數位相機 光學感應器 A/D 轉換 馬達 使用者開關 系統控制器 快閃單元 LCD銀幕 影像儲存裝置 計算機介面 連到 PC 的纜線 4 陳鍾誠 - 2019/1/13

嵌入式系統處理器區塊圖 位址 資料 平行 I/O 連接埠 CPU 控制 序列 I/O 連接埠 內部記憶體 計時器/計數器 A/D轉換 D/A轉換 5 陳鍾誠 - 2019/1/13

範例 :鍵盤與顯示 BUS 鍵盤 顯示裝置 DATAIN DATAOUT CPU OUTSTATUS INSTATUS OUTSTATUS 7 6 5 4 3 2 1 7 6 5 4 3 2 1 INSTATUS OUTSTATUS 1 : 代表輸入裝置已有資料進入 0 :代表輸入裝置沒有資料: 1 : 代表顯示裝置已準備好 0 :代表顯示裝置尚在處理上一個輸出中 6 陳鍾誠 - 2019/1/13

記憶體映射 I/O 將裝置的狀態暫存器與資料暫存器偽裝成記憶體的一部份 輸入 : 裝置介面卡會有一個偵測電路,一但偵測到位址匯流排上的位址代表其裝置時,就將裝置暫存器的值放到資料匯流排上. 輸出 : 裝置介面卡會有一個偵測電路,一但偵測到位址匯流排上的位址代表其裝置時,就將資料匯流排上的資料設到對應暫存器當中. 0000 FFFB OUTSTATUS=FFFC DATA OUT =FFFD INSTATUS=FFFE DATAIN=FFFF 7 陳鍾誠 - 2019/1/13

輸出入程式的設計 輸出入程式的設計方式大致可分為兩類 輪詢 (Polling) : 中斷 : 不斷的偵測輸出入狀態,直到可以輸出入為止 接著將資料輸出入到對應位址中 中斷 : 搭配硬體,當有輸入發生時,硬體會通知 CPU,然後直接跳到預設好的中斷函數執行. 8 陳鍾誠 - 2019/1/13

輸出入程式範例– 組合語言 程式功能 : 從鍵盤讀入一行字,並顯示到銀幕上. 説明 : 以輪詢 (Polling) 的方式, 不斷從鍵盤讀入字元後, 顯示該字元到輸出裝置, 直到讀到換行字元為止. OUTSTATUS EQU $FFFC // 顯示器狀態 DATAOUT EQU $FFFD // 顯示暫存器 INSTATUS EQU $FFFE // 鍵盤狀態 DATAIN EQU $FFFF // 鍵盤暫存器 CR EQU $A // 換行字元 BUF DCD 100 // 輸入行儲存區 Move #BUF, R1 // R0 用來當儲存區指標,用以儲存下一個字元 READ TestBit #3, INSTATUS // 測試鍵盤是否有鍵被按下 Branch=0 READ // 一直測到有鍵被按下為止 MoveByte DATAIN, (R0) // 將該輸入鍵值儲存到儲存區 ECHO TestBit #3, OUTSTATUS // 測試顯示器是否可以輸出了 Branch=0 ECHO // 一直測試到可以輸出為止 MoveByte (R0), DATAOUT // 將剛剛讀入的鍵值送到顯示器顯示 Compare #CR, (R0)+ // 看看是否是換行字元 Branch!=0 READ // 若不是,則繼續讀下一個字 9 陳鍾誠 - 2019/1/13

輸出入程式範例– C 語言 程式功能 : 從鍵盤讀入一行字,並顯示到銀幕上. 説明 : 以輪詢 (Polling) 的方式, 不斷從鍵盤讀入字元後, 顯示該字元到輸出裝置, 直到讀到換行字元為止. #define OUTSTATUS (volatile char *) 0xFFFC // 顯示器狀態 #define DATAOUT (volatile char *) 0xFFFD // 顯示暫存器 #define INSTATUS (volatile char *) 0xFFFE // 鍵盤狀態 #define DATAIN (volatile char *) 0xFFFF // 鍵盤暫存器 void main() { char buf[100]; // buf = 輸入行儲存區 char* LOC=buf; // LOC = 輸入行儲存位址 while (1) { while (INSTATUS & 0x8 == 0) {} // 一直測到有鍵被按下為止 *LOC = *DATAIN; // 將該輸入鍵值儲存到儲存區 while (OUTSTATUS & 0x8 == 0) {} // 測試顯示器是否可以輸出了 *DATAOUT = *LOC; // 將剛剛讀入的鍵值送到顯示器顯示 LOC ++; // 前進到下一個字元 if (*LOC == ‘\n’) // 若是換行字元,則離開迴圈 break; } 10 陳鍾誠 - 2019/1/13

更完整的範例 - 反應計時器 11 陳鍾誠 - 2019/1/13

系統架構圖 VDD VDD VDD Go … … … Stop PA7-4 PA3-0 PB7-4 CPU 計時器/計數器 3 2 1 BCD轉7段 式解碼器 BCD轉7段 式解碼器 BCD轉7段 式解碼器 … … … Stop PA7-4 PA3-0 PB7-4 3 2 1 CPU 計時器/計數器

反應計時器的功能 使用者按下 Go 開關後,啟動計時器 三秒後系統開啟 LED 的燈光 當使用者看到 LED 燈光後,必須盡速按下 Stop 鍵 系統會測量該使用者共花了多少時間才出現反應 (時間以 1/100 秒為單位, 以 X.XX 的形式出現在 三個 七段顯示器上) 13 陳鍾誠 - 2019/1/13

記憶體空間映射 FFFFFFD0 FFFFFFD4 FFFFFFD8 FFFFFFD9 FFFFFFF0 FFFFFFF1 FFFFFFF2 計時器初始值 CNTM 計時器內容值 COUNT 計時器控制暫存器CTCONT 計時器狀態暫存器 CTSTAT 輸入埠 A 資料 PAIN 輸出埠 A 資料 PAOUT 埠 A 的方向 PADIR 輸入埠 B 資料PBIN 輸出埠 B 資料 PBOUT 埠 B 的方向 PBDIR 輸出入狀態暫存器 PSTAT 輸出入控製暫存器 PCONT FFFFFFD0 FFFFFFD4 FFFFFFD8 FFFFFFD9 計時器相關資訊 FFFFFFF0 FFFFFFF1 FFFFFFF2 FFFFFFF3 FFFFFFF4 FFFFFFF5 FFFFFFF6 FFFFFFF7 輸出入相關資訊 14

輸出入相關資訊 PSTAT 輸出入狀態暫存器 PASIN IBOUT PASOUT IBIN PBSIN IAOUT PBSOUT IAIN 7 6 5 4 3 2 1 IAOUT=1 A 輸出埠的中斷被引發了 IAIN=1 A 輸入埠的中斷被引發了 IBOUT=1 B 輸出埠的中斷被引發了 IBIN=1 B 輸入埠的中斷被引發了 PSTAT 輸出入狀態暫存器 PASIN IBOUT PASOUT IBIN PBSIN IAOUT PBSOUT IAIN 7 6 5 4 3 2 1 PCONT 輸出入控制暫存器 PASOUT=1 A 輸出埠的資料可寫入了 PASIN=1 A 輸入埠的資料可讀取了 PBSOUT=1 B 輸出埠的資料可寫入了 PBSIN=1 B 輸入埠的資料可讀取了 ENBOUT=1 B 輸出埠允許寫入資料 ENBIN=1 B 輸入埠允許讀取資料 ENAOUT=1 A 輸出埠允許寫入資料 ENAIN=1 A 輸入埠允許寫入資料 ENBOUT ENBIN ENAOUT ENAIN

計時器相關資訊 CTSTAT 計時控制暫存器 0:計數器 1:計時器 1:開始 1:停止 1:啟用中斷 CTCONT 計時狀態暫存器 7 6 5 4 3 2 1 0:計數器 1:計時器 1:開始 1:停止 1:啟用中斷 CTCONT 計時狀態暫存器 7 6 5 4 3 2 1 1:計數器為 0 16 陳鍾誠 - 2019/1/13

反應計時器的 C 語言程式 #define PAIN (volatile char*) 0xFFFFFFF0 // A 的輸入暫存器 #define PAOUT (char*) 0xFFFFFFF1 // A 的輸出暫存器 #define PADIR (char*) 0xFFFFFFF2 // A 的方向暫存器 #define PBIN (volatile char*) 0xFFFFFFF3 // B 的輸入暫存器 #define PBOUT (char*) 0xFFFFFFF4 // B 的輸出暫存器 #define PBDIR (char*) 0xFFFFFFF5 // B 的方向暫存器 #define CNTM (char*) 0xFFFFFFD0 // 計數暫存器 #define COUNT (char*) 0xFFFFFFD4 // 計時暫存器 #define CTCONT (char*) 0xFFFFFFD8 // 計時器狀態暫存器 void main() { unsigned int counter_value, total_value; unsigned int actual_time, seconds, tenths, hundredths; // Initialize the parallel ports. *PADIR = 0xFF; // A 連接到前兩個七段顯示器, 因此設定方向為輸出 *PBDIR = 0xF4; // 設定B前半方向為輸出, LED 為輸出, Go, Stop 鍵為輸入 *PAOUT = 0x0; // 七段顯示器顯示 0 *PBOUT = 0x4; // 熄滅LED 燈 17 陳鍾誠 - 2019/1/13

反應計時器的 C 語言程式 - 續 while (1) { // 無窮迴圈 while ((*PBIN & 0x2) == 0); // 等待按下 Go 鍵 *CNTM = 300000000; // 設定計時器為300,000,000(三秒) *CTCONT = 0x1; // 啟動計時器 while ((*CTSTAT & 0x1) == 0); // 等候 3 秒鐘直到計時器到達 0 *PBOUT = 0x0; // 點亮 LED 燈 *CNTM = 0xFFFFFFFF; // 設定最大計時初始值 (下數計時器) *CTCONT = 0x1; // 開始計數 while ((*PBIN & 0x1) == 0); // 等待 Stop 鍵被按下 *PBOUT = 0x4; // 熄滅 LED 燈 *CTCONT = 0x2; // 停止計數 counter_value = *COUNT; // 計算總時間 total_count = (0xFFFFFFFF - counter_value); // 計算花費時間 (一億分之一秒為單位) actual_time = total_count / 1000000; // 除以百萬, 以百分之一秒為單位 seconds = actual_time / 100; // 取得秒數 tenths = (actual_time - seconds * 100) /10; // 取得 0.1 秒數 houndredths = actual_time - (seconds * 100 + tenths * 10); // 取得 0.01 的秒數 *PAOUT = ((seconds << 4) | tenths); // 顯示前兩個數字 *PBOUT = (houndredths << 4) | 0x4); // 顯示第三個數字, 同時熄滅LED.燈 } 18 陳鍾誠 - 2019/1/13

參考文獻 Computer Organization, 5/e Carl Hamacher, Zvonko Vranesic, Safwat Zaky Section 2.7 : 輸出入作業 Chapter 9 : 嵌入式系統 19 陳鍾誠 - 2019/1/13