aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gaudio/gadc/gaudio_record_lld.c
blob: 6f4cb2def600695d00fa73be350270f767bde6c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * 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/gaudio/gadc/gaudio_record_lld.c
 * @brief   GAUDIO - Record Driver file for using the cpu ADC (via GADC).
 */

/**
 * We are now implementing the driver - pull in our channel table
 * from the board definitions.
 */
#define GAUDIO_RECORD_IMPLEMENTATION
#include "gfx.h"

#if GFX_USE_GAUDIO && GAUDIO_NEED_RECORD

/* Double check the GADC system is turned on */
#if !GFX_USE_GADC
	#error "GAUDIO - The GADC driver for GAUDIO requires GFX_USE_GADC to be TRUE"
#endif

/* Include the driver defines */
#include "src/gaudio/driver_record.h"

static void gadcCallbackI(void) {
	GDataBuffer *pd;

	pd = gadcHighSpeedGetDataI();
	if (pd)
		gaudioRecordSaveDataBlockI(pd);
}

/*===========================================================================*/
/* External declarations.                                                    */
/*===========================================================================*/

bool_t gaudio_record_lld_init(uint16_t channel, uint32_t frequency, ArrayDataFormat format) {
	/* Check the parameters */
	if (channel >= GAUDIO_RECORD_NUM_CHANNELS || frequency > GAUDIO_RECORD_MAX_SAMPLE_FREQUENCY || format != GAUDIO_RECORD_FORMAT1)
		return FALSE;

	/* Setup the high speed GADC */
	gadcHighSpeedInit(gaudio_gadc_physdevs[channel], frequency);

	/* Register ourselves for ISR callbacks */
	gadcHighSpeedSetISRCallback(gadcCallbackI);

	return TRUE;
}

void gaudio_record_lld_start(void) {
	gadcHighSpeedStart();
}

void gaudio_record_lld_stop(void) {
	gadcHighSpeedStop();
}

#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */