|
|
|
Oktatóanyag 04 - Levelesládák
|
|
|
|
=============================
|
|
|
|
|
|
|
|
Mielőtt nekiugranánk az UART0-ának, szükségünk lesz a levelesládára. Ezért ebben az oktatóanyagban bemutatom a
|
|
|
|
mailbox interfészt. Arra használjuk, hogy lekérdezzük az alaplap egyedi sorszámát, majd kiírjuk azt.
|
|
|
|
|
|
|
|
FIGYELEM: qemu nem irányítja át alapból az UART1-et a terminálra, csak az UART0-át!
|
|
|
|
|
|
|
|
Uart.h, uart.c
|
|
|
|
--------------
|
|
|
|
|
|
|
|
`uart_hex(d)` kiír egy bináris értéket hexadecimális formátumban.
|
|
|
|
|
|
|
|
Mbox.h, mbox.c
|
|
|
|
--------------
|
|
|
|
|
|
|
|
A levelesláda interfésze. Először értékekkel feltöltjük az `mbox` tömböt, aztán meghívjuk a `mbox_call(ch)`-t,
|
|
|
|
hogy értesüljön róla a GPU, megadva közben a levelesláda csatornáját.
|
|
|
|
Ebben a példában a [property csatornát](https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface)
|
|
|
|
használtam, aminek az üzenete a következőképp néz ki:
|
|
|
|
|
|
|
|
```
|
|
|
|
0. üzenet teljes hossza bájtban, (x+1)*4
|
|
|
|
1. MBOX_REQUEST mágikus szám, kérés típusú üzenetet jelent
|
|
|
|
2-x. parancsok
|
|
|
|
x+1. MBOX_TAG_LAST mágikus szám, nincs további parancs jelölése
|
|
|
|
```
|
|
|
|
|
|
|
|
Ahol minden egyes parancs szerkezete a következő:
|
|
|
|
|
|
|
|
```
|
|
|
|
n+0. parancs azonosító
|
|
|
|
n+1. adatterület mérete bájtban
|
|
|
|
n+2. nulla
|
|
|
|
n+3. opcionális adatterület
|
|
|
|
```
|
|
|
|
|
|
|
|
Main
|
|
|
|
----
|
|
|
|
|
|
|
|
Lekérjük az alaplap egyedi szériaszámát, majd kiírjuk a soros konzolra.
|