From 6ee8b005ae3ee2bc48ea6ac972b0d3b2a2949608 Mon Sep 17 00:00:00 2001 From: Andrew Hannam Date: Fri, 1 Mar 2013 09:04:52 +1000 Subject: GAUDIN implemented with GADC driver --- drivers/gaudin/gadc/gaudin_lld.c | 76 +++++++++++++++++++++ drivers/gaudin/gadc/gaudin_lld.mk | 5 ++ .../gaudin/gadc/gaudin_lld_board_olimexsam7ex256.h | 60 ++++++++++++++++ drivers/gaudin/gadc/gaudin_lld_config.h | 79 ++++++++++++++++++++++ 4 files changed, 220 insertions(+) create mode 100644 drivers/gaudin/gadc/gaudin_lld.c create mode 100644 drivers/gaudin/gadc/gaudin_lld.mk create mode 100644 drivers/gaudin/gadc/gaudin_lld_board_olimexsam7ex256.h create mode 100644 drivers/gaudin/gadc/gaudin_lld_config.h (limited to 'drivers/gaudin') diff --git a/drivers/gaudin/gadc/gaudin_lld.c b/drivers/gaudin/gadc/gaudin_lld.c new file mode 100644 index 00000000..12e6aced --- /dev/null +++ b/drivers/gaudin/gadc/gaudin_lld.c @@ -0,0 +1,76 @@ +/* + ChibiOS/GFX - Copyright (C) 2012, 2013 + Joel Bodenmann aka Tectu + + This file is part of ChibiOS/GFX. + + ChibiOS/GFX 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. + + ChibiOS/GFX 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 . +*/ +/** + * @file drivers/gaudin/gadc/gaudin.c + * @brief GAUDIN - Driver file for using the cpu ADC (via GADC). + * + * @addtogroup GAUDIN + * + * @{ + */ +#include "ch.h" +#include "hal.h" + +/** + * 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 "gaudin/lld/gaudin_lld.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 gadc_lld_start(void) { + gadcHighSpeedStart(); +} + +void gadc_lld_stop(void) { + gadcHighSpeedStop(); +} + +#endif /* GFX_USE_GAUDIN */ +/** @} */ diff --git a/drivers/gaudin/gadc/gaudin_lld.mk b/drivers/gaudin/gadc/gaudin_lld.mk new file mode 100644 index 00000000..c969e80b --- /dev/null +++ b/drivers/gaudin/gadc/gaudin_lld.mk @@ -0,0 +1,5 @@ +# List the required driver. +GFXSRC += $(GFXLIB)/drivers/gaudin/gadc/gaudin_lld.c + +# Required include directories +GFXINC += $(GFXLIB)/drivers/gaudin/gadc diff --git a/drivers/gaudin/gadc/gaudin_lld_board_olimexsam7ex256.h b/drivers/gaudin/gadc/gaudin_lld_board_olimexsam7ex256.h new file mode 100644 index 00000000..283a2914 --- /dev/null +++ b/drivers/gaudin/gadc/gaudin_lld_board_olimexsam7ex256.h @@ -0,0 +1,60 @@ +/* + ChibiOS/GFX - Copyright (C) 2012, 2013 + Joel Bodenmann aka Tectu + + This file is part of ChibiOS/GFX. + + ChibiOS/GFX 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. + + ChibiOS/GFX 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 . +*/ + +/** + * @file drivers/gaudin/gadc/gaudin_lld_board_olimexsam7ex256.h + * @brief GAUDIN Driver board config file for the Olimex SAM7EX256 board + * + * @addtogroup GAUDIN + * @{ + */ + +#ifndef _GAUDIN_LLD_BOARD_OLIMEXSAM7EX256_H +#define _GAUDIN_LLD_BOARD_OLIMEXSAM7EX256_H + +/*===========================================================================*/ +/* Audio inputs on this board */ +/*===========================================================================*/ + +/** + * @brief The number of audio channels supported by this driver + */ +#define GAUDIN_NUM_CHANNELS 1 + +/** + * @brief The list of audio channels and their uses + * @{ + */ +#define GAUDIN_MICROPHONE 0 +/** @} */ + +/** + * @brief The following defines are for the low level driver use only + * @{ + */ +#ifdef GAUDIN_LLD_IMPLEMENTATION + static uint32_t gaudin_lld_physdevs[GAUDIN_NUM_CHANNELS] = { + GADC_PHYSDEV_MICROPHONE, + }; +#endif +/** @} */ + +#endif /* _GAUDIN_LLD_BOARD_OLIMEXSAM7EX256_H */ +/** @} */ diff --git a/drivers/gaudin/gadc/gaudin_lld_config.h b/drivers/gaudin/gadc/gaudin_lld_config.h new file mode 100644 index 00000000..402e4180 --- /dev/null +++ b/drivers/gaudin/gadc/gaudin_lld_config.h @@ -0,0 +1,79 @@ +/* + ChibiOS/GFX - Copyright (C) 2012, 2013 + Joel Bodenmann aka Tectu + + This file is part of ChibiOS/GFX. + + ChibiOS/GFX 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. + + ChibiOS/GFX 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 . +*/ + +/** + * @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. + */ +#if defined(GADC_USE_CUSTOM_BOARD) && GADC_USE_CUSTOM_BOARD + /* Include the user supplied board definitions */ + #include "gaudin_lld_board.h" +#elif defined(BOARD_OLIMEX_SAM7_EX256) + #include "gaudin_lld_board_olimexsam7ex256.h" +#else + /* Include the user supplied board definitions */ + #include "gaudin_lld_board.h" +#endif + +#endif /* GFX_USE_GAUDIN */ + +#endif /* GAUDIN_LLD_CONFIG_H */ +/** @} */ -- cgit v1.2.3