diff options
Diffstat (limited to 'drivers/audio/gadc')
-rw-r--r-- | drivers/audio/gadc/driver.mk | 5 | ||||
-rw-r--r-- | drivers/audio/gadc/gaudin_lld.c | 62 | ||||
-rw-r--r-- | drivers/audio/gadc/gaudin_lld_board_template.h | 50 | ||||
-rw-r--r-- | drivers/audio/gadc/gaudin_lld_config.h | 59 | ||||
-rw-r--r-- | drivers/audio/gadc/readme.txt | 6 |
5 files changed, 182 insertions, 0 deletions
diff --git a/drivers/audio/gadc/driver.mk b/drivers/audio/gadc/driver.mk new file mode 100644 index 00000000..b991ede8 --- /dev/null +++ b/drivers/audio/gadc/driver.mk @@ -0,0 +1,5 @@ +# List the required driver. +GFXSRC += $(GFXLIB)/drivers/gaudin/gadc/gaudin_lld.c + +# Required include directories +GFXINC += $(GFXLIB)/drivers/audio/gadc diff --git a/drivers/audio/gadc/gaudin_lld.c b/drivers/audio/gadc/gaudin_lld.c new file mode 100644 index 00000000..002d9e9b --- /dev/null +++ b/drivers/audio/gadc/gaudin_lld.c @@ -0,0 +1,62 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +/** + * @file drivers/gaudin/gadc/gaudin_lld.c + * @brief GAUDIN - Driver file for using the cpu ADC (via GADC). + * + * @addtogroup GAUDIN + * + * @{ + */ + +/** + * We are now implementing the driver - pull in our channel table + * from the board definitions. + */ +#define GAUDIN_LLD_IMPLEMENTATION + + +#include "gfx.h" + +#if GFX_USE_GAUDIN + +/* Double check the GADC system is turned on */ +#if !GFX_USE_GADC + #error "GAUDIN - The GADC driver for GAUDIN requires GFX_USE_GADC to be TRUE" +#endif + +/* Include the driver defines */ +#include "src/gaudin/driver.h" + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +void gaudin_lld_init(const gaudin_params *paud) { + /* Setup the high speed GADC */ + gadcHighSpeedInit(gaudin_lld_physdevs[paud->channel], paud->frequency, paud->buffer, paud->bufcount, paud->samplesPerEvent); + + /* Register ourselves for ISR callbacks */ + gadcHighSpeedSetISRCallback(GAUDIN_ISR_CompleteI); + + /** + * The gadc driver handles any errors for us by restarting the transaction so there is + * no need for us to setup anything for GAUDIN_ISR_ErrorI() + */ +} + +void gaudin_lld_start(void) { + gadcHighSpeedStart(); +} + +void gaudin_lld_stop(void) { + gadcHighSpeedStop(); +} + +#endif /* GFX_USE_GAUDIN */ +/** @} */ diff --git a/drivers/audio/gadc/gaudin_lld_board_template.h b/drivers/audio/gadc/gaudin_lld_board_template.h new file mode 100644 index 00000000..89cc0c12 --- /dev/null +++ b/drivers/audio/gadc/gaudin_lld_board_template.h @@ -0,0 +1,50 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +/** + * @file drivers/gaudin/gadc/gaudin_lld_board_template.h + * @brief GAUDIN Driver board config board file + * + * @addtogroup GAUDIN + * @{ + */ + +#ifndef _GAUDIN_LLD_BOARD_H +#define _GAUDIN_LLD_BOARD_H + +/*===========================================================================*/ +/* Audio inputs on this board */ +/*===========================================================================*/ + +/** + * @brief The number of audio channels supported by this driver + * @note This is an example + */ +#define GAUDIN_NUM_CHANNELS 1 + +/** + * @brief The list of audio channels and their uses + * @note This is an example + * @{ + */ +#define GAUDIN_MICROPHONE 0 +/** @} */ + +/** + * @brief The audio channel to GADC physical device assignment + * @note This is an example + * @{ + */ +#ifdef GAUDIN_LLD_IMPLEMENTATION + static uint32_t gaudin_lld_physdevs[GAUDIN_NUM_CHANNELS] = { + GADC_PHYSDEV_MICROPHONE, + }; +#endif +/** @} */ + +#endif /* _GAUDIN_LLD_BOARD_H */ +/** @} */ diff --git a/drivers/audio/gadc/gaudin_lld_config.h b/drivers/audio/gadc/gaudin_lld_config.h new file mode 100644 index 00000000..a9fd02ae --- /dev/null +++ b/drivers/audio/gadc/gaudin_lld_config.h @@ -0,0 +1,59 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +/** + * @file drivers/gaudin/gadc/gaudin_lld_config.h + * @brief GAUDIN Driver config file. + * + * @addtogroup GAUDIN + * @{ + */ + +#ifndef GAUDIN_LLD_CONFIG_H +#define GAUDIN_LLD_CONFIG_H + +#if GFX_USE_GAUDIN + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +/** + * @brief The audio input sample type + * @details For this driver it matches the cpu sample type + */ +typedef adcsample_t audin_sample_t; + +/** + * @brief The maximum sample frequency supported by this audio device + * @details For this driver it matches the GADC maximum high speed sample rate + */ +#define GAUDIN_MAX_SAMPLE_FREQUENCY GADC_MAX_HIGH_SPEED_SAMPLERATE + +/** + * @brief The number of bits in a sample + * @details For this driver it matches the cpu sample bits + */ +#define GAUDIN_BITS_PER_SAMPLE GADC_BITS_PER_SAMPLE + +/** + * @brief The format of an audio sample + * @details For this driver it matches the cpu sample format + */ +#define GAUDIN_SAMPLE_FORMAT GADC_SAMPLE_FORMAT + +/** + * For the GAUDIN driver that uses GADC - all the remaining config definitions are specific + * to the board. + */ +/* Include the user supplied board definitions */ +#include "gaudin_lld_board.h" + +#endif /* GFX_USE_GAUDIN */ + +#endif /* GAUDIN_LLD_CONFIG_H */ +/** @} */ diff --git a/drivers/audio/gadc/readme.txt b/drivers/audio/gadc/readme.txt new file mode 100644 index 00000000..1d3877e8 --- /dev/null +++ b/drivers/audio/gadc/readme.txt @@ -0,0 +1,6 @@ +This driver uses the generic GADC driver to provide a GAUDIN device. + +It supports whatever high speed device channels that your GADC driver and board supports. + +For stereo, the samples are interleaved. Remember to allocate enough space for two samples per +sample period. |