void MyMIWI_Init(void) { // Configure Pins for MRF24J40MB mPORTESetBits(RST_MIWI); mPORTESetPinsDigitalOut(RST_MIWI); mPORTBSetBits(MIWI_WAKE); mPORTBSetPinsDigitalOut(MIWI_WAKE); // Configure the INT3 controller for MIWI // Set RD10/INT3 as input mPORTDSetPinsDigitalIn(BIT_10); // Clear corresponding bits in INTCON for falling edge trigger INTCONCLR = _INTCON_INT3EP_MASK; // Set up interrupt prioirty and sub-priority INTSetVectorPriority(INT_EXTERNAL_3_VECTOR, My_INT_EXTERNAL_3_PRIORITY); INTSetVectorSubPriority(INT_EXTERNAL_3_VECTOR, My_INT_EXTERNAL_3_SUB_PRIORITY); // Clear the interrupt flags INTClearFlag(INT_INT3); // Enable INT3 INTEnable(INT_INT3, INT_ENABLED); // WARNING : Change in file MRF24J40.c in Microchip Application Library // the line : void __ISR(_EXTERNAL_1_VECTOR, ipl4) _INT1Interrupt(void) // by : void __ISR(_EXTERNAL_3_VECTOR, ipl4) _INT3Interrupt(void) }
void MyWIFI_Init(void) { // Configure Pins for MRF24J40MB mPORTESetBits(RST_WIFI); mPORTESetPinsDigitalOut(RST_WIFI); mPORTBSetBits(WIFI_HIB); mPORTBSetPinsDigitalOut(WIFI_HIB); mPORTBClearBits(WIFI_WP); // Has to be pulled low mPORTBSetPinsDigitalOut(WIFI_WP); /* // Configure the INT4 controller for WIFI // Set RD11/INT4 as input mPORTDSetPinsDigitalIn(BIT_11); // Clear corresponding bits in INTCON for falling edge trigger INTCONCLR = _INTCON_INT4EP_MASK; // Set up interrupt prioirty and sub-priority INTSetVectorPriority(INT_EXTERNAL_4_VECTOR, My_INT_EXTERNAL_4_PRIORITY); INTSetVectorSubPriority(INT_EXTERNAL_4_VECTOR, My_INT_EXTERNAL_4_SUB_PRIORITY); // Clear the interrupt flags INTClearFlag(INT_INT4); // Enable INT4 INTEnable(INT_INT4, INT_ENABLED); */ }
void lcdconfig() { PORTSetPinsDigitalOut(IOPORT_D,BIT_4 | BIT_5); mPORTESetPinsDigitalOut(BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7); lcdcmnd(0x38); //init lcd 2 line 5x7 matrix delay(10); lcdcmnd(0x0E); //display on cursor blink delay(10); lcdcmnd(0x01); // clear display delay(10); lcdcmnd(0x06); // shift cursor right delay(10); lcdcmnd(0x84); // cursor at line 1 pos. 4 delay(10); }
void lcdini() { mPORTESetPinsDigitalOut(BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7); PORTSetPinsDigitalOut(IOPORT_D,BIT_5 | BIT_4); lcdcmd(0x38); msdelay(10); lcdcmd(0x0E); msdelay(10); lcdcmd(0x01); msdelay(10); lcdcmd(0x06); msdelay(10); lcdcmd(0x80); return; }
void InitializeSystem() { SYSTEMConfigWaitStatesAndPB(CLOCK_FREQ); mOSCSetPBDIV(OSC_PB_DIV_4); // Set to get 20MHz PB clock //mOSCSetPBDIV(OSC_PB_DIV_2); CheKseg0CacheOn(); mJTAGPortEnable(0); // Initialize the pins to all digital output and driven to ground. // Exception is RE7 and RE6 which are switch inputs PORTSetPinsDigitalIn(IOPORT_E, BIT_6); PORTSetPinsDigitalIn(IOPORT_E, BIT_7); mPORTASetPinsDigitalOut(0xFFFF); mPORTBSetPinsDigitalOut(0xFFFF); mPORTCSetPinsDigitalOut(0xFFFF); mPORTDSetPinsDigitalOut(0xFFFF); mPORTESetPinsDigitalOut(0xFF3F); mPORTFSetPinsDigitalOut(0xFFFF); mPORTGSetPinsDigitalOut(0xFFFF); mPORTAClearBits(0xFFFF); mPORTBClearBits(0xFFFF); mPORTCClearBits(0xFFFF); mPORTDClearBits(0xFFFF); mPORTEClearBits(0xFF3F); mPORTESetBits(0x000F); // LED latches need to be set high for off mPORTFClearBits(0xFFFF); mPORTGClearBits(0xFFFF); INTEnableSystemMultiVectoredInt(); #ifdef SANITY_CHECK mLED_Green_On(); #endif //LCD_Initialize(); //WIFI_Initialize(); //SPRINKLER_Initialize(); //RTCC_Initialize(); //SERIALUSB_Initialize(); SDCARD_Initialize(); TCPIP_Initialize(); }
int main(void) { //LOCALS unsigned int temp; unsigned int channel1, channel2; M1_stepPeriod = M2_stepPeriod = M3_stepPeriod = M4_stepPeriod = 50; // in tens of u-seconds unsigned char M1_state = 0, M2_state = 0, M3_state = 0, M4_state = 0; SYSTEMConfig(GetSystemClock(), SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); /* TIMER1 - now configured to interrupt at 10 khz (every 100us) */ OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_1, T1_TICK); ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2); /* TIMER2 - 100 khz interrupt for distance measure*/ OpenTimer2(T2_ON | T2_SOURCE_INT | T2_PS_1_1, T2_TICK); ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_3); //It is off until trigger /* PORTA b2 and b3 for servo-PWM */ mPORTAClearBits(BIT_2 | BIT_3); mPORTASetPinsDigitalOut(BIT_2 | BIT_3); /* ULTRASONICS: some bits of PORTB for ultrasonic sensors */ PORTResetPins(IOPORT_B, BIT_8 | BIT_9| BIT_10 | BIT_11 ); PORTSetPinsDigitalOut(IOPORT_B, BIT_8 | BIT_9| BIT_10 | BIT_11); //trigger /* Input Capture pins for echo signals */ //interrupt on every risging/falling edge starting with a rising edge PORTSetPinsDigitalIn(IOPORT_D, BIT_8| BIT_9| BIT_10| BIT_11); //INC1, INC2, INC3, INC4 Pin mIC1ClearIntFlag(); OpenCapture1( IC_EVERY_EDGE | IC_INT_1CAPTURE | IC_TIMER2_SRC | IC_ON );//front ConfigIntCapture1(IC_INT_ON | IC_INT_PRIOR_4 | IC_INT_SUB_PRIOR_3); OpenCapture2( IC_EVERY_EDGE | IC_INT_1CAPTURE | IC_TIMER2_SRC | IC_ON );//back ConfigIntCapture2(IC_INT_ON | IC_INT_PRIOR_4 | IC_INT_SUB_PRIOR_3); OpenCapture3( IC_EVERY_EDGE | IC_INT_1CAPTURE | IC_TIMER2_SRC | IC_ON );//left ConfigIntCapture3(IC_INT_ON | IC_INT_PRIOR_4 | IC_INT_SUB_PRIOR_3); OpenCapture4( IC_EVERY_EDGE | IC_INT_1CAPTURE | IC_TIMER2_SRC | IC_ON );//right ConfigIntCapture4(IC_INT_ON | IC_INT_PRIOR_4 | IC_INT_SUB_PRIOR_3); /* PINS used for the START (RD13) BUTTON */ PORTSetPinsDigitalIn(IOPORT_D, BIT_13); #define CONFIG (CN_ON | CN_IDLE_CON) #define INTERRUPT (CHANGE_INT_ON | CHANGE_INT_PRI_2) mCNOpen(CONFIG, CN19_ENABLE, CN19_PULLUP_ENABLE); temp = mPORTDRead(); /* PORT D and E for motors */ //motor 1 mPORTDSetBits(BIT_4 | BIT_5 | BIT_6 | BIT_7); // Turn on PORTD on startup. mPORTDSetPinsDigitalOut(BIT_4 | BIT_5 | BIT_6 | BIT_7); // Make PORTD output. //motor 2 mPORTCSetBits(BIT_1 | BIT_2 | BIT_3 | BIT_4); // Turn on PORTC on startup. mPORTCSetPinsDigitalOut(BIT_1 | BIT_2 | BIT_3 | BIT_4); // Make PORTC output. //motor 3 and 4 mPORTESetBits(BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7); // Turn on PORTE on startup. mPORTESetPinsDigitalOut(BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7); // Make PORTE output. // UART2 to connect to the PC. // This initialization assumes 36MHz Fpb clock. If it changes, // you will have to modify baud rate initializer. UARTConfigure(UART2, UART_ENABLE_PINS_TX_RX_ONLY); UARTSetFifoMode(UART2, UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY); UARTSetLineControl(UART2, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1); UARTSetDataRate(UART2, GetPeripheralClock(), BAUD); UARTEnable(UART2, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX)); // Configure UART2 RX Interrupt INTEnable(INT_SOURCE_UART_RX(UART2), INT_ENABLED); INTSetVectorPriority(INT_VECTOR_UART(UART2), INT_PRIORITY_LEVEL_2); INTSetVectorSubPriority(INT_VECTOR_UART(UART2), INT_SUB_PRIORITY_LEVEL_0); /* PORTD for LEDs - DEBUGGING */ mPORTDClearBits(BIT_0 | BIT_1 | BIT_2); mPORTDSetPinsDigitalOut(BIT_0 | BIT_1 | BIT_2); // Congifure Change/Notice Interrupt Flag ConfigIntCN(INTERRUPT); // configure for multi-vectored mode INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR); // enable interrupts INTEnableInterrupts(); counterDistanceMeasure=600; //measure ULTRASONICS distance each 60 ms while (1) { /***************** Robot MAIN state machine *****************/ unsigned char ret = 0; switch (Robo_State) { case 0: MotorsON = 0; Robo_State = 0; InvInitialOrientation(RESET); TestDog(RESET); GoToRoom4short(RESET); BackToStart(RESET); InitialOrientation(RESET); GoToCenter(RESET); GoToRoom4long(RESET); break; case 1: ret = InvInitialOrientation(GO); if (ret == 1) { Robo_State = 2; } break; case 2: ret = TestDog(GO); if (ret == 1) { Robo_State = 3; //DOG not found } else if (ret == 2) { Robo_State = 4; //DOG found } break; case 3: ret = GoToRoom4short(GO); if (ret == 1) { Robo_State = 0; } break; case 4: ret = BackToStart(GO); if (ret == 1) { Robo_State = 5; } break; case 5: ret = GoToCenter(GO); if (ret == 1) { Robo_State = 6; } break; case 6: ret = GoToRoom4long(GO); if (ret == 1) { Robo_State = 0; } break; } if (frontDistance < 30 || backDistance < 30 || leftDistance < 30 || rightDistance < 30) mPORTDSetBits(BIT_0); else mPORTDClearBits(BIT_0); /***************************************************************/ /***************** Motors State Machine ************************/ if (MotorsON) { /**************************** MOTOR MAP M1 O-------------O M2 ON EVEN MOTORS, STEPS MUST BE INVERTED | /\ | i.e. FORWARD IS BACKWARD | / \ | | || | | || | M3 O-------------O M4 *****************************/ if (M1_counter == 0) { switch (M1_state) { case 0: // set 0011 step (0x3 , 1); if (M1forward) M1_state = 1; else M1_state = 3; break; case 1: // set 1001 step (0x9 , 1); if (M1forward) M1_state = 2; else M1_state = 0; break; case 2: // set 1100 step (0xC , 1); if (M1forward) M1_state = 3; else M1_state = 1; break; case 3: // set 0110 default: step (0x6 , 1); if (M1forward) M1_state = 0; else M1_state = 2; break; } M1_counter = M1_stepPeriod; step_counter[0]--; if (directionNow == countingDirection) step_counter[1]--; } if (M2_counter == 0) { switch (M2_state) { case 0: // set 0011 step (0x3 , 2); if (M2forward) M2_state = 1; else M2_state = 3; break; case 1: // set 0110 step (0x6 , 2); if (M2forward) M2_state = 2; else M2_state = 0; break; case 2: // set 1100 step (0xC , 2); if (M2forward) M2_state = 3; else M2_state = 1; break; case 3: // set 1001 default: step (0x9 , 2); if (M2forward) M2_state = 0; else M2_state = 2; break; } M2_counter = M2_stepPeriod; } if (M3_counter == 0) { switch (M3_state) { case 0: // set 0011 step (0x3 , 3); if (M3forward) M3_state = 1; else M3_state = 3; break; case 1: // set 1001 step (0x9 , 3); if (M3forward) M3_state = 2; else M3_state = 0; break; case 2: // set 1100 step (0xC , 3); if (M3forward) M3_state = 3; else M3_state = 1; break; case 3: // set 0110 default: step (0x6 , 3); if (M3forward) M3_state = 0; else M3_state = 2; break; } M3_counter = M3_stepPeriod; } if (M4_counter == 0) { switch (M4_state) { case 0: // set 0011 step (0x3 , 4); if (M4forward) M4_state = 1; else M4_state = 3; break; case 1: // set 0110 step (0x6 , 4); if (M4forward) M4_state = 2; else M4_state = 0; break; case 2: // set 1100 step (0xC , 4); if (M4forward) M4_state = 3; else M4_state = 1; break; case 3: // set 1001 default: step (0x9 , 4); if (M4forward) M4_state = 0; else M4_state = 2; break; } M4_counter = M4_stepPeriod; } } else { //motors off mPORTDSetBits(BIT_4 | BIT_5 | BIT_6 | BIT_7); mPORTCSetBits(BIT_1 | BIT_2 | BIT_3 | BIT_4); mPORTESetBits(BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7); } /************************************************************/ /******* TEST CODE, toggles the servos (from 90 deg. to -90 deg.) every 1 s. ********/ /* if (auxcounter == 0) { servo1_angle = 0; if (servo2_angle == 90) servo2_angle = -90; else servo2_angle = 90; auxcounter = 20000; // toggle angle every 2 s. } */ servo1_angle = 0; servo2_angle = -90; /* if (frontDistance > 13 && frontDistance < 17) { servo2_angle = 90; } else servo2_angle = -90; */ /*******************************************************************/ /****************** SERVO CONTROL ******************/ /* Changing the global servoX_angle at any point in the code will move the servo to the desired angle. */ servo1_counter = (servo1_angle + 90)*(18)/180 + 6; // between 600 and 2400 us if (servo1_period == 0) { mPORTASetBits(BIT_2); servo1_period = SERVOMAXPERIOD; /* 200 * 100us = 20000us period */ } servo2_counter = (servo2_angle + 90)*(18)/180 + 6; // between 600 and 2400 us if (servo2_period == 0) { mPORTASetBits(BIT_3); servo2_period = SERVOMAXPERIOD; /* 200 * 100us = 20000us period */ } /*****************************************************/ } /* end of while(1) */ return 0; }
/**************************************************************************** Function: static void InitializeBoard(void) Description: This routine initializes the hardware. It is a generic initialization routine for many of the Microchip development boards, using definitions in HardwareProfile.h to determine specific initialization. Precondition: None Parameters: None - None Returns: None Remarks: None ***************************************************************************/ static void InitializeBoard(void) { // WiFi Module hardware Initialization handled by Library // Enable multi-vectored interrupts INTEnableSystemMultiVectoredInt(); // Enable optimal performance SYSTEMConfigPerformance(GetSystemClock()); mOSCSetPBDIV(OSC_PB_DIV_1); // Use 1:1 CPU Core:Peripheral clocks // Disable JTAG port so we get our I/O pins back, but first // wait 50ms so if you want to reprogram the part with // JTAG, you'll still have a tiny window before JTAG goes away. // The PIC32 Starter Kit debuggers use JTAG and therefore must not // disable JTAG. DelayMs(50); DDPCONbits.JTAGEN = 0; // LEDs LEDS_OFF(); mPORTESetPinsDigitalOut(BIT_5 | BIT_6 | BIT_7); // Switches mPORTDSetPinsDigitalIn(BIT_4 | BIT_5 | BIT_6); ConfigCNPullups(CN13_PULLUP_ENABLE | CN14_PULLUP_ENABLE | CN15_PULLUP_ENABLE); // LCD mPORTESetPinsDigitalOut(BIT_0 | BIT_1 | BIT_2 | BIT_3); //Configure LCD SPI pins mPORTFSetPinsDigitalOut(BIT_8); mPORTDSetPinsDigitalOut(BIT_15); //SPI Flash mPORTDSetPinsDigitalOut(BIT_14); //UART mPORTFSetPinsDigitalOut(BIT_5); mPORTFSetPinsDigitalIn(BIT_4); //MiWi #if defined(MRF24J40) || defined(MRF49XA) PHY_CS = 1; mPORTDSetPinsDigitalOut(BIT_9); PHY_RESETn = 1; mPORTDSetPinsDigitalOut(BIT_11); #endif #if defined(MRF49XA) nFSEL_TRIS = 0; FINT_TRIS = 1; nFSEL = 1; #elif defined(MRF24J40) PHY_WAKE = 1; mPORTBSetPinsDigitalOut(BIT_9); #else Data_nCS_TRIS = 0; Config_nCS_TRIS = 0; Data_nCS = 1; Config_nCS = 1; IRQ1_INT_TRIS = 1; IRQ0_INT_TRIS = 1; #endif /* Set the Port Directions of SDO, SDI, Clock & Slave Select Signal */ /* Set SCK port pin to output */ mPORTDSetPinsDigitalOut(BIT_10); /* Set SDO port pin to output */ mPORTDSetPinsDigitalOut(BIT_0); /* Set SDI port pin to input */ mPORTCSetPinsDigitalIn(BIT_4); /* Set INT1, INT2 port pins to input */ mPORTESetPinsDigitalIn(BIT_8 | BIT_9); /* Clear SPI1CON register */ SPI1CONCLR = 0xFFFFFFFF; #ifdef HARDWARE_SPI unsigned int pbFreq; /* Enable SPI1, Set to Master Mode & Set CKE bit : Serial output data changes on transition from active clock state to Idle clock state */ SPI1CON = 0x00008120; /* Peripheral Bus Frequency = System Clock / PB Divider */ pbFreq = (DWORD) CLOCK_FREQ / (1 << mOSCGetPBDIV()); /* PB Frequency can be maximum 40 MHz */ if (pbFreq > (2 * MAX_SPI_CLK_FREQ_FOR_P2P)) { { unsigned int SPI_Clk_Freq; unsigned char SPI_Brg1 = 1; //For the SPI1 /* Continue the loop till you find SPI Baud Rate Register Value */ while (1) { /* SPI Clock Calculation as per PIC32 Manual */ SPI_Clk_Freq = pbFreq / (2 * (SPI_Brg1 + 1)); if (SPI_Clk_Freq <= MAX_SPI_CLK_FREQ_FOR_P2P) { break; } SPI_Brg1++; } mSpiChnSetBrg(1, SPI_Brg1); } } else { /* Set SPI1 Baud Rate */ mSpiChnSetBrg(1, 0); } #endif /* Set the Interrupt Priority */ mINT2SetIntPriority(4); #if defined(MRF89XA) mINT1SetIntPriority(4); #endif /* Set Interrupt Subpriority Bits for INT2 */ mINT2SetIntSubPriority(2); #if defined(MRF89XA) mINT2SetIntSubPriority(1); #endif /* Set INT2 to falling edge */ mINT2SetEdgeMode(0); #if defined(MRF89XA) mINT1SetEdgeMode(1); mINT2SetEdgeMode(1); #endif /* Enable INT2 */ mINT2IntEnable(1); #if defined(MRF89XA) mINT2IntEnable(1); #endif /* Enable Multi Vectored Interrupts */ // INTEnableSystemMultiVectoredInt(); #if defined(MRF89XA) PHY_IRQ1 = 0; PHY_IRQ0 = 0; PHY_RESETn_TRIS = 1; #else RFIF = 0; if (RF_INT_PIN == 0) { RFIF = 1; } #endif // Initialize the EEPROM XEEInit(); // UART Initialization #if defined(STACK_USE_UART) UARTTX_TRIS = 0; UARTRX_TRIS = 1; UMODE = 0x8000; // Set UARTEN. Note: this must be done before setting UTXEN USTA = 0x00001400; // RXEN set, TXEN set #define CLOSEST_UBRG_VALUE ((GetPeripheralClock()+8ul*BAUD_RATE)/16/BAUD_RATE-1) #define BAUD_ACTUAL (GetPeripheralClock()/16/(CLOSEST_UBRG_VALUE+1)) #define BAUD_ERROR ((BAUD_ACTUAL > BAUD_RATE) ? BAUD_ACTUAL-BAUD_RATE : BAUD_RATE-BAUD_ACTUAL) #define BAUD_ERROR_PRECENT ((BAUD_ERROR*100+BAUD_RATE/2)/BAUD_RATE) #if (BAUD_ERROR_PRECENT > 3) #warning UART frequency error is worse than 3% #elif (BAUD_ERROR_PRECENT > 2) #warning UART frequency error is worse than 2% #endif UBRG = CLOSEST_UBRG_VALUE; #endif }
//******************************** //******************************** //********** INITIALISE ********** //******************************** //******************************** void initialise (void) { BYTE data; //##### GENERAL NOTE ABOUT PIC32'S ##### //Try and use the peripheral libraries instead of special function registers for everything (literally everything!) to avoid //bugs that can be caused by the pipeline and interrupts. //--------------------------------- //----- CONFIGURE PERFORMANCE ----- //--------------------------------- //----- SETUP EVERYTHING FOR OPTIMUM PERFORMANCE ----- SYSTEMConfigPerformance(80000000ul); //Note this sets peripheral bus to '1' max speed (regardless of configuration bit setting) //Use PBCLK divider of 1:1 to calculate UART baud, timer tick etc //----- SET PERIPHERAL BUS DIVISOR ----- //To minimize dynamic power the PB divisor should be chosen to run the peripherals at the lowest frequency that provides acceptable system performance mOSCSetPBDIV(OSC_PB_DIV_2); //OSC_PB_DIV_1, OSC_PB_DIV_2, OSC_PB_DIV_4, OSC_PB_DIV_8, //----- SETUP INTERRUPTS ----- INTEnableSystemMultiVectoredInt(); //------------------------- //----- SETUP IO PINS ----- //------------------------- //(Device will powerup with all IO pins as inputs) //----- TURN OFF THE JTAG PORT ----- //(JTAG is on by default) //mJTAGPortEnable(0); //Must be on for Microchip Multimedia Development board #define PORTA_IO 0xc2ff //Setup the IO pin type (0 = output, 1 = input) mPORTAWrite(0xc033); //Set initial ouput pin states mPORTASetPinsDigitalIn(PORTA_IO); //(Sets high bits as input) mPORTASetPinsDigitalOut(~PORTA_IO); //(Sets high bits as output) #define PORTB_IO 0xfbff //Setup the IO pin type (0 = output, 1 = input) mPORTBWrite(0x6d13); //Set initial ouput pin states mPORTBSetPinsDigitalIn(PORTB_IO); //(Sets high bits as input) mPORTBSetPinsDigitalOut(~PORTB_IO); //(Sets high bits as output) mPORTBSetPinsDigitalIn(BIT_0 | BIT_1 | BIT_3 | BIT_4 | BIT_15); //Joystick inputs #define PORTC_IO 0xf01e //Setup the IO pin type (0 = output, 1 = input) mPORTCWrite(0x3018); //Set initial ouput pin states mPORTCSetPinsDigitalIn(PORTC_IO); //(Sets high bits as input) mPORTCSetPinsDigitalOut(~PORTC_IO); //(Sets high bits as output) #define PORTD_IO 0x7bfe //Setup the IO pin type (0 = output, 1 = input) mPORTDWrite(0xbdaf); //Set initial ouput pin states mPORTDSetPinsDigitalIn(PORTD_IO); //(Sets high bits as input) mPORTDSetPinsDigitalOut(~PORTD_IO); //(Sets high bits as output) mPORTDSetPinsDigitalOut(BIT_2 | BIT_1); //LED's 2 and 3 mPORTDSetPinsDigitalIn(BIT_9); #define PORTE_IO 0x03ff //Setup the IO pin type (0 = output, 1 = input) mPORTEWrite(0x02a2); //Set initial ouput pin states mPORTESetPinsDigitalIn(PORTE_IO); //(Sets high bits as input) mPORTESetPinsDigitalOut(~PORTE_IO); //(Sets high bits as output) #define PORTF_IO 0x111f //Setup the IO pin type (0 = output, 1 = input) mPORTFWrite(0x0039); //Set initial ouput pin states mPORTFSetPinsDigitalIn(PORTF_IO); //(Sets high bits as input) mPORTFSetPinsDigitalOut(~PORTF_IO); //(Sets high bits as output) #define PORTG_IO 0xd3cf //Setup the IO pin type (0 = output, 1 = input) mPORTGWrite(0xf203); //Set initial ouput pin states mPORTGSetPinsDigitalIn(PORTG_IO); //(Sets high bits as input) mPORTGSetPinsDigitalOut(~PORTG_IO); //(Sets high bits as output) //Read pins using: // mPORTAReadBits(BIT_0); //Write pins using: // mPORTAClearBits(BIT_0); // mPORTASetBits(BIT_0); // mPORTAToggleBits(BIT_0); //----- INPUT CHANGE NOTIFICATION CONFIGURATION ----- //EnableCN0(); ConfigCNPullups(CN2_PULLUP_ENABLE | CN3_PULLUP_ENABLE | CN5_PULLUP_ENABLE | CN6_PULLUP_ENABLE | CN12_PULLUP_ENABLE); //Joystick pins //----- SETUP THE A TO D PINS ----- ENABLE_ALL_DIG; //--------------------- //----- SETUP USB ----- //--------------------- //The USB specifications require that USB peripheral devices must never source current onto the Vbus pin. Additionally, USB peripherals should not source //current on D+ or D- when the host/hub is not actively powering the Vbus line. When designing a self powered (as opposed to bus powered) USB peripheral //device, the firmware should make sure not to turn on the USB module and D+ or D- pull up resistor unless Vbus is actively powered. Therefore, the //firmware needs some means to detect when Vbus is being powered by the host. A 5V tolerant I/O pin can be connected to Vbus (through a resistor), and //can be used to detect when Vbus is high (host actively powering), or low (host is shut down or otherwise not supplying power). The USB firmware //can then periodically poll this I/O pin to know when it is okay to turn on the USB module/D+/D- pull up resistor. When designing a purely bus powered //peripheral device, it is not possible to source current on D+ or D- when the host is not actively providing power on Vbus. Therefore, implementing this //bus sense feature is optional. This firmware can be made to use this bus sense feature by making sure "USE_USB_BUS_SENSE_IO" has been defined in the //HardwareProfile.h file. // #if defined(USE_USB_BUS_SENSE_IO) // tris_usb_bus_sense = INPUT_PIN; // See HardwareProfile.h // #endif //If the host PC sends a GetStatus (device) request, the firmware must respond and let the host know if the USB peripheral device is currently bus powered //or self powered. See chapter 9 in the official USB specifications for details regarding this request. If the peripheral device is capable of being both //self and bus powered, it should not return a hard coded value for this request. Instead, firmware should check if it is currently self or bus powered, and //respond accordingly. If the hardware has been configured like demonstrated on the PICDEM FS USB Demo Board, an I/O pin can be polled to determine the //currently selected power source. On the PICDEM FS USB Demo Board, "RA2" is used for this purpose. If using this feature, make sure "USE_SELF_POWER_SENSE_IO" //has been defined in HardwareProfile.h, and that an appropriate I/O pin has been mapped to it in HardwareProfile.h. // #if defined(USE_SELF_POWER_SENSE_IO) // tris_self_power = INPUT_PIN; // See HardwareProfile.h // #endif //Enable the USB port now - we will check to see if Vbus is powered at the end of init and disable it if not. //USBDeviceInit(); //usb_device.c. Initializes USB module SFRs and firmware variables to known states. //------------------------ //----- SETUP TIMERS ----- //------------------------ //(INCLUDE THE USAGE OF ALL TIMERS HERE EVEN IF NOT SETUP HERE SO THIS IS THE ONE POINT OF //REFERENCE TO KNOW WHICH TIMERS ARE IN USE AND FOR WHAT). //----- SETUP TIMER 1 ----- //Used for: Available //OpenTimer1((T1_ON | T1_IDLE_CON | T1_GATE_OFF | T1_PS_1_4 | T1_SOURCE_INT), 20000); //----- SETUP TIMER 2 ----- //Used for: //OpenTimer2((T2_ON | T2_IDLE_CON | T2_GATE_OFF | T2_PS_1_1 | T2_SOURCE_INT), 0xffff); //0xffff = 305Hz //----- SETUP TIMER 3 ----- //Used for: //OpenTimer3((T3_ON | T3_IDLE_CON | T3_GATE_OFF | T3_PS_1_1 | T3_SOURCE_INT), PIEZO_TIMER_PERIOD); //----- SETUP TIMER 4 ----- //Used for: //OpenTimer4((T4_ON | T4_IDLE_CON | T4_GATE_OFF | T4_PS_1_1 | T4_SOURCE_INT), 20000); //----- SETUP TIMER 5 ----- //Used for: Heartbeat OpenTimer5((T5_ON | T5_IDLE_CON | T5_GATE_OFF | T5_PS_1_1 | T5_SOURCE_INT), 40000); //1mS with 80MHz osc and PB_DIV_2 ConfigIntTimer5(T5_INT_ON | T5_INT_PRIOR_7); //1=lowest priority to 7=highest priority. ISR function must specify same value //--------------------------------- //----- SETUP EVAL BOARD CPLD ----- //--------------------------------- //Graphics bus width = 16 mPORTGSetPinsDigitalOut(BIT_14); mPORTGSetBits(BIT_14); //SPI source select = SPI3 (not used) mPORTGSetPinsDigitalOut(BIT_12); mPORTGClearBits(BIT_12); //SPI peripheral destination select = Expansion Slot (not used) mPORTASetPinsDigitalOut(BIT_7 | BIT_6); mPORTASetBits(BIT_7); mPORTAClearBits(BIT_6); //-------------------------------------- //----- PARALLEL MASTER PORT SETUP ----- //-------------------------------------- PMMODE = 0; PMAEN = 0; PMCON = 0; PMMODE = 0x0610; PMCONbits.PTRDEN = 1; //Enable RD line PMCONbits.PTWREN = 1; //Enable WR line PMCONbits.PMPEN = 1; //Enable PMP //------------------------------ //----- INITIALISE DISPLAY ----- //------------------------------ display_initialise(); display_test(); //LOAD OUR GLOBAL HTML STYLES FILE READY FOR DISPLAY HTML PAGES BYTE dummy_styles_count; DWORD file_size; if (display_html_setup_read_file(global_css, 0, &file_size)) { dummy_styles_count = 0; display_html_read_styles(&file_size, &dummy_styles_count, 1); //1 = this is global styles file } }
int main(void) { DBINIT(); DBPRINTF("MAIN.... \n"); unsigned int temp; int POWER; //bool RELAY; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //STEP 1. Configure cache, wait states and peripheral bus clock SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 2. configure the port registers mPORTDSetPinsDigitalOut(BIT_0 | BIT_1 | BIT_2 | BIT_9); mPORTESetPinsDigitalOut(BIT_0 | BIT_1 | BIT_2); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 3. initialize the port pin states = outputs low mPORTDClearBits(BIT_0 | BIT_1 | BIT_2); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 4. enable change notice, enable discrete pins and weak pullups mCNOpen(CONFIG, PINS, PULLUPS); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 5. read port(s) to clear mismatch on change notice pins temp = mPORTDRead(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 6. clear change notice interrupt flag ConfigIntCN(INTERRUPT); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 7. enable multi-vector interrupts INTEnableSystemMultiVectoredInt(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // STEP 8. configure SPI port and MCP3909 OpenSPI1(FRAME_ENABLE_ON | ENABLE_SDO_PIN | SPI_MODE32_ON | SPI_CKE_ON | SLAVE_ENABLE_OFF | CLK_POL_ACTIVE_LOW | MASTER_ENABLE_ON , SPI_ENABLE | SPI_FRZ_CONTINUE | SPI_IDLE_STOP | SPI_RX_OVFLOW_CLR); CONFIG_3909(); DBPRINTF("CONFIGURED.... \n"); while(1) { // Toggle LED's to signify code is looping mPORTDToggleBits(BIT_0); // toggle LED1 (same as LATDINV = 0x0002) SAMPLE(); POWER = MEASURE_POWER(); DBPRINTF("power measured! \n"); DelayMs(1000); /************************ *ETHERNET COMMUNICATIONS* ************************/ }; }
int main(int argc, char** argv) { uchar status = 0; mPORTAClearBits(BIT_6); //Clear bits to ensure the LED is off. //mPORTASetPinsDigitalOut(BIT_6); //Set port as output // lets set the digital IO bits for the ethernet module mPORTASetPinsDigitalOut(BIT_7|BIT_6); mPORTGSetPinsDigitalOut(BIT_8 | BIT_9 | BIT_14 | BIT_0); mPORTBSetPinsDigitalOut(0x0000FFFF); mPORTESetPinsDigitalOut(0x000000FF); // set the control bits high mPORTASetBits(BIT_7); mPORTGSetBits(BIT_8 | BIT_9 | BIT_14); mPORTGClearBits(BIT_0); //mPORTGClearBits(BIT_0); //mPORTGClearBits(0x0000FFFF); //mPORTEClearBits(0x0000FFFF); //mPORTAClearBits(0x0000FFFF); //mPORTBClearBits(0x0000FFFF); //while(1){} // lets init the W5100 struct W5100Context_t context; context.Mode = MR_RST; context.InterruptMask = 0xFF; context.RetryTimeValue = 0x0FA0; // 400 ms context.RetryCount = 1; context.GateAdd[0] = 10; context.GateAdd[1] = 1; context.GateAdd[2] = 1; context.GateAdd[3] = 3; context.SHardAdd[0] = 0; context.SHardAdd[1] = 1; context.SHardAdd[2] = 2; context.SHardAdd[3] = 3; context.SHardAdd[4] = 4; context.SHardAdd[5] = 5; context.Subnet[0] = 255; context.Subnet[1] = 255; context.Subnet[2] = 255; context.Subnet[3] = 0; context.SourceIP[0] = 10; context.SourceIP[1] = 1; context.SourceIP[2] = 1; context.SourceIP[3] = 2; context.sockets[0].Mem = MEM_2K; context.sockets[1].Mem = MEM_2K; context.sockets[2].Mem = MEM_2K; context.sockets[3].Mem = MEM_2K; ShortDelay_ms(100); W5100Init( &context ); W5100ReadData(SHAR0, &status, 1); W5100ReadData(SHAR1, &status, 1); W5100ReadData(SHAR2, &status, 1); W5100ReadData(SHAR3, &status, 1); W5100ReadData(SHAR4, &status, 1); W5100ReadData(SHAR5, &status, 1); EstablishServer(&context); // lets try a random write //W5100WriteData(0x001A, 0x07, 1); //mPORTEWrite(0x07); while(1) { status = W5100PollStatus(&context, 0); if( status == SOCK_ESTABLISH) mPORTGSetBits(BIT_0); else mPORTGClearBits(BIT_0); if( status == SOCK_CLOSE_WAIT) EstablishServer(&context); //PORTAbits.RA2 = ~PORTAbits.RA2; mPORTAToggleBits(BIT_6); ShortDelay(US_TO_CT_TICKS*1000000); //delay_millis(1000); } return (EXIT_SUCCESS); }
/******************************************************************************* * Function: BoardInit(void) * PreCondition:None * Input: None * Output: None * Overview: SPI pins and SFR, Maintenance Tasks Timer, External Interrupts, * and other board issues initialization. * Note: This routine needs to be called before initialising MiWi stack * or invoking other function that operates on MiWi stack. ******************************************************************************/ void BoardInit(void){ #if defined(__PIC32MX__) // RADIO INTERFACES & SPI INIT -------------------------------------------// #if defined HARDWARE_SPI /* Peripheral Bus Frequency = System Clock / PB Divider */ unsigned int pbFreq; pbFreq = (DWORD) CLOCK_FREQ/(1 << mOSCGetPBDIV()); unsigned int SPI_Clk_Freq; unsigned char SPI_Brg; #endif #if defined MRF24J40 PHY_CS_TRIS = 0; PHY_CS = 1; PHY_RESETn_TRIS = 0; PHY_RESETn = 1; MRF24J40_INT_TRIS = 1; SDI_TRIS = 1; SDO_TRIS = 0; SCK_TRIS = 0; SPI_SDO = 0; SPI_SCK = 0; PHY_WAKE_TRIS = 0; PHY_WAKE = 1; SPICONCLR = 0xFFFFFFFF; // Clear SPIxCON register #ifdef HARDWARE_SPI /* Enable SPI, Set to Master Mode & Set CKE bit : Serial output * data changes on transition from active clock state to Idle * clock state */ SPICON = 0x00008120; /* PB Frequency can be maximum 40 MHz */ if(pbFreq > (2 * MAX_SPI_CLK_FREQ_FOR_P2P)){ SPI_Brg = 1; /* Continue the loop till you find SPI Baud Rate Reg Value */ while(1){ /* SPI Clock Calculation as per PIC32 Manual */ SPI_Clk_Freq = pbFreq / (2 * (SPI_Brg + 1)); if(SPI_Clk_Freq <= MAX_SPI_CLK_FREQ_FOR_P2P){ break; } SPI_Brg++; } #if defined MRF24J40_IN_SPI1 mSpiChnSetBrg (1, SPI_Brg); #elif defined MRF24J40_IN_SPI2 mSpiChnSetBrg (2, SPI_Brg); #elif defined MRF24J40_IN_SPI3 mSpiChnSetBrg (1A, SPI_Brg); #elif defined MRF24J40_IN_SPI4 mSpiChnSetBrg (3A, SPI_Brg); #endif } else{ #if defined MRF24J40_IN_SPI1 mSpiChnSetBrg (1, 0); #elif defined MRF24J40_IN_SPI2 mSpiChnSetBrg (2, 0); #elif defined MRF24J40_IN_SPI3 mSpiChnSetBrg (1A, 0); #elif defined MRF24J40_IN_SPI4 mSpiChnSetBrg (3A, SPI_Brg); #endif } #endif #endif #if defined(MRF49XA_1) //Configuration for Guilja's Expansion Board, Connection SLot 1 --// mPORTESetPinsDigitalOut(BIT_1); //nCS mPORTBSetPinsDigitalIn(BIT_2); //FINT //Juan: Added. //----------------------------------------------------------------// MRF49XA_1_PHY_CS_TRIS = 0; MRF49XA_1_PHY_CS = 1; MRF49XA_1_PHY_RESETn_TRIS = 0; MRF49XA_1_PHY_RESETn = 1; MRF49XA_1_INT_TRIS = 1; MRF49XA_1_SDI_TRIS = 1; MRF49XA_1_SDO_TRIS = 0; MRF49XA_1_SCK_TRIS = 0; MRF49XA_1_SPI_SDO = 0; MRF49XA_1_SPI_SCK = 0; MRF49XA_1_nFSEL_TRIS = 0; MRF49XA_1_FINT_TRIS = 1; MRF49XA_1_nFSEL = 1; // nFSEL inactive MRF49XA_1_SPICONCLR = 0xFFFFFFFF; //Clear SPIxCON register #ifdef HARDWARE_SPI /* Enable SPI1, Set to Master Mode & Set CKE bit : Serial output * data changes on transition from active clock state to Idle * clock state */ MRF49XA_1_SPICON = 0x00008120; /* PB Frequency can be maximum 40 MHz */ if(pbFreq > (2 * MAX_SPI_CLK_FREQ_FOR_P2P)){ SPI_Brg = 1; /* Continue the loop till you find SPI Baud Rate Reg Value */ while(1){ /* SPI Clock Calculation as per PIC32 Manual */ SPI_Clk_Freq = pbFreq / (2 * (SPI_Brg + 1)); if(SPI_Clk_Freq <= MAX_SPI_CLK_FREQ_FOR_P2P){ break; } SPI_Brg++; } #if defined MRF49XA_1_IN_SPI1 mSpiChnSetBrg (1, SPI_Brg); #elif defined MRF49XA_1_IN_SPI2 mSpiChnSetBrg (2, SPI_Brg); #elif defined MRF49XA_1_IN_SPI3 mSpiChnSetBrg (1A, SPI_Brg); #endif } else{ #if defined MRF49XA_1_IN_SPI1 mSpiChnSetBrg (1, 0); #elif defined MRF49XA_1_IN_SPI2 mSpiChnSetBrg (2, 0); #elif defined MRF49XA_1_IN_SPI3 mSpiChnSetBrg (1A, 0); #endif } #endif #endif #if defined(MRF49XA_2) MRF49XA_2_PHY_CS_TRIS = 0; MRF49XA_2_PHY_CS = 1; MRF49XA_2_PHY_RESETn_TRIS = 0; MRF49XA_2_PHY_RESETn = 1; MRF49XA_2_INT_TRIS = 1; MRF49XA_2_SDI_TRIS = 1; MRF49XA_2_SDO_TRIS = 0; MRF49XA_2_SCK_TRIS = 0; MRF49XA_2_SPI_SDO = 0; MRF49XA_2_SPI_SCK = 0; MRF49XA_2_nFSEL_TRIS = 0; MRF49XA_2_FINT_TRIS = 1; MRF49XA_2_nFSEL = 1; // nFSEL inactive MRF49XA_2_SPICONCLR = 0xFFFFFFFF; // Clear SPIxCON register #ifdef HARDWARE_SPI /* Enable SPI1, Set to Master Mode & Set CKE bit : Serial output * data changes on transition from active clock state to Idle * clock state */ MRF49XA_2_SPICON = 0x00008120; /* PB Frequency can be maximum 40 MHz */ if(pbFreq > (2 * MAX_SPI_CLK_FREQ_FOR_P2P)){ SPI_Brg = 1; /* Continue the loop till you find SPI Baud Rate Reg Value */ while(1){ /* SPI Clock Calculation as per PIC32 Manual */ SPI_Clk_Freq = pbFreq / (2 * (SPI_Brg + 1)); if(SPI_Clk_Freq <= MAX_SPI_CLK_FREQ_FOR_P2P){ break; } SPI_Brg++; } #if defined MRF49XA_2_IN_SPI1 mSpiChnSetBrg (1, SPI_Brg); #elif defined MRF49XA_2_IN_SPI2 mSpiChnSetBrg (2, SPI_Brg); #elif defined MRF49XA_2_IN_SPI3 mSpiChnSetBrg (1A, SPI_Brg); #endif } else{ #if defined MRF49XA_2_IN_SPI1 mSpiChnSetBrg (1, 0); #elif defined MRF49XA_2_IN_SPI2 mSpiChnSetBrg (2, 0); #elif defined MRF49XA_2_IN_SPI3 mSpiChnSetBrg (1A, 0); #endif } #endif #endif // SPI & EXTERNAL INTERRUPTS PINS AND CONFIGURATION ----------------------// #if (defined __32MX675F256L__ || defined ____32MX675F512__) /* Set the SPI Port Directions (SDO, SDI, SCK) for every SPI module.*/ #if defined MRF49XA_1_IN_SPI1 || defined MRF49XA_2_IN_SPI1 || \ defined MRF89XA_IN_SPI1 || defined MRF24J40_IN_SPI1 || \ defined MRF24WB0M_IN_SPI1 mPORTDSetPinsDigitalOut(BIT_0); //SDO1 mPORTDSetPinsDigitalOut(BIT_10); //SCK1 mPORTCSetPinsDigitalIn(BIT_4); //SDI1 #endif #if defined MRF49XA_1_IN_SPI2 || defined MRF49XA_2_IN_SPI2 || \ defined MRF89XA_IN_SPI2 || defined MRF24J40_IN_SPI2 || \ defined MRF24WB0M mPORTGSetPinsDigitalOut(BIT_8); //SDO2 mPORTGSetPinsDigitalOut(BIT_6); //SCK2 mPORTGSetPinsDigitalIn(BIT_7); //SDI2 #endif #if defined MRF49XA_1_IN_SPI3 || defined MRF49XA_2_IN_SPI3 || \ defined MRF89XA_IN_SPI3 || defined MRF24J40_IN_SPI3 || \ defined MRF24WB0M mPORTFSetPinsDigitalOut(BIT_8); //SDO3 mPORTDSetPinsDigitalOut(BIT_15); //SCK3 mPORTFSetPinsDigitalIn(BIT_2); //SDI3 #endif // #if defined MRF24WB0M_IN_SPI4 // mPORTFSetPinsDigitalOut(BIT_5); //SDO4 // mPORTFSetPinsDigitalOut(BIT_13); //SCK4 // mPORTFSetPinsDigitalIn(BIT_4); //SDI4 // #endif #endif #endif // TIMER 1 FOR TIME_SYNC -------------------------------------------------// #if defined(ENABLE_TIME_SYNC) //TIMER 1 MAY BE USED FOR SLEEP MODE AND/OR FOR STACKS MAINTENANCE. IT //NEEDS ADAPTATION BEFORE ENABLING TIME_SYNC WITH TIMER 1 TOO! T1CON = 0; T1CON = 0x0012; T1CONSET = 0x8000; PR1 = 0xFFFF; IFS0bits.T1IF = 0; mT1IntEnable(1); mT1SetIntPriority(4); while(T1CONbits.TWIP); TMR1 = 0; #endif // TIMER 1 FOR NODE STACKS AUTO-MAINTENANCE ------------------------------// #if defined NODE_DOES_MAINTENANCE_TASKS T1CON = 0x0070; //Disable timer, PBCLK source, PS=256 TMR1 = 0x0000; //Reset count PR1 = MAINTENANCE_PERIOD; //Set period. IPC1SET = 0x00000005; //Set Priority level 1, Subpriority level 1 IFS0CLR = 0x00000010; //Clear T1IF IEC0SET = 0x00000010; //Set T1IE //Timer will be triggered after initialization. #endif // IOPORT CN - For waking up the node manually. --------------------------// mPORTDSetPinsDigitalIn(BIT_5); // CN14 CNCON = 0x8000; //Module enabled. CNEN = 0x00004000; //Enable CN14 CNPUE = 0x00004000; //Enable CN14 weak pull-up. ReadBUTTONS(); //Clear PORT mismatch condition. IFS1CLR = 0x00000001; //Clear the CN interrupt flag status bit IPC6SET = 0x00180000; //Set CN priority 6, subpriority 0. //It will be enabled only during sleep mode time interval //------------------------------------------------------------------------// // Lo modifico en el wifi config #if defined(ENABLE_NVM) //REVIEW //EE_nCS_TRIS = 0;//FERNANDO, CUIDADO NO SE SI LA PILA REALMENTE FUNCIONA CON FLASH MEMORY //EE_nCS = 1; #endif // INTERRUPTION FLAGS AND EXT_INT PIN FINAL SETTINGS ---------------------// #if defined MRF49XA_1 MRF49XA_1_IF = 0; if(MRF49XA_1_INT_PIN == 0){ MRF49XA_1_IF = 1; } #endif #if defined MRF49XA_2 MRF49XA_2_IF = 0; if(MRF49XA_2_INT_PIN == 0){ MRF49XA_2_IF = 1; } #endif #if defined MRF89XA PHY_IRQ1 = 0; #endif #if defined MRF24J40 MRF24J40_IF = 0; if(MRF24J40_INT_PIN == 0){ MRF24J40_IF = 1; } #endif }