Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle muckt


von ARMer Wicht (Gast)


Lesenswert?

Hallo,
ich habe zwei Beispielprogramme aus dem Atmel Software Framework 
ausprobiert welche die serielle Schnittstelle benutzen; bei keinem 
funktioniert die Übertragungsrichtung PC -> SAM3X.
Die Daten kommen physikalisch am Board an, ich sehe es am blitzen der 
Leds.
Die Settings sind default 115200,8,n,1.




Analog-to-Digital Converter (ADC/ADC12B) example for SAM.

main() {
configure_console();
...
...
set_adc_test_mode();
}


1
/**
2
 *  Configure UART console.
3
 */
4
static void configure_console(void)
5
{
6
  const usart_serial_options_t uart_serial_options = {
7
    .baudrate = CONF_UART_BAUDRATE,
8
    .paritytype = CONF_UART_PARITY
9
  };
10
  
11
  /* Configure console UART. */
12
  sysclk_enable_peripheral_clock(CONSOLE_UART_ID);
13
  stdio_serial_init(CONF_UART, &uart_serial_options);
14
}
15
16
17
static void set_adc_test_mode(void)
18
{
19
  uint8_t uc_key;
20
  uint8_t uc_done = 0;
21
22
  while (!uc_done) {
23
    while (uart_read(CONSOLE_UART, &uc_key));
24
25
    switch (uc_key) {
26
    case '0':
27
      g_adc_test_mode.uc_trigger_mode = TRIGGER_MODE_SOFTWARE;
28
      break;
29
    ...
30
    ...
31
    ...
32
33
}


Mich irritiert, daß der serielle Puffer vor dem Empfang nicht geflusht 
wird. Braucht man das denn nicht?

Ich hab in dem anderen Beispiel eine Led zum debuggen hinter der Zeile
switch (uc_key) {
zum prüfen reingehängt und abgefragt ob diese Zeile überhaupt 
entsprechend erreicht wird. Das Ergebnis war nicht eindeutig...

Das Ganze kann eigentlich nichs Großes sein, bin im Moment aber trotzdem 
ratlos.

von W.S. (Gast)


Lesenswert?

ARMer Wicht schrieb:
> ich habe zwei Beispielprogramme aus dem Atmel Software Framework
> ausprobiert

Tja, meine Empfehlung: Schau ins Manual und schreibe dir deinen Code 
selber, ohne dich auf irgendwelche ominösen Atmel Frameworks etc. zu 
verlassen.

Abgesehen davon frag ich mich, was das bedeuten soll:
  while (uart_read(CONSOLE_UART, &uc_key));

Bei mir ginge das so:

main ()
{ ...

immerzu:

   if (CharAvailable(UART0)
   { DoSomething(GetChar(UART0));
   }

   ... etc etc ...
goto immerzu;
}


W.S.

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.