/*********************************************************************************** * @fn cc2520_config * * @brief Power up, sets default tuning settings, enables autoack and configures * chip IO * * @param none * * @return SUCCESS if the radio has started, FAILURE otherwise */ uint8_t cc2520_config(void) { uint8_t val; int i = 0; // Avoid GPIO0 interrupts during reset P2IE &= ~(CC2520_INT_PIN); // Make sure to pull the CC2520 RESETn and VREG_EN pins low P4OUT &= ~(CC2520_RESET_PIN); P5OUT |= CC2520_CS_PIN; // Raise CS P4OUT &= ~(CC2520_VREG_EN_PIN); __delay_cycles(MSP430_USECOND*1100); // Enable the voltage regulator and wait for it (CC2520 power-up) P4OUT |= CC2520_VREG_EN_PIN; __delay_cycles(MSP430_USECOND*CC2520_VREG_MAX_STARTUP_TIME); // Release reset P4OUT |= CC2520_RESET_PIN; // Wait for XOSC stable to be announced on the MISO pin if (cc2520_waitRadioReady()==FAILED) return FAILED; // Write non-default register values for (i = 0; i < sizeof(regval)/sizeof(regVal_t); i++) { CC2520_MEMWR8(regval[i].reg, regval[i].val); } // Verify a register val= CC2520_MEMRD8(CC2520_MDMCTRL0); return val==0x85? SUCCESS : FAILED; }
/*********************************************************************************** * @fn halRfInit * * @brief Power up, sets default tuning settings, enables autoack and configures * chip IO * * @param none * * @return SUCCESS if the radio has started, FAILURE otherwise */ uint8 halRfInit(void) { regVal_t* p; uint8 val; // Avoid GPIO0 interrupts during reset // halDigioIntDisable(&pinRadio_GPIO0); // Make sure to pull the CC2520 RESETn and VREG_EN pins low CC2520_RESET_OPIN(0); CC2520_SPI_END(); CC2520_VREG_EN_OPIN(0); halMcuWaitUs(1100); // Make sure MISO is configured as output. // CC2520_MISO_DIR_OUT(); // Enable the voltage regulator and wait for it (CC2520 power-up) CC2520_VREG_EN_OPIN(1); halMcuWaitUs(CC2520_VREG_MAX_STARTUP_TIME); // Release reset CC2520_RESET_OPIN(1); // Wait for XOSC stable to be announced on the MISO pin if (halRfWaitRadioReady()==FAILED) return FAILED; // Write non-default register values p = regval; while (p->reg!=0) { CC2520_MEMWR8(p->reg,p->val); p++; } // Verify a register val= CC2520_MEMRD8(CC2520_MDMCTRL0); return val==0x85? SUCCESS : FAILED; }
/*********************************************************************************** * @fn halRfInit * * @brief Power up, sets default tuning settings, enables autoack and configures * chip IO * * @param none * * @return SUCCESS if the radio has started, FAILURE otherwise */ uint8 halRfInit(void) { regVal_t* p; uint8 val; // Avoid GPIO0 interrupts during reset halRfDisableRxInterrupt(); // Make sure to pull the CC2520 RESETn pin low CC2520_RESET_OPIN(0); CC2520_SPI_END(); chThdSleepMilliseconds(2); // Make sure MISO is configured as output. CC2520_MISO_DIR_OUT(); // Release reset CC2520_RESET_OPIN(1); // Wait for XOSC stable to be announced on the MISO pin if (halRfWaitRadioReady() == FAILED) { return FAILED; } // Write non-default register values p = regval; while (p->reg != 0) { CC2520_MEMWR8(p->reg, p->val); p++; } // ISR Thread chThdCreateStatic(waIsrTx, sizeof(waIsrTx), NORMALPRIO + 2, isrThread, NULL ); // Verify a register val = CC2520_MEMRD8(CC2520_MDMCTRL0); return val == 0x85 ? SUCCESS : FAILED; }
/*********************************************************************************** * @fn halRfGetChipVer * * @brief Get chip version * * @param none * * @return uint8 - result */ uint8 halRfGetChipVer(void) { return (CC2520_MEMRD8(CC2520_VERSION)); }
/*********************************************************************************** * @fn halRfGetChipId * * @brief Get chip id * * @param none * * @return uint8 - result */ uint8 halRfGetChipId(void) { return (CC2520_MEMRD8(CC2520_CHIPID)); }