void rbInit() { // TODO FIXME special port disable ? LEDs BTNs ? // prepare power // TODO FIXME more power init needed ? chrg + volt input ? // enable external vcc gpioSetDir(RB_PWR_GOOD, gpioDirection_Output); gpioSetValue (RB_PWR_GOOD, 0); // Disable USB Connect (we don't want USB by default) gpioSetDir(USB_CONNECT, gpioDirection_Output); gpioSetValue(USB_CONNECT, 1); // prepare buttons gpioSetDir(RB_BTN0, gpioDirection_Input); gpioSetPullup (&RB_BTN0_IO, gpioPullupMode_PullUp); gpioSetDir(RB_BTN1, gpioDirection_Input); gpioSetPullup (&RB_BTN1_IO, gpioPullupMode_PullUp); gpioSetDir(RB_BTN2, gpioDirection_Input); gpioSetPullup (&RB_BTN2_IO, gpioPullupMode_PullUp); gpioSetDir(RB_BTN3, gpioDirection_Input); gpioSetPullup (&RB_BTN3_IO, gpioPullupMode_PullUp); gpioSetDir(RB_BTN4, gpioDirection_Input); gpioSetPullup (&RB_BTN4_IO, gpioPullupMode_PullUp); // prepate chrg_stat gpioSetDir(RB_PWR_CHRG, gpioDirection_Input); gpioSetPullup (&RB_PWR_CHRG_IO, gpioPullupMode_PullUp); // prepare LEDs IOCON_JTAG_TDI_PIO0_11 &= ~IOCON_JTAG_TDI_PIO0_11_FUNC_MASK; IOCON_JTAG_TDI_PIO0_11 |= IOCON_JTAG_TDI_PIO0_11_FUNC_GPIO; gpioSetDir(RB_LED0, gpioDirection_Output); gpioSetValue (RB_LED0, 0); gpioSetDir(RB_LED1, gpioDirection_Output); gpioSetValue (RB_LED1, 0); gpioSetDir(RB_LED2, gpioDirection_Output); gpioSetValue (RB_LED2, 0); gpioSetDir(RB_LED3, gpioDirection_Output); gpioSetValue (RB_LED3, 0); // Set LED3 to ? IOCON_PIO1_11 = 0x41; // prepare lcd // TODO FIXME more init needed ? gpioSetDir(RB_LCD_BL, gpioDirection_Output); gpioSetValue (RB_LCD_BL, 0); // Set P0.0 to GPIO RB_PWR_LCDBL_IO&= ~RB_PWR_LCDBL_IO_FUNC_MASK; RB_PWR_LCDBL_IO|= RB_PWR_LCDBL_IO_FUNC_GPIO; gpioSetDir(RB_PWR_LCDBL, gpioDirection_Input); gpioSetPullup(&RB_PWR_LCDBL_IO, gpioPullupMode_Inactive); // prepare I2C #ifdef __I2C_h i2cInit(I2CMASTER); // TODO FIXME via define ? #endif // prepare SPI/SS // TODO FIXME init miso/mosi/sck somehow ? gpioSetDir(RB_SPI_SS0, gpioDirection_Output); gpioSetValue (RB_SPI_SS0, 1); gpioSetDir(RB_SPI_SS1, gpioDirection_Output); gpioSetValue (RB_SPI_SS1, 1); gpioSetDir(RB_SPI_SS2, gpioDirection_Output); gpioSetValue (RB_SPI_SS2, 1); gpioSetDir(RB_SPI_SS3, gpioDirection_Output); gpioSetValue (RB_SPI_SS3, 1); gpioSetDir(RB_SPI_SS4, gpioDirection_Output); gpioSetValue (RB_SPI_SS4, 1); gpioSetDir(RB_SPI_SS5, gpioDirection_Output); gpioSetValue (RB_SPI_SS5, 1); // prepare hackerbus gpioSetDir(RB_HB0, gpioDirection_Output); gpioSetValue (RB_HB0, 1); gpioSetDir(RB_HB1, gpioDirection_Output); gpioSetValue (RB_HB1, 1); gpioSetDir(RB_HB2, gpioDirection_Output); gpioSetValue (RB_HB2, 1); gpioSetDir(RB_HB3, gpioDirection_Output); gpioSetValue (RB_HB3, 1); gpioSetDir(RB_HB4, gpioDirection_Output); gpioSetValue (RB_HB4, 1); gpioSetDir(RB_HB5, gpioDirection_Output); gpioSetValue (RB_HB5, 1); // prepare BUSINT interrupt gpioSetDir(RB_BUSINT, gpioDirection_Input); gpioSetPullup (&RB_BUSINT_IO, gpioPullupMode_PullUp); gpioSetInterrupt(RB_BUSINT, gpioInterruptSense_Edge, gpioInterruptEdge_Single, gpioInterruptEvent_ActiveLow); gpioIntEnable(RB_BUSINT); //nrf_init(); backlightInit(); font=&Font_7x8; ECIES_setup(); }
static void chb_radio_init() { U8 ieee_addr[8]; // reset chip chb_reset(); // disable intps while we config the radio chb_reg_write(IRQ_MASK, 0); // force transceiver off while we configure the intps chb_reg_read_mod_write(TRX_STATE, CMD_FORCE_TRX_OFF, 0x1F); // make sure the transceiver is in the off state before proceeding while ((chb_reg_read(TRX_STATUS) & 0x1f) != TRX_OFF); // set radio cfg parameters // **note** uncomment if these will be set to something other than default //chb_reg_read_mod_write(XAH_CTRL_0, CHB_MAX_FRAME_RETRIES << CHB_MAX_FRAME_RETRIES_POS, 0xF << CHB_MAX_FRAME_RETRIES_POS); //chb_reg_read_mod_write(XAH_CTRL_0, CHB_MAX_CSMA_RETRIES << CHB_MAX_CSMA_RETIRES_POS, 0x7 << CHB_MAX_CSMA_RETIRES_POS); //chb_reg_read_mod_write(CSMA_SEED_1, CHB_CSMA_SEED1 << CHB_CSMA_SEED1_POS, 0x7 << CHB_CSMA_SEED1_POS); //chb_ret_write(CSMA_SEED0, CHB_CSMA_SEED0); //chb_reg_read_mod_write(PHY_CC_CCA, CHB_CCA_MODE << CHB_CCA_MODE_POS,0x3 << CHB_CCA_MODE_POS); //chb_reg_write(CCA_THRES, CHB_CCA_ED_THRES); // set frame version that we'll accept chb_reg_read_mod_write(CSMA_SEED_1, CHB_FRM_VER << CHB_FVN_POS, 3 << CHB_FVN_POS); // set interrupt mask // re-enable intps while we config the radio chb_reg_write(IRQ_MASK, (1<<IRQ_RX_START) | (1<<IRQ_TRX_END)); #if (CFG_CHIBI_PROMISCUOUS == 0) // set autocrc mode chb_reg_read_mod_write(TRX_CTRL_1, 1 << CHB_AUTO_CRC_POS, 1 << CHB_AUTO_CRC_POS); #endif // set up default phy modulation, data rate and power (Ex. OQPSK, 100 kbps, 868 MHz, 3dBm) chb_set_mode(CFG_CHIBI_MODE); // Defined in projectconfig.h chb_set_pwr(CFG_CHIBI_POWER); // Defined in projectconfig.h chb_set_channel(CFG_CHIBI_CHANNEL); // Defined in projectconfig.h // set fsm state // put trx in rx auto ack mode chb_set_state(RX_STATE); // set pan ID chb_reg_write16(PAN_ID_0, CFG_CHIBI_PANID); // Defined in projectconfig.h // set short addr // NOTE: Possibly get this from EEPROM chb_reg_write16(SHORT_ADDR_0, chb_get_short_addr()); // set long addr // NOTE: Possibly get this from EEPROM chb_get_ieee_addr(ieee_addr); chb_reg_write64(IEEE_ADDR_0, ieee_addr); #if (CHB_CC1190_PRESENT) // set high gain mode pin to output and init to zero gpioSetDir (CHB_CC1190_HGM_PORT, CHB_CC1190_HGM_PIN, 1); gpioSetPullup (&CHB_CC1190_HGM_IOCONREG, gpioPullupMode_Inactive); gpioSetValue (CHB_CC1190_HGM_PORT, CHB_CC1190_HGM_PIN, 0); // set external power amp on AT86RF212 chb_reg_read_mod_write(TRX_CTRL_1, 1<<CHB_PA_EXT_EN_POS, 1<<CHB_PA_EXT_EN_POS); // set power to lowest level possible chb_set_pwr(0xd); // set to -11 dBm #endif // set interrupt/gpio pin to input gpioSetDir (CHB_EINTPORT, CHB_EINTPIN, 0); // set internal resistor on EINT pin to inactive gpioSetPullup (&CHB_EINTPIN_IOCONREG, gpioPullupMode_Inactive); // configure pin for interrupt gpioSetInterrupt (CHB_EINTPORT, CHB_EINTPIN, gpioInterruptSense_Edge, // Edge-sensitive gpioInterruptEdge_Single, // Single edge gpioInterruptEvent_ActiveHigh); // High triggers interrupt // enable interrupt gpioIntEnable (CHB_EINTPORT, CHB_EINTPIN); if (chb_get_state() != RX_STATE) { // ERROR occurred initializing the radio. Print out error message. printf(chb_err_init); } }
static void prt(void) { int i, j; printf("\r\nHello World\r\n"); gpioSetDir(1, 1, gpioDirection_Input); for (i = 0; i < 8; i++) gpioSetDir(2, i, gpioDirection_Input); gpioSetDir(0, 8, gpioDirection_Output); gpioSetDir(0, 9, gpioDirection_Output); gpioSetDir(0, 10, gpioDirection_Output); IOCON_JTAG_TCK_PIO0_10 = 0 | IOCON_JTAG_TDI_PIO0_11_FUNC_GPIO | IOCON_JTAG_TDI_PIO0_11_ADMODE_DIGITAL; IOCON_JTAG_TDI_PIO0_11 = 0 | IOCON_JTAG_TDI_PIO0_11_FUNC_GPIO | IOCON_JTAG_TDI_PIO0_11_ADMODE_DIGITAL; gpioSetDir(0, 11, gpioDirection_Output); gpioSetDir(3, 0, gpioDirection_Input); gpioSetDir(3, 1, gpioDirection_Output); gpioSetDir(3, 2, gpioDirection_Input); gpioSetDir(3, 3, gpioDirection_Input); gpioSetInterrupt(1, // Port 1, // Pin gpioInterruptSense_Edge, // Edge/Level Sensitive gpioInterruptEdge_Single, // Single/Double Edge gpioInterruptEvent_ActiveLow); // Rising/Falling gpioIntEnable(1, 1); gpioSetValue(0,11,1); gpioSetValue(0,10,0); gpioSetValue(0,9,0); while (1) { j = CDC_getchar(); switch (j) { case 's': gpioSetValue(0,8,0); sts(); break; case 'S': gpioSetValue(0,8,1); sts(); break; case 'p': gpioSetValue(0,9,0); sts(); break; case 'P': gpioSetValue(0,9,1); sts(); break; case 'b': gpioSetValue(0,10,0); sts(); break; case 'B': gpioSetValue(0,10,1); sts(); break; case 'a': gpioSetValue(0,11,0); sts(); break; case 'A': gpioSetValue(0,11,1); sts(); break; case 'e': gpioSetValue(3,1,0); sts(); break; case 'E': gpioSetValue(3,1,1); sts(); break; case 'x': while (1) CDC_putchar('x'); break; case '?': sts(); break; } if (gpioGetValue(0, 10)) { CDC_putchar(got_prn); for (j = 0; j < 2; j++) gpioSetValue(0,11,0); gpioSetValue(0,11,1); gpioSetValue(0,10,0); } } }