Hallo,
ich habe eine Frage zum Hardwarehandshake. Und zwar muss man ja, bevor
man Daten sendet, fragen ob die Gegenseite bereit ist Daten zu senden.
Meine Frage ist nun: Setze ich den RTS-Pin permament wenn ich Daten
senden will und schaue nur bei jedem Zeichen, ob die Gegenstelle CTS
gesetzt hat oder setze ich bei jedem Zeichen, dass gesendet werden soll,
RTS, warte auf CTS und lösche RTS wieder wenn das Zeichen gesendet
wurde?
Aktuell habe ich letzteres implementiert, weiß aber nicht ob das
wirklich sinnvoll ist:
1 | void sendChar(unsigned char sendChar){
|
2 | {
|
3 | /* Wait for empty transmit buffer */
|
4 | while ( !( UCSR0A & (1<<UDRE0)) );
|
5 | /* hardware-handshake */
|
6 | /* set Request to Send (RTS) */
|
7 | PORTD |= (1 << RTS);
|
8 | /* wait for Clear to Send Signal from Reciver */
|
9 | while (PIND & (1 << CTS));
|
10 | /* Put data into buffer, sends the data */
|
11 | UDR0 = sendChar;
|
12 | PortD &= ~(1 << RTS);
|
13 | }
|
14 | }
|
Oder ob nicht
1 | …
|
2 | void sendChar(unsigned char sendChar){
|
3 | {
|
4 | /* Wait for empty transmit buffer */
|
5 | while ( !( UCSR0A & (1<<UDRE0)) );
|
6 | /* hardware-handshake */
|
7 | /* wait for Clear to Send Signal from Reciver */
|
8 | while (PIND & (1 << CTS));
|
9 | /* Put data into buffer, sends the data */
|
10 | UDR0 = sendChar;
|
11 | }
|
12 | }
|
13 | …
|
14 | void sendString(char* string) {
|
15 | while (*string) {
|
16 | sendChar(*string);
|
17 | string++;
|
18 | }
|
19 | }
|
20 | …
|
21 | PORTD |= (1 << RTS);
|
22 | sendString("Hallo Welt");
|
23 | PORTD &= ~(1 << RTS);
|
24 | …
|
sinnvoller wäre.