Skip to content

Commit

Permalink
bsp:cvitek: add pinmux for adc
Browse files Browse the repository at this point in the history
Signed-off-by: Chen Wang <[email protected]>
  • Loading branch information
unicornx authored and Rbb666 committed Jul 16, 2024
1 parent 2c85bcb commit d8294de
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 2 deletions.
36 changes: 35 additions & 1 deletion bsp/cvitek/c906_little/board/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -154,11 +154,45 @@ menu "General Drivers Configuration"
default 32
endif

config BSP_USING_ADC
menuconfig BSP_USING_ADC
bool "Using ADC"
select RT_USING_ADC
default n

if BSP_USING_ADC
config BSP_USING_ADC_ACTIVE
bool "Enable ADC Controller in Active Domain"
default n

if BSP_USING_ADC_ACTIVE
config BSP_ACTIVE_ADC1_PINNAME
string "Pin name for VIN1 in Active Domain"
default ""
config BSP_ACTIVE_ADC2_PINNAME
string "Pin name for VIN2 in Active Domain"
default ""
config BSP_ACTIVE_ADC3_PINNAME
string "Pin name for VIN3 in Active Domain"
default ""
endif

config BSP_USING_ADC_NODIE
bool "Enable ADC Controller in No-die Domain"
default n

if BSP_USING_ADC_NODIE
config BSP_NODIE_ADC1_PINNAME
string "Pin name for VIN1 in No-die Domain"
default ""
config BSP_NODIE_ADC2_PINNAME
string "Pin name for VIN2 in No-die Domain"
default ""
config BSP_NODIE_ADC3_PINNAME
string "Pin name for VIN3 in No-die Domain"
default ""
endif
endif

config BSP_USING_SPI
bool "Using SPI"
select RT_USING_SPI
Expand Down
36 changes: 35 additions & 1 deletion bsp/cvitek/cv18xx_risc-v/board/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -154,11 +154,45 @@ menu "General Drivers Configuration"
default 49
endif

config BSP_USING_ADC
menuconfig BSP_USING_ADC
bool "Using ADC"
select RT_USING_ADC
default n

if BSP_USING_ADC
config BSP_USING_ADC_ACTIVE
bool "Enable ADC Controller in Active Domain"
default n

if BSP_USING_ADC_ACTIVE
config BSP_ACTIVE_ADC1_PINNAME
string "Pin name for VIN1 in Active Domain"
default ""
config BSP_ACTIVE_ADC2_PINNAME
string "Pin name for VIN2 in Active Domain"
default ""
config BSP_ACTIVE_ADC3_PINNAME
string "Pin name for VIN3 in Active Domain"
default ""
endif

config BSP_USING_ADC_NODIE
bool "Enable ADC Controller in No-die Domain"
default n

if BSP_USING_ADC_NODIE
config BSP_NODIE_ADC1_PINNAME
string "Pin name for VIN1 in No-die Domain"
default ""
config BSP_NODIE_ADC2_PINNAME
string "Pin name for VIN2 in No-die Domain"
default ""
config BSP_NODIE_ADC3_PINNAME
string "Pin name for VIN3 in No-die Domain"
default ""
endif
endif

config BSP_USING_SPI
bool "Using SPI"
select RT_USING_SPI
Expand Down
92 changes: 92 additions & 0 deletions bsp/cvitek/drivers/drv_adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_adc.h"
#include "drv_pinmux.h"

#define DBG_LEVEL DBG_LOG
#include <rtdbg.h>
Expand Down Expand Up @@ -100,10 +101,101 @@ static const struct rt_adc_ops _adc_ops =
.convert = _adc_convert,
};


#if defined(BOARD_TYPE_MILKV_DUO) || defined(BOARD_TYPE_MILKV_DUO_SPINOR)

/*
* cv180xb supports
* - adc1 & adc2 for active domain
* - adc3 for no-die domain
*
* FIXME: currnet adc driver only support adc1 in active domain
*/
#ifdef BSP_USING_ADC_ACTIVE
static const char *pinname_whitelist_adc1_active[] = {
"ADC1",
NULL,
};
static const char *pinname_whitelist_adc2_active[] = {
NULL,
};
static const char *pinname_whitelist_adc3_active[] = {
NULL,
};
#endif

#ifdef BSP_USING_ADC_NODIE
static const char *pinname_whitelist_adc1_nodie[] = {
NULL,
};
static const char *pinname_whitelist_adc2_nodie[] = {
NULL,
};
static const char *pinname_whitelist_adc3_nodie[] = {
NULL,
};
#endif

#elif defined(BOARD_TYPE_MILKV_DUO256M) || defined(BOARD_TYPE_MILKV_DUO256M_SPINOR)

/*
* sg2002 supports
* - adc1 for active domain
* - adc1/adc2/adc3 for no-die domain
*
* FIXME: currnet adc driver only support adc1 in active domain
*/

#ifdef BSP_USING_ADC_ACTIVE
static const char *pinname_whitelist_adc1_active[] = {
"ADC1",
NULL,
};
static const char *pinname_whitelist_adc2_active[] = {
NULL,
};
static const char *pinname_whitelist_adc3_active[] = {
NULL,
};
#endif

#ifdef BSP_USING_ADC_NODIE
static const char *pinname_whitelist_adc1_nodie[] = {
NULL,
};
static const char *pinname_whitelist_adc2_nodie[] = {
NULL,
};
static const char *pinname_whitelist_adc3_nodie[] = {
NULL,
};
#endif

#else
#error "Unsupported board type!"
#endif

static void rt_hw_adc_pinmux_config()
{
#ifdef BSP_USING_ADC_ACTIVE
pinmux_config(BSP_ACTIVE_ADC1_PINNAME, XGPIOB_3, pinname_whitelist_adc1_active);
pinmux_config(BSP_ACTIVE_ADC2_PINNAME, XGPIOB_6, pinname_whitelist_adc2_active);
/* cv1800b & sg2002 don't support ADC3 either in active domain */
#endif

#ifdef BSP_USING_ADC_NODIE
pinmux_config(BSP_NODIE_ADC1_PINNAME, PWR_GPIO_2, pinname_whitelist_adc1_nodie);
pinmux_config(BSP_NODIE_ADC2_PINNAME, PWR_GPIO_1, pinname_whitelist_adc2_nodie);
pinmux_config(BSP_NODIE_ADC3_PINNAME, PWR_VBAT_DET, pinname_whitelist_adc3_nodie);
#endif
}

int rt_hw_adc_init(void)
{
rt_uint8_t i;

rt_hw_adc_pinmux_config();

for (i = 0; i < sizeof(adc_dev_config) / sizeof(adc_dev_config[0]); i++)
{
cvi_do_calibration(adc_dev_config[i].base);
Expand Down

0 comments on commit d8294de

Please sign in to comment.