Das Problem, das ich habe, ist mit meinem PIC24FJ64GA002 und dem/den UART-Modul(en). Der 24F, den ich habe, ist in einem SPDIP28-Gehäuse und es ist ein neuer B5-Chip (nur einer unter der neuesten B8-Revision) von Microchip Direct. Ich habe nach Errata-Problemen gesucht, die mich beim letzten Mal mit dem I2C-Modul geplagt haben.
Wie auch immer, ich richte das UART1-Modul als einfachen Sender ein. Ich verwende PPS-Pin RP8 als RX, RP9 als TX und RP11 als CTS-Pin. Im Moment habe ich RX und CTS geerdet, da ich sie nicht benötige. Ich habe das BRG auf 115.200 gesetzt (tatsächlicher Kurs ~114.285,7, aber es ist nah genug.) Ich verwende den folgenden Code. Ich erwarte, dass eine Reihe von Bytes auf RP9 ausströmen, aber das tue ich nicht. RB15 ist ein Debug-Ausgang: Er pulsiert bei jedem gesendeten Byte. Auf RB15 bekomme ich einen wirklich langsamen Takt, etwa 700 Hz, was für eine 115.200-Baud-Verbindung sehr niedrig ist; Ich würde etwa 14 kHz erwarten.
#include <p24fj64ga002.h>
#include <uart.h>
#include <pps.h>
void init_osc()
{
// Must be programmed for FRCPLL mode.
//UNLOCK_OSC();
CLKDIVbits.RCDIV = 0;
//LOCK_OSC();
}
void main()
{
int i = 0x55;
PPSUnLock;
// Initialize oscillator (set FRC to 8 MHz.)
init_osc();
// Initialize UART1 PPS.
iPPSInput(IN_FN_PPS_U1RX, IN_PIN_PPS_RP8);
iPPSInput(IN_FN_PPS_U1CTS, IN_PIN_PPS_RP11);
iPPSOutput(OUT_PIN_PPS_RP9, OUT_FN_PPS_U1TX);
PPSLock;
// Interrupts disabled for now.
//ConfigIntUART1(UART_RX_INT_EN | UART_RX_INT_PR6 | UART_TX_INT_EN | UART_TX_INT_PR6);
OpenUART1(UART_EN & UART_BRGH_SIXTEEN & UART_NO_PAR_8BIT & UART_1STOPBIT, UART_TX_ENABLE, 34);
TRISBbits.TRISB15 = 0;
while(1)
{
LATBbits.RB15 = 1;
LATBbits.RB15 = 0;
while(BusyUART1());
WriteUART1(i);
i++;
}
CloseUART1();
}
Ich habe das Gefühl, etwas Offensichtliches übersehen zu haben, kann aber nicht herausfinden, was es ist. Wenn jemand bereits Erfahrungen mit dem UART-Modul auf Geräten der 24F-Serie gemacht hat, lassen Sie es mich bitte wissen! Ich hatte wenig Glück mit den Microchip-Foren.
Siehe Seite 110 des Datenblatts.
Außerdem müssen Sie die analogen Eingänge an den verwendeten Pins deaktivieren.
tyblu
Thomas o
tyblu
UUUU...
, was übersetzt bedeutet1010101010*...
, und eine Baud/2-Rechteckwelle ausgibt. (0*
ist Stoppbit und sollte etwas länger sein als andere0
s.)Thomas o