mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-16 21:05:35 +03:00
Disable output of DSHOT when motors disabled
This commit is contained in:
parent
4355d675b2
commit
ec92be725b
5 changed files with 29 additions and 1 deletions
|
@ -35,7 +35,7 @@ static pwmCompleteWriteFuncPtr pwmCompleteWritePtr = NULL;
|
||||||
static pwmOutputPort_t servos[MAX_SUPPORTED_SERVOS];
|
static pwmOutputPort_t servos[MAX_SUPPORTED_SERVOS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static bool pwmMotorsEnabled = true;
|
bool pwmMotorsEnabled = true;
|
||||||
|
|
||||||
static void pwmOCConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t value, uint8_t output)
|
static void pwmOCConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t value, uint8_t output)
|
||||||
{
|
{
|
||||||
|
|
|
@ -75,6 +75,8 @@ typedef struct {
|
||||||
#endif
|
#endif
|
||||||
} motorDmaOutput_t;
|
} motorDmaOutput_t;
|
||||||
|
|
||||||
|
extern bool pwmMotorsEnabled;
|
||||||
|
|
||||||
struct timerHardware_s;
|
struct timerHardware_s;
|
||||||
typedef void(*pwmWriteFuncPtr)(uint8_t index, uint16_t value); // function pointer used to write motors
|
typedef void(*pwmWriteFuncPtr)(uint8_t index, uint16_t value); // function pointer used to write motors
|
||||||
typedef void(*pwmCompleteWriteFuncPtr)(uint8_t motorCount); // function pointer used after motors are written
|
typedef void(*pwmCompleteWriteFuncPtr)(uint8_t motorCount); // function pointer used after motors are written
|
||||||
|
|
|
@ -57,6 +57,11 @@ uint8_t getTimerIndex(TIM_TypeDef *timer)
|
||||||
|
|
||||||
void pwmWriteDigital(uint8_t index, uint16_t value)
|
void pwmWriteDigital(uint8_t index, uint16_t value)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (!pwmMotorsEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
motorDmaOutput_t * const motor = &dmaMotors[index];
|
motorDmaOutput_t * const motor = &dmaMotors[index];
|
||||||
|
|
||||||
uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now)
|
uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now)
|
||||||
|
@ -83,6 +88,10 @@ void pwmWriteDigital(uint8_t index, uint16_t value)
|
||||||
void pwmCompleteDigitalMotorUpdate(uint8_t motorCount)
|
void pwmCompleteDigitalMotorUpdate(uint8_t motorCount)
|
||||||
{
|
{
|
||||||
UNUSED(motorCount);
|
UNUSED(motorCount);
|
||||||
|
|
||||||
|
if (!pwmMotorsEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < dmaMotorTimerCount; i++) {
|
for (int i = 0; i < dmaMotorTimerCount; i++) {
|
||||||
TIM_SetCounter(dmaMotorTimers[i].timer, 0);
|
TIM_SetCounter(dmaMotorTimers[i].timer, 0);
|
||||||
|
|
|
@ -58,6 +58,10 @@ uint8_t getTimerIndex(TIM_TypeDef *timer)
|
||||||
|
|
||||||
void pwmWriteDigital(uint8_t index, uint16_t value)
|
void pwmWriteDigital(uint8_t index, uint16_t value)
|
||||||
{
|
{
|
||||||
|
if (!pwmMotorsEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
motorDmaOutput_t * const motor = &dmaMotors[index];
|
motorDmaOutput_t * const motor = &dmaMotors[index];
|
||||||
|
|
||||||
uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now)
|
uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now)
|
||||||
|
@ -84,6 +88,10 @@ void pwmWriteDigital(uint8_t index, uint16_t value)
|
||||||
void pwmCompleteDigitalMotorUpdate(uint8_t motorCount)
|
void pwmCompleteDigitalMotorUpdate(uint8_t motorCount)
|
||||||
{
|
{
|
||||||
UNUSED(motorCount);
|
UNUSED(motorCount);
|
||||||
|
|
||||||
|
if (!pwmMotorsEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < dmaMotorTimerCount; i++) {
|
for (int i = 0; i < dmaMotorTimerCount; i++) {
|
||||||
TIM_SetCounter(dmaMotorTimers[i].timer, 0);
|
TIM_SetCounter(dmaMotorTimers[i].timer, 0);
|
||||||
|
|
|
@ -57,6 +57,11 @@ uint8_t getTimerIndex(TIM_TypeDef *timer)
|
||||||
|
|
||||||
void pwmWriteDigital(uint8_t index, uint16_t value)
|
void pwmWriteDigital(uint8_t index, uint16_t value)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (!pwmMotorsEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
motorDmaOutput_t * const motor = &dmaMotors[index];
|
motorDmaOutput_t * const motor = &dmaMotors[index];
|
||||||
|
|
||||||
uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now)
|
uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now)
|
||||||
|
@ -87,6 +92,10 @@ void pwmCompleteDigitalMotorUpdate(uint8_t motorCount)
|
||||||
{
|
{
|
||||||
UNUSED(motorCount);
|
UNUSED(motorCount);
|
||||||
|
|
||||||
|
if (!pwmMotorsEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (uint8_t i = 0; i < dmaMotorTimerCount; i++) {
|
for (uint8_t i = 0; i < dmaMotorTimerCount; i++) {
|
||||||
//TIM_SetCounter(dmaMotorTimers[i].timer, 0);
|
//TIM_SetCounter(dmaMotorTimers[i].timer, 0);
|
||||||
//TIM_DMACmd(dmaMotorTimers[i].timer, dmaMotorTimers[i].timerDmaSources, ENABLE);
|
//TIM_DMACmd(dmaMotorTimers[i].timer, dmaMotorTimers[i].timerDmaSources, ENABLE);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue