RFFC tx and rx functions updated for Jawbreaker

This commit is contained in:
Michael Ossmann
2012-09-20 12:41:11 -06:00
parent 237df75789
commit d6a94a339a
3 changed files with 49 additions and 9 deletions

View File

@ -367,26 +367,58 @@ void rffc5071_regs_commit(void)
} }
} }
void rffc5071_tx(void) { void rffc5071_tx(uint8_t gpo) {
LOG("# rffc5071_tx\n"); LOG("# rffc5071_tx\n");
set_RFFC5071_ENBL(0); set_RFFC5071_ENBL(0);
set_RFFC5071_FULLD(0); set_RFFC5071_FULLD(0);
set_RFFC5071_MODE(0); /* mixer 1 only (TX) */ set_RFFC5071_MODE(1); /* mixer 2 used for both RX and TX */
#ifdef JAWBREAKER
/* honor SWITCHCTRL_AMP_BYPASS and SWITCHCTRL_HP settings from caller */
gpo &= (SWITCHCTRL_AMP_BYPASS | SWITCHCTRL_HP);
if ((gpo & SWITCHCTRL_AMP_BYPASS) == SWITCHCTRL_AMP_BYPASS)
gpo |= SWITCHCTRL_NO_TX_AMP_PWR;
gpo |= (SWITCHCTRL_TX | SWITCHCTRL_NO_RX_AMP_PWR);
rffc5071_set_gpo(gpo);
#endif
rffc5071_regs_commit(); rffc5071_regs_commit();
rffc5071_enable(); #ifdef JAWBREAKER
/* honor SWITCHCTRL_MIX_BYPASS setting from caller */
if ((gpo & SWITCHCTRL_MIX_BYPASS) == SWITCHCTRL_MIX_BYPASS)
rffc5071_disable();
else
#endif
rffc5071_enable();
} }
void rffc5071_rx(void) { void rffc5071_rx(uint8_t gpo) {
LOG("# rfc5071_rx\n"); LOG("# rfc5071_rx\n");
set_RFFC5071_ENBL(0); set_RFFC5071_ENBL(0);
set_RFFC5071_FULLD(0); set_RFFC5071_FULLD(0);
set_RFFC5071_MODE(1); /* mixer 2 only (RX) */ set_RFFC5071_MODE(1); /* mixer 2 used for both RX and TX */
#ifdef JAWBREAKER
/* honor SWITCHCTRL_AMP_BYPASS and SWITCHCTRL_HP settings from caller */
gpo &= (SWITCHCTRL_AMP_BYPASS | SWITCHCTRL_HP);
if ((gpo & SWITCHCTRL_AMP_BYPASS) == SWITCHCTRL_AMP_BYPASS)
gpo |= SWITCHCTRL_NO_RX_AMP_PWR;
gpo |= SWITCHCTRL_NO_TX_AMP_PWR;
rffc5071_set_gpo(gpo);
#endif
rffc5071_regs_commit(); rffc5071_regs_commit();
rffc5071_enable(); #ifdef JAWBREAKER
/* honor SWITCHCTRL_MIX_BYPASS setting from caller */
if ((gpo & SWITCHCTRL_MIX_BYPASS) == SWITCHCTRL_MIX_BYPASS)
rffc5071_disable();
else
#endif
rffc5071_enable();
} }
/*
* This function turns on both mixer (full-duplex) on the RFFC5071, but our
* current hardware designs do not support full-duplex operation.
*/
void rffc5071_rxtx(void) { void rffc5071_rxtx(void) {
LOG("# rfc5071_rxtx\n"); LOG("# rfc5071_rxtx\n");
set_RFFC5071_ENBL(0); set_RFFC5071_ENBL(0);

View File

@ -43,6 +43,10 @@ extern uint32_t rffc5071_regs_dirty;
#define SWITCHCTRL_HP (1 << 4) /* 1 for high-pass, 0 for low-pass */ #define SWITCHCTRL_HP (1 << 4) /* 1 for high-pass, 0 for low-pass */
#define SWITCHCTRL_NO_RX_AMP_PWR (1 << 5) /* turn off RX amp power */ #define SWITCHCTRL_NO_RX_AMP_PWR (1 << 5) /* turn off RX amp power */
/*
* Safe (initial) switch settings turn off both amplifiers and enable both amp
* bypass and mixer bypass.
*/
#define SWITCHCTRL_SAFE (SWITCHCTRL_NO_TX_AMP_PWR | SWITCHCTRL_AMP_BYPASS | SWITCHCTRL_TX | SWITCHCTRL_MIX_BYPASS | SWITCHCTRL_HP | SWITCHCTRL_NO_RX_AMP_PWR) #define SWITCHCTRL_SAFE (SWITCHCTRL_NO_TX_AMP_PWR | SWITCHCTRL_AMP_BYPASS | SWITCHCTRL_TX | SWITCHCTRL_MIX_BYPASS | SWITCHCTRL_HP | SWITCHCTRL_NO_RX_AMP_PWR)
#endif #endif
@ -71,8 +75,8 @@ extern uint16_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz);
/* Set up rx only, tx only, or full duplex. Chip should be disabled /* Set up rx only, tx only, or full duplex. Chip should be disabled
* before _tx, _rx, or _rxtx are called. */ * before _tx, _rx, or _rxtx are called. */
extern void rffc5071_tx(void); extern void rffc5071_tx(uint8_t);
extern void rffc5071_rx(void); extern void rffc5071_rx(uint8_t);
extern void rffc5071_rxtx(void); extern void rffc5071_rxtx(void);
extern void rffc5071_enable(void); extern void rffc5071_enable(void);
extern void rffc5071_disable(void); extern void rffc5071_disable(void);

View File

@ -311,6 +311,7 @@ void configure_sgpio_test_rx() {
int main(void) { int main(void) {
const uint32_t freq = 2700000000U; const uint32_t freq = 2700000000U;
uint8_t switchctrl = 0;
pin_setup(); pin_setup();
enable_1v8_power(); enable_1v8_power();
@ -326,8 +327,11 @@ int main(void) {
ssp1_set_mode_max2837(); ssp1_set_mode_max2837();
max2837_setup(); max2837_setup();
rffc5071_setup(); rffc5071_setup();
rffc5071_rx();
rffc5071_set_frequency(500, 0); // 500 MHz, 0 Hz (Hz ignored) rffc5071_set_frequency(500, 0); // 500 MHz, 0 Hz (Hz ignored)
#ifdef JAWBREAKER
switchctrl = (SWITCHCTRL_AMP_BYPASS | SWITCHCTRL_HP);
#endif
rffc5071_rx(switchctrl);
max2837_set_frequency(freq); max2837_set_frequency(freq);
max2837_start(); max2837_start();