PTT control working on a FT-817
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 22 Sep 2014 06:25:15 +0000 (06:25 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 22 Sep 2014 06:25:15 +0000 (06:25 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1848 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/stm32/Makefile
codec2-dev/stm32/inc/sm1000_leds_switches.h
codec2-dev/stm32/src/adcdac_ut.c
codec2-dev/stm32/src/sm1000_leds_switches.c
codec2-dev/stm32/src/sm1000_main.c

index 8915dec6b7a7e9708e23006be591d0aff27a5f46..b19722973a09bfea783bcaa10219277bdbd6dc5a 100644 (file)
@@ -167,6 +167,7 @@ src/init.c
 
 adcdac_ut.elf: $(ADCDAC_UT_SRCS)
        $(CC) $(CFLAGS) -O0 $^ -o $@ $(LIBPATHS) $(LIBS)
+       $(OBJCOPY) -O binary adcdac_ut.elf adcdac_ut.bin
 
 DAC_PLAY_SRCS=\
 src/dac_play.c \
index 12542ce360fd0ba856118631e33daf4e35eaabed..c5ba89535c45fb86fd54ef056f6673d39af5d00c 100644 (file)
@@ -34,6 +34,7 @@ void led_pwr(int state);
 void led_ptt(int state);
 void led_rt(int state);
 void led_err(int state);
+void not_cptt(int state);
 
 int switch_ptt(void);
 int switch_select(void);
index f18693ec9504381377de7cdb798f5fefcf3c864e..5901eea755e40bf4d1bd0b9ebe0a968394586597 100644 (file)
@@ -53,7 +53,7 @@ int main(void) {
 \r
         /* keep DAC FIFOs topped up */\r
 \r
-        while(adc2_read(buf, SINE_SAMPLES) == -1);\r
+        while(adc1_read(buf, SINE_SAMPLES) == -1);\r
         dac2_write(buf, SINE_SAMPLES);\r
     }\r
    \r
index bb2ab80108fef7bf18cb448053d79c84f6df502e..f936ca22d4c13a532e7cc6130d171a73ac8cc4ae 100644 (file)
@@ -25,6 +25,7 @@
   along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
 
+#define _CPTT          GPIO_Pin_10
 #define LED_PWR        GPIO_Pin_12
 #define LED_PTT        GPIO_Pin_13
 #define LED_RT         GPIO_Pin_14
@@ -44,7 +45,7 @@ void sm1000_leds_switches_init(void) {
 
     /* output pins */
 
-    GPIO_InitStruct.GPIO_Pin = LED_PWR | LED_PTT | LED_RT | LED_ERR;
+    GPIO_InitStruct.GPIO_Pin = LED_PWR | LED_PTT | LED_RT | LED_ERR | _CPTT;
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;                 
     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;     
     GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;         
@@ -58,7 +59,7 @@ void sm1000_leds_switches_init(void) {
     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 
     GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; /* we have our own external pull ups */      
     GPIO_Init(GPIOD, &GPIO_InitStruct);                
- }
+}
 
 void led_pwr(int state) {
     if (state)
@@ -88,6 +89,13 @@ void led_err(int state) {
         GPIOD->ODR &= ~(1 << 15);
 }
 
+void not_cptt(int state) {
+    if (state)
+        GPIOD->ODR |= (1 << 10);
+    else
+        GPIOD->ODR &= ~(1 << 10);
+}
+
 int switch_ptt(void) {
     return GPIOD->IDR & (1 << 7);
 }
index 147dad6d316509071bbb6ab1f4e273eb2f52e818..544306c78121325bb18f9f8f57e8e6bd103af3c7 100644 (file)
@@ -41,7 +41,7 @@ int main(void) {
     short          adc8k[FREEDV_NSAMPLES];\r
     short          dac8k[FDMDV_OS_TAPS_8K+FREEDV_NSAMPLES];\r
  \r
-    int    nin, nout, i;\r
+    int    nin, nout, i, analog_mode;\r
 \r
     /* init all the drivers for various peripherals */\r
 \r
@@ -50,10 +50,9 @@ int main(void) {
     adc_open(4*ADC_BUF_SZ);\r
     f = freedv_open(FREEDV_MODE_1600);\r
 \r
-    /* LEDs into a known state */\r
-\r
-    //led_pwr(1); led_ptt(0); led_rt(0); led_err(0);\r
+    /* put outputs into a known state */\r
 \r
+    led_pwr(1); led_ptt(0); led_rt(0); led_err(0); not_cptt(1);\r
 \r
     /* clear filter memories */\r
 \r
@@ -61,9 +60,18 @@ int main(void) {
        adc16k[i] = 0.0;\r
     for(i=0; i<FDMDV_OS_TAPS_8K; i++)\r
        dac8k[i] = 0.0;\r
-    \r
+\r
+    analog_mode = 1;\r
+\r
     while(1) {\r
 \r
+        if (switch_select()) {\r
+            if (analog_mode)\r
+                analog_mode = 0;\r
+            else\r
+                analog_mode = 1;\r
+        }\r
+\r
         if (switch_ptt()) {\r
 \r
             /* Transmit -------------------------------------------------------------------------*/\r
@@ -76,14 +84,19 @@ int main(void) {
                 fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], FREEDV_NSAMPLES);\r
 \r
                 freedv_tx(f, &dac8k[FDMDV_OS_TAPS_8K], adc8k);\r
-                //for(i=0; i<FREEDV_NSAMPLES; i++)\r
-                //    dac8k[FDMDV_OS_TAPS_8K+i] = adc8k[i];\r
+                \r
+                /* force analog bypass when select down */\r
+                \r
+                if (analog_mode) {\r
+                    for(i=0; i<FREEDV_NSAMPLES; i++)\r
+                        dac8k[FDMDV_OS_TAPS_8K+i] = adc8k[i];\r
+                }\r
 \r
                 fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], FREEDV_NSAMPLES);              \r
 \r
                 dac1_write(dac16k, FREEDV_NSAMPLES_16K);\r
 \r
-                led_ptt(1); led_rt(0); led_err(0);\r
+                led_ptt(1); led_rt(0); led_err(0); not_cptt(0);\r
                 GPIOE->ODR &= ~(1 << 3);\r
             }\r
 \r
@@ -92,22 +105,41 @@ int main(void) {
             \r
             /* Receive --------------------------------------------------------------------------*/\r
 \r
+            not_cptt(1); led_ptt(0); \r
+\r
             /* ADC1 is the demod in signal from the radio rx, DAC2 is the SM1000 speaker */\r
 \r
-            nin = freedv_nin(f);   \r
-            nout = nin;\r
-            f->total_bit_errors = 0;\r
+            if (analog_mode) {\r
 \r
-            if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], 2*nin) == 0) {\r
-                GPIOE->ODR = (1 << 3);\r
-                fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], nin);\r
-                nout = freedv_rx(f, &dac8k[FDMDV_OS_TAPS_8K], adc8k);\r
-                //for(i=0; i<FREEDV_NSAMPLES; i++)\r
-                //   dac8k[FDMDV_OS_TAPS_8K+i] = 0;\r
-                fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], nout);              \r
-                dac2_write(dac16k, 2*nout);\r
-                led_ptt(0); led_rt(f->fdmdv_stats.sync); led_err(f->total_bit_errors);\r
-                GPIOE->ODR &= ~(1 << 3);\r
+                /* force analog bypass when select down */\r
+\r
+                if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], FREEDV_NSAMPLES_16K) == 0) {\r
+                    fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], FREEDV_NSAMPLES);\r
+                    for(i=0; i<FREEDV_NSAMPLES; i++)\r
+                        dac8k[FDMDV_OS_TAPS_8K+i] = adc8k[i];\r
+                    fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], FREEDV_NSAMPLES);              \r
+                    dac2_write(dac16k, FREEDV_NSAMPLES_16K);\r
+                    led_rt(0); led_err(0);\r
+               }\r
+            }\r
+            else {\r
+\r
+                /* regular DV mode */\r
+\r
+                nin = freedv_nin(f);   \r
+                nout = nin;\r
+                f->total_bit_errors = 0;\r
+\r
+\r
+                if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], 2*nin) == 0) {\r
+                    GPIOE->ODR = (1 << 3);\r
+                    fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], nin);\r
+                    nout = freedv_rx(f, &dac8k[FDMDV_OS_TAPS_8K], adc8k);\r
+                    fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], nout);              \r
+                    dac2_write(dac16k, 2*nout);\r
+                    led_rt(f->fdmdv_stats.sync); led_err(f->total_bit_errors);\r
+                    GPIOE->ODR &= ~(1 << 3);\r
+                }\r
             }\r
 \r
         }\r