Den ganzen Source code zu Posten wär wohl etwas zu lange. Deshalb
beschränke ich mich momentan auf Initialisierungen der Uart Module.
SW_UART Initialisierung:
1 | #ifdef SUART_RXD
|
2 |
|
3 | SUART_RXD_DDR &= ~(1<<SUART_RXD_BIT);
|
4 | SUART_RXD_PORT |= (1<<SUART_RXD_BIT);
|
5 | ETIMSK |= (1<<TICIE3); //INput Capture Interrupt enable
|
6 | etifr |= (1<<ICF3) | (1<<OCF3B); //Timer counter input capture flag, Outputcompare b Match flag
|
7 | #else
|
8 |
|
9 | ETIMSK &= ~(1<<TICIE3);
|
10 | #endif //SUART_RXD
|
11 |
|
12 | //Sendeinitlaisierung
|
13 |
|
14 | #ifdef SUART_TXD
|
15 |
|
16 | etifr |= (1<<OCF3A);
|
17 | SUART_TXD_PORT |= (1<<SUART_TXD_BIT);
|
18 | SUART_TXD_DDR |= (1<<SUART_TXD_BIT);
|
19 | outframe = 0;
|
20 | #endif
|
HW UArt Initialisierung:
1 | //Data Direction für Senden
|
2 | HWUART0_DDR |= (_BV(HWUART0_TXD));
|
3 | //Baud berechnen
|
4 | BAUDRATE_REG_0_H = (UART_BAUDRATE_MAGIC(baud) >> 8) & 0xFF;
|
5 | BAUDRATE_REG_0_L = UART_BAUDRATE_MAGIC(baud) & 0xFF;
|
6 | //UART enable + Interrupt enable
|
7 | UART_CONTROL_REGISTER_0_B |= _BV(RXCIE0) | _BV(TXCIE0) | _BV(RXEN0) | _BV(TXEN0);
|
8 | //Mode einstellung
|
9 | UART_CONTROL_REGISTER_0_C |= mode |((1<<UCSZ00)|(1<<UCSZ01)); /* 8-Bit mode*/
|
Der Timer/Counter 3 erledigt das komplette timing (damit nur ein counter
für die komplette Protokollstruktur verwendet wir)
Die Header befinden sich im Anhang.
Ich glaube nur kaum dass man aus diesen Bruchteilen etwas herauslesen
kann, darum war meine Frage zuerst Allgemein gefasst ob es einen
bekannten Fallstrick gibt den Man unbedingt beachten muss, wie zu
Beispiel die Wert im DDR von SW UART TX und RX änderern, dass es hier
nicht zu STörungen kommen kann.
Desswegen war meine Frage voresrst ohne Sourcecode.
Das Komplette Projekt kann ich leider nicht als Anhanh inkludieren.
mfg dog
PS: Compiler: gcc