diff options
Diffstat (limited to 'software/rda1846dongle/rda1846.c')
-rw-r--r-- | software/rda1846dongle/rda1846.c | 107 |
1 files changed, 63 insertions, 44 deletions
diff --git a/software/rda1846dongle/rda1846.c b/software/rda1846dongle/rda1846.c index fec9c05..eeb5ba1 100644 --- a/software/rda1846dongle/rda1846.c +++ b/software/rda1846dongle/rda1846.c @@ -1,24 +1,33 @@ /* - * spreadspace avr utils * + * mur.sat * - * Copyright (C) 2013 Christian Pointner <equinox@spreadspace.org> - * Othmar Gsenger <otti@wirdorange.org> + * Somewhen in the year 2012, mur.at will have a nano satellite launched + * into a low earth orbit (310 km above the surface of our planet). The + * satellite itself is a TubeSat personal satellite kit, developed and + * launched by interorbital systems. mur.sat is a joint venture of mur.at, + * ESC im Labor and realraum. * - * This file is part of spreadspace avr utils. + * Please visit the project hompage at sat.mur.at for further information. * - * spreadspace avr utils is free software: you can redistribute it and/or modify + * + * Copyright (C) 2013 Christian Pointner <equinox@mur.at> + * + * This file is part of mur.sat. + * + * mur.sat is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * - * spreadspace avr utils is distributed in the hope that it will be useful, + * mur.sat is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. + * along with mur.sat. If not, see <http://www.gnu.org/licenses/>. + * */ #include "LUFA/Drivers/Peripheral/TWI.h" @@ -109,15 +118,17 @@ static uint8_t rda1846_read_register(const uint8_t addr, uint16_t* data) } -void rda1846_soft_reset(void) -{ - rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_SOFT_RST); -} void rda1846_init(void) { TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 200000)); - // switch to 2m Band (134 ~ 174 MHz) +} + +void rda1846_reg_init(void) +{ + rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_SOFT_RST); + rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_PDN); + rda1846_write_register(RDA1846_REG_RF_BAND, RDA1846_RF_BAND_2M); // rda1846_write_register(RDA1846_REG_RF_BAND, RDA1846_RF_BAND_70CM); @@ -126,11 +137,12 @@ void rda1846_init(void) rda1846_write_register(RDA1846_REG_ADCLK, RDA1846_ADCLK_FREQ); rda1846_write_register(RDA1846_REG_CLK_MODE, RDA1846_CLK_MODE); - rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_CH_12K5 | RDA1846_CTL_RX_M_TX_M); +// rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_CH_12K5 | RDA1846_CTL_RX_M_TX_M | RDA1846_CTL_PDN); + rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_CH_25K | RDA1846_CTL_RX_M_TX_M | RDA1846_CTL_PDN); // rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_NONE); -// rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_MIC); - rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_TONE2); + rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_MIC); +// rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_TONE2); // rda1846_write_register(RDA1846_REG_DTMF_CTL, RDA1846_DTMF_DUAL | RDA1846_DTMF_EN); // rda1846_write_register(RDA1846_REG_INT, RDA1846_INT_DTMF_IDLE); @@ -138,35 +150,9 @@ void rda1846_init(void) rda1846_gpio_default(); } -void rda1846_gpio_default(void) -{ - rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_VOX | RDA1846_GPIO_6_SQ | - RDA1846_GPIO_5_TXON_RF | RDA1846_GPIO_4_RXON_RF | - RDA1846_GPIO_2_INT); -} - -void rda1846_gpio_AA(void) -{ - rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_HIGH | RDA1846_GPIO_6_LOW | - RDA1846_GPIO_5_HIGH | RDA1846_GPIO_4_LOW | - RDA1846_GPIO_3_HIGH | RDA1846_GPIO_2_LOW | - RDA1846_GPIO_1_HIGH | RDA1846_GPIO_0_LOW); -} - -void rda1846_gpio_55(void) -{ - rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_LOW | RDA1846_GPIO_6_HIGH | - RDA1846_GPIO_5_LOW | RDA1846_GPIO_4_HIGH | - RDA1846_GPIO_3_LOW | RDA1846_GPIO_2_HIGH | - RDA1846_GPIO_1_LOW | RDA1846_GPIO_0_HIGH); -} - -void rda1846_gpio_off(void) +void rda1846_soft_reset(void) { - rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_HI_Z | RDA1846_GPIO_6_HI_Z | - RDA1846_GPIO_5_HI_Z | RDA1846_GPIO_4_HI_Z | - RDA1846_GPIO_3_HI_Z | RDA1846_GPIO_2_HI_Z | - RDA1846_GPIO_1_HI_Z | RDA1846_GPIO_0_HI_Z); + rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_SOFT_RST); } void rda1846_powerdown(void) @@ -222,6 +208,39 @@ void rda1846_transmit(void) rda1846_write_register(RDA1846_REG_CTL, data); } + +void rda1846_gpio_default(void) +{ + rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_VOX | RDA1846_GPIO_6_SQ | + RDA1846_GPIO_5_TXON_RF | RDA1846_GPIO_4_RXON_RF | + RDA1846_GPIO_2_INT); +} + +void rda1846_gpio_AA(void) +{ + rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_HIGH | RDA1846_GPIO_6_LOW | + RDA1846_GPIO_5_HIGH | RDA1846_GPIO_4_LOW | + RDA1846_GPIO_3_HIGH | RDA1846_GPIO_2_LOW | + RDA1846_GPIO_1_HIGH | RDA1846_GPIO_0_LOW); +} + +void rda1846_gpio_55(void) +{ + rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_LOW | RDA1846_GPIO_6_HIGH | + RDA1846_GPIO_5_LOW | RDA1846_GPIO_4_HIGH | + RDA1846_GPIO_3_LOW | RDA1846_GPIO_2_HIGH | + RDA1846_GPIO_1_LOW | RDA1846_GPIO_0_HIGH); +} + +void rda1846_gpio_off(void) +{ + rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_HI_Z | RDA1846_GPIO_6_HI_Z | + RDA1846_GPIO_5_HI_Z | RDA1846_GPIO_4_HI_Z | + RDA1846_GPIO_3_HI_Z | RDA1846_GPIO_2_HI_Z | + RDA1846_GPIO_1_HI_Z | RDA1846_GPIO_0_HI_Z); +} + + int16_t rda1846_get_rssi(void) { uint16_t data; @@ -289,7 +308,7 @@ uint8_t rda1846_set_freq_kHz(int32_t freq) /* return 1; */ freq = freq<<3; - uint8_t ret = rda1846_write_register(RDA1846_REG_FREQH, ((freq>>16) & 0x0000FFFF)); + uint8_t ret = rda1846_write_register(RDA1846_REG_FREQH, ((freq>>16) & 0x00003FFF)); if(ret) return 1; |