Sei sulla pagina 1di 17

CONFIGURACIÓN DEL UART

INTRODUCCIÓN​.- El módulo del Transmisor del receptor asíncrono universal


(UART) es uno de los módulos de E / S en serie disponibles en la familia de
dispositivos dsPIC33F / PIC24H. El UART es un canal de comunicación asíncrono
dúplex completo que se comunica con dispositivos periféricos y computadoras
personales utilizando protocolos como RS-232, RS-485, LIN e IrDA®. El módulo
también admite la opción de control de flujo de hardware con pines UxCTS y UxRTS
e incluye el codificador y decodificador IrDA.

• Full-Duplex, 8-bit or 9-bit Data Transmission through the UxTX and UxRX pins
• Even, Odd or No Parity options (for 8-bit data)
• One or two Stop bits
• Hardware Auto-Baud feature
• Hardware Flow Control option with UxCTS and UxRTS pins
• Fully Integrated Baud Rate Generator (BRG) with 16-bit Prescaler
• Baud Rates ranging from 10 Mbps to 38 bps at 40 MIPS
• 4-deep First-In-First-Out (FIFO) Transmit Data Buffer
• 4-deep FIFO Receive Data Buffer
• Parity, Framing, and Buffer Overrun Error Detection
• Support for 9-bit mode with Address Detect (9th bit = 1)
• Transmit and Receive Interrupts
• Loopback mode for Diagnostic Support
• IrDA Encoder and Decoder Logic
• LIN Bus Support
• 16x Baud Clock Output for External IrDA Encoder/Decoder support

A simplified block diagram of the UART is illustrated in Figure 17-1. The UART
module consists of the following key hardware elements:
• Baud Rate Generator
• Asynchronous Transmitter
• Asynchronous Receiver
Revisar los registros del pdf

GENERADOR DE BAUD RATE: ​El módulo UART incluye un generador de


velocidad de baudios (BRG) de 16 bits. El registro UxBRG controla el período de un
temporizador de 16 bits de ejecución libre. La ecuación 17.1 proporciona la fórmula
para calcular la velocidad de transmisión en baudios con BRGH = 0.

La velocidad máxima en baudios (BRGH = 1) posible es FCY / 4 (para UxBRG = 0),


y la velocidad mínima en baudios posible es FCY / (4 * 65536).
Escribir un nuevo valor en el registro UxBRG hace que el temporizador BRG se
restablezca (borre). Esto asegura que el BRG no espera un desbordamiento del
temporizador antes de generar la nueva tasa de baudios.

BCLKx Output: ​El pin BCLKx emitirá el reloj Baud 16x si las salidas UART y BCLKx
están habilitadas (UEN <1: 0> = 11). Esta función se usa para el soporte del
codificador / decodificador IrDA externo (consulte la Figura 17-2). La salida de
BCLKx permanece alta durante el modo de Suspensión. BCLKx se fuerza como una
salida siempre que el UART se mantenga en modo (UEN <1: 0> = 11),
independientemente de los bits de traba PORTx y TRISx.

CONFIGURACIÓN DEL UART:


El UART usa el formato estándar de no retorno al cero (NRZ) (un bit de inicio, ocho
o nueve bits de datos y uno o dos bits de parada). La paridad es compatible con el
hardware y puede ser configurada por la aplicación del usuario como par, impar o
sin paridad. El formato de datos más común es de 8 bits, sin paridad, y un bit de
parada (denotado como 8, N, 1), que es la configuración predeterminada (POR). El
número de bits de datos y de detención y la paridad se especifican en el bit ​PDSEL
<1: 0> (UxMODE <2: 1>) y el bit STSEL (UxMODE <0>). Se puede usar un BRG
dedicado de 16 bits en el chip para obtener frecuencias de velocidad de baudios
estándar del oscilador. El UART transmite y recibe el bit menos significativo (LSb)
primero. El transmisor y el receptor del módulo UART son funcionalmente
independientes, pero usan el mismo formato de datos y la misma velocidad de
transmisión.

HABILITANDO EL UART:
El módulo UART se habilita configurando el bit ​UARTEN (UxMODE <15>) y el bit
UTXEN (UxSTA <10>)​. Una vez habilitados, los pines UxTX y UxRX se configuran
como una salida y una entrada, respectivamente, anulando los ajustes de bit de
registro TRIS y PORT para los pines correspondientes del puerto de E / S. El pin
UxTX está en la lógica '1' cuando no está teniendo lugar ninguna transmisión.

Nota: El bit UTXEN no debe establecerse hasta que se establezca el bit UARTEN;
de lo contrario, las transmisiones UART no se habilitarán
DESHABILITANDO EL UART: ​El módulo UART se desactiva borrando el bit
UARTEN (UxMODE <15>). Este es el estado predeterminado después de cualquier
reinicio. Si UART está deshabilitado, todos los pines UART funcionan como pines de
puerto bajo el control de sus correspondientes bits de PORT y TRIS.

Al deshabilitar el módulo UART, los búferes se restablecen a estados vacíos. Todos


los caracteres de datos en los búferes se pierden y el contador de velocidad en
baudios se restablece.

Todos los errores e indicadores de estado asociados con el módulo UART se


restablecen cuando el módulo está deshabilitado. Los bits URXDA, OERR, FERR,
PERR, UTXEN, UTXBRK y UTXBF se borran, mientras que los bits RIDLE y TRMT
se establecen. Otros bits de control (incluidos ADDEN, URXISEL <1: 0> y UTXISEL
<1: 0>) y los registros UxMODE y UxBRG no se ven afectados.

Borrar el bit UARTEN mientras el UART está activo abortará todas las transmisiones
y recepciones pendientes, y restablecerá el módulo como se define arriba. Volver a
habilitar el UART reiniciará el UART en la misma configuración

UART TRANSMITIR:
El diagrama de bloque del transmisor UART se ilustra en la Figura 17-3. El corazón
del transmisor es el Shift register (UxTSR). El Shift Register obtiene sus datos del
buffer FIFO de transmisión, UxTXREG. El registro UxTXREG se carga con datos en
el software. El registro UxTSR no se carga hasta que el bit Stop se transmite desde
la carga anterior. Tan pronto como se transmite el bit Stop, el UxTSR se carga con
nuevos datos del registro UxTXREG (si está disponible).
La transmisión se habilita configurando el bit de habilitación UTXEN (UxSTA <10>).
La transmisión no se produce hasta que el registro UxTXREG se carga con datos y
el generador de frecuencia de baudios (UxBRG) ha producido un reloj de cambio
(figura 17-3). Por lo general, cuando se inicia la transmisión, el registro UxTSR está
vacío, porque una transferencia al registro UxTXREG da como resultado una
transferencia inmediata a UxTSR. Al borrar el bit UTXEN durante una transmisión,
se cancela la transmisión y se restablece el transmisor. Como resultado, el pin UxTX
volverá a un estado de alta impedancia.

Para seleccionar la transmisión de 9 bits, los bits PDSEL <1: 0> (UxMODE <2: 1>
deben establecerse en '11' y el noveno bit debe escribirse en el bit UTX8 (UxTXREG
<8>). Se debe realizar una escritura de palabras en UxTXREG para que los nueve
bits se escriban simultáneamente.

En un reinicio del dispositivo, el pin UxTX se configura como una entrada; por lo
tanto, el estado del pin UxTX no está definido. Cuando el módulo UART está
habilitado, el pin de transmisión se conduce alto y permanece en este estado hasta
que los datos se escriben en el búfer de transmisión (UxTXREG). El pin de
transmisión se desactiva tan pronto como los primeros datos se graban en el
registro UxTXREG. Para garantizar la detección del bit de inicio, se recomienda
tener un retraso entre habilitar UARTx (UARTEN = 1) e iniciar la primera
transmisión. El retraso depende de la velocidad en baudios y debe ser igual o mayor
que el tiempo que lleva transmitir un bit de datos.

BUFFER DE TRANSMISIÓN: (UxTXREG)


El buffer de transmisión tiene 9 bits de ancho y 4 niveles de profundidad. Junto con
el registro Transmit Shift (UxTSR), el usuario tiene efectivamente un búfer profundo
de 5 niveles. Está organizado como Primero en entrar, primero en salir (FIFO). Una
vez que los contenidos de UxTXREG se transfieren al registro UxTSR, la ubicación
actual del búfer queda disponible para que se escriban nuevos datos y la siguiente
ubicación del búfer se origina en el registro UxTSR. El bit de estado UTXBF (UxSTA
<9>) se establece siempre que el búfer está lleno. Si una aplicación de usuario
escribe en un búfer completo, los nuevos datos no serán aceptados en el FIFO.
El FIFO se restablece durante cualquier reinicio del dispositivo, pero no se ve
afectado cuando el dispositivo entra en un modo de ahorro de energía o se activa
desde un modo de ahorro de energía.

INTERRUPCIÓN DE TRANSMISIÓN
El indicador de interrupción de transmisión (UxTXIF) se encuentra en el registro de
estado de indicador de interrupción (IFS) correspondiente. Los bits de control
UTXISEL <1: 0> (UxSTA <15,13>) determinan cuándo el UART generará una
interrupción de transmisión.

• Si UTXISEL <1: 0> = 00, el UxTXIF se configura cuando se transfiere un carácter


desde el búfer de transmisión al registro Shift de transmisión (UxTSR). Esto implica
que al menos una ubicación está vacío en el buffer de transmisión.
• Si UTXISEL <1: 0> = 01, el UxTXIF se establece cuando el último carácter se
desplaza fuera del registro UxTSR. Esto implica que todas las operaciones de
transmisión se completan.
• Si UTXISEL <1: 0> = 10, el UxTXIF se establece cuando el carácter se transfiere al
registro UxTSR y el búfer de transmisión está vacío.

El bit UxTXIF se establece cuando el módulo está habilitado. La aplicación asignada


por el usuario debe borrar el bit UxTXIF en la Rutina de Servicio de Interrupción
(ISR).
Es posible cambiar entre los dos modos de interrupción durante el funcionamiento.

Nota: ​Cuando se establece el bit UTXEN, el bit del indicador UxTXIF también se
establecerá si UTXISEL <1: 0> = 00, porque el búfer de transmisión no está lleno
(puede mover datos de transmisión al registro UxTXREG).

Mientras que el bit indicador UxTXIF indica el estado del registro UxTXREG, el bit
TRMT (UxSTA <8>) indica el estado del UxTSR. El bit de estado TRMT es un bit de
solo lectura, que se establece cuando el UxTSR está vacío. No hay lógica de
interrupción vinculada a este bit, porque la aplicación del usuario debe sondear este
bit para determinar si el UxTSR está vacío.

Use los siguientes pasos para configurar una transmisión:

1. Inicialice el registro UxBRG para la velocidad de baudios adecuada (consulte 17.3


"Generador de velocidad de baudios UART").

2. Configure el número de bits de datos, el número de bits de parada y la selección


de paridad escribiendo en los bits PDSEL <1: 0> (UxMODE <2: 1>) y STSEL
(UxMODE <0>).

3. Si se requieren interrupciones de transmisión, configure el bit de control UxTXIE


en el registro de control de habilitación de interrupción correspondiente (IEC).
• Seleccione el modo de interrupción de transmisión escribiendo los bits UTXISEL
<1: 0> (UxSTA <15,13>)
• Especifique la prioridad de interrupción para la interrupción de transmisión
utilizando los bits de control UxTXIP <2: 0> en el registro de control de prioridad de
interrupción (IPC) correspondiente.

4. Habilite el módulo UART configurando el bit UARTEN (UxMODE <15>).

5. Habilite la transmisión configurando el bit UTXEN (UxSTA <10>), que también


configurará el bit UxTXIF.
El bit UxTXIF debe borrarse en la rutina de software que sirve para la interrupción
de transmisión UART. El funcionamiento del bit UxTXIF está controlado por los bits
de control UTXISEL <1: 0>.

6. Cargue los datos en el registro UxTXREG (inicia la transmisión).


Si se selecciona transmisión de 9 bits, cargue una palabra. Si se usa la transmisión
de 8 bits, cargue un byte.
Los datos se pueden cargar en el búfer hasta que se establezca el bit de estado
UTXBF (UxSTA <9>).

Nota: El bit UTXEN no debe establecerse hasta que se haya establecido el bit
UARTEN; de lo contrario, las transmisiones UART no se habilitarán
EJEMPLO Tx:

#define FCY 40000000


#define BAUDRATE 9600
#define BRGVAL ((FCY/BAUDRATE)/16)-1
unsigned int i;
int main(void)
{
// Configure Oscillator to operate the device at 40 MHz
// Fosc = Fin * M/(N1 * N2), Fcy = Fosc/2
// Fosc = 8M * 40(2 * 2) = 80 MHz for 8M input clock
PLLFBD = 38;// M = 40
CLKDIVbits.PLLPOST = 0; // N1 = 2
CLKDIVbits.PLLPRE = 0; // N2 = 2
OSCTUN = 0; // Tune FRC oscillator, if FRC is used
RCONbits.SWDTEN = 0; // Disable Watch Dog Timer
while(OSCCONbits.LOCK! = 1) {}; // Wait for PLL to lock
U1MODEbits.STSEL = 0; // 1 Stop bit
U1MODEbits.PDSEL = 0; // No Parity, 8 data bits
U1MODEbits.ABAUD = 0; // Auto-Baud Disabled
U1MODEbits.BRGH = 0; // Low Speed mode
U1BRG = BRGVAL; // BAUD Rate Setting for 9600
U1STAbits.UTXISEL0 = 0; // Interrupt after one TX Character is transmitted
U1STAbits.UTXISEL1 = 0;
IEC0bits.U1TXIE = 1; // Enable UART TX Interrupt
U1MODEbits.UARTEN = 1; // Enable UART
U1STAbits.UTXEN = 1; // Enable UART TX
/* wait at least 104 usec (1/9600) before sending first char */
for(i = 0; i < 4160; i++)
{
Nop();
}
U1TXREG = 'a'; // Transmit one character
while(1)
{
}
}
void __attribute__((__interrupt__)) _U1TXInterrupt(void)
{
IFS0bits.U1TXIF = 0; // clear TX interrupt flag
U1TXREG = 'a'; // Transmit one character
}
TRANSMISIÓN DE DATOS DE RUPTURA

Una transmisión de carácter de ruptura consiste en un bit de inicio, seguido de doce


bits de '0' y un bit de parada. Se envía un carácter Frame Break siempre que los bits
UTXBRK y UTXEN se establecen cuando el registro Transmit Shift se carga con
datos. Se necesita una escritura ficticia en el registro UxTXREG para iniciar la
transmisión del carácter de interrupción. El valor de datos escrito en el registro
UxTXREG para el carácter Break se ignora. La escritura sirve para iniciar la
secuencia correcta: todos los '0's serán transmitidos.

El bit UTXBRK se restablece por hardware después de enviar el bit Stop


correspondiente. Esto permite que la aplicación asignada por el usuario cargue
previamente la FIFO de transmisión con el siguiente byte de transmisión que sigue
al carácter Break (normalmente, el carácter Sync en la especificación LIN).

Nota: La aplicación asignada por el usuario debe esperar que el transmisor esté
inactivo (TRMT = 1) antes de configurar el bit UTXBRK. El bit UTXBRK anula
cualquier otra actividad del transmisor. Si la aplicación del usuario borra el bit
TXBRK antes de completar la secuencia, se puede producir un comportamiento
inesperado del módulo. El envío de un carácter de interrupción no genera una
interrupción de transmisión.

El bit TRMT indica cuando el registro de cambio de transmisión está vacío o lleno,
similar a la transmisión normal. Consulte la Figura 17-7 para conocer el tiempo de la
secuencia de caracteres Break.

SECUENCIA DE TRANSMISIÓN DE BREAK Y SYNC

La siguiente secuencia enviará un encabezado de marco de mensaje compuesto


por un Salto seguido por un byte de Sincronización automática a baudios. Esta
secuencia es típica de un maestro de bus LIN.

1. Configure el UART para el modo deseado.


2. Configure UTXEN y UTXBRK para transmitir el carácter Break.
3. Cargue el UxTXREG con un carácter ficticio para iniciar la transmisión (se ignora
el valor).
4. Escriba 0x55 en UxTXREG, que carga el carácter Sync en la FIFO de
transmisión.

Después de enviar la ruptura, el bit UTXBRK se restablece por hardware y el


carácter de sincronización es transmitido.

DETECCIÓN DE BITS DE DATOS

Modo reloj 16X (BRGH = 0)


En el modo de reloj 16x, cada bit de los datos recibidos tiene 16 pulsos de reloj de
ancho. Para detectar el valor de un bit de datos entrantes, el bit se muestrea en los
bordes ascendentes 7º, 8º y 9º del reloj. Estos bordes ascendentes se llaman
Bordes de Detección Mayoritarios. Este modo es más robusto que el modo de reloj
4x.

Modo de reloj 4X (BRGH = 1)


En el modo de reloj 4x, cada bit de los datos recibidos tiene pulsos de 4 tiempos de
ancho. El modo de reloj 4X no proporciona suficientes bordes para admitir el método
de detección de la mayoría. Por lo tanto, los datos recibidos se muestrean en el
ancho de medio bit.
RECEPTOR UART

El diagrama de bloques del receptor se ilustra en la figura 17-10. El corazón del


receptor es el registro de recepción (serie) Shift (UxRSR). Los datos se reciben en el
pin UxRX y se envían al bloque de recuperación de datos. El bloque de
recuperación de datos funciona a 16 veces la velocidad en baudios, mientras que la
palanca de cambios en serie principal funciona a la velocidad en baudios. Después
de muestrear el pin UxRX para el bit Stop, los datos recibidos en UxRSR se
transfieren al FIFO de recepción (si está vacío).

Nota: El registro UxRSR no está mapeado en la memoria de datos, por lo que no


está disponible para la aplicación asignada por el usuario.

Los datos en el pin UxRX son muestreados varias veces por un circuito de detección
mayoritaria para determinar si hay un nivel alto o bajo en el pin UxRX.

Receive Buffer (UxRXREG)


El receptor UART tiene un búfer de datos de recepción FIFO de 4 profundidades y 9
bits de ancho. UxRXREG es un registro mapeado en memoria que proporciona
acceso a la salida de FIFO. Es posible recibir y transferir cuatro palabras de datos al
FIFO y una quinta palabra para comenzar a cambiar el registro UxRSR antes de que
se produzca un desbordamiento del búfer.

Manejo de errores del receptor


Si el FIFO está lleno (cuatro caracteres) y un quinto carácter se recibe por completo
en el registro UxRSR, se establecerá el bit OERR de error de overrun (UxSTA <1>).
La palabra en UxRSR se mantendrá, pero las transferencias adicionales al FIFO de
recepción se inhibirán siempre que se establezca el bit OERR. La aplicación del
usuario debe borrar el bit OERR en el software para permitir que se reciban más
datos.
Si es esencial conservar los datos recibidos antes del rebasamiento, la aplicación
del usuario debe leer los cinco caracteres y luego borrar el bit OERR. Si los cinco
caracteres se pueden descartar, la aplicación del usuario puede borrar el bit OERR.
Esto restablece efectivamente el FIFO de recepción y se pierden todos los datos
recibidos anteriormente.

Nota​: Los datos en la FIFO de recepción deben leerse antes de borrar el bit OERR.
El FIFO se restablece cuando se borra OERR, lo que hace que se pierdan todos los
datos en el búfer.

El bit de Framing Error, FERR (UxSTA <2>), se establece si se detecta un bit de


parada en un nivel lógico bajo.
El bit de error de paridad, PERR (UxSTA <3>), se establece si se detecta un error
de paridad en la palabra de datos en la parte superior del búfer (es decir, la palabra
actual). Por ejemplo, se produce un error de paridad si la paridad está configurada
como Par, pero se detecta que el número total de '1 en los datos es impar. El bit
PERR es irrelevante en el modo de 9 bits. Los bits FERR y PERR se almacenan en
el búfer junto con la palabra correspondiente y deben leerse antes de leer la palabra
de datos.
Se genera una interrupción si se produce alguno de estos errores (OERR, FERR y
PERR). La aplicación del usuario debe habilitar el correspondiente bit de Control de
Habilitación de Interrupción (IEC4 <UxERIE>) para ir a la ubicación correspondiente
del vector de interrupción.

Nota: Después de un restablecimiento, las tres posibles interrupciones UART tienen


el mismo nivel de prioridad de interrupción. El orden natural permite el
mantenimiento de las interrupciones de datos (RX / TX) antes de la interrupción del
error UART.
Para permitir el mantenimiento de la interrupción de error UART antes de que los
datos (RX / TX) interrumpan, se eleva su nivel de prioridad de interrupción (UxEIP) o
se bajan los niveles de prioridad de interrupción de datos (UxRXIP y UxTXIP).
Ejemplo para UART2 para elevar el nivel U2ErrInterrupt:
• IPC7bits.U2RXIP = 4; // prioridad de interrupción UART2 RX, rango medio
• IPC7bits.U2TXIP = 4; // prioridad de interrupción UART2 TX, rango medio
• IPC16bits.U2EIP = 5; // UART2 Error Priority set higher higher

RECEIVE INTERRUPT

La bandera de interrupción de recepción de UART (UxRXIF) se encuentra en el


estado de bandera de interrupción correspondiente del registro (IFS). Los bits de
control URXISEL <1: 0> (UxSTA <7: 6>) determinan cuándo el receptor UART
genera una interrupción.
• Si URXISEL <1: 0> = 00 o 01, se genera una interrupción cada vez que se
transfiere una palabra de datos del registro de recepción de recepción (UxRSR) al
búfer de recepción. Puede haber uno o más caracteres en el búfer de recepción.
• Si URXISEL <1: 0> = 10, se genera una interrupción cuando se transfiere una
palabra del registro UxRSR al búfer de recepción y, como resultado, el búfer de
recepción contiene 3 o 4 caracteres.
• Si URXISEL <1: 0> = 11, se genera una interrupción cuando se transfiere una
palabra del registro UxRSR al búfer de recepción y, como resultado, el búfer de
recepción contiene 4 caracteres (es decir, se llena).
Es posible cambiar entre los tres modos de interrupción durante el funcionamiento.
Mientras que los bits del indicador URXDA y UxRXIF indican el estado del registro
UxRXREG, el bit RIDLE (UxSTA <4>) muestra el estado del registro UxRSR. El bit
de estado RIDLE es un bit de solo lectura, que se establece cuando el receptor está
en modo Inactivo (es decir, el registro UxRSR está vacío). Sin interrupción
la lógica está vinculada a este bit, porque la aplicación del usuario debe sondear
este bit para determinar si el UxRSR está inactivo.
El bit URXDA (UxSTA <0>) indica si el búfer de recepción tiene datos o está vacío.
Este bit se establece siempre que haya al menos un carácter para leer desde el
búfer de recepción. URXDA es un bit de solo lectura.
CONFIGURACIÓN PARA LA RECEPCIÓN UART
Use los siguientes pasos para configurar una recepción:
1. Inicialice el registro UxBRG para obtener la velocidad en baudios adecuada
(consulte 17.3 "Generador de velocidad de baudios UART").
2. Configure el número de bits de datos, bits de parada y selección de paridad
escribiendo en el bit PDSEL <1: 0> (UxMODE <2: 1>) y el bit STSEL (UxMODE
<0>).
3. Si se desean interrupciones, configure el bit UxRXIE en el registro de control de
habilitación de interrupción (IEC) correspondiente.
• Seleccione el modo de interrupción de recepción escribiendo el bit URXISEL <1:
0> (UxSTA <7: 6>).
• Especifique la prioridad de interrupción para la interrupción utilizando los bits de
control UxRXIP <2: 0> en el registro de control de prioridad de interrupción (IPC)
correspondiente.
4. Habilite el módulo UART configurando el bit UARTEN (UxMODE <15>).
5. Recibir interrupciones dependerá de la configuración del bit de control URXISEL
<1: 0>.
Si las interrupciones de recepción no están habilitadas, la aplicación del usuario
puede sondear el bit URXDA. El bit UxRXIF debe borrarse en la rutina de software
que da servicio a la interrupción de recepción UART.
6. Leer datos del buffer de recepción.
Si se selecciona transmisión de 9 bits, lea una palabra o lea un byte. El bit de estado
URXDA (UxSTA <0>) se establece siempre que haya datos disponibles en el búfer.
El ejemplo 17-3 proporciona un código de muestra que configura el UART para la
recepción.

Nota: Si el software de la aplicación utiliza el indicador de interrupción como base


para deshabilitar la transmisión UART, el software debe esperar un tiempo de 1 bit
antes de deshabilitar la transmisión.
EJEMPLO Rx

#define FCY 40000000


#define BAUDRATE 9600
#define BRGVAL ((FCY/BAUDRATE)/16) - 1
int main(void)
{
// Configure Oscillator to operate the device at 40 MHz
// Fosc = Fin * M/(N1 * N2), Fcy = Fosc/2
// Fosc = 8M * 40(2 * 2) = 80 MHz for 8M input clock
PLLFBD = 38;// M = 40
CLKDIVbits.PLLPOST = 0; // N1 = 2
CLKDIVbits.PLLPRE = 0; // N2 = 2
OSCTUN = 0; // Tune FRC oscillator, if FRC is used
RCONbits.SWDTEN = 0; // Disable Watch Dog Timer
while(OSCCONbits.LOCK! = 1) {}; // Wait for PLL to lock
U1MODEbits.STSEL = 0; // 1 Stop bit
U1MODEbits.PDSEL = 0; // No Parity, 8 data bits
U1MODEbits.ABAUD = 0; // Auto-Baud Disabled
U1MODEbits.BRGH = 0; // Low-Speed mode
U1BRG = BRGVAL; // BAUD Rate Setting for 9600
U1STAbits.URXISEL = 0; // Interrupt after one RX character is received;
U1MODEbits.UARTEN = 1; // Enable UART
while(1)
{
char ReceivedChar;
/* check for receive errors */
if(U1STAbits.FERR = 1)
{
continue;
}
/* must clear the overrun error to keep uart receiving */
if(U1STAbits.OERR = 1)
{
U1STAbits.OERR = 0;
continue;
}
/* get the data */
if(U1STAbits.URXDA = 1)
{
ReceivedChar = U1RXREG;
}
}

References

Potrebbero piacerti anche