mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC24FJ256GA106 nur 1 UART von 2 funktioniert?


Autor: Moot S. (mootseeker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes Problem:

Ich arbeite mit einem PIC24FJ256GA106 und möchte mit dem UART1 etwas 
einlesen und das eingelesene auf dem UART2 wieder ausgeben. Das Einlesen 
mit UART1 funktioniert, auch das ausgeben mit dem UART2 funktioniert. 
Wenn ich beide UART's gleichzeitig nutzen möchte, funktioniert nur der 
UART der zuerst Initialisiert wurde. Dabei ist es egal welchen man 
zuerst initialisiert.

Mein Code zum Initialisieren der UART1:
// Data Bits = 8; Parity = None; Stop Bits = 1;
    U1MODE = (0x8008 & ~(1<<15));  // disabling UARTEN bit
    // UTXISEL0 TX_ONE_CHAR; UTXINV disabled; OERR NO_ERROR_cleared; URXISEL RX_ONE_CHAR; UTXBRK COMPLETED; UTXEN disabled; ADDEN disabled; 
    U1STA = 0x00;
    // BaudRate = 115200; Frequency = 16000000 Hz; BRG 34; 
    U1BRG = 0x22;
    
    PPS_DISABLE_IOLOCK;
    {
        RPINR18bits.U1RXR = 16; /* Assign UART1 Receive (U1RX) to RP16 pin */
        RPOR15bits.RP30R = 3; /* RP30 is tied to default port pin */
    }
    PPS_ENABLE_IOLOCK;
    
    UART1_Enable();  // enabling UARTEN bit

Mein Code zum Initialisieren der UART2:
// Data Bits = 8; Parity = None; Stop Bits = 1;
    U2MODE = (0x8008 & ~(1<<15));  // disabling UARTEN bit
    // UTXISEL0 TX_ONE_CHAR; UTXINV disabled; OERR NO_ERROR_cleared; URXISEL RX_ONE_CHAR; UTXBRK COMPLETED; UTXEN disabled; ADDEN disabled; 
    U2STA = 0x00;
    // BaudRate = 19200; Frequency = 16000000 Hz; BRG 207; 
    U2BRG = 0xCF;
    
     /* Continue module operation in IDLE mode */
        UART2_USIDL = false;
        
    PPS_DISABLE_IOLOCK;
    {
        PRB_RX_PPS = 4; /* Assign UART2 Receive (U2RX) to RP4 pin*/
        PRB_TX_PPS = 5; /* RP2 tied to UART2 Transmit */
    }
    PPS_ENABLE_IOLOCK;
    
    UART2_Enable();  // enabling UARTEN bit

Hatte jemand auch schon mal dieses Problem?

Autor: Frank K. (fchk)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Dein Problem ist Config Word 2 Bit 4:

IOL1WAY: IOLOCK One-Way Set Enable bit
1 = The IOLOCK bit (OSCCON<6>) can be set once, provided the unlock 
sequence has been completed. Once set, the Peripheral Pin Select 
registers cannot be written to a second time.
0 = The IOLOCK bit can be set and cleared as needed, provided the unlock 
sequence has been completed

Entweder setzt Du zuerst ALLE(!) PPS-Zuordnungen in EINER(!) Funktion an 
EINEM(!) Stück und initialisierst erst dann die Register, oder Du setzt 
dieses Bit auf 0.

fchk

Autor: Moot S. (mootseeker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank K.

vielen Dank für die schnelle Antwort. Das Bit auf 0 setzten hat 
funktioniert.

Habe die nun eine Init-Funktion geschrieben, in welcher ich zuerst alle 
Pins mappe und danach die UART Register initialisiert, dies hat auch 
funktioniert.

Danke! :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.