Files
E3-20260112-pitch/e3_176_ref-buding/devices/D3246/include/analog_mux.h
2026-01-12 18:46:01 +08:00

82 lines
1.8 KiB
C

/**
* @file analog_mux.h
* @brief Header file for functions of analog initialisation and mux control.
*
* @copyright Copyright (c) 2025 Semidrive Semiconductor.
* All rights reserved.
*/
#ifndef ANALOG_MUX_H_
#define ANALOG_MUX_H_
#include <types.h>
#include <sdrv_scr.h>
#define SINGLE_CHNL_POSITIVE 1u
#define ADC_ACMP_POS_CHNL(ch) ((SINGLE_CHNL_POSITIVE << 3) | (ch))
#define ADC_ACMP_NEG_CHNL(ch) (ch)
/*
* Specify a scr signal of an analog mux corresponding to its channel.
*/
struct channel_amux_scr {
uint16_t chnl;
scr_signal_t scr_sig;
};
/*
* Specify a group of analog mux scr signals corresponding to a device.
*/
struct device_amux_scr {
uintptr_t base;
const struct channel_amux_scr *chnl_amux;
uint32_t chnl_amux_cnt;
};
/*
* Specify a group of analog mux scr signals corresponding to a chip.
*/
struct chip_amux_scr {
uintptr_t scr_base;
const struct device_amux_scr *dev_amux;
uint32_t dev_amux_cnt;
struct chip_amux_scr *next;
};
/*
* Register a chip with its analog mux table to the chip list.
*/
void analog_chip_amux_register(struct chip_amux_scr *amux_scr);
/*
* Disable all analog mux of a chip.
*/
void analog_chip_amux_init(struct chip_amux_scr *amux_scr);
/*
* Disable all analog mux of the specified device.
*/
void analog_dev_amux_init(uintptr_t ana_dev_base);
/*
* Enable or disable the analog mux which the channel belongs to.
*/
void analog_dev_chnl_amux_cfg(uintptr_t ana_dev_base, uint16_t chnl, bool enable);
/*
* Disable all analog mux of ADC/ACMP device.
* And register their scr signals to the chip list.
*/
void analog_init(void);
/*
* Register all scr signals of a chip to the chip list.
*/
void analog_mux_register(void);
#endif /* ANALOG_MUX_H_ */