altos: More radio hacking to try and generate a pure carrier.
authorKeith Packard <keithp@keithp.com>
Thu, 16 May 2013 04:04:10 +0000 (21:04 -0700)
committerKeith Packard <keithp@keithp.com>
Thu, 16 May 2013 04:04:10 +0000 (21:04 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
src/drivers/ao_cc1120.c

index f9729f666761976b26f77c29682ff88550f4d00b..a34e8115da420cc6b6912bdb93e93e902a7628ef 100644 (file)
@@ -329,6 +329,14 @@ static const uint16_t packet_setup[] = {
         CC1120_PREAMBLE_CFG1,  ((CC1120_PREAMBLE_CFG1_NUM_PREAMBLE_4_BYTES << CC1120_PREAMBLE_CFG1_NUM_PREAMBLE) |
                                 (CC1120_PREAMBLE_CFG1_PREAMBLE_WORD_AA << CC1120_PREAMBLE_CFG1_PREAMBLE_WORD)),
        CC1120_SOFT_TX_DATA_CFG,((0 << CC1120_SOFT_TX_DATA_CFG_SOFT_TX_DATA_EN)),
+       CC1120_MDMCFG1,         ((0 << CC1120_MDMCFG1_CARRIER_SENSE_GATE) |
+                                (1 << CC1120_MDMCFG1_FIFO_EN) |
+                                (0 << CC1120_MDMCFG1_MANCHESTER_EN) |
+                                (0 << CC1120_MDMCFG1_INVERT_DATA_EN) |
+                                (0 << CC1120_MDMCFG1_COLLISION_DETECT_EN) |
+                                (CC1120_MDMCFG1_DVGA_GAIN_9 << CC1120_MDMCFG1_DVGA_GAIN) |
+                                (0 << CC1120_MDMCFG1_SINGLE_ADC_EN)),
+       CC1120_MDMCFG0,         (0x5),
        AO_CC1120_MARC_GPIO_IOCFG,              CC1120_IOCFG_GPIO_CFG_MARC_MCU_WAKEUP,
 };
 
@@ -394,6 +402,14 @@ static const uint16_t rdf_setup[] = {
                                 (0 << CC1120_PKT_CFG0_UART_SWAP_EN)),
         CC1120_PREAMBLE_CFG1,  ((CC1120_PREAMBLE_CFG1_NUM_PREAMBLE_NONE << CC1120_PREAMBLE_CFG1_NUM_PREAMBLE) |
                                 (CC1120_PREAMBLE_CFG1_PREAMBLE_WORD_AA << CC1120_PREAMBLE_CFG1_PREAMBLE_WORD)),
+       CC1120_MDMCFG1,         ((0 << CC1120_MDMCFG1_CARRIER_SENSE_GATE) |
+                                (1 << CC1120_MDMCFG1_FIFO_EN) |
+                                (0 << CC1120_MDMCFG1_MANCHESTER_EN) |
+                                (0 << CC1120_MDMCFG1_INVERT_DATA_EN) |
+                                (0 << CC1120_MDMCFG1_COLLISION_DETECT_EN) |
+                                (CC1120_MDMCFG1_DVGA_GAIN_9 << CC1120_MDMCFG1_DVGA_GAIN) |
+                                (0 << CC1120_MDMCFG1_SINGLE_ADC_EN)),
+       CC1120_MDMCFG0,         (0x5),
        CC1120_SOFT_TX_DATA_CFG,((0 << CC1120_SOFT_TX_DATA_CFG_SOFT_TX_DATA_EN)),
 };
 
@@ -441,6 +457,14 @@ static const uint16_t aprs_setup[] = {
                                 (0 << CC1120_PKT_CFG1_APPEND_STATUS)),
         CC1120_PREAMBLE_CFG1,  ((CC1120_PREAMBLE_CFG1_NUM_PREAMBLE_NONE << CC1120_PREAMBLE_CFG1_NUM_PREAMBLE) |
                                 (CC1120_PREAMBLE_CFG1_PREAMBLE_WORD_AA << CC1120_PREAMBLE_CFG1_PREAMBLE_WORD)),
+       CC1120_MDMCFG1,         ((0 << CC1120_MDMCFG1_CARRIER_SENSE_GATE) |
+                                (1 << CC1120_MDMCFG1_FIFO_EN) |
+                                (0 << CC1120_MDMCFG1_MANCHESTER_EN) |
+                                (0 << CC1120_MDMCFG1_INVERT_DATA_EN) |
+                                (0 << CC1120_MDMCFG1_COLLISION_DETECT_EN) |
+                                (CC1120_MDMCFG1_DVGA_GAIN_9 << CC1120_MDMCFG1_DVGA_GAIN) |
+                                (0 << CC1120_MDMCFG1_SINGLE_ADC_EN)),
+       CC1120_MDMCFG0,         (0x5),
        CC1120_SOFT_TX_DATA_CFG,((0 << CC1120_SOFT_TX_DATA_CFG_SOFT_TX_DATA_EN)),
 };
 
@@ -459,7 +483,7 @@ static const uint16_t test_setup[] = {
        CC1120_DRATE1,          ((APRS_DRATE_M >> 8) & 0xff),
        CC1120_DRATE0,          ((APRS_DRATE_M >> 0) & 0xff),
        CC1120_PKT_CFG2,        ((CC1120_PKT_CFG2_CCA_MODE_ALWAYS_CLEAR << CC1120_PKT_CFG2_CCA_MODE) |
-                                (CC1120_PKT_CFG2_PKT_FORMAT_NORMAL << CC1120_PKT_CFG2_PKT_FORMAT)),
+                                (CC1120_PKT_CFG2_PKT_FORMAT_TRANSPARENT_SERIAL << CC1120_PKT_CFG2_PKT_FORMAT)),
        CC1120_PKT_CFG1,        ((0 << CC1120_PKT_CFG1_WHITE_DATA) |
                                 (CC1120_PKT_CFG1_ADDR_CHECK_CFG_NONE << CC1120_PKT_CFG1_ADDR_CHECK_CFG) |
                                 (CC1120_PKT_CFG1_CRC_CFG_DISABLED << CC1120_PKT_CFG1_CRC_CFG) |
@@ -467,6 +491,14 @@ static const uint16_t test_setup[] = {
         CC1120_PREAMBLE_CFG1,  ((CC1120_PREAMBLE_CFG1_NUM_PREAMBLE_NONE << CC1120_PREAMBLE_CFG1_NUM_PREAMBLE) |
                                 (CC1120_PREAMBLE_CFG1_PREAMBLE_WORD_AA << CC1120_PREAMBLE_CFG1_PREAMBLE_WORD)),
        CC1120_SOFT_TX_DATA_CFG,((1 << CC1120_SOFT_TX_DATA_CFG_SOFT_TX_DATA_EN)),
+       CC1120_MDMCFG1,         ((0 << CC1120_MDMCFG1_CARRIER_SENSE_GATE) |
+                                (0 << CC1120_MDMCFG1_FIFO_EN) |
+                                (0 << CC1120_MDMCFG1_MANCHESTER_EN) |
+                                (0 << CC1120_MDMCFG1_INVERT_DATA_EN) |
+                                (0 << CC1120_MDMCFG1_COLLISION_DETECT_EN) |
+                                (CC1120_MDMCFG1_DVGA_GAIN_9 << CC1120_MDMCFG1_DVGA_GAIN) |
+                                (0 << CC1120_MDMCFG1_SINGLE_ADC_EN)),
+       CC1120_MDMCFG0,         (0x45),
        CC1120_SOFT_TX_DATA_IN, 0,
 };
 
@@ -503,7 +535,7 @@ static uint16_t ao_radio_mode;
 #define AO_RADIO_MODE_APRS_BUF         (AO_RADIO_MODE_BITS_APRS | AO_RADIO_MODE_BITS_INFINITE | AO_RADIO_MODE_BITS_TX_BUF)
 #define AO_RADIO_MODE_APRS_LAST_BUF    (AO_RADIO_MODE_BITS_APRS | AO_RADIO_MODE_BITS_FIXED | AO_RADIO_MODE_BITS_TX_BUF)
 #define AO_RADIO_MODE_APRS_FINISH      (AO_RADIO_MODE_BITS_APRS | AO_RADIO_MODE_BITS_FIXED | AO_RADIO_MODE_BITS_TX_FINISH)
-#define AO_RADIO_MODE_TEST             (AO_RADIO_MODE_BITS_TEST)
+#define AO_RADIO_MODE_TEST             (AO_RADIO_MODE_BITS_TEST | AO_RADIO_MODE_BITS_INFINITE | AO_RADIO_MODE_BITS_TX_BUF)
 
 static void
 ao_radio_set_mode(uint16_t new_mode)
@@ -541,6 +573,10 @@ ao_radio_set_mode(uint16_t new_mode)
                for (i = 0; i < sizeof (aprs_setup) / sizeof (aprs_setup[0]); i += 2)
                        ao_radio_reg_write(aprs_setup[i], aprs_setup[i+1]);
 
+       if (changes & AO_RADIO_MODE_BITS_TEST)
+               for (i = 0; i < sizeof (test_setup) / sizeof (test_setup[0]); i += 2)
+                       ao_radio_reg_write(test_setup[i], test_setup[i+1]);
+
        if (changes & AO_RADIO_MODE_BITS_INFINITE)
                ao_radio_reg_write(CC1120_PKT_CFG0, AO_PKT_CFG0_INFINITE);
 
@@ -691,12 +727,6 @@ ao_radio_test_cmd(void)
                ao_radio_get(0xff);
                ao_radio_set_mode(AO_RADIO_MODE_TEST);
                ao_radio_strobe(CC1120_STX);
-               { int i;
-                       for (i = 0; i < 10; i++) {
-                               ao_delay(AO_MS_TO_TICKS(100));
-                               ao_radio_reg_write(CC1120_SOFT_TX_DATA_IN, 0);
-                       }
-               }
 #if CC1120_TRACE
                { int t; 
                        for (t = 0; t < 10; t++) {