Менеджер XADC для Xilinx Zynq 7000
xadc-zynq7000
ЗОСРВ «Нейтрино»
armv7
Менеджер XADC предоставляет программный интерфейс для доступа к встроенному аналогово-цифровому преобразователю (XADC). Он позволяет читать внутренние параметры, такие как температура кристалла, напряжения питания, а также настраивать режимы преобразования, управлять внешними аналоговыми входами, задавать пороги срабатывания тревог.
Менеджер XADC создаёт устройство /dev/xadc. Открытие устройства автоматически включает XADC.
Команды devctl() для XADC в блоке регистров devcfg:
| Команда | Тип данных | Описание |
|---|---|---|
DCMD_XADC_CFG_INIT | - | Включить XADC |
DCMD_XADC_SET_CFG_REG | uint32_t | Задать конфигурацию XADC |
DCMD_XADC_GET_CFG_REG | uint32_t | Прочитать конфигурацию XADC |
DCMD_XADC_GET_MISC_STATUS | uint32_t | Прочитать статусы из Interface Miscellaneous Status |
DCMD_XADC_GET_MISC_CTRL_REG | uint32_t | Прочитать параметры из Interface Miscellaneous Control |
DCMD_XADC_RESET | - | Сбросить XADC |
DCMD_XADC_INTR_ENABLE | uint32_t | Включить заданные прерывания |
DCMD_XADC_INTR_DISABLE | uint32_t | Выключить заданные прерывания |
DCMD_XADC_INTR_GET_ENABLED | uint32_t | Прочитать маску включённых прерываний |
DCMD_XADC_INTR_GET_STATUS | uint32_t | Прочитать статус прерываний |
DCMD_XADC_INTR_CLEAR | uint32_t | Очистить заданные прерывания |
Команды devctl() для внутренних регистров XADC:
| Команда | Тип данных | Описание |
|---|---|---|
DCMD_XADC_GET_ADC_DATA | zynq7000_xadc_data_read_t | Прочитать преобразованные данные АЦП для указанного канала |
DCMD_XADC_GET_CALIB_COEFF | zynq7000_xadc_calib_coeff_read_t | Прочитать данные калибровочного коэффициента для указанного параметра |
DCMD_XADC_GET_MIN_MAX_MSRMT | zynq7000_xadc_min_max_measure_read_t | Прочитать максимальное/минимальное значение для указанного параметра |
DCMD_XADC_SET_AVG | uint8_t | Задать количество выборок, используемых для усреднения, для всех каналов |
DCMD_XADC_GET_AVG | uint8_t | Прочитать количество выборок, используемых для усреднения, для всех каналов |
DCMD_XADC_SET_SINGLE_CH_PARAM | zynq7000_xadc_single_ch_params_t | Установить параметры для Configuration Register 0 в режиме одиночного канала |
DCMD_XADC_SET_ALARM_ENABLES | zynq7000_xadc_alarm_enables_write_t | Установить маску включаемых тревог |
DCMD_XADC_GET_ALARM_ENABLES | uint16_t | Прочитать маску включаемых тревог |
DCMD_XADC_SET_CALIB_ENABLES | uint16_t | Установить маску включаемых типов калибровки |
DCMD_XADC_GET_CALIB_ENABLES | uint16_t | Прочитать маску включаемых типов калибровки |
DCMD_XADC_SET_SEQUENCER_MODE | uint8_t | Установить маску режима секвенсора каналов |
DCMD_XADC_GET_SEQUENCER_MODE | uint8_t | Прочитать маску режима секвенсора каналов |
DCMD_XADC_SET_ADC_CLK_DIVISOR | uint8_t | Задать делитель DCLK |
DCMD_XADC_GET_ADC_CLK_DIVISOR | uint8_t | Прочитать значение делителя DCLK |
DCMD_XADC_SET_SEQ_CH_ENABLES | zynq7000_xadc_seq_write_t | Включить указанные каналы в регистрах секвенсора АЦП |
DCMD_XADC_GET_SEQ_CH_ENABLES | uint32_t | Прочитать маску включённых каналов в регистрах секвенсора АЦП |
DCMD_XADC_SET_SEQ_AVG_ENABLES | zynq7000_xadc_seq_write_t | Включить усреднение для указанных каналов в регистрах секвенсора включения усреднения АЦП |
DCMD_XADC_GET_SEQ_AVG_ENABLES | uint32_t | Прочитать маску включённых усреднений для указанных каналов в регистрах секвенсора включения усреднения АЦП |
DCMD_XADC_SET_SEQ_INPUT_MODE | zynq7000_xadc_seq_write_t | Установить режим аналогового входа для указанных каналов в регистрах секвенсора аналоговых входов АЦП |
DCMD_XADC_GET_SEQ_INPUT_MODE | uint32_t | Прочитать режим аналогового входа для всех каналов в регистрах секвенсора аналоговых входов АЦП |
DCMD_XADC_SET_SEQ_ACQ_TIME | zynq7000_xadc_seq_write_t | Установить количество циклов выборки в регистрах секвенсора времени выборки АЦП |
DCMD_XADC_GET_SEQ_ACQ_TIME | uint32_t | Прочитать количество циклов выборки в регистрах секвенсора времени выборки АЦП |
DCMD_XADC_SET_ALARM_THRESHOLD | zynq7000_xadc_alarm_threshold_t | Задать пороговое значение для срабатывания тревоги |
DCMD_XADC_GET_ALARM_THRESHOLD | zynq7000_xadc_alarm_threshold_t | Прочитать пороговое значение для срабатывания тревоги |
DCMD_XADC_ENABLE_USER_OVER_TEMP | - | Разрешить возможность задания пороговой температуры отключения по сигналу OverTemp |
DCMD_XADC_DISABLE_USER_OVER_TEMP | - | Запретить возможность задания пороговой температуры отключения по сигналу OverTemp |
DCMD_XADC_SET_SEQUENCER_EVENT | int | Включить режим событий (1) или непрерывный режим (0) |
DCMD_XADC_GET_SAMPLING_MODE | int | Прочитать режим выборки (режим событий или непрерывный режим) |
DCMD_XADC_SET_MUX_MODE | zynq7000_xadc_mux_mode_t | Установить режим внешнего мультиплексора |
DCMD_XADC_SET_POWER_DOWN_MODE | uint32_t | Настроить режим отключения питания. Используются макросы XADC_PD_MODE_* |
DCMD_XADC_GET_POWER_DOWN_MODE | uint32_t | Прочитать конфигурацию режима отключения питания |
DCMD_XADC_WRITE_INTERNAL_REG | zynq7000_xadc_internal_reg_t | Записать данные во внутренние регистры XADC |
DCMD_XADC_READ_INTERNAL_REG | zynq7000_xadc_internal_reg_t | Прочитать данные из внутренних регистров XADC |
typedef struct {uint8_t channel;uint16_t data;} zynq7000_xadc_data_read_t;
Поля структуры:
typedef struct {uint8_t coeff_type;uint16_t calib_coeff;} zynq7000_xadc_calib_coeff_read_t;
Поля структуры:
typedef struct {uint8_t measurement_type;uint16_t min_max_measure;} zynq7000_xadc_min_max_measure_read_t;
Поля структуры:
typedef struct {uint8_t channel;int increase_acq_cycles;int is_event_mode;int is_differential_mode;int result_code;} zynq7000_xadc_single_ch_params_t;
Поля структуры:
1) или 4 такта ADCCLK (0). 0) или выборки управляемой событиями (1). 0) или дифференциальный (1) режим для аналоговых входов. typedef struct {uint16_t mask;struct sigevent event;int enable;} zynq7000_xadc_alarm_enables_write_t;
Поля структуры:
typedef struct {uint32_t mask;int result_code;} zynq7000_xadc_seq_write_t;
Поля структуры:
typedef struct {uint8_t alarm_thr_reg;uint16_t value;} zynq7000_xadc_alarm_threshold_t;
Поля структуры:
typedef struct {int mux_mode;uint8_t channel;} zynq7000_xadc_mux_mode_t;
Поля структуры:
1 - включен, 0 - выключен. typedef struct {uint32_t offset;uint32_t data;} zynq7000_xadc_internal_reg_t;
Поля структуры:
| При использовании необходимо убедиться, что PL не препятствует работе XADC. |
Для использования вышеупомянутых макросов и структур необходимо подключить заголовочный файл hw/xadc.h.
BSP для систем на базе процессора Zynq 7000, драйверы
Предыдущий раздел: перейти