fix(rf_path): First version of rad10 path

This commit is contained in:
Tobias Schneider
2015-06-07 03:35:59 +02:00
parent d3cb14650d
commit 9e6ae19e10
3 changed files with 91 additions and 48 deletions

View File

@ -645,10 +645,10 @@ void disable_rf_power(void) {
#ifdef RAD10 #ifdef RAD10
void enable_rf_power(void) { void enable_rf_power(void) {
gpio_set(PORT_VDD_ENABLE, PIN_VDD_ENABLE); gpio_set(PORT_VAA_ENABLE, PIN_VAA_ENABLE);
} }
void disable_rf_power(void) { void disable_rf_power(void) {
gpio_clear(PORT_VDD_ENABLE, PIN_VDD_ENABLE); gpio_clear(PORT_VAA_ENABLE, PIN_VAA_ENABLE);
} }
#endif #endif

View File

@ -164,6 +164,7 @@ extern "C"
#define SCU_MIXER_SCLK (P2_6) /* GPIO5[6] on P2_6 */ #define SCU_MIXER_SCLK (P2_6) /* GPIO5[6] on P2_6 */
#define SCU_MIXER_SDATA (P6_4) /* GPIO3[3] on P6_4 */ #define SCU_MIXER_SDATA (P6_4) /* GPIO3[3] on P6_4 */
#define SCU_MIXER_LE (P5_5) /* GPIO2[14] on P5_5 */ #define SCU_MIXER_LE (P5_5) /* GPIO2[14] on P5_5 */
#define SCU_MIXER_EN (P6_8) /* GPIO5[16] on P6_8 */
#endif #endif
/* RF LDO control */ /* RF LDO control */
@ -172,10 +173,15 @@ extern "C"
#endif #endif
/* RF supply (VAA) control */ /* RF supply (VAA) control */
#if (defined HACKRF_ONE || defined RAD10) #ifdef HACKRF_ONE
#define SCU_NO_VAA_ENABLE (P5_0) /* GPIO2[9] on P5_0 */ #define SCU_NO_VAA_ENABLE (P5_0) /* GPIO2[9] on P5_0 */
#endif #endif
#ifdef RAD10
#define SCU_VAA_ENABLE (P5_0) /* GPIO2[9] on P5_0 */
#endif
/* SPI flash */ /* SPI flash */
#define SCU_SSP0_MISO (P3_6) #define SCU_SSP0_MISO (P3_6)
#define SCU_SSP0_MOSI (P3_7) #define SCU_SSP0_MOSI (P3_7)
@ -211,8 +217,7 @@ extern "C"
#define SCU_LOW_HIGH_FILT (P5_2) /* GPIO2[11] on P5_2 */ #define SCU_LOW_HIGH_FILT (P5_2) /* GPIO2[11] on P5_2 */
#define SCU_LOW_HIGH_FILT_N (P5_3) /* GPIO2[12] on P5_3 */ #define SCU_LOW_HIGH_FILT_N (P5_3) /* GPIO2[12] on P5_3 */
#define SCU_TX_AMP (P5_6) /* GPIO2[15] on P5_6 */ #define SCU_TX_AMP (P5_6) /* GPIO2[15] on P5_6 */
#define SCU_RX_LNA (P5_7) /* GPIO5[15] on P6_7 */ #define SCU_RX_LNA (P6_7) /* GPIO5[15] on P6_7 */
#define SCU_MIXER_EN (P6_8) /* GPIO5[16] on P6_8 */
#endif #endif
/* TODO add other Pins */ /* TODO add other Pins */
@ -318,6 +323,8 @@ extern "C"
#define PORT_MIXER_SDATA (GPIO3) #define PORT_MIXER_SDATA (GPIO3)
#define PIN_MIXER_LE (BIT14) /* GPIO2[14] on P5_5 */ #define PIN_MIXER_LE (BIT14) /* GPIO2[14] on P5_5 */
#define PORT_MIXER_LE (GPIO2) #define PORT_MIXER_LE (GPIO2)
#define PIN_MIXER_EN (BIT16) /* GPIO5[16] on P6_8 */
#define PORT_MIXER_EN (GPIO5)
#endif #endif
#ifdef JAWBREAKER #ifdef JAWBREAKER
@ -331,8 +338,8 @@ extern "C"
#endif #endif
#ifdef RAD10 #ifdef RAD10
#define PIN_VDD_ENABLE (BIT9) /* GPIO2[9] on P5_0 */ #define PIN_VAA_ENABLE (BIT9) /* GPIO2[9] on P5_0 */
#define PORT_VDD_ENABLE (GPIO2) /* PORT for VDD_ENABLE */ #define PORT_VAA_ENABLE (GPIO2) /* PORT for VAA_ENABLE */
#endif #endif
#define PIN_FLASH_HOLD (BIT14) /* GPIO1[14] on P3_4 */ #define PIN_FLASH_HOLD (BIT14) /* GPIO1[14] on P3_4 */
@ -392,8 +399,6 @@ extern "C"
#define PORT_TX_AMP (GPIO2) #define PORT_TX_AMP (GPIO2)
#define PIN_RX_LNA (GPIOPIN15) /* GPIO5[15] on P6_7 */ #define PIN_RX_LNA (GPIOPIN15) /* GPIO5[15] on P6_7 */
#define PORT_RX_LNA (GPIO5) #define PORT_RX_LNA (GPIO5)
#define PIN_MIXER_EN (GPIOPIN16) /* GPIO5[16] on P6_8 */
#define PORT_MIXER_EN (GPIO5)
#endif #endif
/* GPIO Input */ /* GPIO Input */
@ -454,7 +459,7 @@ bool sample_rate_frac_set(uint32_t rate_num, uint32_t rate_denom);
bool sample_rate_set(const uint32_t sampling_rate_hz); bool sample_rate_set(const uint32_t sampling_rate_hz);
bool baseband_filter_bandwidth_set(const uint32_t bandwidth_hz); bool baseband_filter_bandwidth_set(const uint32_t bandwidth_hz);
#ifdef HACKRF_ONE #if (defined HACKRF_ONE || defined RAD10)
void enable_rf_power(void); void enable_rf_power(void);
void disable_rf_power(void); void disable_rf_power(void);
#endif #endif

View File

@ -96,50 +96,52 @@ static void switchctrl_set_rad10(uint8_t ctrl) {
gpio_set(PORT_TX_RX, PIN_TX_RX); gpio_set(PORT_TX_RX, PIN_TX_RX);
} }
#if 0
if (ctrl & SWITCHCTRL_MIX_BYPASS) { if (ctrl & SWITCHCTRL_MIX_BYPASS) {
gpio_set(PORT_MIX_BYPASS, PIN_MIX_BYPASS); gpio_clear(PORT_BY_MIX, PIN_BY_MIX);
gpio_clear(PORT_NO_MIX_BYPASS, PIN_NO_MIX_BYPASS); gpio_set(PORT_BY_MIX_N, PIN_BY_MIX_N);
if (ctrl & SWITCHCTRL_TX) {
gpio_set(PORT_TX_MIX_BP, PIN_TX_MIX_BP);
gpio_clear(PORT_RX_MIX_BP, PIN_RX_MIX_BP);
} else {
gpio_clear(PORT_TX_MIX_BP, PIN_TX_MIX_BP);
gpio_set(PORT_RX_MIX_BP, PIN_RX_MIX_BP);
}
} else { } else {
gpio_clear(PORT_MIX_BYPASS, PIN_MIX_BYPASS); gpio_set(PORT_BY_MIX, PIN_BY_MIX);
gpio_set(PORT_NO_MIX_BYPASS, PIN_NO_MIX_BYPASS); gpio_clear(PORT_BY_MIX_N, PIN_BY_MIX_N);
gpio_clear(PORT_TX_MIX_BP, PIN_TX_MIX_BP);
gpio_clear(PORT_RX_MIX_BP, PIN_RX_MIX_BP);
} }
if (ctrl & SWITCHCTRL_HP) { if (ctrl & SWITCHCTRL_HP) {
gpio_set(PORT_HP, PIN_HP); gpio_set(PORT_LOW_HIGH_FILT, PIN_LOW_HIGH_FILT);
gpio_clear(PORT_LP, PIN_LP); gpio_clear(PORT_LOW_HIGH_FILT_N, PIN_LOW_HIGH_FILT_N);
} else { } else {
gpio_clear(PORT_HP, PIN_HP); gpio_clear(PORT_LOW_HIGH_FILT, PIN_LOW_HIGH_FILT);
gpio_set(PORT_LP, PIN_LP); gpio_set(PORT_LOW_HIGH_FILT_N, PIN_LOW_HIGH_FILT_N);
} }
if (ctrl & SWITCHCTRL_AMP_BYPASS) { if (ctrl & SWITCHCTRL_AMP_BYPASS) {
gpio_set(PORT_AMP_BYPASS, PIN_AMP_BYPASS); gpio_clear(PORT_BY_AMP, PIN_BY_AMP);
gpio_set(PORT_BY_AMP_N, PIN_BY_AMP_N);
gpio_clear(PORT_TX_RX, PIN_TX_RX);
gpio_set(PORT_TX_RX_N, PIN_TX_RX_N);
gpio_clear(PORT_TX_AMP, PIN_TX_AMP); gpio_clear(PORT_TX_AMP, PIN_TX_AMP);
gpio_set(PORT_NO_TX_AMP_PWR, PIN_NO_TX_AMP_PWR); gpio_clear(PORT_RX_LNA, PIN_RX_LNA);
gpio_clear(PORT_RX_AMP, PIN_RX_AMP);
gpio_set(PORT_NO_RX_AMP_PWR, PIN_NO_RX_AMP_PWR);
} else if (ctrl & SWITCHCTRL_TX) { } else if (ctrl & SWITCHCTRL_TX) {
gpio_clear(PORT_AMP_BYPASS, PIN_AMP_BYPASS); gpio_set(PORT_BY_AMP, PIN_BY_AMP);
gpio_clear(PORT_BY_AMP_N, PIN_BY_AMP_N);
gpio_clear(PORT_TX_RX, PIN_TX_RX);
gpio_set(PORT_TX_RX_N, PIN_TX_RX_N);
gpio_set(PORT_TX_AMP, PIN_TX_AMP); gpio_set(PORT_TX_AMP, PIN_TX_AMP);
gpio_clear(PORT_NO_TX_AMP_PWR, PIN_NO_TX_AMP_PWR); gpio_clear(PORT_RX_LNA, PIN_RX_LNA);
gpio_clear(PORT_RX_AMP, PIN_RX_AMP);
gpio_set(PORT_NO_RX_AMP_PWR, PIN_NO_RX_AMP_PWR);
} else { } else {
gpio_clear(PORT_AMP_BYPASS, PIN_AMP_BYPASS); gpio_set(PORT_BY_AMP, PIN_BY_AMP);
gpio_clear(PORT_BY_AMP_N, PIN_BY_AMP_N);
gpio_set(PORT_TX_RX, PIN_TX_RX);
gpio_clear(PORT_TX_RX_N, PIN_TX_RX_N);
gpio_clear(PORT_TX_AMP, PIN_TX_AMP); gpio_clear(PORT_TX_AMP, PIN_TX_AMP);
gpio_set(PORT_NO_TX_AMP_PWR, PIN_NO_TX_AMP_PWR); gpio_set(PORT_RX_LNA, PIN_RX_LNA);
gpio_set(PORT_RX_AMP, PIN_RX_AMP);
gpio_clear(PORT_NO_RX_AMP_PWR, PIN_NO_RX_AMP_PWR);
} }
/* /*
@ -147,17 +149,17 @@ static void switchctrl_set_rad10(uint8_t ctrl) {
* used to explicitly turn off power to the amplifiers while AMP_BYPASS * used to explicitly turn off power to the amplifiers while AMP_BYPASS
* is unset: * is unset:
*/ */
if (ctrl & SWITCHCTRL_NO_TX_AMP_PWR) if (ctrl & SWITCHCTRL_NO_TX_AMP_PWR) {
gpio_set(PORT_NO_TX_AMP_PWR, PIN_NO_TX_AMP_PWR); gpio_clear(PORT_TX_AMP, PIN_TX_AMP);
if (ctrl & SWITCHCTRL_NO_RX_AMP_PWR) }
gpio_set(PORT_NO_RX_AMP_PWR, PIN_NO_RX_AMP_PWR); if (ctrl & SWITCHCTRL_NO_RX_AMP_PWR) {
gpio_clear(PORT_RX_LNA, PIN_RX_LNA);
}
if (ctrl & SWITCHCTRL_ANT_PWR) { if (ctrl & SWITCHCTRL_ANT_PWR) {
mixer_set_gpo(0x00); /* turn on antenna power by clearing GPO1 */ // TODO
} else {
mixer_set_gpo(0x01); /* turn off antenna power by setting GPO1 */
} }
#endif
} }
#endif #endif
@ -286,6 +288,42 @@ void rf_path_pin_setup() {
/* Safe state: start with VAA turned off: */ /* Safe state: start with VAA turned off: */
disable_rf_power(); disable_rf_power();
#endif #endif
#ifdef RAD10
/* Configure RF switch control signals */
scu_pinmux(SCU_BY_AMP, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_BY_AMP_N, SCU_GPIO_FAST | SCU_CONF_FUNCTION4);
scu_pinmux(SCU_TX_RX, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_TX_RX_N, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_BY_MIX, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_BY_MIX_N, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_LOW_HIGH_FILT, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_LOW_HIGH_FILT_N,SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_TX_AMP, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
scu_pinmux(SCU_RX_LNA, SCU_GPIO_FAST | SCU_CONF_FUNCTION4);
/* Configure RF power supply (VAA) switch */
scu_pinmux(SCU_VAA_ENABLE, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
/* Configure RF switch control signals as outputs */
GPIO0_DIR |= PIN_TX_RX;
GPIO1_DIR |= PIN_BY_AMP | PIN_TX_RX_N | PIN_BY_MIX;
GPIO2_DIR |= PIN_BY_MIX_N | PIN_LOW_HIGH_FILT | PIN_LOW_HIGH_FILT_N | PIN_TX_AMP;
GPIO5_DIR |= PIN_BY_AMP_N | PIN_RX_LNA;
/*
* Safe (initial) switch settings turn off both amplifiers and antenna port
* power and enable both amp bypass and mixer bypass.
*/
switchctrl_set(SWITCHCTRL_AMP_BYPASS | SWITCHCTRL_MIX_BYPASS);
/* Configure RF power supply (VAA) switch control signal as output */
GPIO_DIR(PORT_VAA_ENABLE) |= PIN_VAA_ENABLE;
/* Safe state: start with VAA turned off: */
disable_rf_power();
#endif
} }
void rf_path_init(void) { void rf_path_init(void) {