Emulace komunikace 8051 po sériovém portu v Linuxu.
Komunikace s virtuální 8051 pod linuxem.
Francesco Balducci, 01.11.2010-00:00
Fígl je v použití socat k emulování sériové komunikace a uCsim k emulování čipu 8051. Vytvoříme systém jako na obrázku:
Potřebné programy jsou:
- socat: propojí jakékoliv dva komunikační kanály
- SDCC: the Small Device C Compiler (překladač C pro malé součástky)
- uCsim: simulátor pro mhoho mikrořadičů (vyvíjen spolu s SDCC na sourceforge)
- screen krom spousty jiných věcí se umí připojit k terminálovému zařízení (lze použít také minicom nebo gtkterm).
Abyste nainstalovali vše potřebné na Linuxu odvozeném od Debianu, spusťte následující jako root:
apt-get install sdcc sdcc-ucsim socat screen
Vytvořte soubor s názvem serialtest.c, to bude program, který poběží uvnitř emulátoru 8051:
#include <mcs51/8051.h> //
#include <stdio.h>#include <ctype.h>char getchar (void) {
char c;
while (!RI); /* wait to receive */
c = SBUF; /* receive from serial */
RI = 0;
return c;
}
void putchar (char c) {
while (!TI); /* wait end of last transmission */
TI = 0;
SBUF = c; /* transmit to serial */
}
void UART_Init() {
SCON = 0x50; /* configure serial */
TMOD = 0x20; /* configure timer */
TH1 = 0xE6; /* baud rate 1200 */
TL1 = 0xE6; /* baud rate 1200 */
TR1 = 1; /* enable timer */
TI = 1; /* enable transmitting */
RI = 0; /* waiting to receive */
}
void main() {
UART_Init();
for(;;) {
char c;
c = getchar();
c = toupper(c);
putchar(c);
}
}
Program přijme jeden bajt a pošleho převedený na velké písmeno zpět.
Přeložte program a vytvořte soubor
IntelHexsdcc -mmcs51 serialtest.c -o serialtest.ihx
Následující příkaz vytvoří v aktuálním adresáři dva
pseudoterminály (tty1 a tty2). Terminály jsou propojeny navzájem jako fyzickým sériovým kabelem.
socat -v -x PTY,link=./tty1 PTY,link=./tty2
Přepínače "-v -x" vypisují kanálem přenesené bajty a označují směr přenosu a ASCII kód.
Otevřete další systémový terminál (shell) a spusťte serialtest pomocí simulátoru 8051 uCsim.
s51 serialtest.ihx -s ./tty1
Simulátor se připojí k prvnímu pseudoterminálu (tty1) a nabídne prompt; spusťte příkaz "run" abyste spustili přeložený program.
Abyste se mohli k simulátoru připojit z druhé strany kanálu, otevřete další shell a spusťte:
screen ./tty2
Program se připojí k druhému pseudoterminálu a začne přes socat komunikovat s programem v 8051. Text psaný do screen zobrazí terminál převedená programem v 8051 na velká. Vyměněná data jsou zobrazena v logu socat.
Když nastane čas na migraci do reálného hardware, tak program v C pro 8051 zůstane stejný a počítačový program (v našem příadě screen) jen potřebuje místo pseudoterminálu otevřít jiný terminál, např./dev/ttyS0 (RS232) nebo /de/ttyUSB0 (UB kabel.
Poznámka prekladatela:Při ověřování, se mi na Debianu výše uvedený postup nepodařil rozchodit (záleží na verzii SDCC!). Ani stažení zdrojových kódů nedopadlo dobře. Nicméně v gentoo se zadařilo.
Nainstalujte si z portage subversion (svn), socat a screen.
Dále si stáhněte zdrojové soubory pomocí svn (v době překladu článku byla testována revize 6024)
svn co -r 6024 https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc~/sdccPokud chcete nejnovější verzi projektu, pak vynechte přepínač '-r 6024'.
Pokud byste snad zatoužili po celém archivu pak to zařídí příkaz, po kterém bude čas na kávu.
svn co -r 6024 https://sdcc.svn.sourceforge.net/svnroot/sdcc~/sdcc
Můžeme překládat. Přejděte do adresáře sdcc, pokud jste stahovali jen
"trunk". Případně do sdcc/trunk/sdcc, pokud jste si stáhli celý archiv.
Spusťte konfiguraci
./configureNásledně spusťte jako root překlad a instalaci
make installPoté již můžete pokračovat překladem souboru serialtest.c
Homepage projektu: http://balau82.wordpress.com: Emulating 8051 serial port communication on Linux Zverejnené zo súhlasom autora.Preklad, test:
krepa
tento článok je z mikroZONE
( https://www.mikrozone.sk/pluginy/content/content.php?content.83 )