Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SX127x sx12xx_hal
Revision 5:1652e04809fb, committed 2018-02-05
- 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
--- /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);