#include <p24fj128ga010.h>
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
_CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_HS );
#include <uart.h>
char DataUART;
char KbhitUART;
/* ** *********************************************************************************** ** */
// Definciones para calculo de Baud Rate.-
#define FCY 10000000 // MHz
#define BAUDRATE 9600
#define BRGHigh 1
#if BRGHigh
#define BRGVAL ((FCY/BAUDRATE)/4)-1
#else
#define BRGVAL ((FCY/BAUDRATE)/16)-1
#endif
//__attribute__ ((__section__ (".text"), __space__(prog)))
const char Texto[]= "Probando comunicación serial...\r\nPIC24FJ128GA010 xD ...\r\n";
/* ** *********************************************************************************** ** */
void __attribute__((__interrupt__, __shadow__)) _U2RXInterrupt(void){
DataUART=getcUART2();
KbhitUART=1;
_U2RXIF=0; // Borramos flag.
}
/* ** *********************************************************************************** ** */
int main (int argc, char * argv[]){
/* ** Utilizando las funciones definidas en C30 ** */
OpenUART2(UART_EN & UART_IDLE_STOP & UART_IrDA_DISABLE & UART_MODE_SIMPLEX &
UART_UEN_00 & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_UXRX_IDLE_ONE &
UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_BRGH_FOUR & UART_1STOPBIT,
0xFFFF & UART_IrDA_POL_INV_ZERO & UART_SYNC_BREAK_DISABLED &
UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR,
BRGVAL);
ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR1 & UART_TX_INT_DIS & UART_TX_INT_PR0 );
/*U2MODEbits.USIDL=1; // Al pasar al modo Sleep, apagar modulo.
U2MODEbits.IREN=0; // Codificacion/decodificacion IrDA deshabilitado.
U2MODEbits.RTSMD=1; // RTS en modo simple.
U2MODEbits.UEN=0b00; // Tx/Rx habilitado, CTS/RTS deshabilitados.
U2MODEbits.WAKE=0; // Wake-up deshabilitado.
U2MODEbits.LPBACK=0; // Modo LoopBack deshabilitado.
U2MODEbits.ABAUD=0; // Auto-Baud rate deshabilitado.
U2MODEbits.RXINV=0; // Modo normal de pin RX, en reposo = 1.
U2MODEbits.BRGH=BRGHigh; // Mode seleccionado en define.-
U2MODEbits.PDSEL=0b00; // 8 bits- sin paridad.
U2MODEbits.STSEL=0; // 1 bit de Stop.
U2STAbits.UTXISEL1=1; // Interrupcion por transimision no usada.
U2STAbits.UTXISEL0=1; // Interrupcion por transimision no usada.
U2STAbits.UTXINV=0; // Pin Tx en reposo igual a 1.
U2STAbits.UTXBRK=0; // Break deshabilitado.
U2STAbits.URXISEL=0b00; // Interrumpir cuando se recibe un caracter.
U2STAbits.ADDEN=0; // Auto-Address deshabilitado.
U2STAbits.OERR=0; // Borramos bits de error por overflow.
U2BRG =BRGVAL; // Baud Rate determinado en defines.
IPC7bits.U2RXIP=0b01; // Fijamos nivel de prioridad.
IFS1bits.U2RXIF=0; // Borramos flag.
IEC1bits.U2RXIE=1; // habilitamos interrupcion por recepción.
U2MODEbits.UARTEN=1;// Encendemos modulo.
U2STAbits.UTXEN=1; // Transmision habilitada.*/
KbhitUART=0;
putsUART2(Texto);
while(1){
if(KbhitUART==1){
KbhitUART=0;
putcUART2(DataUART);
}
}
}