Es una buena idea partir la estructuración de nuestras carpetas de proyectos tomando como base la que utiliza Microchip, de esta manera cuando necesitemos utilizar alguna de las librerías que provee Microchip va a resultar más sencillo. Además, también podemos reunir en una carpeta las librerías que vayamos desarrollando, de esa manera estarán disponibles para cualquier proyecto sin la necesidad de copiar todos los archivos a la carpeta raíz

En base a eso una posible forma puede ser la siguiente:
Ahora, en el proyecto los INCLUDE SEARCH PATH serán:
• .
• ..\Microchip\Include
• ..\Micros-Designs\Include
• C:\Program Files\Microchip\MPLAB C32\pic32mx\include
Configuración del oscilador:En este caso el cristal utilizado es uno de 8 MHz, y la idea es utilizar el PLL interno para llevar el Clock del CPU y el Clock de periféricos hasta 80 MHz. Partiendo del datasheet, el “camino” a seguir se muestra en la siguiente figura:
Entonces la configuración de los fuses resulta:
#pragma config FPLLODIV=DIV_1, FPLLIDIV=DIV_2, FPLLMUL=MUL_20, FPBDIV=DIV_2
#pragma config FWDTEN=OFF, FCKSM=CSDCMD, POSCMOD=XT, FNOSC=PRIPLL
#pragma config CP=OFF, BWP=OFF
Adicionalmente configuramos WDT des-habilitado, des-habilitado cambio de clock, des-habilitado monitoreo de clock y protecciones de código des-habilitadas. Existe el documento de ayuda
hlpPIC32MXConfigSet en
C:\Program Files\Microchip\MPLAB C32\doc para más detalles (+ Manuales de referencia de la familia en particular

)
Además de la configuración de Fuses es necesario llamar a una o un par de funciones que ponen al máximo el rendimiento del microcontrolador, en mi caso directamente llamo a la función
SYSTEMConfigPerformance(FCY). Pero se puede utilizar por ejemplo
SYSTEMConfig (), que permite seleccionar las características a modificar:
SYSTEMConfig (FCY, OPCIONES);Opciones:
SYS_CFG_WAIT_STATES
SYS_CFG_PB_BUS
SYS_CFG_PCACHE
SYS_CFG_ALLBueno, ya con esto un HelloWord puede ser utilizar los Leds y Switch on board :)
#include <p32xxxx.h>
#include <plib.h>
// *--------------------------------------------------------------------------------*
// Cristal de 8MHz.-
// SYSCLK = 80 MHz (8MHz Cristal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// FPLLDIV 1:2, PLLMULT x20, PLLODIV 1:1. -> 80MHz
// FPBDIV 1:1 -> 80MHz
#pragma config FPLLODIV=DIV_1, FPLLIDIV=DIV_2, FPLLMUL=MUL_20, FPBDIV=DIV_1
#pragma config FWDTEN=OFF, FCKSM=CSDCMD, POSCMOD=XT, FNOSC=PRIPLL
#pragma config CP=OFF, BWP=OFF, PWP=OFF
// *--------------------------------------------------------------------------------*
#include "HardwareProfileSkP32.h"
// *--------------------------------------------------------------------------------*
// *--------------------------------------------------------------------------------*
// *--------------------------------------------------------------------------------*
int main(){
mJTAGPortEnable(0); // JTAG des-habilitado
SYSTEMConfigPerformance(GetSystemClock()); // Activa pre-cache.-
PORTSetPinsDigitalOut(PORT_LED1, PIN_LED1);
PORTSetPinsDigitalOut(PORT_LED3, PIN_LED3);
PORTSetPinsDigitalOut(PORT_LED4, PIN_LED4);
PORTSetPinsDigitalIn(PORT_SW1,PIN_SW1);
PORTSetPinsDigitalIn(PORT_SW2,PIN_SW2);
while(1){
if(PORTReadBits(PORT_SW1,PIN_SW1)==0){
PORTSetBits(PORT_LED1,PIN_LED1);
}else{
PORTClearBits(PORT_LED1,PIN_LED1);
}
if(PORTReadBits(PORT_SW2,PIN_SW2)==0){
PORTSetBits(PORT_LED3,PIN_LED3|PIN_LED4);
}else{
PORTClearBits(PORT_LED3,PIN_LED3|PIN_LED4);
}
}
}
// *--------------------------------------------------------------------------------*
Al igual que en los ejemplos de Microchip, creamos un archivo HardwareProfile.h en donde colocamos un par de definiciones propias de la placa de desarrollo utilizada:
#define PORT_LED1 IOPORT_B
#define PIN_LED1 BIT_8
#define PORT_LED2 IOPORT_B
#define PIN_LED2 BIT_9
#define PORT_LED3 IOPORT_B
#define PIN_LED3 BIT_10
#define PORT_LED4 IOPORT_B
#define PIN_LED4 BIT_11
#define PORT_SW1 IOPORT_B
#define PIN_SW1 BIT_12
#define PORT_SW2 IOPORT_B
#define PIN_SW2 BIT_13
#define GetSystemClock() (80000000ul) // Hz
#define GetInstructionClock() (GetSystemClock()/1)
#define GetPeripheralClock() (GetSystemClock()/1)