mirror of https://github.com/rusefi/bldc.git
bugfixes
This commit is contained in:
parent
2fe6c1344f
commit
10fa9f9550
178
hwconf/hw_gesc.c
178
hwconf/hw_gesc.c
|
@ -2,18 +2,18 @@
|
|||
Copyright 2018 Benjamin Vedder benjamin@vedder.se
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "hw.h"
|
||||
#include "ch.h"
|
||||
|
@ -36,7 +36,7 @@
|
|||
#include "lora/rfm95w.h"
|
||||
#endif
|
||||
|
||||
// Threads
|
||||
// Threads
|
||||
THD_FUNCTION(mag_thread, arg);
|
||||
static THD_WORKING_AREA(mag_thread_wa, 512);
|
||||
static bool mag_thread_running = false;
|
||||
|
@ -46,7 +46,7 @@ static volatile bool i2c_running = false;
|
|||
static volatile int angle = 0;
|
||||
|
||||
//private functions
|
||||
static void terminal_cmd_doublepulse(int argc, const char **argv);
|
||||
static void terminal_cmd_doublepulse(int argc, const char** argv);
|
||||
|
||||
|
||||
// I2C configuration
|
||||
|
@ -66,32 +66,32 @@ void hw_init_gpio(void) {
|
|||
|
||||
// LEDs
|
||||
palSetPadMode(LED_GREEN_GPIO, LED_GREEN_PIN,
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
palSetPadMode(LED_RED_GPIO, LED_RED_PIN,
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
|
||||
// GPIOA Configuration: Channel 1 to 3 as alternate function push-pull
|
||||
palSetPadMode(GPIOA, 8, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
|
||||
palSetPadMode(GPIOB, 13, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
palSetPadMode(GPIOB, 14, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
PAL_STM32_OSPEED_HIGHEST |
|
||||
PAL_STM32_PUDR_FLOATING);
|
||||
|
||||
// Hall sensors
|
||||
palSetPadMode(HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1, PAL_MODE_INPUT_PULLUP);
|
||||
|
@ -100,22 +100,22 @@ void hw_init_gpio(void) {
|
|||
|
||||
// Phase filters
|
||||
palSetPadMode(PHASE_FILTER_GPIO, PHASE_FILTER_PIN,
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
PHASE_FILTER_OFF();
|
||||
|
||||
// Current filter
|
||||
// Current filter
|
||||
palSetPadMode(GPIOD, 2,
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
|
||||
CURRENT_FILTER_OFF();
|
||||
|
||||
// AUX pin
|
||||
AUX_OFF();
|
||||
palSetPadMode(AUX_GPIO, AUX_PIN,
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
PAL_MODE_OUTPUT_PUSHPULL |
|
||||
PAL_STM32_OSPEED_HIGHEST);
|
||||
|
||||
// ADC Pins
|
||||
palSetPadMode(GPIOA, 0, PAL_MODE_INPUT_ANALOG);
|
||||
|
@ -149,26 +149,26 @@ void hw_init_gpio(void) {
|
|||
}
|
||||
|
||||
void hw_setup_adc_channels(void) {
|
||||
/*
|
||||
* ADC Vector
|
||||
*
|
||||
* 0 (1): IN0 SENS1
|
||||
* 1 (2): IN1 SENS2
|
||||
* 2 (3): IN2 SENS3
|
||||
* 3 (1): IN10 CURR1
|
||||
* 4 (2): IN11 CURR2
|
||||
* 5 (3): IN12 CURR3
|
||||
* 6 (1): IN5 ADC_EXT1
|
||||
* 7 (2): IN6 ADC_EXT2
|
||||
* 8 (3): IN3 TEMP_MOS
|
||||
* 9 (1): IN14 TEMP_MOTOR
|
||||
* 10 (2): IN15
|
||||
* 11 (3): IN13 AN_IN
|
||||
* 12 (1): Vrefint
|
||||
*/
|
||||
/*
|
||||
* ADC Vector
|
||||
*
|
||||
* 0 (1): IN0 SENS1
|
||||
* 1 (2): IN1 SENS2
|
||||
* 2 (3): IN2 SENS3
|
||||
* 3 (1): IN10 CURR1
|
||||
* 4 (2): IN11 CURR2
|
||||
* 5 (3): IN12 CURR3
|
||||
* 6 (1): IN5 ADC_EXT1
|
||||
* 7 (2): IN6 ADC_EXT2
|
||||
* 8 (3): IN3 TEMP_MOS
|
||||
* 9 (1): IN14 TEMP_MOTOR
|
||||
* 10 (2): IN15
|
||||
* 11 (3): IN13 AN_IN
|
||||
* 12 (1): Vrefint
|
||||
*/
|
||||
|
||||
|
||||
// ADC1 regular channels
|
||||
// ADC1 regular channels
|
||||
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_15Cycles);
|
||||
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 2, ADC_SampleTime_15Cycles);
|
||||
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 3, ADC_SampleTime_15Cycles);
|
||||
|
@ -212,15 +212,15 @@ void hw_start_i2c(void) {
|
|||
|
||||
if (!i2c_running) {
|
||||
palSetPadMode(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN,
|
||||
PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
palSetPadMode(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN,
|
||||
PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
|
||||
i2cStart(&HW_I2C_DEV, &i2cfg);
|
||||
i2c_running = true;
|
||||
|
@ -252,21 +252,21 @@ void hw_try_restore_i2c(void) {
|
|||
i2cAcquireBus(&HW_I2C_DEV);
|
||||
|
||||
palSetPadMode(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN,
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
|
||||
palSetPadMode(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN,
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
|
||||
palSetPad(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN);
|
||||
palSetPad(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN);
|
||||
|
||||
chThdSleep(1);
|
||||
|
||||
for(int i = 0;i < 16;i++) {
|
||||
for (int i = 0;i < 16;i++) {
|
||||
palClearPad(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN);
|
||||
chThdSleep(1);
|
||||
palSetPad(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN);
|
||||
|
@ -283,16 +283,16 @@ void hw_try_restore_i2c(void) {
|
|||
palSetPad(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN);
|
||||
|
||||
palSetPadMode(HW_I2C_SCL_PORT, HW_I2C_SCL_PIN,
|
||||
PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
|
||||
palSetPadMode(HW_I2C_SDA_PORT, HW_I2C_SDA_PIN,
|
||||
PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
PAL_MODE_ALTERNATE(HW_I2C_GPIO_AF) |
|
||||
PAL_STM32_OTYPE_OPENDRAIN |
|
||||
PAL_STM32_OSPEED_MID1 |
|
||||
PAL_STM32_PUDR_PULLUP);
|
||||
|
||||
HW_I2C_DEV.state = I2C_STOP;
|
||||
i2cStart(&HW_I2C_DEV, &i2cfg);
|
||||
|
@ -316,7 +316,7 @@ THD_FUNCTION(mag_thread, arg) {
|
|||
hw_start_i2c();
|
||||
chThdSleepMilliseconds(10);
|
||||
|
||||
for(;;) {
|
||||
for (;;) {
|
||||
if (i2c_running) {
|
||||
txbuf[0] = 0x0c;
|
||||
txbuf[1] = 0x0d;
|
||||
|
@ -324,8 +324,8 @@ THD_FUNCTION(mag_thread, arg) {
|
|||
status = i2cMasterTransmitTimeout(&HW_I2C_DEV, temp_addr, txbuf, 2, rxbuf, 2, tmo);
|
||||
i2cReleaseBus(&HW_I2C_DEV);
|
||||
|
||||
if (status == MSG_OK){
|
||||
angle = rxbuf[0] | rxbuf[1]<<8;
|
||||
if (status == MSG_OK) {
|
||||
angle = rxbuf[0] | rxbuf[1] << 8;
|
||||
} else {
|
||||
hw_try_restore_i2c();
|
||||
}
|
||||
|
@ -338,12 +338,12 @@ int gsvesc_get_angle() {
|
|||
return angle;
|
||||
}
|
||||
|
||||
static void terminal_cmd_doublepulse(int argc, const char **argv)
|
||||
static void terminal_cmd_doublepulse(int argc, const char** argv)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
int preface,pulse1,breaktime,pulse2;
|
||||
int preface, pulse1, breaktime, pulse2;
|
||||
int utick;
|
||||
int deadtime = -1;
|
||||
|
||||
|
@ -369,7 +369,7 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
|
|||
}
|
||||
timeout_configure_IWDT_slowest();
|
||||
|
||||
utick = (int)( SYSTEM_CORE_CLOCK / 1000000 );
|
||||
utick = (int)(SYSTEM_CORE_CLOCK / 1000000);
|
||||
mcpwm_deinit();
|
||||
mcpwm_foc_deinit();
|
||||
gpdrive_deinit();
|
||||
|
@ -395,7 +395,7 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
|
|||
// Time Base configuration
|
||||
TIM_TimeBaseStructure.TIM_Prescaler = 0;
|
||||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||||
TIM_TimeBaseStructure.TIM_Period = (preface+pulse1)*utick;
|
||||
TIM_TimeBaseStructure.TIM_Period = (preface + pulse1) * utick;
|
||||
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
|
||||
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
|
||||
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
|
||||
|
@ -404,7 +404,7 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
|
|||
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
|
||||
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
||||
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
|
||||
TIM_OCInitStructure.TIM_Pulse = preface*utick;
|
||||
TIM_OCInitStructure.TIM_Pulse = preface * utick;
|
||||
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
||||
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
|
||||
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
|
||||
|
@ -460,14 +460,14 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
|
|||
//Timer 4 triggert Timer 1
|
||||
TIM_Cmd(TIM4, ENABLE);
|
||||
TIM_Cmd(TIM4, DISABLE);
|
||||
TIM1->ARR = (breaktime+pulse2)*utick;
|
||||
TIM1->CCR1 = breaktime*utick;
|
||||
while ( TIM1->CNT != 0 );
|
||||
TIM1->ARR = (breaktime + pulse2) * utick;
|
||||
TIM1->CCR1 = breaktime * utick;
|
||||
while (TIM1->CNT != 0);
|
||||
TIM_Cmd(TIM4, ENABLE);
|
||||
|
||||
chThdSleepMilliseconds(1);
|
||||
TIM_CtrlPWMOutputs(TIM1, DISABLE);
|
||||
mc_configuration *mcconf = mempools_alloc_mcconf();
|
||||
mc_configuration* mcconf = mempools_alloc_mcconf();
|
||||
*mcconf = *mc_interface_get_configuration();
|
||||
|
||||
switch (mcconf->motor_type) {
|
||||
|
@ -477,7 +477,7 @@ static void terminal_cmd_doublepulse(int argc, const char **argv)
|
|||
break;
|
||||
|
||||
case MOTOR_TYPE_FOC:
|
||||
mcpwm_foc_init(mcconf,mcconf);
|
||||
mcpwm_foc_init(mcconf, mcconf);
|
||||
break;
|
||||
|
||||
case MOTOR_TYPE_GPD:
|
||||
|
|
|
@ -6,6 +6,21 @@
|
|||
*
|
||||
* work based on DORJI.COM sample code and
|
||||
* https://github.com/realspinner/SX1278_LoRa
|
||||
*
|
||||
* Modified for vesc firmware by schardt@team-ctech.de
|
||||
|
||||
This code uses InvertIQ function to create a simple Gateway/Node logic.
|
||||
VESC = Gateway
|
||||
Gateway - Sends messages with enableInvertIQ()
|
||||
- Receives messages with disableInvertIQ()
|
||||
|
||||
Node - Sends messages with disableInvertIQ()
|
||||
- Receives messages with enableInvertIQ()
|
||||
|
||||
With this arrangement a Gateway never receive messages from another Gateway
|
||||
and a Node never receive message from another Node.
|
||||
Only Gateway to Node and vice versa.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "conf_general.h"
|
||||
|
|
62
lora/lora.c
62
lora/lora.c
|
@ -47,74 +47,70 @@ PACKET_STATE_t packet_state;
|
|||
SX1278_t SX1278;
|
||||
|
||||
// Private functions
|
||||
static void process_packet(unsigned char *data, unsigned int len);
|
||||
static void send_packet(unsigned char *data, unsigned int len);
|
||||
static void process_packet(unsigned char* data, unsigned int len);
|
||||
static void send_packet(unsigned char* data, unsigned int len);
|
||||
|
||||
void rfm95w_send_packet(unsigned char *data, unsigned int len) {
|
||||
void lora_send_packet(unsigned char* data, unsigned int len) {
|
||||
|
||||
if (!send_mutex_init_done) {
|
||||
chMtxObjectInit(&send_mutex);
|
||||
send_mutex_init_done = true;
|
||||
}
|
||||
}
|
||||
chMtxLock(&send_mutex);
|
||||
packet_send_packet(data, len, &packet_state);
|
||||
chMtxUnlock(&send_mutex);
|
||||
}
|
||||
|
||||
static void process_packet(unsigned char *data, unsigned int len) {
|
||||
commands_process_packet(data, len, rfm95w_send_packet);
|
||||
static void process_packet(unsigned char* data, unsigned int len) {
|
||||
commands_process_packet(data, len, lora_send_packet);
|
||||
}
|
||||
|
||||
static void send_packet(unsigned char *data, unsigned int len) {
|
||||
static void send_packet(unsigned char* data, unsigned int len) {
|
||||
|
||||
int erg;
|
||||
|
||||
commands_printf("Send, len %d",len);
|
||||
erg= SX1278_LoRaEntryTx(&SX1278, len, 2000);
|
||||
commands_printf("EntryTX: %d",erg);
|
||||
erg=SX1278_LoRaTxPacket(&SX1278, (uint8_t*) data, len, 2000);
|
||||
commands_printf("TXPacket: %d",erg);
|
||||
erg = SX1278_LoRaEntryTx(&SX1278, len, 100);
|
||||
erg = SX1278_LoRaTxPacket(&SX1278, (uint8_t*)data, len, 100);
|
||||
}
|
||||
|
||||
void rfm95w_init(void) {
|
||||
void lora_init(void) {
|
||||
packet_init(send_packet, process_packet, &packet_state);
|
||||
|
||||
palSetPadMode(HW_RFM95W_SPI_PORT_SCK, HW_RFM95W_SPI_PIN_SCK, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||
palSetPadMode(HW_RFM95W_SPI_PORT_MISO, HW_RFM95W_SPI_PIN_MISO,PAL_MODE_INPUT);
|
||||
palSetPadMode(HW_RFM95W_SPI_PORT_NSS, HW_RFM95W_SPI_PIN_NSS, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||
palSetPadMode(HW_RFM95W_SPI_PORT_MOSI, HW_RFM95W_SPI_PIN_MOSI, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||
palSetPadMode(HW_RFM95W_SPI_PORT_DIO0, HW_RFM95W_SPI_PIN_DIO0, PAL_MODE_INPUT);
|
||||
palSetPadMode(HW_RFM95W_SPI_PORT_RESET, HW_RFM95W_SPI_PIN_RESET, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||
SX1278_init(&SX1278, 868000000, SX1278_POWER_17DBM, SX1278_LORA_SF_7, SX1278_LORA_BW_125KHZ, SX1278_LORA_CR_4_5, SX1278_LORA_CRC_DIS, 100);
|
||||
palSetPadMode(HW_LORA_SPI_PORT_SCK, HW_LORA_SPI_PIN_SCK, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||
palSetPadMode(HW_LORA_SPI_PORT_MISO, HW_LORA_SPI_PIN_MISO, PAL_MODE_INPUT);
|
||||
palSetPadMode(HW_LORA_SPI_PORT_NSS, HW_LORA_SPI_PIN_NSS, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||
palSetPadMode(HW_LORA_SPI_PORT_MOSI, HW_LORA_SPI_PIN_MOSI, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||
palSetPadMode(HW_LORA_SPI_PORT_DIO0, HW_LORA_SPI_PIN_DIO0, PAL_MODE_INPUT);
|
||||
palSetPadMode(HW_LORA_SPI_PORT_RESET, HW_LORA_SPI_PIN_RESET, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
|
||||
SX1278_init(&SX1278, 868000000, SX1278_POWER_17DBM, SX1278_LORA_SF_7, SX1278_LORA_BW_250KHZ, SX1278_LORA_CR_4_5, SX1278_LORA_CRC_DIS, 100);
|
||||
if (!thread_is_running) {
|
||||
chThdCreateStatic(packet_process_thread_wa, sizeof(packet_process_thread_wa), NORMALPRIO, packet_process_thread, NULL);
|
||||
thread_is_running = true;
|
||||
thread_is_running = true;
|
||||
}
|
||||
}
|
||||
|
||||
void rfm95w_stop(void) {
|
||||
void lora_stop(void) {
|
||||
}
|
||||
|
||||
static THD_FUNCTION(packet_process_thread, arg) {
|
||||
(void)arg;
|
||||
|
||||
unsigned char buffer[128];
|
||||
chRegSetThreadName("rfm95w proc");
|
||||
chRegSetThreadName("LoRa proc");
|
||||
|
||||
buffer[0]=COMM_GET_VALUES;
|
||||
buffer[0] = COMM_GET_VALUES;
|
||||
|
||||
while(!commands_is_initialized() ) {
|
||||
chThdSleepMilliseconds(10);
|
||||
while (!commands_is_initialized()) {
|
||||
chThdSleepMilliseconds(10);
|
||||
}
|
||||
|
||||
for(;;) {
|
||||
for (;;) {
|
||||
//simulate a received packet to trigger send_packet
|
||||
commands_process_packet(buffer, 1, rfm95w_send_packet);
|
||||
//SX1278_LoRaEntryRx(&SX1278,100,100);
|
||||
//if ( SX1278_LoRaRxPacket(&SX1278) ) {
|
||||
//process_packet(SX1278.rxBuffer, SX1278.readBytes);
|
||||
//}
|
||||
chThdSleepMilliseconds(500);
|
||||
commands_process_packet(buffer, 1, lora_send_packet);
|
||||
SX1278_LoRaEntryRx(&SX1278, 100, 100);
|
||||
if (SX1278_LoRaRxPacket(&SX1278)) {
|
||||
process_packet(SX1278.rxBuffer, SX1278.readBytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue