summaryrefslogtreecommitdiff
path: root/software/rda1846dongle
diff options
context:
space:
mode:
Diffstat (limited to 'software/rda1846dongle')
-rw-r--r--software/rda1846dongle/Makefile20
-rw-r--r--software/rda1846dongle/rda1846.c107
-rw-r--r--software/rda1846dongle/rda1846.h3
-rw-r--r--software/rda1846dongle/rda1846_defines.h14
-rw-r--r--software/rda1846dongle/rda1846dongle.c8
5 files changed, 92 insertions, 60 deletions
diff --git a/software/rda1846dongle/Makefile b/software/rda1846dongle/Makefile
index f9715c2..8f7dc3c 100644
--- a/software/rda1846dongle/Makefile
+++ b/software/rda1846dongle/Makefile
@@ -1,23 +1,31 @@
##
-## spreadspace teensy utils
+## mur.sat
##
+## 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.
##
-## Copyright (C) 2011 Christian Pointner <equinox@spreadspace.org>
+## Please visit the project hompage at sat.mur.at for further information.
+##
##
-## This file is part of spreadspace teensy utils.
+## Copyright (C) 2011 Christian Pointner <equinox@mur.at>
+##
+## This file is part of mur.sat.
##
-## spreadspace teensy utils is free software: you can redistribute it and/or modify
+## 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 teensy 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 teensy utils. If not, see <http://www.gnu.org/licenses/>.
+## along with mur.sat. If not, see <http://www.gnu.org/licenses/>.
##
NAME := rda1846dongle
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;
diff --git a/software/rda1846dongle/rda1846.h b/software/rda1846dongle/rda1846.h
index c1db4a1..12b2c5a 100644
--- a/software/rda1846dongle/rda1846.h
+++ b/software/rda1846dongle/rda1846.h
@@ -33,9 +33,10 @@
#ifndef MURSAT_rda1846_h_INCLUDED
#define MURSAT_rda1846_h_INCLUDED
-void rda1846_soft_reset(void);
void rda1846_init(void);
+void rda1846_reg_init(void);
+void rda1846_soft_reset(void);
void rda1846_powerdown(void);
void rda1846_wakeup(void);
diff --git a/software/rda1846dongle/rda1846_defines.h b/software/rda1846dongle/rda1846_defines.h
index a6281dd..bfcc5e8 100644
--- a/software/rda1846dongle/rda1846_defines.h
+++ b/software/rda1846dongle/rda1846_defines.h
@@ -77,11 +77,11 @@
// init values
-#define RDA1846_RF_BAND_2M 0x00C0 // select 2m Band
-#define RDA1846_RF_BAND_70CM 0x0000 // select 70cm Band
+#define RDA1846_RF_BAND_2M 0x00E4 // select 2m Band
+#define RDA1846_RF_BAND_70CM 0x0024 // select 70cm Band
#define RDA1846_XTAL_FREQ 12288 // 12.288 MHz
#define RDA1846_ADCLK_FREQ 6144 // 12.288/2 MHz
-#define RDA1846_CLK_MODE (1<<0) // 12-14 MHz
+#define RDA1846_CLK_MODE 0x0F11 // 12-14 MHz
// ctl
@@ -170,10 +170,10 @@
// tx voice channel
-#define RDA1846_TX_VOICE_MIC 0x0000
-#define RDA1846_TX_VOICE_TONE2 0x4000
-#define RDA1846_TX_VOICE_GPIO1 0x8000
-#define RDA1846_TX_VOICE_NONE 0xC000
+#define RDA1846_TX_VOICE_MIC 0x0958
+#define RDA1846_TX_VOICE_TONE2 0x4958
+#define RDA1846_TX_VOICE_GPIO1 0x8958
+#define RDA1846_TX_VOICE_NONE 0xC958
// DTMF ctl
diff --git a/software/rda1846dongle/rda1846dongle.c b/software/rda1846dongle/rda1846dongle.c
index 757356d..310e2ad 100644
--- a/software/rda1846dongle/rda1846dongle.c
+++ b/software/rda1846dongle/rda1846dongle.c
@@ -29,6 +29,7 @@
* along with mur.sat. If not, see <http://www.gnu.org/licenses/>.
*
*/
+
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
@@ -129,7 +130,7 @@ static void handle_cmd(uint8_t cmd)
case '!': reset2bootloader(); break;
case 'r': rda1846_soft_reset(); printf("soft resetting RDA1846.\r\n"); break;
- case 'i': rda1846_init(); printf("initializing RDA1846.\r\n"); break;
+ case 'i': rda1846_reg_init(); printf("initializing RDA1846.\r\n"); break;
case 'F': set_default_freq(); break;
case 'g': rda1846_gpio_off(); printf("GPIO off\r\n"); break;
@@ -139,6 +140,7 @@ static void handle_cmd(uint8_t cmd)
case 's': print_status(); break;
case 'd': print_dtmf(); break;
case 'D': rda1846_dump_register(); break;
+
case 'p': rda1846_powerdown(); break;
case 'P': rda1846_wakeup(); break;
@@ -160,8 +162,10 @@ int main(void)
cpu_init();
led_init();
usbio_init();
- sei();
+ rda1846_init();
+
+ sei();
for(;;) {
int16_t BytesReceived = usbio_bytes_received();
while(BytesReceived > 0) {