728x90
반응형
I/O Devices
하드웨어 구성요소들은 bus라고 불리는 상호 연결된 network를 통해서 메모리를 주고 받음
Memory-mapped I/O를 이용하여 I/O register를 memory address에 접근할 수 있도록 함
따라서 이 register들은 LOAD와 STORE 명령어만 할 수 있음
I/O Device Interface
- 장치와 네트워크 사이 회로
- 데이터 전송, 상태 교환, control information
- data register, status register, control register가 LOAD, STORE 명령어로 접근
- status register : 이전에 받은 명령을 다 처리하여 새 명령을 받을 수 있는지
- control register : 화면 밝기 제어, 화면을 한 번에 지우기 등
- Memory-mapped I/O로 이 register가 메모리의 어디에 위치했는 볼 수 있음
- processor에서 scanf라는 명령어를 본다면
- 1. Display로 가서 커서가 깜빡거리며 사용자 입력을 기다리는 것을 표시
- display status에게 띄울 준비가 되었는지 물어봐야함
- 2. processor의 control register는 keyboard의 status에게 지금 입력 받았는지 물어봄
- 1. Display로 가서 커서가 깜빡거리며 사용자 입력을 기다리는 것을 표시
- keyboard control에서
- Caps lock, num lock, 하나의 키에 두 가지 기능이 포함된 키로 인하여 어떤 상태를 유지해야하는지
- 사용자가 입력하는 값들이 즉각즉각 전송되는 것이 어렵기에 buffer를 이용하여 잠시 저장. 이러한 버퍼의 내용을 초기화해야하는 것도 keyboard control에 내장됨
Common Procedure for I/O
- I/O 장치에는 READY 신호를 processor에게 보낼 방도가 필요
-
- 키보드는 한 글자씩 읽을 준비가 되었다고
- 화면은 한 글자씩 받아서 띄울 준비가 되었다고
-
- READY 신호 == status register 속 status flag
- processor가 poll한 것
Polling I/O
polling : 정기적으로 (시간 간격마다) CPU에 이벤트가 들어왔는지 확인
- delay 없이 이벤트를 다루기 위해 충분히 종종 polling하기
while (1){
if (Ready) {
break
}
}
무한루프로 volatile 변수를 계속 확인하면 CPU 낭비 (다른 일 못함)
- Uses CPU inefficiently
- 간단한 임베디드 시스템에서는 비교적 빨리 처리되어 크게 걱정할 필요 X
- 키보드가 READY 상태가 되어야 다음 과정을 진행할 수 있도록 함

Polling Button Input
- reset 버튼은 입력으로 쓸 수 없음. CPU reset만 가능
-
- S1 버튼은 GPIO P1.1
- S2 버튼은 GPIO P1.4
-
- 버튼을 누르지 않았다면 unknown state(floating)
- 버튼을 누르면 GND와 GPIO핀이 연결됨. 즉 LOW(0) 신호
Pull-up Resistor
사용하는 이유
- floating 상태일 때 입력값이 HIGH인지 LOW인지 알 수 없는, 불확실한 상태가 발생하지 않도록 하기 위해 사용
사용 방법
- known state로 만들기 위해서는
-
- 한 쪽 끝에는 pull-up resistor을 GPIO 핀에 연결하고
- 다른 쪽에는 HIGH voltage(5V, 3.3V)를 연결
- pull-up 저항은 스위치와 함께 사용되어
- 스위치가 동작하지 않으면 pull-up 저항에 의해 VCC로 흐르게 되어
- HIGH 값으로 읽음
- 스위치가 동작하면 입력 핀이 GND로 흐르게 되어
- LOW 값으로 읽음
- pull up register는 VCC에 아주 강력한 저항을 두어서
- VCC 쪽으로 역류하지 않도록 막음
- 10k옴(10000)으로도 충분히 잘 동작함
- pull up & pull down이 MSP432P3111에 내장되어있다.
728x90
반응형
'CS > Embedded System' 카테고리의 다른 글
SW Architecture - RR, Interupt, func-queue scheduling, RTOS (0) | 2021.12.07 |
---|---|
[실습] User Button Initialization & State Machine (0) | 2021.10.13 |
Header file에 정의된 macro와 데이터형 이용하기 (0) | 2021.10.13 |
[실습] Memory Map for P1.0 Red LED (0) | 2021.10.13 |
Bit Operator (0) | 2021.10.13 |