Merge pull request #8240 from jflyper/bfdev-h7-pid-audio

[H7] Add PID-Audio support
This commit is contained in:
jflyper 2019-05-11 13:16:30 +09:00 committed by GitHub
commit 8207a4544e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 90 additions and 0 deletions

View File

@ -0,0 +1,90 @@
/*
* This file is part of Cleanflight and Betaflight.
*
* Cleanflight and Betaflight are free software. You can redistribute
* this software and/or modify this software 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.
*
* Cleanflight and Betaflight are distributed in the hope that they
* 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 software.
*
* If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdbool.h>
#include <stdint.h>
#include <math.h>
#include "platform.h"
#include "common/maths.h"
#include "drivers/audio.h"
static DAC_HandleTypeDef hdac;
static TIM_HandleTypeDef handle;
static DAC_ChannelConfTypeDef sConfig;
void audioSetupIO(void)
{
__HAL_RCC_DAC12_CLK_ENABLE();
__HAL_RCC_TIM6_CLK_ENABLE();
hdac.Instance = DAC1;
HAL_DAC_Init(&hdac);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void audioGenerateWhiteNoise(void)
{
handle.Instance = TIM6;
handle.Init.Period = 0xFF;
handle.Init.Prescaler = 0;
handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
handle.Init.CounterMode = TIM_COUNTERMODE_UP;
handle.Init.RepetitionCounter = 0;
HAL_TIM_Base_Init(&handle);
TIM_MasterConfigTypeDef sMasterConfig;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
HAL_TIMEx_MasterConfigSynchronization(&handle, &sMasterConfig);
HAL_TIM_Base_Start(&handle);
sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1);
HAL_DACEx_NoiseWaveGenerate(&hdac, DAC_CHANNEL_1, DAC_LFSRUNMASK_BITS10_0);
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_L, 0xcd00);
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
}
#define TONE_SPREAD 8
void audioPlayTone(uint8_t tone)
{
handle.Init.Period = 64 + (MAX(TONE_MIN,MIN(tone, TONE_MAX)) * TONE_SPREAD);
TIM_Base_SetConfig(handle.Instance, &handle.Init);
}
void audioSilence(void)
{
HAL_DAC_Stop(&hdac, DAC_CHANNEL_1);
HAL_TIM_Base_Stop(&handle);
}