# Lab3 Note
###### tags: `NCTU` `MPSL`
- **pull-up** (早期IC比較建議用上拉方式, 現在沒差)
電阻一端連接 pin, 電阻另一端連接 + 或 VCC, 這時按鈕開關一端接到 pin, 另一端接到 GND, 這樣在按鈕開關沒按下時讀取 pin 結果是 HIGH, 當按鈕按下之時讀取 pin 則會是 LOW 的狀態
- **pull-down**
把電阻一端連接 pin, 電阻另一端連接 - 或 GND, 在按鈕開關沒有按下時, 讀取 pin 答案是 LOW, 當按下按鈕時, 讀取 pin 則會得到 HIGH
---
### Question 實驗課問題
**1. What is the memory-mapped I/O (MMIO)? What are its pros and cons?
什麼是 memory mapped I/O (MMIO)? 它的優缺點是什麼?**
MMIO 內存映射 Memory-mapped I/O
- 內存和I/O設備共用同一個地址空間
- 應用最為廣泛
- 可共用指令
- CPU必須預留給I/O一個地址區域
**2. Question 1-2: What is the port-mapped I/O (PMIO)? What are its pros and cons?
什麼是 port-mapped I/O (PMIO)? 它的優缺點是什麼?**
PMIO 端口應設I/O ( ioslated I/O )
- 內存和I/O有各自的地址空間
- I/O需使用特殊的CPU指令
- 為了實現地址空間隔離,有兩種方法
1. CPU物理接口上增加一個I/O引腳
2. 增加一條專用的I/O總縣
**兩者互補**
**3. Question 1-3: When we set GPIO pin to the input mode, we also need to config the GPIOx_PUPDR register to pull-up, pull-down or floating (non-pull-up, non-pull-down). What's the effect of these settings?
當我們將 GPIO pin 設成 input mode 的時候,還需要將 GPIOx_PUPDR 設成上拉,下拉或浮動(非上拉、非下拉)。這些設置有什麼作用?**
### Lab Question
#### **3.1 LED scroller**
**Requirement**
現場要能夠重現規格書中指定的跑馬燈樣式。必須要是 active low。透過 I/O register 面板觀察,亮燈時必須輸出訊號 0。
#### **Question**
**1. 請說明你是如何得到(或計算)每個時間點的 LED 圖案?**
r1存index,從0~7再回到0,再cmp r1的值,分別把不同狀態存進leds。
**2. 說說在 active low 電路中 led 是如何被連接的?**
VCC接正極(加電阻),訊號源接負極。
**3. (Coding) 請重新以 active high 的方式實作 3-1**
---
#### **3.2 Push button switch**
**Requirement**
> 必須要可以暫停跟繼續。而不是 stop 或 reset。要能按壓按鈕使跑馬燈「暫停、繼續」三次,同學可以自己按按鈕。以下狀況出現超過三次則為未完成,將視情況扣分。按下按鈕後沒有偵測到訊號,即按下按鈕後沒有暫停 / 繼續。按下按鈕卻偵測到多次訊號。
**Question**
**1. 說說怎麽做到讓跑馬燈暫停再繼續的?**
用一個暫存器存state,滾動時為0,需暫停時為1,在CheckPress回傳後判斷其數值,為0繼續往下執行,為1回頭繼續呼叫CheckPress值到再次判定被按下。
**2. 請說明是如何實作 debounce的?**
按下以後數數,超過一定數字代表穩定low。
---
#### **3.3 combination lock**
必須要使用網絡電阻(排阻)必須是 active low,即導通開關後收到的訊號為 0。助教隨機設定3組密碼且均能依照密碼正確性閃出對應的燈號。
**Question**
**1. 說說排組如何使用及如何用一個網絡電阻接出電路圖上方的四個電阻?**