Forum: Mikrocontroller und Digitale Elektronik AVR32 stdout umleiten


von Werner B. (exxon)


Lesenswert?

Hallo!

Ich möchte auf einem EVK1100 die Ausgabe auf eine serielle Schnittstelle 
umleiten, so wie es in 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Nutzung_von_printf 
beschrieben ist. Gibt es solch eine Lösung auch für AVR32? Oder was muss 
ich ändern?

LG

von 900ss (900ss)


Lesenswert?

Auf dem Grasshopper mit Standard-C (also kein Linux) funktionierte das 
so:
1
//--- setup UART0 one for stdio (e.g. printf....)
2
  set_usart_base((void*)AVR32_USART0_ADDRESS);  // init UART driver (set UART0 adress)
3
  usart_init(115200);                            // init UART0 with 115200 baud
4
  
5
//--- We are finish to send the world a message
6
  printf("\r\nHello World\r\n");

Die sind irgendwo in der newlib vergraben (auch als Source zum 
"nachlesen").

Gruß 900ss

von Werner B. (exxon)


Lesenswert?

Danke für deine Hilfe! Hat leider nicht ganz so geklappt, meine Lösung:
1
#if BOARD == EVK1100
2
#  define _USART_              (&AVR32_USART1)
3
#  define _USART_RX_PIN        AVR32_USART1_RXD_0_PIN
4
#  define _USART_RX_FUNCTION   AVR32_USART1_RXD_0_FUNCTION
5
#  define _USART_TX_PIN        AVR32_USART1_TXD_0_PIN
6
#  define _USART_TX_FUNCTION   AVR32_USART1_TXD_0_FUNCTION
7
#endif
8
9
// 
10
...
11
//
12
13
  static const gpio_map_t USART_GPIO_MAP = { 
14
      { _USART_RX_PIN, _USART_RX_FUNCTION }, 
15
      { _USART_TX_PIN, _USART_TX_FUNCTION } 
16
    };
17
  
18
  // USART options.
19
  static const usart_options_t USART_OPTIONS = { 
20
      .baudrate = 57600,
21
      .charlength = 8, 
22
      .paritytype = USART_NO_PARITY,
23
      .stopbits = USART_1_STOPBIT, 
24
      .channelmode = USART_NORMAL_CHMODE 
25
    };
26
    
27
  // Switch main clock to external oscillator 0 (crystal).
28
  pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);
29
30
  // Initialize the USART
31
  set_usart_base( ( void * ) _USART_ );
32
33
  // Initialize USART in RS232 mode.
34
  usart_init_rs232(_USART_, &USART_OPTIONS, FOSC0);
35
  
36
  gpio_enable_module(USART_GPIO_MAP, sizeof(USART_GPIO_MAP )
37
      / sizeof(USART_GPIO_MAP[0] ));
38
39
// 
40
...
41
//
42
  printf("write something\n\r");

Wie kann ich aber nun etwas empfangen? ähnlich scanf? Ich dachte das 
müsste nun auch funktionieren...

LG

von Werner B. (exxon)


Lesenswert?

Ich habe mich geirrt, es funktioniert alles! Hatte Probleme mit newline!

LG

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.