Light Show / Mbed OS Light_Sync_Master_ID_PPS_Sync_No_CRC

Dependencies:   SX127x sx12xx_hal

Files at this revision

API Documentation at this revision

Comitter:
Wayne Roberts
Date:
Mon Feb 05 15:03:27 2018 -0800
Parent:
4:19056d9707ef
Child:
6:59ba1113b3c6
Commit message:
add target MOTE_L152RC

Changed in this revision

TARGET_DISCO_L072CZ_LRWAN1/board.cpp Show annotated file Show diff for this revision Revisions of this file
TARGET_MOTE_L152RC/board.cpp Show annotated file Show diff for this revision Revisions of this file
board_shield.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
platform.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TARGET_DISCO_L072CZ_LRWAN1/board.cpp	Mon Feb 05 15:03:27 2018 -0800
@@ -0,0 +1,87 @@
+#include "platform.h"
+
+SPI spi(PA_7, PA_6, PB_3); // mosi, miso, sclk
+//           dio0, dio1,  nss,  spi,  rst
+SX127x radio(PB_4, PB_1, PA_15, spi, PC_0);
+    
+#define CRF1    PA_1
+#define CRF2    PC_2
+#define CRF3    PC_1
+DigitalOut Vctl1(CRF1);
+DigitalOut Vctl2(CRF2);
+DigitalOut Vctl3(CRF3);    
+    
+void rfsw_callback()
+{
+    if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER) {
+        Vctl1 = 0;        
+        if (radio.RegPaConfig.bits.PaSelect) {
+            Vctl2 = 0;
+            Vctl3 = 1;                        
+        } else {
+            Vctl2 = 1;
+            Vctl3 = 0;            
+        }
+    } else {
+        if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER || radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER_SINGLE)
+            Vctl1 = 1;
+        else
+            Vctl1 = 0;
+        
+        Vctl2 = 0;
+        Vctl3 = 0;        
+    }
+}    
+    
+DigitalIn pinA(PB_12);
+DigitalIn pinB(PB_13);
+DigitalIn pinC(PB_14);
+DigitalIn pinD(PB_15);    
+
+
+void cmd_op(int dbm)
+{
+    int i = dbm;
+    RegPdsTrim1_t pds_trim;
+    uint8_t adr;
+    if (radio.type == SX1276)
+        adr = REG_PDSTRIM1_SX1276;
+    else
+        adr = REG_PDSTRIM1_SX1272;
+       
+    pds_trim.octet = radio.read_reg(adr);   
+
+    if (radio.RegPaConfig.bits.PaSelect) {
+        /* PABOOST used: +2dbm to +17, or +20 */
+        if (i == 20) {
+            printf("+20dBm PADAC bias\r\n");
+            i -= 3;
+            pds_trim.bits.prog_txdac = 7;
+            radio.write_reg(adr, pds_trim.octet);
+            cmd_ocp(150);
+        }
+        if (i > 1)
+                radio.RegPaConfig.bits.OutputPower = i - 2;
+    } else {
+        /* RFO used: -1 to +14dbm */
+        if (i < 15)
+            radio.RegPaConfig.bits.OutputPower = i + 1;
+    }
+    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
+
+    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
+    if (radio.RegPaConfig.bits.PaSelect) {
+        printf("PA_BOOST ");
+        dbm = radio.RegPaConfig.bits.OutputPower + pds_trim.bits.prog_txdac - 2;
+    } else {
+        printf("RFO ");
+        dbm = radio.RegPaConfig.bits.OutputPower - 1;
+    }
+    printf("OutputPower:%ddBm\r\n", dbm);
+}
+
+void board_init()
+{
+    radio.RegPaConfig.bits.PaSelect = 1;
+    cmd_op(20);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TARGET_MOTE_L152RC/board.cpp	Mon Feb 05 15:03:27 2018 -0800
@@ -0,0 +1,120 @@
+#include "platform.h"
+
+#define RADIO_RESET              PC_2 //NorAm_Mote Reset_sx
+#define RADIO_MOSI               PB_15 //NorAm_Mote SPI2 Mosi
+#define RADIO_MISO               PB_14 //NorAm_Mote SPI2 Miso
+#define RADIO_SCLK               PB_13 //NorAm_Mote  SPI2 Clk
+#define RADIO_NSS                PB_12 //NorAm_Mote SPI2 Nss
+ 
+#define RADIO_DIO0              PC_6 //NorAm_Mote DIO0 
+#define RADIO_DIO1              PC_10 //NorAm_Mote DIO1 
+#define RADIO_DIO2              PC_8 //NorAm_Mote DIO2 
+#define RADIO_DIO3              PB_4 //NorAm_Mote DIO3 
+#define RADIO_DIO4              PB_5 //NorAm_Mote DIO4 
+#define RADIO_DIO5              PB_6 //NorAm_Mote DIO5
+ 
+#define RFSW1                    PC_4 //NorAm_Mote RFSwitch_CNTR_1
+#define RFSW2                    PC_13 //NorAm_Mote RFSwitch_CNTR_2
+
+SPI spi(RADIO_MOSI, RADIO_MISO, RADIO_SCLK);
+SX127x radio(RADIO_DIO0, RADIO_DIO1, RADIO_NSS, spi, RADIO_RESET);
+
+DigitalOut rfsw1(RFSW1);
+DigitalOut rfsw2(RFSW2);
+
+//                    txpow:   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14  15  16  17  18  19
+const uint8_t PaBTable[20] = { 0, 0, 0, 0, 0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15 };
+#define DBM_TO_PABOOST(x)       (PaBTable[x])
+ 
+//                    txpow:  20 21 22 23 24 25 26 27 28 29 30
+const uint8_t RfoTable[11] = { 1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 9 };
+#define DBM_TO_RFO(x)       (RfoTable[x-20])
+#define DBM_TO_MOTE(x)  \
+
+void rfsw_callback() {
+    if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER) {  // start of transmission
+        if (radio.HF) {
+            if (radio.RegPaConfig.bits.PaSelect) { // if PA_BOOST
+                rfsw2 = 0;
+                rfsw1 = 1;
+            } else { // RFO to power amp
+                rfsw2 = 1;
+                rfsw1 = 0;            
+            }
+        } 
+    } else if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER || radio.RegOpMode.bits.Mode == RF_OPMODE_CAD) { // start of reception
+        if (radio.HF) {
+            rfsw2 = 1;
+            rfsw1 = 1;              
+        }
+    } else { // RF switch shutdown
+        rfsw2 = 0;
+        rfsw1 = 0;     
+    }
+}
+
+//                            9 10   1PPS
+//   PB5-D4       HDR_DIO4 * 11 12 * HDR_DIO0        PA8-D7
+//                 ADC_IN3   13 14   HDR_FEM_SPARE   PB1 RED_LED
+//                           15 16
+// D3-PB3-SWO     HDR_DIO2   17 18   HDR_FEM_CPS  PB10-D6 YEL-LED
+// A5-PC0      HDR_FEM_CSD * 19 20 * HDR_FEM_CTX  A4-PC1
+DigitalIn pinA(PB_5); // CONN_EXIT1-11
+DigitalIn pinB(PC_0); // CONN_EXIT1-19
+DigitalIn pinC(PA_8); // CONN_EXIT1-12
+DigitalIn pinD(PC_1); // CONN_EXIT1-20
+
+void cmd_op(int dbm)
+{
+    int i = dbm;
+    RegPdsTrim1_t pds_trim;
+    uint8_t adr;
+
+    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
+
+    if (dbm < 20) {
+        radio.RegPaConfig.bits.PaSelect = 1;
+        radio.RegPaConfig.bits.OutputPower = PaBTable[dbm];
+        printf("PA_BOOST ");
+    } else {
+        radio.RegPaConfig.bits.PaSelect = 0;
+        radio.RegPaConfig.bits.OutputPower = RfoTable[dbm-20];
+        printf("RFO ");
+    }
+
+    printf("%ddBm, PaSelect%u, OutputPower%u\r\n", dbm,
+        radio.RegPaConfig.bits.PaSelect,
+        radio.RegPaConfig.bits.OutputPower
+    );
+
+    if (radio.type == SX1276)
+        adr = REG_PDSTRIM1_SX1276;
+    else
+        adr = REG_PDSTRIM1_SX1272;
+       
+    pds_trim.octet = radio.read_reg(adr);   
+
+    if (radio.RegPaConfig.bits.PaSelect) {
+        /* PABOOST used: +2dbm to +17, or +20 */
+        if (i == 20) {
+            printf("+20dBm PADAC bias\r\n");
+            i -= 3;
+            pds_trim.bits.prog_txdac = 7;
+            radio.write_reg(adr, pds_trim.octet);
+            cmd_ocp(150);
+        } else if (dbm < 18) {
+            pds_trim.bits.prog_txdac = 5;
+            radio.write_reg(adr, pds_trim.octet);
+            cmd_ocp(120);
+        }
+    } else
+        cmd_ocp(80);
+
+    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
+
+}
+
+void board_init()
+{
+    cmd_op(26);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/board_shield.cpp	Mon Feb 05 15:03:27 2018 -0800
@@ -0,0 +1,91 @@
+#if !defined(TARGET_MOTE_L152RC) && !defined(TARGET_DISCO_L072CZ_LRWAN1)
+#include "platform.h"
+
+SPI spi(D11, D12, D13); // mosi, miso, sclk
+//           dio0, dio1, nss, spi, rst
+SX127x radio(  D2,   D3, D10, spi, A0); // sx1276 arduino shield
+     
+DigitalInOut rfsw(A4);    // for SX1276 arduino shield
+     
+void rfsw_callback()
+{
+    if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER) {
+        rfsw = 1;
+    } else {
+        rfsw = 0;
+    }
+}
+    
+DigitalIn pinA(PC_3);
+DigitalIn pinB(PC_2);
+DigitalIn pinC(PC_6);
+DigitalIn pinD(PC_8);
+
+void cmd_op(int dbm)
+{
+    int i = dbm;
+    RegPdsTrim1_t pds_trim;
+    uint8_t adr;
+    if (radio.type == SX1276)
+        adr = REG_PDSTRIM1_SX1276;
+    else
+        adr = REG_PDSTRIM1_SX1272;
+       
+    pds_trim.octet = radio.read_reg(adr);   
+
+    if (radio.RegPaConfig.bits.PaSelect) {
+        /* PABOOST used: +2dbm to +17, or +20 */
+        if (i == 20) {
+            printf("+20dBm PADAC bias\r\n");
+            i -= 3;
+            pds_trim.bits.prog_txdac = 7;
+            radio.write_reg(adr, pds_trim.octet);
+            cmd_ocp(150);
+        }
+        if (i > 1)
+                radio.RegPaConfig.bits.OutputPower = i - 2;
+    } else {
+        /* RFO used: -1 to +14dbm */
+        if (i < 15)
+            radio.RegPaConfig.bits.OutputPower = i + 1;
+    }
+    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
+
+    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
+    if (radio.RegPaConfig.bits.PaSelect) {
+        printf("PA_BOOST ");
+        dbm = radio.RegPaConfig.bits.OutputPower + pds_trim.bits.prog_txdac - 2;
+    } else {
+        printf("RFO ");
+        dbm = radio.RegPaConfig.bits.OutputPower - 1;
+    }
+    printf("OutputPower:%ddBm\r\n", dbm);
+}
+
+void board_init()
+{
+    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
+
+    /* RFO or PABOOST choice:
+     * SX1276 shield: RFO if using 900MHz, or PA_BOOST if using 433MHz
+     */
+    rfsw.input();
+    if (rfsw.read()) {
+        printf("LAS\r\n");
+        /* LAS HF=PA_BOOST  LF=RFO */
+        if (radio.HF)
+            radio.RegPaConfig.bits.PaSelect = 1;
+        else
+            radio.RegPaConfig.bits.PaSelect = 0;
+        cmd_op(20);
+    } else {
+        /* MAS shield board, only RFO TX */
+        radio.RegPaConfig.bits.PaSelect = 0;
+        printf("MAS\r\n");
+        cmd_op(14);
+    }
+    rfsw.output();
+
+    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
+}
+#endif /*  !defined(TARGET_MOTE_L152RC) && !defined(TARGET_DISCO_L072CZ_LRWAN1) */
--- a/main.cpp	Mon Jan 29 18:20:10 2018 +0000
+++ b/main.cpp	Mon Feb 05 15:03:27 2018 -0800
@@ -1,68 +1,5 @@
-#include "sx127x_lora.h"
+#include "platform.h"
  
-#ifdef TARGET_DISCO_L072CZ_LRWAN1
-
-    SPI spi(PA_7, PA_6, PB_3); // mosi, miso, sclk
-    //           dio0, dio1,  nss,  spi,  rst
-    SX127x radio(PB_4, PB_1, PA_15, spi, PC_0);
-    
-    #define CRF1    PA_1
-    #define CRF2    PC_2
-    #define CRF3    PC_1
-    DigitalOut Vctl1(CRF1);
-    DigitalOut Vctl2(CRF2);
-    DigitalOut Vctl3(CRF3);    
-    
-    void rfsw_callback()
-    {
-        if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER) {
-            Vctl1 = 0;        
-            if (radio.RegPaConfig.bits.PaSelect) {
-                Vctl2 = 0;
-                Vctl3 = 1;                        
-            } else {
-                Vctl2 = 1;
-                Vctl3 = 0;            
-            }
-        } else {
-            if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER || radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER_SINGLE)
-                Vctl1 = 1;
-            else
-                Vctl1 = 0;
-            
-            Vctl2 = 0;
-            Vctl3 = 0;        
-        }
-    }    
-    
-    DigitalIn pinA(PB_12);
-    DigitalIn pinB(PB_13);
-    DigitalIn pinC(PB_14);
-    DigitalIn pinD(PB_15);    
-#else
-    SPI spi(D11, D12, D13); // mosi, miso, sclk
-    //           dio0, dio1, nss, spi, rst
-    SX127x radio(  D2,   D3, D10, spi, A0); // sx1276 arduino shield
-     
-    DigitalInOut rfsw(A4);    // for SX1276 arduino shield
-     
-    void rfsw_callback()
-    {
-        if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER) {
-            rfsw = 1;
-        } else {
-            rfsw = 0;
-        }
-    }
-    
-    DigitalIn pinA(PC_3);
-    DigitalIn pinB(PC_2);
-    DigitalIn pinC(PC_6);
-    DigitalIn pinD(PC_8);
-#endif /* !TARGET_DISCO_L072CZ_LRWAN1 */
-
-/**********************************************************************/
-
 SX127x_lora lora(radio);
 Timer t;
 #define CMD_PINA       0x02
@@ -168,47 +105,6 @@
     printf("Ocp: %dmA\r\n", ma); 
 }
 
-void cmd_op(int dbm)
-{
-    int i = dbm;
-    RegPdsTrim1_t pds_trim;
-    uint8_t adr;
-    if (radio.type == SX1276)
-        adr = REG_PDSTRIM1_SX1276;
-    else
-        adr = REG_PDSTRIM1_SX1272;
-       
-    pds_trim.octet = radio.read_reg(adr);   
-
-    if (radio.RegPaConfig.bits.PaSelect) {
-        /* PABOOST used: +2dbm to +17, or +20 */
-        if (i == 20) {
-            printf("+20dBm PADAC bias\r\n");
-            i -= 3;
-            pds_trim.bits.prog_txdac = 7;
-            radio.write_reg(adr, pds_trim.octet);
-            cmd_ocp(150);
-        }
-        if (i > 1)
-                radio.RegPaConfig.bits.OutputPower = i - 2;
-    } else {
-        /* RFO used: -1 to +14dbm */
-        if (i < 15)
-            radio.RegPaConfig.bits.OutputPower = i + 1;
-    }
-    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
-
-    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
-    if (radio.RegPaConfig.bits.PaSelect) {
-        printf("PA_BOOST ");
-        dbm = radio.RegPaConfig.bits.OutputPower + pds_trim.bits.prog_txdac - 2;
-    } else {
-        printf("RFO ");
-        dbm = radio.RegPaConfig.bits.OutputPower - 1;
-    }
-    printf("OutputPower:%ddBm\r\n", dbm);
-}
-
 int main()
 {
     printf("\r\nreset-tx\r\n");
@@ -226,32 +122,7 @@
     lora.setBw_KHz(500);
     lora.setSf(11);
     
-    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
-#ifdef TARGET_DISCO_L072CZ_LRWAN1
-    radio.RegPaConfig.bits.PaSelect = 1;
-    cmd_op(20);
-#else    
-    /* RFO or PABOOST choice:
-     * SX1276 shield: RFO if using 900MHz, or PA_BOOST if using 433MHz
-     */
-    rfsw.input();
-    if (rfsw.read()) {
-        printf("LAS\r\n");
-        /* LAS HF=PA_BOOST  LF=RFO */
-        if (radio.HF)
-            radio.RegPaConfig.bits.PaSelect = 1;
-        else
-            radio.RegPaConfig.bits.PaSelect = 0;
-        cmd_op(20);
-    } else {
-        /* MAS shield board, only RFO TX */
-        radio.RegPaConfig.bits.PaSelect = 0;
-        printf("MAS\r\n");
-        cmd_op(14);
-    }
-    rfsw.output();
-#endif /* !TARGET_DISCO_L072CZ_LRWAN1 */
-    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
+    board_init();
                 
     /* constant payload length */
     lora.RegPayloadLength = 7;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/platform.h	Mon Feb 05 15:03:27 2018 -0800
@@ -0,0 +1,15 @@
+
+#include "sx127x_lora.h"
+
+// from platform:
+extern SX127x radio;
+extern DigitalIn pinA;
+extern DigitalIn pinB;
+extern DigitalIn pinC;
+extern DigitalIn pinD;
+void rfsw_callback(void);
+void cmd_op(int dbm);
+void board_init(void);
+
+// from main:
+void cmd_ocp(uint8_t ma);