int net_init(void) { tracef("%s():...", __func__); if (lattice_ice40_configure(ice40lp384_bin, sizeof_ice40lp384_bin) < 0) { trace("lattice_ice40_configure() failed!"); return -1; } /* IO init */ stm32_gpio_mode(RS485_RX, ALT_FUNC, PULL_UP); stm32_gpio_af(RS485_RX, GPIO_AF7); stm32_gpio_mode(RS485_TX, ALT_FUNC, PUSH_PULL | SPEED_MED); stm32_gpio_af(RS485_TX, GPIO_AF7); #ifdef RS485_CK stm32_gpio_mode(RS485_CK, ALT_FUNC, PUSH_PULL | SPEED_MED); stm32_gpio_af(RS485_CK, GPIO_AF7); #endif #ifdef RS485_TRIG stm32_gpio_mode(RS485_TRIG, INPUT, PULL_UP); #endif #ifdef RS485_TXEN stm32_gpio_mode(RS485_TXEN, OUTPUT, PUSH_PULL | SPEED_MED); stm32_gpio_set(RS485_TXEN); #endif #ifdef RS485_LOOP stm32_gpio_mode(RS485_LOOP, OUTPUT, PUSH_PULL | SPEED_MED); stm32_gpio_set(RS485_LOOP); #endif #ifdef RS485_MODE stm32_gpio_mode(RS485_MODE, OUTPUT, PUSH_PULL | SPEED_LOW); stm32_gpio_set(RS485_MODE); #endif if (!net.initialized) { /* Link init */ rs485_init(&net.link, RS485_USART, RS485_LINK_SPEED, USART1_DMA, USART1_DMA_CHAN, USART1_RX_DMA_STRM, USART1_TX_DMA_STRM); /* initialize the packet buffer pool */ pktbuf_pool_init(); net_recv_init(); net.probe_flag = thinkos_flag_alloc(); net.initialized = true; } return 0; }
int main(int argc, char ** argv) { struct board_cfg * cfg = (struct board_cfg *)(CFG_ADDR); struct mstp_lnk * mstp; int mstp_addr; if (cfg->magic == CFG_MAGIC) mstp_addr = cfg->mstp_addr; else mstp_addr = 2; io_init(); stdio_init(); motd(); lattice_ice40_configure(ice40lp384_bin, sizeof_ice40lp384_bin); supervisor_init(); INF("Starting MS/TP network (addr=%d)", mstp_addr); if ((mstp = mstp_start(mstp_addr)) == NULL) { thinkos_sleep(1000); return 1; } INF("Starting MS/TP test"); mstp_test_start(mstp); for (;;) { int c = fgetc(stdin); switch (c) { case '0' ... '9': test_mode = c - '0'; printf("\ntest mode %d\n", test_mode); break; default: show_menu(); } } return 0; }