From 8c283cb2623a31a2c01a84c46ff3b18e3080f134 Mon Sep 17 00:00:00 2001 From: Theodor Chikin Date: Thu, 9 Oct 2025 17:26:22 +0300 Subject: [PATCH] added BF_enums.h and fpga_regs.h to git index --- l502_BF_enums.h | 175 +++++++++++++++++++++++++++++++++++++++ l502_fpga_regs.h | 208 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 383 insertions(+) create mode 100644 l502_BF_enums.h create mode 100644 l502_fpga_regs.h diff --git a/l502_BF_enums.h b/l502_BF_enums.h new file mode 100644 index 0000000..01eed4b --- /dev/null +++ b/l502_BF_enums.h @@ -0,0 +1,175 @@ +/*********************************************************************//** + @addtogroup cmd_process + @{ + @file l502_bf_cmd_defs.h Файл содержит определения, + которые используются для передачи команд от ПК в DSP + (определения команд, их параметров, результатов выполнения) + @date 28.03.2012 + @author Borisov Alexey + *************************************************************************/ +#ifndef L502_BF_CMD_DEFS_H_ +#define L502_BF_CMD_DEFS_H_ + +/** Максимальный размер данных, передавемых с командой в 32-битных словах */ +#define L502_BF_CMD_DATA_SIZE_MAX (1024) + + + +/** Статус команд управления сигнальным процессором */ +typedef enum { + L502_BF_CMD_STATUS_IDLE = 0x0, /**< Начальное состояние (команда вообщен не выполнялась) */ + L502_BF_CMD_STATUS_REQ = 0x5A01, /**< Передан запрос на обработку команды от ПК*/ + L502_BF_CMD_STATUS_PROGRESS = 0x5A02, /**< Сигнальный процессор начал обработку команды */ + L502_BF_CMD_STATUS_DONE = 0x5A03 /**< Команда выполнена. Результат выполнения в поле ret_code */ +} t_l502_bf_cmd_status; + + +/** Коды команд управления сигнальным процессором */ +typedef enum { + L502_BF_CMD_CODE_TEST = 0x01, /**< Запуск теста (параметр определяет тип теста) */ + L502_BF_CMD_CODE_SET_PARAM = 0x02, /**< Установить параметр (код параметра в поле param) */ + L502_BF_CMD_CODE_GET_PARAM = 0x03, /**< Прочитать текущее значение параметра */ + L502_BF_CMD_CODE_CONFIGURE = 0x04, /**< Сконфигурировать модуль в соответствии с ранее установленными параметрами */ + L502_BF_CMD_CODE_STREAM_EN = 0x05, /**< Разрешение потоков ввода/вывода */ + L502_BF_CMD_CODE_STREAM_DIS = 0x06, /**< Запрещение потоков ввода/вывода */ + L502_BF_CMD_CODE_STREAM_START = 0x07, /**< Запуск потоков ввода/вывода */ + L502_BF_CMD_CODE_STREAM_STOP = 0x08, /**< Останов потоков ввода/вывода */ + L502_BF_CMD_CODE_PRELOAD = 0x09, /**< Предзагрузка данных на ЦАП */ + L502_BF_CMD_CODE_ASYNC_OUT = 0x10, /**< Асинхронный вывод (куда - зависит от параметра) */ + L502_BF_CMD_CODE_ASYNC_DIG_IN = 0x11, /**< Асинхронный ввод с цифровых линий */ + L502_BF_CMD_CODE_ADC_GET_FRAME = 0x12, /**< Асинхронный ввод карда АЦП */ + L502_BF_CMD_CODE_FPGA_REG_WR = 0x13, /**< Запись в регистр FPGA (param --- адрес регистра, data0 --- значение) */ + L502_BF_CMD_CODE_FPGA_REG_RD = 0x14, /**< Чтение из регистра FPGA (param --- адрес регистра, ответ: resp0 --- значение) */ + L502_BF_CMD_CODE_GET_OUT_STATUS= 0x15, /**< Получение флагов статуса вывода */ + + L502_BF_USR_CMD_CODE_ECHO = 0x8001U, + L502_BF_USR_CMD_CODE_DATA_ECHO = 0x8002U, + //L502_BF_USR_CMD_CODE_ECHO = 0x8001U, + //L502_BF_USR_CMD_CODE_ECHO = 0x8001U, + +} t_l502_bf_cmd_code; + +#define L502_BF_CMD_CODE_USER 0x8000U /**< Код, с которого начинаются пользовательские команды */ +//#define BF_CMD_USER_MULT 0x8001U + + + +/** @brief Варианты тестов + + Коды тестов, передающиеся в параметре команды #L502_BF_CMD_CODE_TEST */ +typedef enum { + L502_BF_CMD_TEST_STOP = 0x00, /**< Останов выполняемого теста */ + L502_BF_CMD_TEST_GET_RESULT = 0x01, /**< Получение результата теста */ + L502_BF_CMD_TEST_ECHO = 0x10, /**< Тест эхо - возвращает те же данные что передавались */ + L502_BF_CMD_TEST_SPORT = 0x11, /**< Тест интерфейса SPORT в кольцевом режиме */ + L502_BF_CMD_TEST_SDRAM = 0x12, /**< Тест SDRAM памяти */ + L502_BF_CMD_TEST_SPI = 0x13 /**< Тест интерфейса SPI */ +} t_l502_bf_test_code; + + +/** @brief Устанавливаемые параметры + + Коды пареметров, устанавливаемых командой #L502_BF_CMD_CODE_SET_PARAM или + получаемых с помщью команды #L502_BF_CMD_CODE_GET_PARAM */ +typedef enum { + L502_BF_PARAM_FIRM_VERSION = 0x00, /**< Версия прошивки - 4 байта */ + L502_BF_PARAM_STREAM_MODE = 0x01, /**< Режим работы (запущен поток или нет) */ + L502_BF_PARAM_ENABLED_STREAMS = 0x02, /**< Какие потоки разрешены */ + L502_BF_PARAM_MODULE_INFO = 0x03, /**< Запись информации о модуле */ + L502_BF_PARAM_IN_BUF_SIZE = 0x10, /**< Размер буфера на преием */ + L502_BF_PARAM_CYCLE_BUF_SIZE = 0x11, /**< Размер буфера для записи циклического сигнала */ + L502_BF_PARAM_LCH_CNT = 0x20, /**< Количество логических каналов в таблице */ + L502_BF_PARAM_LCH = 0x21, /**< Параметры логического канала */ + L502_BF_PARAM_ADC_FREQ_DIV = 0x22, /**< Делитель частоты АЦП */ + L502_BF_PARAM_REF_FREQ_SRC = 0x23, /**< Выбор опорной частоты */ + L502_BF_PARAM_ADC_FRAME_DELAY = 0x24, /**< Значение межкадровой задержки */ + L502_BF_PARAM_SYNC_MODE = 0x25, /**< Режим синхронизации */ + L502_BF_PARAM_SYNC_START_MODE = 0x26, /**< Условие запуска синхронных потоков сбора данных */ + L502_BF_PARAM_ADC_COEF = 0x27, /**< Установка коэффициентов для заданного диапазона АЦП */ + L502_BF_PARAM_DAC_COEF = 0x28, /**< Установка коэффициентов для заданного канала ЦАП */ + L502_BF_PARAM_DIN_FREQ_DIV = 0x30, /**< Делитель частоты цифрового ввода */ + L502_BF_PARAM_DAC_FREQ_DIV = 0x31, /**< Делитель частоты вывода на ЦАП */ + L502_BF_PARAM_IN_STEP_SIZE = 0x32, /**< Шаг для обработки входных данных */ + L502_BF_PARAM_IN_STREAM_MODE = 0x100 /**< Режим работы потока на ввод */ +} t_l502_bf_params; + + + + + +/** @brief Тип асинхронного вывода + + Код, задающий в параметре команды команды #L502_BF_CMD_CODE_ASYNC_OUT, + куда должно выводится передаваемое значение */ +typedef enum { + L502_BF_CMD_ASYNC_TYPE_DOUT = 0x0, /**< Вывод на цифровые линии */ + L502_BF_CMD_ASYNC_TYPE_DAC1 = 0x1, /**< Вывод на первый канал ЦАП */ + L502_BF_CMD_ASYNC_TYPE_DAC2 = 0x2 /**< Вывод на второй канал ЦАП */ +} t_l502_bf_cmd_async_type; + +/** Коды завершения команд */ +typedef enum { + L502_BF_ERR_SUCCESS = 0, /**< Команда выполнена успешно */ + L502_BF_ERR_FIRST_CODE = -512, /**< Код ошибки, с которого начинаются отсальные коды. + Используется, чтобы разделить на верхнем уровне ошибки библиотеки и + возвращенные сигнальным процессором */ + L502_BF_ERR_UNSUP_CMD = -512, /**< Неизвестный код команды */ + L502_BF_ERR_CMD_OVERRUN = -513, /**< Пришла команда до того, как была завершена предыдущая */ + L502_BF_ERR_INVALID_CMD_PARAMS = -514, /**< Неверное значение параметра команды */ + L502_BF_ERR_INSUF_CMD_DATA = -515, /**< Недостаточное кол-во данных передано с командой */ + L502_BF_ERR_STREAM_RUNNING = -516, /**< Команда не допустима при запущеном сборе, а сбор запущен */ + L502_BF_ERR_STREAM_STOPPED = -517, /**< Команда допустима только при запущеном сборе, а сбор остановлен */ + L502_BF_ERR_NO_TEST_IN_PROGR = -518, /**< Сейчас не выполняется никакого теста */ + L502_BF_ERR_TEST_VALUE = -519 /**< Считано неверное значение при выполнении теста */ +} t_l502_bf_err_code; + + +/** Режим работы сигнального процессора */ +typedef enum { + L502_BF_MODE_IDLE = 0, /**< Ждущий режим, поток не запущен */ + L502_BF_MODE_STREAM = 1, /**< Запущены потоки ввода-вывода */ + L502_BF_MODE_TEST = 2 /**< Тестовый режим */ +} t_l502_bf_mode; + +/** Возможности, поддерживаемые прошивкой blackfin */ +typedef enum { + L502_BF_FEATURE_FPGA_REG_ACCESS = 0x1, /**< Признак, что реализованы команды + прямого доступа к регистрам FPGA */ + L502_BF_FEATURE_OUT_STATUS_FLAGS = 0x2 /**< Признак, что реализована команда + #L502_BF_CMD_CODE_GET_OUT_STATUS */ +} t_l502_bf_features; + +/** @brief Параметры команды + + Структура описывает расположение полей в области памяти BlackFin, используемой + для передачи команд между персональным компьютером и сигнальным процессором */ +typedef struct { + uint16_t code; /**< Код команды из #t_l502_bf_cmd_code */ + uint16_t status; /**< Статус выполнения - в обработчике не изменяется */ + uint32_t param; /**< Параметр команды */ + int32_t result; /**< Код результата выполнения команды */ + uint32_t data_size; /**< Количество данных, переданных с командой или возвращенных с ответом в 32-битных словах */ + uint32_t data[L502_BF_CMD_DATA_SIZE_MAX]; /**< Данные, передаваемые с командой и/или в качестве результата */ +} t_l502_bf_cmd; + + +/** @brief Результат выполнения теста + + Структура описывает параметры выполняемого теста, возвращаемые в качестве + данных на команду #L502_BF_CMD_CODE_TEST с параметром + #L502_BF_CMD_TEST_GET_RESULT */ +typedef struct { + uint32_t test; /**< Номер выполняемого теста */ + uint32_t run; /**< Признак, запущен ли сейчас тест */ + uint32_t stage; /**< Этап выполнения теста */ + uint32_t cntr; /**< Счетчик - сколько раз прошел тест */ + int32_t err; /**< Код ошибки выполнения теста */ + uint32_t last_addr; /**< Последний используемый адрес */ + uint32_t last_wr; /**< Последнее записанное значение */ + uint32_t last_rd; /**< Последнее считанное значение */ +} t_l502_bf_test_res; + +/** @} */ + +#endif + diff --git a/l502_fpga_regs.h b/l502_fpga_regs.h new file mode 100644 index 0000000..8d07110 --- /dev/null +++ b/l502_fpga_regs.h @@ -0,0 +1,208 @@ +#ifndef L5XX_REGS_H +#define L5XX_REGS_H + +#define L583_BF_ADDR_ENDPROG (0xFFFFFFFCUL) + + +#define L502_MAX_PAGES_CNT 252 + +#define L502_BF_SDRAM_SIZE (32UL*1024*1024) + +#define L502_BF_MEMADDR_CMD 0xFF800800 + + +#define L502_BF_CMD_READ 0x0001 +#define L502_BF_CMD_WRITE 0x0002 +#define L502_BF_CMD_HIRQ 0x0004 +#define L502_BF_CMD_HDMA_RST 0x0008 + + +/********************* Адреса регистров блока EEPROM *************************/ +#define L502_REGS_EEPROM_BLOCK 0x0100 + +#define L502_REGS_EEPROM_SET_RD_ADDR (L502_REGS_EEPROM_BLOCK + 0) +#define L502_REGS_EEPROM_RD_DWORD (L502_REGS_EEPROM_BLOCK + 1) +#define L502_REGS_EEPROM_RD_STATUS (L502_REGS_EEPROM_BLOCK + 2) +#define L502_REGS_EEPROM_WR_STATUS_EN (L502_REGS_EEPROM_BLOCK + 3) +#define L502_REGS_EEPROM_WR_EN (L502_REGS_EEPROM_BLOCK + 4) +#define L502_REGS_EEPROM_WR_DIS (L502_REGS_EEPROM_BLOCK + 5) +#define L502_REGS_EEPROM_WR_STATUS (L502_REGS_EEPROM_BLOCK + 6) +#define L502_REGS_EEPROM_ERASE_4K (L502_REGS_EEPROM_BLOCK + 7) +#define L502_REGS_EEPROM_ERASE_64K (L502_REGS_EEPROM_BLOCK + 8) +#define L502_REGS_EEPROM_WR_BYTE (L502_REGS_EEPROM_BLOCK + 9) +#define L502_REGS_EEPROM_HARD_WR_STATUS_EN (L502_REGS_EEPROM_BLOCK + 0xF) +#define L502_REGS_HARD_ID (L502_REGS_EEPROM_BLOCK + 0xA) +#define L502_REGS_JEDEC_RD_ID (L502_REGS_EEPROM_BLOCK + 0xB) + +/********************* Адреса регистров с отладочной информацией **************/ +#define L502_REGS_DBG_BLOCK 0x0140 +#define L502_REGS_DBG_EVENTS (L502_REGS_DBG_BLOCK + 0) +#define L502_REGS_DBG_LAST_ABORT_ADDR (L502_REGS_DBG_BLOCK + 8) +#define L502_REGS_DBG_LAST_NACK_ADDR (L502_REGS_DBG_BLOCK + 9) +#define L502_REGS_DBG_LINK_REPLAY_CNT (L502_REGS_DBG_BLOCK + 10) + +/********************* Адреса регистров блока IOHARD **************************/ +#define L502_REGS_IOHARD_BLOCK 0x0200 +//Адрес Control Table +#define L502_REGS_IOHARD_LTABLE (L502_REGS_IOHARD_BLOCK+0) +#define L502_REGS_IOHARD_LTABLE_MAX_SIZE 0x100 // Максимальный размер Control Table + +#define L502_REGS_IOHARD_LCH_CNT (L502_REGS_IOHARD_BLOCK+0x100) +#define L502_REGS_IOHARD_ADC_FREQ_DIV (L502_REGS_IOHARD_BLOCK+0x102) +#define L502_REGS_IOHARD_ADC_FRAME_DELAY (L502_REGS_IOHARD_BLOCK+0x104) +#define L502_REGS_IOHARD_DIGIN_FREQ_DIV (L502_REGS_IOHARD_BLOCK+0x106) +#define L502_REGS_IOHARD_IO_MODE (L502_REGS_IOHARD_BLOCK+0x108) +#define L502_REGS_IOHARD_GO_SYNC_IO (L502_REGS_IOHARD_BLOCK+0x10A) +#define L502_REGS_IOHARD_PRELOAD_ADC (L502_REGS_IOHARD_BLOCK+0x10C) +#define L502_REGS_IOHARD_ASYNC_OUT (L502_REGS_IOHARD_BLOCK+0x112) +#define L502_REGS_IOHARD_LED (L502_REGS_IOHARD_BLOCK+0x114) +#define L502_REGS_IOHARD_DIGIN_PULLUP (L502_REGS_IOHARD_BLOCK+0x116) +#define L502_REGS_IOHARD_OUTSWAP_BFCTL (L502_REGS_IOHARD_BLOCK+0x118) +#define L502_REGS_IOHARD_OUTSWAP_ERROR (L502_REGS_IOHARD_BLOCK+0x120) + + + +/********************* Адреса регистров блока IOARITH **************************/ +#define L502_REGS_IOARITH_BLOCK 0x0400 +#define L502_REGS_IOARITH_B10 L502_REGS_IOARITH_BLOCK +#define L502_REGS_IOARITH_B5 (L502_REGS_IOARITH_BLOCK+0x01) +#define L502_REGS_IOARITH_B2 (L502_REGS_IOARITH_BLOCK+0x02) +#define L502_REGS_IOARITH_B1 (L502_REGS_IOARITH_BLOCK+0x03) +#define L502_REGS_IOARITH_B05 (L502_REGS_IOARITH_BLOCK+0x04) +#define L502_REGS_IOARITH_B02 (L502_REGS_IOARITH_BLOCK+0x05) +#define L502_REGS_IOARITH_K10 (L502_REGS_IOARITH_BLOCK+0x08) +#define L502_REGS_IOARITH_K5 (L502_REGS_IOARITH_BLOCK+0x09) +#define L502_REGS_IOARITH_K2 (L502_REGS_IOARITH_BLOCK+0x0A) +#define L502_REGS_IOARITH_K1 (L502_REGS_IOARITH_BLOCK+0x0B) +#define L502_REGS_IOARITH_K05 (L502_REGS_IOARITH_BLOCK+0x0C) +#define L502_REGS_IOARITH_K02 (L502_REGS_IOARITH_BLOCK+0x0D) +#define L502_REGS_IOARITH_ADC_FREQ_DIV (L502_REGS_IOARITH_BLOCK+0x12) +#define L502_REGS_IOARITH_IN_STREAM_ENABLE (L502_REGS_IOARITH_BLOCK+0x19) +#define L502_REGS_IOARITH_DIN_ASYNC (L502_REGS_IOARITH_BLOCK+0x1A) + + +/********************* Адреса регистров блока управления BlackFin'ом **********/ +#define L502_REGS_BF_CTL_BLOCK 0 +#define L502_REGS_BF_CTL (L502_REGS_BF_CTL_BLOCK+0) +#define L502_REGS_BF_CMD (L502_REGS_BF_CTL_BLOCK+1) +#define L502_REGS_BF_STATUS (L502_REGS_BF_CTL_BLOCK+2) +#define L502_REGS_BF_IRQ (L502_REGS_BF_CTL_BLOCK+3) +#define L502_REGS_BF_IRQ_EN (L502_REGS_BF_CTL_BLOCK+4) +#define L502_REGS_BF_REQ_ADDR (L502_REGS_BF_CTL_BLOCK+5) +#define L502_REGS_BF_REQ_SIZE (L502_REGS_BF_CTL_BLOCK+6) +#define L502_REGS_BF_REQ_DATA (L502_REGS_BF_CTL_BLOCK+128) + +#define L502_BF_REQ_DATA_SIZE_MAX 128 +#define L502_BF_REQ_DATA_SIZE_MIN 8 + + +/********************* Адреса регистров блока DMA *****************************/ +#define L502_REGS_DMA_CTL_BLOCK 0x700 +#define L502_REGS_DMA_CAP (L502_REGS_DMA_CTL_BLOCK) +#define L502_REGS_DMA_EN (L502_REGS_DMA_CTL_BLOCK+1) +#define L502_REGS_DMA_DIS (L502_REGS_DMA_CTL_BLOCK+2) +#define L502_REGS_DMA_RST (L502_REGS_DMA_CTL_BLOCK+3) +#define L502_REGS_DMA_IRQ (L502_REGS_DMA_CTL_BLOCK+4) +#define L502_REGS_DMA_IRQ_EN (L502_REGS_DMA_CTL_BLOCK+5) +#define L502_REGS_DMA_IRQ_DIS (L502_REGS_DMA_CTL_BLOCK+6) + +#define L502_REGS_DMA_CH_PARAMS_SIZE (16 + L502_MAX_PAGES_CNT*4) +#define L502_DMA_CHNUM_IN 0 +#define L502_DMA_CHNUM_OUT 1 + +/* номер регистра, с которого начинаются параметры канала DMA */ +#define L502_REGS_DMA_CH_PARAMS(ch) (0x800 + L502_REGS_DMA_CH_PARAMS_SIZE*ch) +#define L502_REGS_DMA_CH_CTL(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 0) +#define L502_REGS_DMA_CH_CMP_CNTR(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 1) +#define L502_REGS_DMA_CH_CUR_CNTR(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 2) +#define L502_REGS_DMA_CH_CUR_POS(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 3) +#define L502_REGS_DMA_CH_PC_POS(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 4) + + +/* адреса для регистров страниц DMA АЦП */ +#define L502_REGS_DMA_CH_PAGES(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 16) +#define L502_REGS_DMA_CH_PAGE_ADDRL(ch,n) (L502_REGS_DMA_CH_PAGES(ch) + 4*(n)) +#define L502_REGS_DMA_CH_PAGE_ADDRH(ch,n) (L502_REGS_DMA_CH_PAGES(ch) + 4*(n)+1) +#define L502_REGS_DMA_CH_PAGE_LEN(ch,n) (L502_REGS_DMA_CH_PAGES(ch) + 4*(n)+2) + + + + + +#define L502_REGBIT_BF_STATUS_HWAIT_Pos 0 +#define L502_REGBIT_BF_STATUS_HWAIT_Msk (1UL << L502_REGBIT_BF_STATUS_HWAIT_Pos) + +#define L502_REGBIT_BF_STATUS_BUSY_Pos 1 +#define L502_REGBIT_BF_STATUS_BUSY_Msk (1UL << L502_REGBIT_BF_STATUS_BUSY_Pos) + + +/* описание отдельных битов регистров */ +#define L502_REGBIT_DMA_CTL_PACK_SIZE_Pos 0 +#define L502_REGBIT_DMA_CTL_PACK_SIZE_Msk (0xFFUL << L502_REGBIT_DMA_CTL_PACK_SIZE_Pos) + +#define L502_REGBIT_DMA_CTL_PAGE_CNT_Pos 16 +#define L502_REGBIT_DMA_CTL_PAGE_CNT_Msk (0xFFUL << L502_REGBIT_DMA_CTL_PAGE_CNT_Pos) + +#define L502_REGBIT_DMA_CTL_AUTOSTOP_Pos 31 +#define L502_REGBIT_DMA_CTL_AUTOSTOP_Msk (0x1UL << L502_REGBIT_DMA_CTL_AUTOSTOP_Pos) + +#define L502_REGBIT_DMA_CTL_PC_WAIT_Pos 30 +#define L502_REGBIT_DMA_CTL_PC_WAIT_Msk (0x1UL << L502_REGBIT_DMA_CTL_PC_WAIT_Pos) + +#define L502_REGBIT_DMA_CH_ADC_Pos 0 +#define L502_REGBIT_DMA_CH_ADC_Msk (0x1UL << L502_REGBIT_DMA_CH_ADC_Pos) + +#define L502_REGBIT_DMA_CH_DAC_Pos 1 +#define L502_REGBIT_DMA_CH_DAC_Msk (0x1UL << L502_REGBIT_DMA_CH_DAC_Pos) + + + +#define L502_REGBIT_BF_CTL_BF_RESET_Pos 1 +#define L502_REGBIT_BF_CTL_BF_RESET_Msk (0x1UL << L502_REGBIT_BF_CTL_BF_RESET_Pos) + + +#define L502_REGBIT_BF_CTL_HOST_WAIT_Pos 3 +#define L502_REGBIT_BF_CTL_HOST_WAIT_Msk (0x1UL << L502_REGBIT_BF_CTL_HOST_WAIT_Pos) + +#define L502_REGBIT_BF_CTL_DSP_MODE_Pos 4 +#define L502_REGBIT_BF_CTL_DSP_MODE_Msk (0x1UL << L502_REGBIT_BF_CTL_DSP_MODE_Pos) + +#define L502_REGBIT_BF_CTL_DBG_MODE_Pos 5 +#define L502_REGBIT_BF_CTL_DBG_MODE_Msk (0x1UL << L502_REGBIT_BF_CTL_DBG_MODE_Pos) + +#define L502_REGBIT_BF_CTL_CLK_DIV_Pos 8 +#define L502_REGBIT_BF_CTL_CLK_DIV_Msk (0xFUL << L502_REGBIT_BF_CTL_CLK_DIV_Pos) + +#define L502_REGBIT_DMA_CURPOS_PAGE_Pos 24 +#define L502_REGBIT_DMA_CURPOS_PAGE_Msk (0xFFUL << L502_REGBIT_DMA_CURPOS_PAGE_Pos) + +#define L502_REGBIT_ADC_SLV_CLK_LOCK_Pos 31 +#define L502_REGBIT_ADC_SLV_CLK_LOCK_Msk (0x1UL << L502_REGBIT_ADC_SLV_CLK_LOCK_Pos) + + + +#define L502_REGBIT_IOHARD_OUT_SWAP_Pos 0 +#define L502_REGBIT_IOHARD_OUT_SWAP_Msk (0x1UL << L502_REGBIT_IOHARD_OUT_SWAP_Pos) + +#define L502_REGBIT_IOHARD_OUT_TFS_EN_Pos 1 +#define L502_REGBIT_IOHARD_OUT_TFS_EN_Msk (0x1UL << L502_REGBIT_IOHARD_OUT_TFS_EN_Pos) + +#define L502_REGBIT_IOHARD_OUT_RING_Pos 2 +#define L502_REGBIT_IOHARD_OUT_RING_Msk (0x1UL << L502_REGBIT_IOHARD_OUT_RING_Pos) + +#define L502_REGBIT_IOHARD_OUT_RFS_EN_Pos 3 +#define L502_REGBIT_IOHARD_OUT_RFS_EN_Msk (0x1UL << L502_REGBIT_IOHARD_OUT_RFS_EN_Pos) + + + + + + + + +#define L502_REGBIT_DMA_IRQ_STEP_Msk(ch) (1UL << ch) +#define L502_REGBIT_DMA_IRQ_PAGE_Msk(ch) (1UL << (ch+8)) + + + +#endif // L5XX_REGS_H