Uart bei SAM4E Xplained Pro

Gast #4617227
Lesenswert?
• ▲
▼
Hallo,

ich möchte bei meinem SAM4E XPlainedPro eine Uart Schnittstelle in 
Betrieb nehmen, was einfach nicht funktionieren will.
Uart0 ist scheinbar für den EDGB reserviert, daher will ich den Uart1 in 
Betrieb nehmen. Leider gibt es keine entsprechenden Beispiele.

Für den SAM4S habe ich folgendes gefunden: 
http://stackoverflow.com/questions/14280053/atmel-sam4s-xplained-uart

die defines habe ich dann entsprechend dem SAM4E angepasst, womit dieser 
(ebenfalls nicht funktionierender Code raus kommt:
1
#include <asf.h>
2

3
#include "stdio.h"
4

5
#define UART_SERIAL_BAUDRATE        9600
6
#define UART_SERIAL_CHANNEL_MODE   UART_MR_CHMODE_NORMAL
7
#define UART_SERIAL_MODE         UART_MR_PAR_NO 
8

9
/* =============== UART1 =============== */ //(UART0 is defined but not UART1)
10
#define PINS_UART1          (PIO_PA5 | PIO_PA6)
11
#define PINS_UART1_FLAGS    (PIO_PERIPH_C | PIO_DEFAULT)
12
#define PINS_UART1_MASK     (PIO_PA5 | PIO_PA6)
13
#define PINS_UART1_PIO      PIOC
14
#define PINS_UART1_ID       ID_PIOC
15
#define PINS_UART1_TYPE     PIO_PERIPH_C
16
#define PINS_UART1_ATTR     PIO_DEFAULT
17

18
void uart_custom_init(void) {
19
  sysclk_init();
20

21
  // set the pins to use the uart peripheral
22
  pio_configure(PINS_UART1_PIO, PINS_UART1_TYPE, PINS_UART1_MASK, PINS_UART1_ATTR);
23

24
  //enable the uart peripherial clock
25
  pmc_enable_periph_clk(ID_UART1);
26

27
  const sam_uart_opt_t uart1_settings =
28
  { sysclk_get_cpu_hz(), UART_SERIAL_BAUDRATE, UART_SERIAL_MODE };
29

30
  uart_init(UART1,&uart1_settings);      //Init UART1 and enable Rx and Tx
31

32
  uart_enable_interrupt(UART1,UART_IER_RXRDY);   //Interrupt reading ready
33
  NVIC_EnableIRQ(UART1_IRQn);
34

35
}
36

37
void sendViaUart(uint8_t data) {
38
  while (!(UART1->UART_SR & UART_SR_TXRDY));
39
  uart_write(UART1, data);
40
}
41

42
void UART1_Handler() {
43
  uint32_t dw_status = uart_get_status(UART1);
44

45
  if(dw_status & UART_SR_RXRDY) {
46
    uint8_t received_byte;
47
    uart_read(UART1, &received_byte);
48
    //sendViaUart(received_byte);
49
  }
50
}
51

52
int main (void)
53
{
54
  uart_custom_init();
55
  while (1) {
56
    sendViaUart('a');
57
  }
58
}
Als ersten Schritt möchte ich einfach nur ein paar Bytes senden. 
Überprüfen tu ich das direkt am Pin mit einem Oszi.

danke für eure Hilfe
Gast #4619512
Lesenswert?
• ▲
▼
ich habe das Beispiel noch weiter vereinfacht:
1
#include <asf.h>
2

3
#include "stdio.h"
4

5
#define UART_SERIAL_BAUDRATE        9600
6
#define UART_SERIAL_CHANNEL_MODE   UART_MR_CHMODE_NORMAL
7
#define UART_SERIAL_MODE         UART_MR_PAR_NO
8

9

10
void uart_custom_init(void) {
11
  sysclk_init();
12
  board_init();
13

14
  //enable the uart peripherial clock
15
  pmc_enable_periph_clk(ID_UART1);
16

17
  const sam_uart_opt_t uart1_settings =
18
  { sysclk_get_cpu_hz(), UART_SERIAL_BAUDRATE, UART_SERIAL_MODE };
19

20
  uart_init(UART1,&uart1_settings);      //Init UART1 and enable Rx and Tx
21

22
}
23

24

25
int main (void)
26
{
27
  uart_custom_init();
28
  while (1) {
29
    while (!(UART1->UART_SR & UART_SR_TXRDY));
30
    uart_write(UART1, 170);
31
  }
32
}

in board_init() habe ich noch folgendes hinzugefügt:
1
ioport_set_port_peripheral_mode(PINS_UART1_PORT, PINS_UART1,
2
PINS_UART1_FLAGS);
mit:
1
#define PINS_UART1        (PIO_PA5C_URXD1 | PIO_PA6C_UTXD1)
2
#define PINS_UART1_FLAGS  (IOPORT_MODE_MUX_C)
3
#define PINS_UART1_PORT   IOPORT_PIOC

und trotzdem wird nichts gesendet...

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.