Tengo PIC32MX795F512L
MCU y estoy trabajando en su comunicación UART
. He hecho el programa y está funcionando bien. Tenía curiosidad acerca de la frecuencia con la que se ejecuta mi PIC, por lo que busqué un poco y encontré este documento en línea dice que:
SYSTEMConfigPerformance () es una función de biblioteca muy útil que se utiliza para optimizar fácilmente el rendimiento del PIC32. Usted proporciona la frecuencia de reloj del sistema (instrucción) y esta función hará el resto. Realizará las siguientes tareas para usted:
- Habilitar el almacenamiento en caché de instrucciones y datos
- Habilitar búsqueda previa de instrucción
- Configure Flash y SRAM para estados de espera mínimos
- Maximice la frecuencia del reloj del bus periférico
Entonces, cuando incluí SYSTEMConfigPerformance(FCY)
en mi código, mi comunicación UART se detiene y recibía algunos caracteres aleatorios. Cuando excluí SYSTEMConfigPerformance(FCY)
estaba funcionando bien. No sé la razón detrás de este extraño comportamiento. Estoy usando 8MHZ
crystal con PLL y finalmente ejecuto mi PIC en 72MHZ
de frecuencia. A continuación está el código que estoy usando:
#define FCY 72000000UL
#define FPB (FCY/2)
#define BAUDRATE 9600
#pragma config POSCMOD=HS,FNOSC=PRIPLL
#pragma config FPLLIDIV=DIV_2, FPLLMUL=MUL_18, FPLLODIV=DIV_1
#pragma config FPBDIV=DIV_2, FWDTEN=OFF, CP=OFF, BWP=OFF
int main()
{
SYSTEMConfigPerformance(FCY); //<-- Problem is at this line.
OpenUART1( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT, UART_RX_ENABLE | UART_TX_ENABLE, (FPB/16/BAUDRATE)-1 );
while(1)
{
putsUART1("Hello\n");
}
}
void DelayMs( unsigned t)
{
T1CON = 0x8000;
while (t--)
{
TMR1 = 0;
while (TMR1 < FPB/1000);
}
}