From 1b94f178e8b91dcc688afc6175e320d5543d5f1b Mon Sep 17 00:00:00 2001 From: Erik Gustavsson Date: Wed, 28 Jan 2015 20:55:36 +0100 Subject: [PATCH 1/3] OP-1691 Remove busy-wait and add yeild points in rfm22_init() --- flight/pios/common/pios_rfm22b.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/flight/pios/common/pios_rfm22b.c b/flight/pios/common/pios_rfm22b.c index 4aed541ed..e4367f68a 100644 --- a/flight/pios/common/pios_rfm22b.c +++ b/flight/pios/common/pios_rfm22b.c @@ -1369,7 +1369,7 @@ static enum pios_radio_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) } // Wait 1ms if not. - PIOS_DELAY_WaitmS(1); + vTaskDelay(1 / portTICK_RATE_MS); } // **************** @@ -1474,6 +1474,9 @@ static enum pios_radio_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) // x-nibbles rx preamble detection rfm22_write(rfm22b_dev, RFM22_preamble_detection_ctrl1, RX_PREAMBLE_NIBBLES << 3); + // Yield the CPU. + vTaskDelay(1 / portTICK_RATE_MS); + // header control - using a 4 by header with broadcast of 0xffffffff rfm22_write(rfm22b_dev, RFM22_header_control1, RFM22_header_cntl1_bcen_0 | @@ -1523,6 +1526,9 @@ static enum pios_radio_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) // Release the bus rfm22_releaseBus(rfm22b_dev); + // Yield the CPU. + vTaskDelay(1 / portTICK_RATE_MS); + // Initialize the frequency and datarate to te default. rfm22_setNominalCarrierFrequency(rfm22b_dev, 0); pios_rfm22_setDatarate(rfm22b_dev); From dd5abeca9bdb611f939aeb444267bbd039da4439 Mon Sep 17 00:00:00 2001 From: Erik Gustavsson Date: Sun, 8 Feb 2015 11:08:10 +0100 Subject: [PATCH 2/3] OP-1691 Review fix: ensure rounding for vTaskDelay --- flight/pios/common/pios_rfm22b.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flight/pios/common/pios_rfm22b.c b/flight/pios/common/pios_rfm22b.c index e4367f68a..2faee1b35 100644 --- a/flight/pios/common/pios_rfm22b.c +++ b/flight/pios/common/pios_rfm22b.c @@ -1369,7 +1369,7 @@ static enum pios_radio_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) } // Wait 1ms if not. - vTaskDelay(1 / portTICK_RATE_MS); + vTaskDelay(1 + (1/(portTICK_RATE_MS+1))); } // **************** @@ -1475,7 +1475,7 @@ static enum pios_radio_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) rfm22_write(rfm22b_dev, RFM22_preamble_detection_ctrl1, RX_PREAMBLE_NIBBLES << 3); // Yield the CPU. - vTaskDelay(1 / portTICK_RATE_MS); + vTaskDelay(1 + (1/(portTICK_RATE_MS+1))); // header control - using a 4 by header with broadcast of 0xffffffff rfm22_write(rfm22b_dev, RFM22_header_control1, @@ -1527,7 +1527,7 @@ static enum pios_radio_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) rfm22_releaseBus(rfm22b_dev); // Yield the CPU. - vTaskDelay(1 / portTICK_RATE_MS); + vTaskDelay(1 + (1/(portTICK_RATE_MS+1))); // Initialize the frequency and datarate to te default. rfm22_setNominalCarrierFrequency(rfm22b_dev, 0); From 65c24e6315981b10720bf098d56a0aaf36534a66 Mon Sep 17 00:00:00 2001 From: Erik Gustavsson Date: Tue, 17 Feb 2015 18:08:47 +0100 Subject: [PATCH 3/3] OP-1691 Release SPI bus before sleeping --- flight/pios/common/pios_rfm22b.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/flight/pios/common/pios_rfm22b.c b/flight/pios/common/pios_rfm22b.c index 2faee1b35..9489adc36 100644 --- a/flight/pios/common/pios_rfm22b.c +++ b/flight/pios/common/pios_rfm22b.c @@ -1474,9 +1474,15 @@ static enum pios_radio_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) // x-nibbles rx preamble detection rfm22_write(rfm22b_dev, RFM22_preamble_detection_ctrl1, RX_PREAMBLE_NIBBLES << 3); + // Release the bus + rfm22_releaseBus(rfm22b_dev); + // Yield the CPU. vTaskDelay(1 + (1/(portTICK_RATE_MS+1))); + // Claim the SPI bus. + rfm22_claimBus(rfm22b_dev); + // header control - using a 4 by header with broadcast of 0xffffffff rfm22_write(rfm22b_dev, RFM22_header_control1, RFM22_header_cntl1_bcen_0 |