Mikroprozesagailuak eta mikrokontrolagailuak: egitura, memoria eta GPIO programazioa
Mikroprozesagailuak eta mikrokontrolagailuak
Mikroprozesagailua: Programa bat exekutatzen duen zirkuitu digitala, zirkuitu integratuan enkapsulatua. Osagai nagusiak: ALU, dekodetzailea eta erregistroak.
Zirkuitu digitala: MOSFET asko osatzen dute; elkarren artean konektatuta daude eta logika bitarreko eragiketak egiteko balio dute.
Programa: Mikroprozesagailuak exekutatzen duen bit sekuentzia. Bit bakoitzak agindu bat adierazten du (batuketa, konparaketa…). Mikroprozesagailuak bitak interpretatzen ditu.
Mikrokontrolagailua: Mikroprozesagailua + periferikoak (Flash, RAM, S/I). Programagarria da eta funtzio zehatzetarako erabiltzen da.
Mikrokontrolagailuen egitura
CPU-ak programa exekutatu eta periferikoak kontrolatzen ditu: RAM, Flash, GPIO, komunikazio interfazeak (UART, SPI, I2C) eta timer-ak.
- RAM: exekuzioan datuak gordetzen ditu (itzaltzean galdu).
- Flash: datuak eta programa gordetzen ditu (ez dira galtzen).
Exekuzioan
- Instrukzioak Flash-en daude.
- Datuak RAM-en daude.
CPU-ak
- Instrukzio busarekin instrukzioak hartzen ditu (program counter bidez).
- Datu busarekin RAM-etik datuak hartzen ditu.
Dekodetzaileak instrukzioa interpretatzen du, ALU-ak eragiketak egiten ditu eta emaitzak erregistroetan gordetzen dira.
Memoria mapa eta periferikoak
Periferikoak datu busera konektatuta daude eta ezin dira aldagai arrunt bezala erabili. Horretarako, haien erregistroak programatu behar dira.
Erregistro hauek memoria-helbideetan daude, eta CPU-ak datu busaren bidez sartzen da bertara.
Periferikoak konfiguratzeko, helbide horietan idazten da.
Erakusleak
Erakusleek ez dute balio bat gordetzen, baizik eta RAM-eko helbide bat. Helbide horretako datua irakurri edo alda daiteke zuzenean. Mikrokontrolagailuetan, periferikoak memoria-helbideetan daudenez, erakusleak erabiliz konfiguratzen dira, helbide horietan idatziz.
Kode adibidea
#include <stdint.h>
#include <stdio.h>
typedef struct {
volatile uint32_t AHB1ENR;
} RCC_Typedef;
typedef struct {
volatile uint32_t MODER;
volatile uint32_t ODR;
} GPIO_Typedef;
#define RCC ((RCC_Typedef*)0x40023800)
#define GPIOB ((GPIO_Typedef*)0x40020400)
int main(void) {
RCC->AHB1ENR = 0x01;
GPIOB->MODER = 0x0C;
return 0;
}
GPIOB irteera (LED), C sarrera (botoia).
Kontzeptu gakoak
- Zer da GPIO periferikoa? Mikrokontrolagailuaren pinak programatzen diren periferikoa.
- Typedef: Erregistroen mapa definitzen du, idazketa eta irakurketa errazteko.
- Volatile: Optimizazio okerrak saihesten ditu, hardware erregistroak aldatu daitezkeelako.
Aldeak: mikroprozesagailua vs. mikrokontrolagailua
Mikroprozesagailua programa baten instrukzioak exekutatzen dituen zirkuitu digitala da, eta osagai nagusiak ALU, dekodetzailea eta erregistroak dira. Mikrokontrolagailua, berriz, CPU-a periferikoekin zirkuitu integratu berean dagoen gailua da.