[STM32WLx] Apply PA clamp workaround for HP only
This modifies SX1262::begin and beginFSK to call setOutputPower after applying the workaround, so that can undo the workaround if needed.
This commit is contained in:
parent
9252cf53d3
commit
cd138dd6c7
4 changed files with 16 additions and 8 deletions
|
@ -64,6 +64,10 @@ int16_t STM32WLx::setOutputPower(int8_t power) {
|
||||||
}
|
}
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
|
// Apply workaround for HP only
|
||||||
|
state = SX126x::fixPaClamping(use_hp);
|
||||||
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
// set output power
|
// set output power
|
||||||
/// \todo power ramp time configuration
|
/// \todo power ramp time configuration
|
||||||
state = SX126x::setTxParams(power);
|
state = SX126x::setTxParams(power);
|
||||||
|
|
|
@ -20,10 +20,10 @@ int16_t SX1262::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t sync
|
||||||
state = setFrequency(freq);
|
state = setFrequency(freq);
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
state = setOutputPower(power);
|
state = SX126x::fixPaClamping();
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
state = SX126x::fixPaClamping();
|
state = setOutputPower(power);
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
return(state);
|
return(state);
|
||||||
|
@ -38,10 +38,10 @@ int16_t SX1262::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t
|
||||||
state = setFrequency(freq);
|
state = setFrequency(freq);
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
state = setOutputPower(power);
|
state = SX126x::fixPaClamping();
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
state = SX126x::fixPaClamping();
|
state = setOutputPower(power);
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
return(state);
|
return(state);
|
||||||
|
|
|
@ -1575,7 +1575,7 @@ int16_t SX126x::fixSensitivity() {
|
||||||
return(writeRegister(RADIOLIB_SX126X_REG_SENSITIVITY_CONFIG, &sensitivityConfig, 1));
|
return(writeRegister(RADIOLIB_SX126X_REG_SENSITIVITY_CONFIG, &sensitivityConfig, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t SX126x::fixPaClamping() {
|
int16_t SX126x::fixPaClamping(bool enable) {
|
||||||
// fixes overly eager PA clamping
|
// fixes overly eager PA clamping
|
||||||
// see SX1262/SX1268 datasheet, chapter 15 Known Limitations, section 15.2 for details
|
// see SX1262/SX1268 datasheet, chapter 15 Known Limitations, section 15.2 for details
|
||||||
|
|
||||||
|
@ -1584,8 +1584,12 @@ int16_t SX126x::fixPaClamping() {
|
||||||
int16_t state = readRegister(RADIOLIB_SX126X_REG_TX_CLAMP_CONFIG, &clampConfig, 1);
|
int16_t state = readRegister(RADIOLIB_SX126X_REG_TX_CLAMP_CONFIG, &clampConfig, 1);
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
|
||||||
// update with the new value
|
// apply or undo workaround
|
||||||
|
if (enable)
|
||||||
clampConfig |= 0x1E;
|
clampConfig |= 0x1E;
|
||||||
|
else
|
||||||
|
clampConfig = (clampConfig & ~0x1E) | 0x08;
|
||||||
|
|
||||||
return(writeRegister(RADIOLIB_SX126X_REG_TX_CLAMP_CONFIG, &clampConfig, 1));
|
return(writeRegister(RADIOLIB_SX126X_REG_TX_CLAMP_CONFIG, &clampConfig, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1005,7 +1005,7 @@ class SX126x: public PhysicalLayer {
|
||||||
|
|
||||||
// fixes to errata
|
// fixes to errata
|
||||||
int16_t fixSensitivity();
|
int16_t fixSensitivity();
|
||||||
int16_t fixPaClamping();
|
int16_t fixPaClamping(bool enable = true);
|
||||||
int16_t fixImplicitTimeout();
|
int16_t fixImplicitTimeout();
|
||||||
int16_t fixInvertedIQ(uint8_t iqConfig);
|
int16_t fixInvertedIQ(uint8_t iqConfig);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue