04EI µVision Debugger Set Breakpoint Start Debugger Version 1.0 µ µVision Seite 1 04EI µVision Simulator Tools zur Beeinflussung von SFR's Version 1.0 µ µVision Seite 2 04EI Simulationsfunktionen Simulationsfunktionen sind Funktionen in C-Syntax (ähnlich), die • während des Debug-Vorgangs aus dem Commandofenster gestartet werden können (statisch und dynamisch), • gebunden an einen Haltepunkt ausgeführt werden können (ohne das Targetprogramm zu stoppen), • parallel zur Ausführung des Targetprogrammes ablaufen können. Das Erstellen von Debug-Funktionen erfolgt nach dem Start der DebugSession im Menü Debug-Function-Editor. Es gibt zwei unterschiedliche Arten von Funktionen: FUNC-Funktionen: Werden nach ihrem Start direkt ausgeführt, das Targetprogramm hält während ihrer Ausführung an. SIGNAL-Funktionen: Werden gestartet und laufen bis zum ersten Aufruf der Systemfunktion "twatch(prm)", dann erfolgt für die als Parameter prm angegbene Anzahl von Maschinenzyklen die Ausführung des Targetprogrammes ehe die Simulationsfunktion weiter fortgeführt wird. Innerhalb der Simulatorfunktionen kann mit SFR's, globalen Variablen des Targets und virtuellen Target Registern gearbeitet werden. Parameterübergabe und Definition lokaler Variabler ist möglich. Version 1.0 µ µVision Seite 3 04EI Simulationsfunktionen Virtuelle Target Register (VTREG): AINx Analoger Eingang des Chip. Das Programm des Targets kann die Werte einlesen, die auf AINx hinterlegt wurden. PORTx Eine Gruppe von I/O Anschlüssen des Chips. PORT2 z.B. bezieht sich auf alle 16 Pins von P2. Mit diesen VT-Registern können beliebige I/O-Ports simuliert werden. SxIN Input-Buffer der seriellen Schnittstelle x. Man kann 8-Bit- oder 9-Bit- Werte auf SxIN schreiben. Diese können dann durch das Target-Programm empfangen werden. Durch Lesen von SxIN lässt sich feststellen ob der Buffer für den Empfang eines neuen Zeichens bereit ist. Der Wert 0xFFFF zeigt an, dass das vorhergehende Zeichen übernommen wurde. SxOUT Ausgabepuffer der seriellen Schnittstelle x. Es werden 8-Bit oder 9-Bit-Werte (wie durch das Target-Programm festgelegt) in das VT-Register kopiert.. SxTIME Bestimmt das Timing der Baudrate der seriellen Schnittstelle x. Mit SxTIME=1 wird die Targetrate verwendet. SxTIME=0 (default) ignoriert das Targettiming, die Ausgabe erfolgt sofort. CLOCK Taktfrequenz der simulierten CPU wie sie durch das Menü Options – Target festgelegt wurde. "twatch(CLOCK)" realisiert eine Wartezeit von genau 1 sec! Version 1.0 µ µVision Seite 4 04EI Simulationsfunktionen /* Toggle Port P2.0 and Set P2.8 */ FUNC void SetP28_ToggleP20 (void) { PORT2 ^= 0x0001; /* invert value on Port2.0 */ PORT2 |= 0x0100; /* set bit Port2.8 */ } /* Simulate analog input ramp on analog input AIN0 */ SIGNAL void analog0 (float limit) { float volts; printf (“ANALOG0 (%f) ENTERED\n”, limit); volts = 0; while (volts < limit) { Wartet die angegebene volts += 0.1; Anzahl von Maschinenzyklen ab - d.h. das Targetprogramm AIN0 = volts; läuft innerhalb dieses twatch (1000); Zeitraums } } Version 1.0 µ µVision Seite 5 04EI Simulationsfunktionen /* Simulate input to serial0 'ABC' in 1 sec intervals endless */ 5 SIGNAL void serial_input (void) { while (1) { /* repeat forever */ twatch (CLOCK); /* Delay for 1 second */ S0IN = 'A'; /* Send first character */ twatch (CLOCK / 900); /* Delay for 1 character time */ /* 900 is good for 9600 baud */ S0IN = 'B'; /* Send next character */ twatch (CLOCK / 900); S0IN = 'C'; /* Send final character */ } /* repeat */ } /* Square wave on P1H7 with a frequency of 1000Hz */ SIGNAL void P1H7_1000hz (void) { while (1) { /* PORT1H |= 0x80; /* twatch (CLOCK / 2000); /* PORT1H &= ~0x80; /* twatch (CLOCK / 2000); /* } /* } Version 1.0 µ repeat forever */ set P1H7 */ delay for .0005 secs */ clear P1H7 */ delay for .0005 secs */ repeat */ µVision Seite 6