/************************ HEADERS ****************************************/ #include "task.h" #include "asf.h" #include #include "sio2host.h" #if defined(ENABLE_NETWORK_FREEZER) #include "pdsDataServer.h" #include "wlPdsTaskManager.h" #endif #if ((BOARD == SAMR30_XPLAINED_PRO) || (BOARD == SAMR21_XPLAINED_PRO)) #include "edbg-eui.h" #endif /************************** DEFINITIONS **********************************/ #if (BOARD == SAMR30_MODULE_XPLAINED_PRO) #define NVM_UID_ADDRESS ((volatile uint16_t *)(0x0080400AU)) #endif // location found indicates that the other rover found an object #define LOCATION_FOUND (1) /************************** PROTOTYPES **********************************/ void ReadMacAddress(void); void init_spi(SercomSpi spi); unsigned char write_spi(SercomSpi spi, unsigned char val); int main ( void ) { bool freezer_enable = false; irq_initialize_vectors(); system_init(); delay_init(); cpu_irq_enable(); #if defined (ENABLE_CONSOLE) sio2host_init(); #endif // Read the MAC address from either flash or EDBG ReadMacAddress(); // Initialize system Timer SYS_TimerInit(); // Demo Start Message DemoOutput_Greeting(); #if defined(ENABLE_NETWORK_FREEZER) SYS_TimerInit(); nvm_init(INT_FLASH); PDS_Init(); demo_output_freezer_options(); // User Selection to commission a network or use Freezer freezer_enable = freezer_feature(); #endif // Commission the network Initialize_Demo(freezer_enable); init_spi(SERCOM1->SPI); // our pic is connected to SPI 1 while(1) { Run_Demo(); } } /********************************************************************* * Function: void ReadMacAddress() * * PreCondition: none * * Input: none * * Output: Reads MAC Address from MAC Address EEPROM * * Side Effects: none * * Overview: Uses the MAC Address from the EEPROM for addressing * * Note: **********************************************************************/ void ReadMacAddress(void) { uint8_t i = 0, j = 0; for (i = 0; i < 8; i += 2, j++) { myLongAddress[i] = (NVM_UID_ADDRESS[j] & 0xFF); myLongAddress[i + 1] = (NVM_UID_ADDRESS[j] >> 8); } } void init_spi(SercomSpi spi){ //SercomSpi spi = SERCOM4; // sercom 4 controls transceiver? // initialize spi spi.CTRLA.bit.ENABLE = 1; spi.CTRLA.bit.MODE = 0x3; // master mode (0x02 for slave) spi.CTRLA.bit.CPHA = 1; // clock phase spi.CTRLA.bit.CPOL = 1; // clock polarity spi.CTRLA.bit.DORD = 0; // MSB first spi.CTRLB.bit.MSSEN = 1; // slave select spi.BAUD.bit.BAUD = 0x0F; // baud rate spi.CTRLB.bit.RXEN = 1; // enable sending } unsigned char write_spi(SercomSpi spi, unsigned char val){ spi.CTRLB.bit.MSSEN = 0; spi.DATA.bit.DATA = val; while(!spi.INTFLAG.bit.DRE); nop(); return spi.DATA.bit.DATA; }