AT32UC3B1512 UART verschluckt Zeichen

OP #3062535
Lesenswert?
• ▲
▼
Hallo,
ich habe hier einen AT32UC3B1512, mit welchem ich AT-Kommandos an ein 
GSM-Modul senden und empfangen will. Alle Daten werden korrekt 
übertragen, was ich auf einem Oszilloskop verifizieren konnte (im 
Beispiel sende ich ein "AT#SLED=0", welches die Status-LED des 
GSM-Moduls ausschaltet. Dies funktioniert auch). Die Antwort gebe ich 
über USB mit einem virtuellen Com-Port auf das Terminal des Rechners 
aus. Dort kommt jeedoch nur ein Bruchteil der erwarteten Antwort an (in 
diesem Fall #\n statt #AT OK). Die Baud-Rate beträgt 9600 8N1, aber auch 
bei schnelleren oder langsameren Raten tritt das Problem auf. Der 
Prozessor läuft mit 60MhZ. Die Timings sollten auch alle stimmen, ein 
delay_ms(1000) dauert laut Messung genau eine Sekunde. Leider ist die 
Dokumentation zu den AVR32ern sehr dürftig. Daher würde ich mich freuen, 
wenn jemand einen Tipp hätte.

Vielen Dank!

Kai

Die Interrupt-Routine:
1
__attribute__((__interrupt__))
2
static void usart_int_handler(void)
3
{
4
  udi_cdc_putc(usart_getchar(USART_GSM));
5
}

Die Main-Funktion:
1
int main (void)
2

3
{  
4
  board_init();
5
  pcl_freq_param_t pcl_freq_param =
6
  {
7
    .cpu_f        = APPLI_CPU_SPEED,
8
    .pba_f        = APPLI_PBA_SPEED,
9
    .osc0_f       = FOSC0,
10
    .osc0_startup = OSC0_STARTUP
11
  };
12
  Enable_global_interrupt();
13
  pcl_configure_clocks(&pcl_freq_param);
14
  irq_initialize_vectors();
15
  
16
  sysclk_init();
17
  sysclk_enable_usb();
18
  init_gsm();
19
  
20
  udc_start();
21
  udc_attach();
22
  
23
  delay_ms(1000);gpio_tgl_gpio_pin(LED_PLL_LD_PIN);
24
  delay_ms(1000);gpio_tgl_gpio_pin(LED_PLL_LD_PIN);
25
  delay_ms(1000);gpio_tgl_gpio_pin(LED_PLL_LD_PIN);
26
  INTC_register_interrupt(&usart_int_handler, USART_GSM_IRQ, AVR32_INTC_INT0);
27
  USART_GSM->ier = AVR32_USART_IER_RXRDY_MASK;
28
  
29
  delay_ms(1000);
30
  delay_ms(1000);
31
  delay_ms(1000);
32
  delay_ms(1000);
33
  send_AT_cmd("AT#SLED=0\r");
34
  
35
  
36
  while(1)
37
  }
38
}

Die Initialisierung des GSM-Moduls:
1
void init_gsm()
2
{
3
    static const gpio_map_t USART_GSM_GPIO_MAP =
4
    {
5
  
6
    {USART_GSM_RX_PIN, USART_GSM_RX_FUNCTION},
7
    {USART_GSM_TX_PIN, USART_GSM_TX_FUNCTION},
8
  };
9
      
10
  static const usart_options_t USART_GSM_OPTIONS =
11
  {
12
    .baudrate = 9600,
13
    .charlength = 8,
14
    .paritytype = USART_NO_PARITY,
15
    .stopbits = USART_2_STOPBITS,
16
    .channelmode = USART_NORMAL_CHMODE,
17
  };
18

19
  gpio_enable_module(USART_GSM_GPIO_MAP, sizeof(USART_GSM_GPIO_MAP) / sizeof(USART_GSM_GPIO_MAP[0]));
20
  usart_init_rs232(USART_GSM, &USART_GSM_OPTIONS, 60000000);
21
  gpio_enable_gpio_pin(GSM_ON_OFF);
22
  gpio_set_gpio_pin(GSM_ON_OFF);
23
  delay_ms(1050);
24
  gpio_clr_gpio_pin(GSM_ON_OFF);
25
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.