마이크로컨트롤러
마이크로컨트롤러(microcontroller, MCU)는 CPU, 기억장치(RAM, ROM), 입출력 장치를 하나의 칩에 모두 내장하여 정해진 기능을 수행할 수 있다.
MCU는 micro controller unit의 약자이다.
마이크로컨트롤러의 종류에는 8051, AVR, PIC, ARM, 80C196 ... 등이 존재한다.
마이크로컨트롤러를 컨트롤할 때 AND, OR, XOR 등의 비트 연산을 수행할 수 있다.
마이크로컨트롤러는 규모가 작은 시스템에 사용한다. 그래서 특징으로 운영체제를 포함하지 않는 경향이 있다는 점과 특정 기능만 수행하도록 응용프로그램이 만들어진다는 점이 있다.
중앙처리장치(CPU)는 마이크로컨트롤러의 중심을 담당한다. 명령어의 인식, 해석과 실행을 제어하고 연산 처리를 수행한다. 이 내부에는 PC, IR, ALU, Register, Instruction decoder, Control unit으로 구성된다.
Program Counter : 프로그램 카운터로, 다음에 수행될 명령어의 주소를 저장하고 있는 레지스터이다. 프로그램의 흐름을 제어한다.
Instruction Register : 명령어 레지스터로, 수행될 명령어의 이진 코드를 가진 레지스터이다. 프로그램 메모리에서 명령어를 가져와서 임시 보관한다.
Arithmetic Logic Unit (ALU): 산술논리연산장치로, 정보에 대한 연산을 수행한다.
Register : 정보를 임시로 저장하는 장치
Instruction decoder, Control unit : 명령어 레지스터에 있는 명령어를 해석하고 제어 모듈을 통해 동작을 수행한다.
CPU 기본 동작
프로그램 카운터에 의해 지정된 메모리의 위치에서 명령어를 읽어 명령어 레지스터에 임시 저장한다. 그 후, 명령어 디코더와 제어장치에서 명령어를 해석하고 명령어에 따라 ALU에서 연산을 수행하거나 프로그램의 흐름을 제어한다.
1. 프로그램 카운터에 적힌 주소가 주소 버스에 놓인다.
2. 메모리 읽기 제어 신호가 활성화된다.
3. 명령어(Opcode)가 ROM에서 읽혀 데이터 버스에 놓인다.
4. 명령어(Opcode)가 CPU 내의 명령어 레지스터에 놓인다.
5. 프로그램 카운터가 증가한다.
CPU를 통해 처리되는 명령은 산술 연산, 논리 연산, 데이터의 레지스터 이동, 프로그램의 분기 동작 등이 있다.
마이크로컨트롤러에는 프로그램 메모리와 데이터 메모리가 있다.
프로그램 메모리는 CPU에서 수행해야 하는 프로그램의 명령어 집합들이 저장되어 있고, ROM으로 구현되어 있다.
데이터 메모리는 CPU에서 명령어가 처리된 후 임시로 발생하는 데이터를 저장하기 위해 사용된다. 일반적으로 RAM으로 구현된다.
장치 간의 데이터 교환
장치들과 데이터를 교환하기 위해 세가지 버스가 존재한다.
1. 주소 버스
- CPU가 주변장치의 위치를 지정하기 위해 사용되고, 단방향으로 제어된다.
- 주소 버스의 크기는 CPU에서 최대로 지정가능한 주소의 최대 크기를 결정한다.
주소 버스가 16bit이라면, 0x0000 ~ 0xFFFF 까지 지정할 수 있다. 2^16 = 64KB 주소 공간에 접근할 수 있다.
2. 데이터 버스
- CPU와 기억장치 / 입출력 장치 사이로 정보를 전달하고, 양방향으로 제어된다.
- 데이터 연산 시, 기본적인 단위를 결정한다.
- 데이터 버스의 크기에 따라 빠른 속도로 명령어를 수행할 수 있다.
2byte 연산을 위해 8bit 데이터 버스를 가지고 있다면 2번의 데이터 접근이 필요하지만 16bit 데이터 버스라면 1번만
접근하면 된다.
3. 제어 버스
- 메모리나 입출력 장치와 데이터를 접근할 때 필요한 신호를 제공한다.
주소 버스와 데이터 버스에서 정보의 이동을 동기화 시킬 때 사용되는 타이밍 신호 등을 제공한다.
- 제어 신호는 clock 신호, read 신호, write 신호가 있다.
제어 신호가 읽기 신호인 경우, 지정된 주소의 기억장치에서 데이터를 읽어 데이터 버스에 적재한다.
쓰기 신호인 경우, 데이터 버스에 저장될 데이터를 실어주고 기억 장치에 write 신호를 보내 지정한 위치에 데이터를
기록한다.
'Embedded SW 기초' 카테고리의 다른 글
MCU - I/O 레지스터 (0) | 2024.07.01 |
---|---|
MCU - 상태 레지스터 (0) | 2024.06.30 |
HDMI란 무엇인가? (0) | 2024.06.26 |
네트워크 인터페이스 명 변경 방법 (0) | 2024.06.25 |
Makefile (0) | 2024.06.25 |