Forum: Compiler & IDEs USART Control Register US_CR wird nicht geschrieben


von Stefan (Gast)


Lesenswert?

Bekomme den USART nicht zum laufen bei einem SAM4E EK.
Mein Portpin auf dem EK (PA22 -> TXD) zeigt auf dem Scope keine 
Reaktion.
Wenn ich bei usart_write() ein Breakpoint setze und mir nach der 
Initialisierung (usart_init_rs232()und usart_enable_tx()) die Register 
anschaue ist das US_CR Register von USART1 0x0. US_MR hingegeben passt 
100% zu der gewählten Configuration und im US_CSR wechselt auch der 
Status von z.B. TXRDY.

Das Problem liegt wohl im US_CR, da hier der Wert 0x00 ist und somit 
eigentlich auch die Bits RXEN und TXEN auf 0 sind?!
Weiß jemand Rat? Gibt es noch irgendeinen Schreibschutz oder andere 
Feinheiten?
1
  
2
    #define USART_SERIAL                 USART1
3
    #define USART_SERIAL_ID              ID_USART1
4
5
    #define USART_SERIAL_BAUDRATE        9600
6
    #define USART_SERIAL_CHAR_LENGTH     US_MR_CHRL_8_BIT
7
    #define USART_SERIAL_PARITY          US_MR_PAR_NO
8
    #define USART_SERIAL_STOP_BIT        US_MR_NBSTOP_2_BIT
9
  
10
int main (void)
11
{
12
  sysclk_init();
13
  board_init();
14
  SysTick_Config(sysclk_get_cpu_hz()/1000); //1ms
15
  
16
      const sam_usart_opt_t usart_console_settings = {
17
        USART_SERIAL_BAUDRATE,
18
        USART_SERIAL_CHAR_LENGTH,
19
        USART_SERIAL_PARITY,
20
        USART_SERIAL_STOP_BIT,
21
        US_MR_CHMODE_NORMAL
22
      };
23
24
  sysclk_enable_peripheral_clock(USART_SERIAL_ID);  
25
  usart_init_rs232(USART_SERIAL, &usart_console_settings, sysclk_get_main_hz());
26
  
27
  usart_enable_tx(USART_SERIAL);
28
  usart_enable_rx(USART_SERIAL);
29
        usart_write(USART_SERIAL,0x55);

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Habe es noch einmal ganz zu fuß ohne ASF versucht verschiedene Bits in 
US_CR zu setzen. Probiert mit USART0 und USART1.
1
  USART0->US_CR = US_CR_RXEN;
2
  USART0->US_CR = US_CR_TXEN;
3
  USART0->US_MR = US_MR_NBSTOP_2_BIT;

Die Offsets und Adressen stimmen zum Datenblatt überein. Durchlaufen 
diese 3 Zeilen, wird lediglich das US_MR Register richtig gesetzt. RXEN 
und TXEN müssen doch auch gesetzt werden und bleiben oder verstehe ich 
hier etwas komplett falsch?

Ein Bild im Anhang. Bei US_CR tut sich einfach garnix.

von Jope (Gast)


Lesenswert?

Das Datenblatt sagt, dass das US_CR-Register "write-only" ist.

von Stefan (Gast)


Lesenswert?

Achso, dann kann die Register Anzeige auch nur Read-Register anzeigen 
oder was heißt das im Umkehrschluss? Wär ja vom Namen her logisch, 
jedoch bin ich da noch nicht drauf gekommen.

Dann bleibt mir quasi nur den Status im US_CSR zu lesen.

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.