diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index cd86bba..21c487a 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,7 +13,7 @@ "state": { "type": "markdown", "state": { - "file": "TERCERO/PI/Teoria_2425.md", + "file": "TERCERO/ATR2/Teoria_2425.md", "mode": "source", "source": false }, @@ -78,7 +78,8 @@ } ], "direction": "horizontal", - "width": 300 + "width": 300, + "collapsed": true }, "right": { "id": "44cf06183e1c1c7d", @@ -161,7 +162,8 @@ } ], "direction": "horizontal", - "width": 367.5 + "width": 367.5, + "collapsed": true }, "left-ribbon": { "hiddenItems": { @@ -177,22 +179,24 @@ }, "active": "fbdb92a309be8088", "lastOpenFiles": [ - "TERCERO/DAD/Teoria_2425.md", - "Pasted image 20250227131516.png", + "Pasted image 20250314122451.png", + "Pasted image 20250314121916.png", + "Pasted image 20250314121904.png", + "Pasted image 20250314115857.png", + "Pasted image 20250314115632.png", + "Pasted image 20250314115427.png", + "Pasted image 20250314114314.png", + "Pasted image 20250314114257.png", "TERCERO/SETR1/Teoria_2425.md", - "Pasted image 20250227120032.png", - "Pasted image 20250227115420.png", - "Untitled.md", + "Pasted image 20250313122633.png", + "Pasted image 20250313115415.png", + "Pasted image 20250313114416.png", "TERCERO/PI/Teoria_2425.md", - "Pasted image 20250225113929.png", - "Pasted image 20250225113139.png", - "Pasted image 20250225112945.png", - "Pasted image 20250225111938.png", - "Pasted image 20250225111801.png", - "Pasted image 20250225111612.png", - "Pasted image 20250225110824.png", - "TERCERO/ATR1/Teoría_2425.md", "TERCERO/ATR2/Teoria_2425.md", + "SEGUNDO/AC/Teoría_2324.md", + "TERCERO/DAD/Teoria_2425.md", + "Untitled.md", + "TERCERO/ATR1/Teoría_2425.md", "SEGUNDO/RC/Teoría_2324.md", "conflict-files-obsidian-git.md", "TERCERO/DAD/images", @@ -221,7 +225,6 @@ "TERCERO/ATR1/images", "TERCERO/ATR1/Welcome.md", "SEGUNDO/ADDA/ADDA 23-24.md", - "SEGUNDO/ADDA/MODELOS.md", "SEGUNDO/SO/Sin título.canvas" ] } \ No newline at end of file diff --git a/Captura desde 2025-03-06 12-24-34.png b/Captura desde 2025-03-06 12-24-34.png new file mode 100644 index 0000000..aca8fed Binary files /dev/null and b/Captura desde 2025-03-06 12-24-34.png differ diff --git a/Pasted image 20250306113057.png b/Pasted image 20250306113057.png new file mode 100644 index 0000000..1f59d4b Binary files /dev/null and b/Pasted image 20250306113057.png differ diff --git a/Pasted image 20250306113133.png b/Pasted image 20250306113133.png new file mode 100644 index 0000000..a09b32c Binary files /dev/null and b/Pasted image 20250306113133.png differ diff --git a/Pasted image 20250306113416.png b/Pasted image 20250306113416.png new file mode 100644 index 0000000..a95b07d Binary files /dev/null and b/Pasted image 20250306113416.png differ diff --git a/Pasted image 20250306121610.png b/Pasted image 20250306121610.png new file mode 100644 index 0000000..2add0c2 Binary files /dev/null and b/Pasted image 20250306121610.png differ diff --git a/Pasted image 20250306122347.png b/Pasted image 20250306122347.png new file mode 100644 index 0000000..df948dc Binary files /dev/null and b/Pasted image 20250306122347.png differ diff --git a/Pasted image 20250307112154.png b/Pasted image 20250307112154.png new file mode 100644 index 0000000..3478ab3 Binary files /dev/null and b/Pasted image 20250307112154.png differ diff --git a/Pasted image 20250307115920.png b/Pasted image 20250307115920.png new file mode 100644 index 0000000..505cdd3 Binary files /dev/null and b/Pasted image 20250307115920.png differ diff --git a/Pasted image 20250311105624.png b/Pasted image 20250311105624.png new file mode 100644 index 0000000..80de0a0 Binary files /dev/null and b/Pasted image 20250311105624.png differ diff --git a/Pasted image 20250311110117.png b/Pasted image 20250311110117.png new file mode 100644 index 0000000..6593829 Binary files /dev/null and b/Pasted image 20250311110117.png differ diff --git a/Pasted image 20250311110853.png b/Pasted image 20250311110853.png new file mode 100644 index 0000000..90dd61f Binary files /dev/null and b/Pasted image 20250311110853.png differ diff --git a/Pasted image 20250311111634.png b/Pasted image 20250311111634.png new file mode 100644 index 0000000..312688c Binary files /dev/null and b/Pasted image 20250311111634.png differ diff --git a/Pasted image 20250311111721.png b/Pasted image 20250311111721.png new file mode 100644 index 0000000..d89079b Binary files /dev/null and b/Pasted image 20250311111721.png differ diff --git a/Pasted image 20250311112420.png b/Pasted image 20250311112420.png new file mode 100644 index 0000000..5376f04 Binary files /dev/null and b/Pasted image 20250311112420.png differ diff --git a/Pasted image 20250313114416.png b/Pasted image 20250313114416.png new file mode 100644 index 0000000..dba85a8 Binary files /dev/null and b/Pasted image 20250313114416.png differ diff --git a/Pasted image 20250313115415.png b/Pasted image 20250313115415.png new file mode 100644 index 0000000..db019d9 Binary files /dev/null and b/Pasted image 20250313115415.png differ diff --git a/Pasted image 20250313122633.png b/Pasted image 20250313122633.png new file mode 100644 index 0000000..2565ff0 Binary files /dev/null and b/Pasted image 20250313122633.png differ diff --git a/Pasted image 20250314114257.png b/Pasted image 20250314114257.png new file mode 100644 index 0000000..7b80163 Binary files /dev/null and b/Pasted image 20250314114257.png differ diff --git a/Pasted image 20250314114314.png b/Pasted image 20250314114314.png new file mode 100644 index 0000000..ab76aa8 Binary files /dev/null and b/Pasted image 20250314114314.png differ diff --git a/Pasted image 20250314115427.png b/Pasted image 20250314115427.png new file mode 100644 index 0000000..7c7fafa Binary files /dev/null and b/Pasted image 20250314115427.png differ diff --git a/Pasted image 20250314115632.png b/Pasted image 20250314115632.png new file mode 100644 index 0000000..06661a1 Binary files /dev/null and b/Pasted image 20250314115632.png differ diff --git a/Pasted image 20250314115857.png b/Pasted image 20250314115857.png new file mode 100644 index 0000000..bebf19f Binary files /dev/null and b/Pasted image 20250314115857.png differ diff --git a/Pasted image 20250314121904.png b/Pasted image 20250314121904.png new file mode 100644 index 0000000..26b115c Binary files /dev/null and b/Pasted image 20250314121904.png differ diff --git a/Pasted image 20250314121916.png b/Pasted image 20250314121916.png new file mode 100644 index 0000000..3b4e29b Binary files /dev/null and b/Pasted image 20250314121916.png differ diff --git a/Pasted image 20250314122451.png b/Pasted image 20250314122451.png new file mode 100644 index 0000000..e23cf31 Binary files /dev/null and b/Pasted image 20250314122451.png differ diff --git a/SEGUNDO/.obsidian/app.json b/SEGUNDO/.obsidian/app.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/SEGUNDO/.obsidian/app.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/SEGUNDO/.obsidian/appearance.json b/SEGUNDO/.obsidian/appearance.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/SEGUNDO/.obsidian/appearance.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/SEGUNDO/.obsidian/core-plugins.json b/SEGUNDO/.obsidian/core-plugins.json new file mode 100644 index 0000000..b977c25 --- /dev/null +++ b/SEGUNDO/.obsidian/core-plugins.json @@ -0,0 +1,31 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "properties": false, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "bookmarks": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": true, + "webviewer": false +} \ No newline at end of file diff --git a/SEGUNDO/.obsidian/workspace.json b/SEGUNDO/.obsidian/workspace.json new file mode 100644 index 0000000..69191f9 --- /dev/null +++ b/SEGUNDO/.obsidian/workspace.json @@ -0,0 +1,166 @@ +{ + "main": { + "id": "bab4307730167481", + "type": "split", + "children": [ + { + "id": "df5a61525955f9d8", + "type": "tabs", + "children": [ + { + "id": "7fddb7c5714d2b20", + "type": "leaf", + "state": { + "type": "empty", + "state": {}, + "icon": "lucide-file", + "title": "New tab" + } + } + ] + } + ], + "direction": "vertical" + }, + "left": { + "id": "a79fde7e0786678d", + "type": "split", + "children": [ + { + "id": "14746220aa380359", + "type": "tabs", + "children": [ + { + "id": "ac7b040221400c06", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical", + "autoReveal": false + }, + "icon": "lucide-folder-closed", + "title": "Files" + } + }, + { + "id": "42620b8fa8566917", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + }, + "icon": "lucide-search", + "title": "Search" + } + }, + { + "id": "d6c1dc02e2736d9b", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {}, + "icon": "lucide-bookmark", + "title": "Bookmarks" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "ae7a8b7d3da472ac", + "type": "split", + "children": [ + { + "id": "48ed7629cb27121e", + "type": "tabs", + "children": [ + { + "id": "3f8d79c3e4c8bb56", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-coming-in", + "title": "Backlinks" + } + }, + { + "id": "d356429e98de2117", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "linksCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-going-out", + "title": "Outgoing links" + } + }, + { + "id": "97804396b48df5cb", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-tags", + "title": "Tags" + } + }, + { + "id": "266c4f3ef1ada26f", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "followCursor": false, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-list", + "title": "Outline" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300, + "collapsed": true + }, + "left-ribbon": { + "hiddenItems": { + "switcher:Open quick switcher": false, + "graph:Open graph view": false, + "canvas:Create new canvas": false, + "daily-notes:Open today's daily note": false, + "templates:Insert template": false, + "command-palette:Open command palette": false + } + }, + "active": "7fddb7c5714d2b20", + "lastOpenFiles": [] +} \ No newline at end of file diff --git a/Pasted image 20250225091113.png b/TERCERO/ATR2/Pasted image 20250225091113.png similarity index 100% rename from Pasted image 20250225091113.png rename to TERCERO/ATR2/Pasted image 20250225091113.png diff --git a/TERCERO/ATR2/Teoria_2425.md b/TERCERO/ATR2/Teoria_2425.md index 4fd6df3..922078d 100644 --- a/TERCERO/ATR2/Teoria_2425.md +++ b/TERCERO/ATR2/Teoria_2425.md @@ -72,7 +72,103 @@ Hay varios pasos en el reenvío: 8. Reenviar al PS 9. Enviar ICMP ## 3. Información global +Todos los routers tienen la topología completa y la información de coste de los enlaces (**Algoritmo "link state"**). ## 4. Información descentralizada +Los routers conocen los vecinos físicamente conectados y el coste del enlace a sus vecinos. En un proceso iterativo, intercambia información con sus vecinos (**Algoritmo "distance vector"**). ## 5. Enrutamiento estático +Las rutas cambian lentamente. Es decir, todas las entradas de la tabla se habrán introducido manualmente. La información de ida no proporciona información sobre como volver ni lo asegura. **Convergencia:** todos los routers tienen información precisa y coherente. ## 6. Enrutamiento dinámico +Las rutas cambian más rápido (actualizaciones periódicas y respuesta a los cambios en los enlaces). +### Sistemas autónomos +Grupo de prefijos de red de uno o varios ISP en el que existe una política de enrutamiento única y claramente definida. +- Dentro de cada AS se utilizan protocolos de routing interiores (IGP) +- Entre cada AS se usarán protocolos de routing exteriores (EGP) +### Componentes de un algoritmo de enrutamiento +1. Un proceso para enviar y recibir información sobre redes alcanzables a/de otros routers +2. Un proceso para calcular rutas óptimas (costes en cada enlace) +3. Un proceso para reaccionar y avisar de cambios en la topología +### Cálculo del camino más corto +#### Vector distancia (Bellman-Ford) +- Cada router conoce la distancia (o coste) de sus vecinos directamente conectados +- Un router envía una lista de actualizaciones de enrutamiento a sus vecinos que contiene las redes alcanzables por él y su distancia +- Si todos los routers actualizan las redes alcanzables/distancias con la información recibida de sus vecinos, la red converge. +- Cada router conoce: + - Su ID + - Sus interfaces + - La distancia hasta el siguiente router de cada interfaz +- Actualizaciones periódicas: cada (~90s) se envía una actualización +- Actualizaciones por cambios: si hay cambios en la métrica de un enlace, se envía inmediatamente +- Actualizaciones de toda la TE: la mayoría de los protocolos que usan vector distancia, envían toda la TE a sus vecinos en las actualizaciones +- Tiempo para invalidar rutas: se invalidan las rutas en la TE si no son refrescadas, tras un valor típico 3-16 veces periodo de actualización +![[Pasted image 20250307112154.png]] +#### Estado del enlace (Dijkstra) +- Cada router conoce la distancia de sus vecinos directamente conectados +- La información de distancia (LS: Link State) es enviada por broadcast a todos los routers de la red +- Todos los routers construyen la topología de la red +- Cada router calcula el camino más corto a todas las redes alcanzables de manera independiente ## 7. RIP +### RIPv1 +- Sufre los problemas típicos del vector distancia +- Sólo útil en redes pequeñas (5-10 routers) +- Métrica basada en número de saltos únicamente +- Máximo 15 saltos. Infinito 16. +- La información se intercambia cada 30s. +Los mensajes RIP se encapsulan en UDP en el puerto 520. +- Dirección destino broadcast dirigido +- Solo procesa actualización si origen pertenece a la red de la interfaz +En un mensaje RIP pueden enviarse hasta 25 entradas del vector distancias +- Vectores grandes -> varios mensajes +- Invalidación tras 180s +No usa máscara de red en los mensajes -> no soporta CIDR ni VLSM. +### RIPv2 +- Permite CIDR (tiene el campo de la máscara de subred). +- Campo próximo salto +![[Pasted image 20250307115920.png]] + +# TEMA 3: Redes inalámbricas y móviles +Dos retos importantes aunque diferentes: +- **Sin cables:** comunicación a través de un enlace inalámbrico +- **Movilidad:** gestionando las conexiones cuando un usuario cambia de punto de acceso a la red sin perder su conexión +## 1. Introducción +![[Pasted image 20250314114257.png]] +![[Pasted image 20250314114314.png]] +Hay dos formas de conectar dispositivos de forma inalámbrica +### Modo infraestructura +![[Pasted image 20250314115427.png]] +- Las estaciones base conectan dispositivos de forma cableada. +- Transferencia: dispositivo cambia de estación base que provee la conexión a la red cableada. +# UN PUNTO DE ACCESO NO TIENE IP, ES DE NIVEL 2 + +![[Pasted image 20250314115632.png]] +**Inundación:** Tabla vacía. El equipo X transmite a la estación A. +**Envío de tráfico:** Si A contesta a X, el punto de acceso recibe una trama en el puerto I con dirección MAC_A de origen y MAC_X destino. +### Modo ad hoc +![[Pasted image 20250314115857.png]] +- No hay estaciones base +- Los nodos sólo pueden transmitir a otros nodos en su alcance +- Los nodos se organizan a sí mismos en red: enrutamiento a través de ellos mismos +### Otros modos +- **Modo Máster:** una estación inalámbrica actúa como punto de acceso +- **Modo Monitor:** permite capturar paquetes sin asociarse a un punto de acceso o red ad-hoc, es decir, permite monitorizar la red sin transmitir tráfico a la misma (modo pasivo). +- **Modo Promiscuo:** permite capturar paquetes de la red, pero hay que estar en ella. +## 2. Topologías +- **BSS (Basic Service Set):** topología de red formada por un punto de acceso y estaciones inalámbricas. +- **ESS (Extended Service Set):** topología de red formada por varias BSS interconectadas entre ellas. +- **IBSS (Independent Basic Service Set):** topología de red formada únicamente por estaciones inalámbricas, operando en modo ad-hoc. +## 3. Sistemas de distribución +### Cableado +A través de red LAN IEEE 802.3 +### Inalámbricos +- **WLAN con rutas preconfiguradas estáticas:** WLAN basado en IEEE 802.11 +- **WLAN con rutas no preconfiguradas o Redes Mesh:** Las redes Mesh se definen como el conjunto AP interconectadas mediante enlaces inalámbricos ocn configuración dinámica (algoritmos). El objetivo de las redes Mesh es llegar a todos los rincones del sitio con varios AP en una "malla" (mesh). +## 4. Diferencias entre tipos de enlace +En redes inalámbricas hay problemas de obstáculos y distancia, ya que si hubiese tres equipos A,B,C, A y C no "se ven" y como la señal se debilita con la distancia entre ellos o el obstáculo entre ellos no se pueden comunicar. + +| Obstáculo | Distancia | +| ------------------------------------ | ------------------------------------ | +| ![[Pasted image 20250314121904.png]] | ![[Pasted image 20250314121916.png]] | +## 5. Code Division Multiple Access (CDMA) +Código único asignado a cada usuario. Todos los usuarios comparten la misma frecuencia pero cada uno tiene una frecuencia de chip para codificar los datos. Permite a usuarios coexistir y transmitir simultáneamente. +- **Señal codificada:** datos originales x secuencia de chip +- **Decodificación:** producto escalar entre la señal codificada y la secuencia de chip +![[Pasted image 20250314122451.png]] \ No newline at end of file diff --git a/TERCERO/PI/Teoria_2425.md b/TERCERO/PI/Teoria_2425.md index 9a3ba25..8523f76 100644 --- a/TERCERO/PI/Teoria_2425.md +++ b/TERCERO/PI/Teoria_2425.md @@ -108,4 +108,18 @@ Por ejemplo para la escritura E/S: - En general, cada dispositivo conectado al bus debe tener dirección única. Se podría cambiar la dirección o implementar un segundo bus. - Este bus tiene una arquitectura maestro-esclavo. Es posible que haya más de un maestro pero **SÓLO** un maestro a la vez. - Es síncrono, el maestro proporciona CLK. -- Tiene resistencias de pull-up a $V_{CC}$ . \ No newline at end of file +- Tiene resistencias de pull-up a $V_{CC}$ . +# TEMA 3: Teclados +## 1. Fundamentos físicos + +![[Pasted image 20250311105624.png]] +![[Pasted image 20250311110117.png]] +Las teclas están "mapeadas" a unos códigos llamados Scan: + +![[Pasted image 20250311110853.png]] + +![[Pasted image 20250311111634.png]] +## 2. Estructura y funcionamiento + +![[Pasted image 20250311111721.png]] +![[Pasted image 20250311112420.png]] diff --git a/TERCERO/SETR1/Teoria_2425.md b/TERCERO/SETR1/Teoria_2425.md index 89e1239..f8d060f 100644 --- a/TERCERO/SETR1/Teoria_2425.md +++ b/TERCERO/SETR1/Teoria_2425.md @@ -164,9 +164,150 @@ var2bit2 = 1; ![[Pasted image 20250227120032.png|500]] ### Registros +![[Pasted image 20250306113133.png]] +- **R0-R12:** propósito general + - R0-R7: cualquier instrucción + - R8-R12: no siempre, por ejemplo para instrucciones Thumb (16b) +- **R13:** Stack Pointer. Hay dos SP, el MSP (Main Stack Pointer) para el modo privilegiado y el PSP (Process Stack Pointer) para el modo no privilegiado. +- **R14:** Link Register. Almacena la dirección de retorno de subrutina. +- **R15:** Program Counter. +- **PSR:** Program Status Register. Internamente 3 registros. + ![[Pasted image 20250306113416.png]] + - APSR: flags de la última ejecución + - IPSR: código de la interrupción en ejecución + - EPSR: información de la instrucción en ejecución ### Set de instrucciones - +![[Pasted image 20250306113057.png]] +#### Instrucciones Thumb y Thumb-2 +- Las instrucciones en los Cortex ocupan 32b. +- Se necesitan 4B por instrucción. +- Un mismo programa ocupa 4 veces más para un Cortex que para un procesador de 8b (ATMEGA, etc) +- Actualmente soportan el juego de instrucciones Thumb-2 (combinan instrucciones de 32b y 16b), pero implica un descenso en el rendimiento al añadir latencia de descodificación de instrucciones. ## 4. Manipulación de bits +- **El método clásico:** Para cambiar un bit de un registro de (por ejemplo) 8 bits, se debe leer, aplicar máscara y escribir el valor modificado. En conclusión: RMW (Read-Modify-Write). +- **El problema:** Si una vez leído el registro, se interrumpe la tarea por otra que modifica otro bit del registro, al escribir el dato de antes, el nuevo bit se machaca. +### Métodos de manipulación de bits específicos en μC +En C tradicional se suelen usar máscaras y campos de bit en structs. En principio, si la unidad mínima direccionable es el byte, los campos de bit implican la necesidad de realizar máscaras para el acceso a los datos sin modificar el resto. +```C +struct mybitfields +{ + unsigned short a : 4; + unsigned short b : 5; + unsigned short c : 7; +} test; +int main(void) +{ + test.a = 2; + test.b = 31; + test.c = 0; +} +``` +Esto depende mucho del **compilador y del μC** ya que puede hacerse tradicionalmente (RMW) o en un sólo paso si se admite el direccionamiento a bit. +#### 1. Mapa de memoria direccionable bit +Hay algunas instrucciones que direccionan a nivel de bit. +![[Pasted image 20250306121610.png]] +#### 2. Instrucción compleja que realiza RMW de una vez +Por ejemplo las instrucciones: +```asm +BRSET dir, mascara, etiqueta +BSET dir, mascara, etiqueta +BCLR dir, mascara +BIC r0, r1, #1 // Pone a 0 en r1 los bits que diga en #X +``` +#### 3. Direccionamiento de bit dentro de un byte +```asm +BCF dirf, numbit (PIC) +SBI 0x18, 4 (ATMEGA) +``` +#### 4. Crear una zona de memoria en la que cada posición de 32 bits está asociada a un bit de otra zona de memoria: bit banding +![[Captura desde 2025-03-06 12-24-34.png]] +El tamaño máximo de SRAM son 512MB - 32MB ya que estos se usan para apuntar a los bits de la zona de memoria de bit banding. + +| bitX | DATO | 0x4242028C | +| -------- | -------- | -------------- | +| **bit3** | **DATO** | **0x42420288** | +| **bit2** | **DATO** | **0x42420284** | +| **bit1** | **DATO** | **0x42420280** | ## 5. Interrupciones +#### Aclaraciones +Según el origen: +- Hay interrupciones internas al procesador que se producen por algún dispositivo propio dentro del μC. +- Hay interrupciones externas que se activan mediante un pin externo (por nivel o por flanco). +Según el uso: +- Hay interrupciones debidas a fallos (excepciones). +- Hay interrupciones software (como saltos a subrutinas privilegiados). +- Hay interrupciones de gestión de periféricos (las normales). +Posibilidad de enmascarar: +- Interrupciones enmascarables +- Interrupciones no enmascarables (NMI). +### Tipos de excepciones +- **Reset:** tras encendido o aplicar un '0' a la señal reset del CPU. Cuando se produce el CPU para la ejecución independientemente de la instrucción que estuviese ejecutando. Cuando reset se desactiva, se ejecuta la ISR de reset, reiniciando el procesador. +- **HardFault:** se dispara cuando hay un error en el tratamiento de una interrupción/excepción. Ej: ISR no definida +- **MemManage:** ocurre cuando el MPU falla o hay accesos a zonas de memoria reservada. +- **BusFault:** ocurre cuando una transacción en un bus falla o hay un error de E/S. Ej: no existe el periférico en puerto X. +- **UsageFault:** se produce cuando hay un fallo al ejecutar una instrucción + - Instrucción no definida + - Acceso desalineado ilegal + - Estado inválido durante ejecución (por ej. dividir por 0) + - Error en la finalización de una ISR +### Tipos de interrupciones software +- **SVCall:** supervisor call. Se dispara por la instrucción SVC. La usa el SO para asegurarse de que sus instrucciones no se interrumpan y ejecutar bloques de código de forma atómica. +- **PendSV:** permite acceso privilegiado a memoria y registros. +### Manejadores de Interrupciones/Excepciones +Las rutinas que las manejan se clasifican en: +- **Interrupt Service Routines (ISR):** manejan las interrupciones de los periféricos +- **Fault Handlers:** manejan las excepciones en caso de error +- **System Hanlders:** manejan las interrupciones del SO: PendSV, SVCall, SysTick +### Gestión de periféricos +- A cada fuente de int se le asocia un trozo de código: ISR +- Las ISR en μC pequeños suelen no anidarse +- El concepto de anidamiento implica: + - Niveles de prioridad + - Un dispostivo hardware controlador de interrupciones +- Para saber en que sitio esta la ISR: tabla de vectores de interrupcion +![[Pasted image 20250313114416.png]] +### NVIC: Nested Vector Interrupt Controller +- Integrado en el núcleo del Cortex +- Permite asignar niveles de prioridad +- Las interrupciones más prioritarias interrumpen a las de menos prioridad: interrupciones anidadas +- Permite configurar **150 interrupciones** con **16 niveles de prioridad** +- Diseñado para minimizar la latencia +- Permite cambiar la tabla de vectores de +- PPB (Private Programming Bus): para configurar por software +- Tiene múltiples conexiones con el Core: + 1. Interrumpir al core y enviarle codigo de interrupcion + 2. Conexion E/S para escribir su configuracion + 3. Lineas de excepciones +### Registros Cortex M4 +```C +register int nombrereg _asm("r13"); +__set_BASEPRI(10); +``` +![[Pasted image 20250313115415.png]] +### Máscaras del Cortex M3/M4 +- PRIMASK: registro de 1 bit que permite excepciones NMI y hard fault y ninguna más. +- FAULTMASK: registro de 1 bit que permite excepciones NMI y ninguna más. +- BASEPRI: registro de 9 bits que define el nivel de prioridad de las máscaras. Cuando se activa, deshabilita las interrupciones >= que su valor (cuanto mas grande el numero, menor prioridad). Por defecto es 0. +### Estado de las interrupciones dentro del controlador +1. Inactive: no se ha producido y no está pendiente +2. Pending: a la espera de ser atendida +3. Active: se está atendiendo por el CPU y no ha sido completada todavía +4. Active and pending: está siendo atendida por el procesador y se ha vuelto a pedir, por lo que se tiene que ejecutar de nuevo cuando se complete. +