Hallo Leute,
im Zuge des FreeRTOS-Projekts, das ich hier ->
Beitrag "Mutexes und Semaphores in FreeRTOS" mehr oder weniger
beschrieben habe, muss ich jetzt die Ausgabe von Log-Daten über den
seriellen Port vom GTK600-Board (mit einem AT90CAN128 drauf)
organisieren. Der entsprechende USART-Treiber fand sich bei
mitschang.net, ich hänge den Source und den Header als Datei an. Und
dann habe ich, um es erst mal zu testen, eine ganz einfache main.c
zusammengewurschtelt (meinstens ebenfalls aus den anderen FreeRTOS-Demos
zusammenkopiert und entsprechend angepasst):
----------------------------------------------------------
1 | ...
|
2 | int main( void )
|
3 | {
|
4 | volatile unsigned long ul; /* volatile so it is not optimized away. */
|
5 | prvIncrementResetCount();
|
6 |
|
7 | /* Initialise the LED outputs - note that prvSetupHardware() might also have to be called! */
|
8 | vParTestInitialise();
|
9 |
|
10 | /* Initialise the serial port */
|
11 | xComPortHandle OutputPort = xSerialPortInit( serCOM1, ser9600, serNO_PARITY, serBITS_8, serSTOP_1, 255 );
|
12 |
|
13 | for( ;; )
|
14 | {
|
15 |
|
16 | /* wait a second... */
|
17 | for( ul = 0; ul < 0xffff; ul++ )
|
18 | {
|
19 | }
|
20 |
|
21 | /* just to see that something works */
|
22 | vParTestToggleLED( 0 );
|
23 | vParTestToggleLED( 1 );
|
24 |
|
25 | /* send a "2" out to UART0 */
|
26 | if ( xSerialPutChar(OutputPort, (signed portCHAR)'2', (portTickType)0) == pdPASS )
|
27 | {
|
28 | vParTestToggleLED( 4 );
|
29 | }
|
30 |
|
31 | }
|
32 | return 0;
|
33 | }
|
----------------------------------------------------------
Das Projekt wird ohne Fehler und Warnungen kompiliert, und die LEDs 0, 1
und 4 (Indiz dafür dass die Ausgabe des Zeichens "2" an USART ein pdPASS
zurückgab) gehen ordnungsgemäß an und aus - jedoch sehe ich niemals
etwas in PUTTY ankommen.
Die Initialisierung von UART klappt; das sieht man im AVR-Studio an den
entsprechenden Registerwerten (ist zwar nicht ganz klar, ob die Werte
tatsächlich vom Programm in die Register reingeschrieben werden oder ob
sie schon per default so sind, wenn man das Board einschaltet). Wie auch
immer - das Lesen und Senden von Daten über UART klappt problemlos, das
ließ sich mit einem kleinen (nicht von mir geschriebenenen ;) )
AVR-Assembler-Projekt erfolgreich testen. Und auch wenn ich die "if (
xSerialPutChar... "-Abfrage auskommentiere und dafür ganz stupide "UDR0
= 0xdd" an diese Stelle schreibe (also ein Zeichen direkt in den
Senderegister vom Controller stopfe), wird im PUTTY im Sekundentakt ein
neues komisches Zeichen geschrieben, so wie es sich gehört. Was mache
ich also falsch (oder was ist evtl. am seriellen Treiber falsch)?
Danke und Gruß,
Max