// PIC24FJ64GA002
#include ‹p24Fxxxx.h›
_CONFIG1 (JTAGEN_OFF & GCP_OFF & GWRP_OFF & ICS_PGx3 & FWDTEN_OFF & WINDIS_OFF);
_CONFIG2 (IESO_OFF & SOSCSEL_SOSC & FNOSC_PRIPLL & FCKSM_CSECME & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_HS);
void main(void)
{
CLKDIV = 0x3000; //DOZE 1:8
//Input
RPINR18 = 0x1F06; // RP6=U1RX
RPINR20 = 0x1F09; // RP9=SDI1
RPINR0 = 0x0D00; // RP13=INT1
//Output
RPOR2 = 0x0300; // RP5 =U1TX
RPOR7 = 0x0807; // RP15=SCK1O, RP14=SDO
//Lock sequence
__builtin_write_OSCCONL(0x42); //SOSC enabled, PPS lock
//Unused peripheral module disabled, use SPI, I2C2, UART1, RTCC, CRC, Timer 1,2,3
PMD1 = 0xC0D1;
PMD2 = 0x1F1E;
PMD3 = 0x0500;
//Configure PORTA, PORTB (IN=13,9,8,7,6,2,3)
AD1PCFG = 0x9E3F;
ODCB = 0x0001;
TRISA = 0x0003;
TRISB = 0x23DC;
//================================================== ========================
//Configure SPI1 module(8 Mhz)
//(8-bit mode, SMP=1, CKE=1, CKP=0, SCK Div=1:1)
//================================================== ========================
SPI1CON1 = 0x033F;
SPI1CON2 = 0;
SPI1STAT = 0x8000;
IFS0bits.SPI1IF = 0;
IFS0bits.SPF1IF = 0;
IEC0bits.SPF1IE = 1;
//---------------------------------------------------------------------
//Configure I2C module 2 (100 kHz)400
I2C2CON = 0;
I2C2BRG = 0x004E; //100
I2C2CONbits.I2CEN = 1;
IFS3bits.MI2C2IF = 0;
//---------------------------------------------------------------------
//Configure UART module(9600 kB/s, 8-bit, no parity, 1 stop bit)
U1BRG = 0x0051;
U1MODE = 0;
U1STA = 0;
U1MODEbits.UARTEN = 1;
U1STAbits.UTXEN = 1;
IFS0bits.U1RXIF = 0;
IFS4bits.U1ERIF = 0;
IEC0bits.U1RXIE = 1;
IEC4bits.U1ERIE = 1;
//---------------------------------------------------------------------
//Configure External Interrupt 1(RB13)
//Interrupt on Falling Edge
INTCON2bits.INT1EP = 1;
IFS1bits.INT1IF = 0;
IEC1bits.INT1IE = 1;
//Configure External Interrupt 0(RB7)
//Interrupt on Falling Edge
INTCON2bits.INT0EP = 1;
IFS0bits.INT0IF = 0;
IEC0bits.INT0IE = 1;
//---------------------------------------------------------------------
//Configure Change notification
CNEN1 = 0x000C;
IFS1bits.CNIF = 0;
IEC1bits.CNIE = 1;
//Configure Timer 1(External clock)
PR1 = 1;
TMR1 = 0;
T1CON = 0x0002;
IFS0bits.T1IF = 0;
IEC0bits.T1IE = 1;
//---------------------------------------------------------------------
//Timer 3 (16-bit)
PR3 = 1;
T3CON = 0x0030;
TMR3 = 0;
IFS0bits.T3IF = 0;
IEC0bits.T3IE = 1;
//---------------------------------------------------------------------
//RTCC
__builtin_write_RTCWEN();
RCFGCALbits.RTCEN = 1;
//---------------------------------------------------------------------
//CRC Generator
CRCCON = 0x0007;
CRCXOR = 0x0031;
CRCWDAT = 0;
IFS4bits.CRCIF = 0;
IEC4bits.CRCIE = 1;
//---------------------------------------------------------------------
PR1 = T1_2msDelay;
T1CONbits.TON = 1;
Sleep();
} |