Okay.. ich hole etwas weiter aus.
Vielen dank schonmal für eure Anregungen.
Es geht im Prinzip darum von der Zusatzplatine ein Signal zu senden.
In deren Interrupt Routine ( Taster an INT0 ) habe ich mit Hilfe der
Uart Lib von P.Fleury folgendes stehen:
1 |
|
2 | ISR(INT0_vect)
|
3 | {
|
4 | cli();
|
5 | EIMSK &= ~(1<< INT0); // INT0 deaktivieren
|
6 | sei();
|
7 | lcd_clrscr();
|
8 | lcd_command(1<<LCD_HOME);
|
9 | lcd_puts("Karte erkannt!");
|
10 | uart_puts("SAVE");
|
11 | uart_puts("\r");
|
12 |
|
13 | //uart_puts("SAVE\r");
|
14 | //uart_putc(0x04);
|
15 |
|
16 | //lesen();
|
17 |
|
18 | //startbild();
|
19 | cli();
|
20 | EIMSK |= (1<< INT0); // INT0 aktivieren
|
21 |
|
22 | EIFR |= (1<<INTF0); //Interruptflag INT0 löschen
|
23 | sei();
|
24 | }
|
Wie man an den Kommentaren sieht habe ich auch schon versucht nach
uart_puts() via uart_putc(HEXWERT) die Steuerzeichen manuell zu senden.
Sowohl für /n , /r als auch für 0x85.
http://de.wikipedia.org/wiki/Steuerzeichen
Wie der Kommandointerpreter auf der Webmodule Seite ausschaut
,durchblicke ich leider nicht zu 100% da eine Handeingabe funktioniert
muss ich allerdings ja "nur":
[BEFEHLEINGABE + ENTER] emulieren.
Via Putty funktioniert es ja wie es soll.
Die Befehlsauswertung im Webmodule findet im Webmodule in der While(1)
Schleife statt. Er liest also jedesmal aus dem UART Puffer ob er einen
Befehl findet.
1 | //Terminalcommandos auswerten
|
2 | if (usart_status.usart_ready){
|
3 | usart_write("\r\n");
|
4 | if(extract_cmd(&usart_rx_buffer[0]))
|
5 | {
|
6 | #if USE_MMC
|
7 | usart_write("\r\nSD:%s>",cwdirectory);
|
8 | #else
|
9 | usart_write("Ready\r\n\r\n");
|
10 | #endif
|
11 | }
|
12 | else
|
13 | {
|
14 | usart_write("ERROR\r\n\r\n");
|
15 | }
|
16 | PORTD ^= (1<<PD6);
|
17 | usart_status.usart_ready =0;
|
18 | }
|
Folgendes steht in der Beschreibung der Main.c im Webmodule.
1 | * Als erstes wird in der Hauptschleife die Zeit hochgezählt. Der Timerinterrupt
|
2 | * zählt nur das Flag #PROZESS_STATUS.timeChanged. Dadurch ist es möglich bei Erreichen
|
3 | * einer vorgegebenen Schaltzeit auch längere Aktionen auszuführen ohne auf Dauer eine
|
4 | * Gangungenauigkeit zu riskieren. Die zwischenzeitlich vergangenen Sekunden werden
|
5 | * notfalls einzeln in den nächten Schleifendurchgängen beschleunigt nachgeholt.
|
6 | *
|
7 | * Danach werden gesetzte Flags einzeln abgefragt, eine entsprechende Funktion zum
|
8 | * Ausführen der Aktion aufgerufen und das Flag wieder zurückgesetzt.
|
9 | *
|
10 | * Regelmäßig wird dabei
|
11 | * - die Ethernetschnittstelle mit #eth_get_data() gepollt;
|
12 | * - die serielle Schnittstelle auf Ende des
|
13 | * Befehls abgefragt #usart_status.usart_ready
|
14 | * - bei TELNET-Verbindung auf Port 23 werden Zeichen
|
15 | * von USART->TCP geschickt <tt>telnetd_send_data();</tt>
|
16 | *
|
17 | */
|
Dabei verstehe ich leider nicht was es mit dem usart_ready flag auf sich
hat. Da dieser ja auch in dem Kommandointerpreter eine Rolle spielt.
Vielen Dank und frohe Weihnachten !