/* * @brief Gets the robot ID. * * roneID is assigned robot ID. If robot is uninitialized, roneID is DEFAULT_RONEID. * The ID is set using LM Flash. The format for the ID is: 00-50-C2-00-01-XX * where XX is the robotID * @returns void */ void systemIDInit(void) { uint32 ureg0; uint32 ureg1; uint32 id = 0; int i; MAP_FlashUserGet(&ureg0, &ureg1); for (i = 0; i < 2; i++) { id = id << 8; ureg1 = ureg1 >> 8; id |= (ureg1 & 0xFF); } if (id == 0xFFFF) { // Uninitialized robot. return DEFAULT_RONEID roneID = DEFAULT_RONEID; } else { roneID = id & 0xFF; } }
/** * Creates task to feed data from interrupt to lwIP, * initializes EMAC0, then initializes lwIP */ void init_ethernet(void){/*{{{*/ { // Enable Ethernet hardware/*{{{*/ uint32_t user0, user1; /** * Enable ethernet * See page 160 of spmu298a */ MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_EMAC0); MAP_SysCtlPeripheralReset(SYSCTL_PERIPH_EMAC0); //Enable internal PHY MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_EPHY0); MAP_SysCtlPeripheralReset(SYSCTL_PERIPH_EPHY0); // Set Ethernet LED pinouts // See Page 269 of spmu298a.pdf MAP_GPIOPinConfigure(GPIO_PF0_EN0LED0); MAP_GPIOPinConfigure(GPIO_PF4_EN0LED1); GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_4); // Busy wait until MAC ready while(MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_EMAC0) == 0); //Using builtin PHY, so don't need to call GPIOPinTypeEthernetMII() MAP_EMACPHYConfigSet(EMAC0_BASE, EMAC_PHY_TYPE_INTERNAL|EMAC_PHY_INT_MDIX_EN|EMAC_PHY_AN_100B_T_FULL_DUPLEX); // Initialize MAC (see spmu363a.pdf) // Maybe should optimize burst size MAP_EMACInit(EMAC0_BASE, g_syshz, EMAC_BCONFIG_MIXED_BURST|EMAC_BCONFIG_PRIORITY_FIXED, 4, 4, 0); // Set options // Tune parameters MAP_EMACConfigSet(EMAC0_BASE, (EMAC_CONFIG_FULL_DUPLEX | EMAC_CONFIG_CHECKSUM_OFFLOAD | EMAC_CONFIG_7BYTE_PREAMBLE | EMAC_CONFIG_IF_GAP_96BITS | EMAC_CONFIG_USE_MACADDR0 | EMAC_CONFIG_SA_FROM_DESCRIPTOR | EMAC_CONFIG_100MBPS| EMAC_CONFIG_BO_LIMIT_1024), (EMAC_MODE_RX_STORE_FORWARD | EMAC_MODE_TX_STORE_FORWARD | EMAC_MODE_TX_THRESHOLD_64_BYTES | EMAC_MODE_RX_THRESHOLD_64_BYTES), 0); //Mac Address saved in user0 and user1 by default MAP_FlashUserGet(&user0, &user1); mac_addr[0] = user0 & 0xFF; mac_addr[1] = user0 >> 8 & 0xFF; mac_addr[2] = user0 >> 16 & 0xFF; mac_addr[3] = user1 & 0xFF; mac_addr[4] = user1 >> 8 & 0xFF; mac_addr[5] = user1 >> 16 & 0xFF; MAP_EMACAddrSet(EMAC0_BASE, 0, mac_addr ); //Explicitly Disable PTP EMACTimestampDisable(EMAC0_BASE); }/*}}}*/ // Lower priority of ISR so *FromISR functions can be safely called MAP_IntPrioritySet(INT_EMAC0, ETH_ISR_PRIO); tcpip_init(tcpip_init_cb, NULL); }/*}}}*/