/* * SWIC driver for MCT-04EM-3U evaluation kit * * Copyright (c) 2020 Elvees (support@elvees.com) * Author: Dmitry Evtushenko * */ #ifndef __reg_h #define __reg_h #if defined(CONFIG_MCT04) #include #endif //if defined(CONFIG_MCT04) #define MC_SWIC( n, a) MC_A( a + ((n) << 11)) /////////////////// SWIC registers: /////////////////// // регистр аппаратной версии контроллера (R): #define SWIC_HW_VER_REG(n) MC_SWIC_HW_VER(n) //- 0xA000 // регистр состояния (W/R): #define SWIC_STAT_REG(n) MC_SWIC_STATUS(n) //- 0xA004 #define SWIC_STAT_REG_ADDR(n) MC_SWIC( n, 0xA004) #define SWIC_STAT_DC_ERR (1<<0) //- Признак ошибки рассоединения (DisconnectError) #define SWIC_STAT_PAR_ERR (1<<1) //- Признак ошибки четности #define SWIC_STAT_ESC_ERR (1<<2) //- Признак ошибки в ESC последовательности #define SWIC_STAT_CREDIT_ERR (1<<3) //- Признак ошибки кредитования #define SWIC_STAT_ALL_ERRS (SWIC_STAT_DC_ERR | SWIC_STAT_PAR_ERR | SWIC_STAT_ESC_ERR | SWIC_STAT_CREDIT_ERR) #define SWIC_STAT_NOCON_ERRS (SWIC_STAT_PAR_ERR | SWIC_STAT_ESC_ERR | SWIC_STAT_CREDIT_ERR) #define SWIC_STAT_LINK_OFS 5 //- Состояние блока Link interface #define SWIC_STAT_LINK_MSK 0x7 #define SWIC_STAT_LINK_RST 0 //- Error Reset (исходное состояние); #define SWIC_STAT_LINK_WAIT 1 //- Error Wait; #define SWIC_STAT_LINK_READY 2 //- Ready; #define SWIC_STAT_LINK_START 3 //- Started #define SWIC_STAT_LINK_CONNECT 4 //- Connecting; #define SWIC_STAT_LINK_RUN 5 //- Run. #define SWIC_STAT_RX_BUF_FUL (1<<8) //- Состояние буфера приема: буфер полон #define SWIC_STAT_RX_BUF_EMPTY (1<<9) //- Буфер приема пуст #define SWIC_STAT_TX_BUF_FULL (1<<10) //- Состояние буфера передачи: буфер полон #define SWIC_STAT_TX_BUF_EMPTY (1<<11) //- Буфер передачи пуст #define SWIC_STAT_GOT_FIRST_BIT (1<<12) //- Состояние принятого первого бита из канала: бит принят #define SWIC_STAT_CONNECTED (1<<13) //- Соединение установлено (LINK_RUN=5) #define SWIC_STAT_GOT_TIME (1<<14) //- Принят маркер времени из сети: Принят маркер времени #define SWIC_STAT_GOT_INT (1<<15) //- Принят код распределенного прерывания из сети #define SWIC_STAT_GOT_ACK (1<<16) //- Принят код подтверждения из сети #define SWIC_STAT_FL_CONTROL (1<<17) //- управляющий код ??? #define SWIC_STAT_INT_LINK (1<<18) //- Признак прерывания LINK (соединение установлено) #define SWIC_STAT_INT_ERR (1<<19) //- Признак прерывания ERR (обнаружена ошибка в канале) #define SWIC_STAT_INT_TIME (1<<20) //- Признак прерывания TIME (получен управляющий код) #define SWIC_STAT_CC_11 (1<<21) //- Признак принятия управляющего кода C[7..6]=11 #define SWIC_STAT_CC_01 (1<<22) //- Признак принятия управляющего кода C[7..6]=01 #define SWIC_STAT_S_LVDS_RX (1<<30) //- Значение линии LVDS Sin при MODE_CR[29]=1 #define SWIC_STAT_D_LVDS_RX (1<<31) //- Значение линии LVDS Din при MODE_CR[29]=1 // регистр принятого управляющего символа (R): #define SWIC_RX_CODE_REG(n) MC_SWIC_RX_CODE(n) //- 0xA008 #define SWIC_RX_CODE_REG_ADDR(n) MC_SWIC( n, 0xA008) #define SWIC_RX_CODE_TIME_OFS 0 #define SWIC_RX_CODE_TIME_MSK 0xFF //- Значение маркера времени, принятого из сети последним #define SWIC_RX_CODE_INT_OFS 8 #define SWIC_RX_CODE_INT_MSK 0xFF //- Значение кода распределенного прерывания, // принятого из сети последним #define SWIC_RX_CODE_ACK_OFS 16 #define SWIC_RX_CODE_ACK_MSK 0xFF //- Значение кода подтверждения, принятого из сети последним #define SWIC_RX_CODE_CC_11_OFS 24 #define SWIC_RX_CODE_CC_11_MSK 0xFF //- Значение кода C[7..6]=11 принятого из сети последним // регистр управления режимом работы (W/R): #define SWIC_MODE_REG(n) MC_SWIC_MODE_CR(n) //- 0xA00C #define SWIC_MODE_REG_ADDR(n) MC_SWIC( n, 0xA00C) #define SWIC_MODE_LINK_DSBL (1<<0) //- Установка LinkDisabled для блока Link Interface #define SWIC_MODE_AUTOSTART (1<<1) //- Установка Autostart для блока Link Interface #define SWIC_MODE_LINKSTART (1<<2) //- Установка LinkStart для блока Link Interface #define SWIC_MODE_LINK_RST (1<<5) //- Сброс Link Interface #define SWIC_MODE_DMA_READY (1<<6) //- режим формирования признака готовности обмена // даннымис DMA SWIC #define SWIC_MODE_TEST_TYPE (1<<8) //- Тестовый тип режима работы #define SWIC_MODE_TX_SINGLE (1<<9) //- Включение режима Single на передачу #define SWIC_MODE_RX_SINGLE (1<<10) //- Включение режима Single на прием #define SWIC_MODE_LVDS_LOOPB (1<<11) //- Loopback (перед LVDS) #define SWIC_MODE_CODEC_LOOPB (1<<12) //- Loopback (перед кодеком) #define SWIC_MODE_LINK_LOOPB (1<<13) //- Loopback (перед Link Interface) #define SWIC_MODE_COEFF_10_WR (1<<14) //- азрешение модификации регистра коэффициента // для подсчета таймаутов #define SWIC_MODE_AUTO_SPEED (1<<15) //- при разрыве соединения коэффициент скорости // передачи будет автоматически устанавливаться // на 10 МГц #define SWIC_MODE_DIRQ_REGIME (1<<16) //- 5-битный режим передачи/приема кодов // распределенных прерываний #define SWIC_MODE_LINK_MSK (1<<18) //- отображать LINK-прерывания в регистрах STATUS и QSTR2 #define SWIC_MODE_ERR_MSK (1<<19) //- отображать ERR-прерывания в регистрах STATUS и QSTR2 #define SWIC_MODE_TIME_MSK (1<<20) //- отображать TIME-прерывания в регистрах STATUS и QSTR2 #define SWIC_MODE_CTR (1<<21) //- установка соединения без ожидания таймаутов #define SWIC_MODE_TCODE_MSK (1<<22) //- Маска формирования прерывания TIME при получении // тайм-кода (маркера времени) #define SWIC_MODE_INT_MSK (1<<23) //- Маска формирования прерывания TIME при получении кода // распределенного прерывания или кода подтверждения #define SWIC_MODE_CC_11_MSK (1<<24) //- Маска формирования прерывания TIME управляющего кода // C[7..6]=11 #define SWIC_MODE_CC_01_MSK (1<<25) //- Маска формирования прерывания TIME при получении // управляющего кода C[7..6]=01 #define SWIC_MODE_INT_TOUT_MSK (1<<26) //- Маска формирования прерывания TIME по факту таймаута // получения кода подтверждения #define SWIC_MODE_TOUT_ALLOW_OFS 28 #define SWIC_MODE_TOUT_ALLOW_MSK 0x3 //- азрешение контроля таймаутов получения кодов подтверждения #define SWIC_MODE_LVDS_TEST_MODE (1<<29) //- тестовый режим работы LVDS #define SWIC_MODE_S_LVDS_TX (1<<30) //- Значение для передачи на линию Sout LVDS #define SWIC_MODE_D_LVDS_TX (1<<31) //- Значение для передачи на линию Dout LVDS // регистр управления скоростью передачи (W/R): #define SWIC_TX_SPEED_REG(n) MC_SWIC_TX_SPEED(n) //- 0xA010 #define SWIC_TX_SPEED_REG_ADDR(n) MC_SWIC( n, 0xA010) #define SWIC_TX_SPEED_COEF_OFS 0 #define SWIC_TX_SPEED_COEF_MSK 0xFF //- скорость передачи данных: 0x01 - 5, 0x02 - 10, ... 0x50 - 400 #define SWIC_TX_SPEED_PLL_TX_EN (1<<8) //- разрешение работы PLL_TX_SWIC #define SWIC_TX_SPEED_LVDS_EN (1<<9) //- разрешение работы приемопередатчиков LVDS SWIC #define SWIC_TX_SPEED_TX_10_OFS 10 #define SWIC_TX_SPEED_TX_10_MSK 0xFF //- скорость передачи данных [0x01,0x50] #define SWIC_TX_SPEED_PLL_TX_EN_10 (1<<18) //- разрешение работы PLL_TX_SWIC // (=SWIC_TX_SPEED_PLL_TX_EN) #define SWIC_TX_SPEED_LVDS_EN_10 (1<<19) //- разрешение работы приемопередатчиков LVDS SWIC // (=SWIC_TX_SPEED_LVDS_EN) #define SWIC_TX_SPEED_COEFF_10_OFS 20 #define SWIC_TX_SPEED_COEFF_10_MSK 0x1FF //- коэффициент для подсчета таймаутов // установки соединения // регистр передаваемого управляющего символа (W/R): #define SWIC_TX_CODE_REG(n) MC_SWIC_TX_CODE(n) //- 0xA014 #define SWIC_TX_CODE_REG_ADDR(n) MC_SWIC( n, 0xA014) #define SWIC_TX_CODE_CODE_VAL_OFS 0 //- Значение управляющего кода для отправки в сеть #define SWIC_TX_CODE_CODE_VAL_MSK 0x3F #define SWIC_TX_CODE_CODE_TYPE_OFS 6 //- Тип управляющего кода для отправки в сеть #define SWIC_TX_CODE_CODE_TYPE_MSK 0x3 #define SWIC_TX_CODE_CODE_TYPE_TIME 0 // -код времени #define SWIC_TX_CODE_CODE_TYPE_INT 1 //- код прерывания #define SWIC_TX_CODE_CODE_TYPE_INT_CONF 2 //- код подтверждения прерывания // регистр измерителя скорости приема (R): #define SWIC_RX_SPEED_REG(n) MC_SWIC_RX_SPEED(n) //- 0xA018 #define SWIC_RX_SPEED_REG_ADDR(n) MC_SWIC( n, 0xA018) #define SWIC_RX_SPEED_OFS 0 //- Скорость приема данных #define SWIC_RX_SPEED_MSK 0xFF // регистр счетчика принятых пакетов ненулевой длины (R/W): #define SWIC_CNT_RX_PACK_REG(n) MC_SWIC_CNT_RX_PACK(n) //- 0xA01C #define SWIC_CNT_RX_PACK_REG_ADDR(n) MC_SWIC( n, 0xA01C) // регистр счетчика принятых пакетов нулевой длины (R/W): #define SWIC_CNT_RX0_PACK_REG(n) MC_SWIC_CNT_RX0_PACK(n) //- 0xA020 #define SWIC_CNT_RX0_PACK_REG_ADDR(n) MC_SWIC( n, 0xA020) // регистр кодов распределенных прерываний (младшая часть): #define SWIC_ISR_L_REG(n) MC_SWIC_ISR_L(n) //- 0xA024 // регистр кодов распределенных прерываний (старшая часть): #define SWIC_ISR_H_REG(n) MC_SWIC_ISR_H(n) //- 0xA028 // регистр достоверного маркера времени: #define SWIC_TRUE_TIME_REG(n) MC_SWIC_TRUE_TIME(n) //- 0xA02C #define SWIC_TRUE_TIME_MSK 0x3F // регистр размера таймаутов: #define SWIC_TOUT_CODE_REG(n) MC_SWIC_TOUT_CODE(n) //- 0xA030 #define SWIC_TOUT_CODE_GLOB_COU_OFS 0 //- период глобального счетчика #define SWIC_TOUT_CODE_GLOB_COU_MSK 0xFFFF #define SWIC_TOUT_CODE_LOC_COU_OFS 16 #define SWIC_TOUT_CODE_LOC_COU_MSK 0x1F //- таймаут ожидания кода подтверждения // (на код прерывания, отправленный // процессором через SWIC) #define SWIC_TOUT_CODE_LOC_COU2_OFS 21 #define SWIC_TOUT_CODE_LOC_COU2_MSK 0x1F //- таймаут ожидания кода подтверждения // (на код прерывания, принятый из сети) // Младшие разряды регистра флагов таймаутов ISR: #define SWIC_ISR_TOUT_L_REG(n) MC_SWIC_ISR_tout_L(n) //- 0xA034 // Старшие разряды регистра флагов таймаутов ISR: #define SWIC_ISR_TOUT_H_REG(n) MC_SWIC_ISR_tout_H(n) //- 0xA038 // регистр логического адреса: #define SWIC_LOG_ADDR_REG(n) MC_SWIC_LOG_ADDR(n) //- 0xA03C // SWIC DMA: // Доступ к регистрам любого канала SWIC DMA по его адресу: #define SWIC_DMA_CSR(addr) MC_R ((addr) + 0x0) // егистр управления и состояния канала #define SWIC_DMA_CSR_RUN (1<<0) //- Состояние работы канала DMA: состояние обмена данными (1) //#define SWIC_DMA_CSR_DIR (1<<1) //- Направление обмена данными: 1 – память по IR1 => память по IR0 #define SWIC_DMA_CSR_WN_OFS 2 #define SWIC_DMA_CSR_WN_MSK 0xF //- Пакет данных, который передается по коммутатору // за одно предоставление прямого доступа [0-F] (1-16 words) /*#define SWIC_DMA_CSR_EN64 (1<<6) //- Формат передаваемых данных : 1 – 64 разряда #define SWIC_DMA_CSR_START_DSP (1<<7) //- азрешение запуска работы DSP-ядра #define SWIC_DMA_CSR_MODE (1<<8) //- ежим модификации адреса регистра IR0: // 0 – линейный режим; 1 – режим с обратным переносом #define SWIC_DMA_CSR_2D (1<<9) //- ежим модификации адреса регистра IR1: // 0 – одномерный режим; 1 – двухмерный режим. #define SWIC_DMA_CSR_MASK (1<<10) //- Маска внешнего запроса прямого доступа nDMAR: (1–разрешен) #define SWIC_DMA_CSR_FLYBY (1<<11) //- Признак выполнения обмена данными между // внешней памятью и внешним устройством (1) */ #define SWIC_DMA_CSR_CHEN (1<<12) //- азрешение выполнения очередной процедуры самоинициализации (1) #define SWIC_DMA_CSR_IM (1<<13) //- разрешение установки признака END (1) #define SWIC_DMA_CSR_END (1<<14) //- Признак завершения передачи блока данных (1) #define SWIC_DMA_CSR_DONE (1<<15) //- Признак завершения передачи блока данных #define SWIC_DMA_CSR_WCX_OFS 16 #define SWIC_DMA_CSR_WCX_MSK 0xFFFF //- Число слов данных, которые должен передать канал DMA #define SWIC_DMA_CP(addr) MC_R ((addr) + 0x4) // егистр указателя цепочки канала #define SWIC_DMA_CP_START (1<<0) //- признак пуска самоинициализации #define SWIC_DMA_IR(addr) MC_R ((addr) + 0x8) // Индексный регистр внешней памяти канала #define SWIC_DMA_RUN(addr) MC_R ((addr) + 0xC) // Псевдорегистр управления состоянием бита RUN // MC_CRPLL reg fields: #define MC_CRPLL_CLK_SEL_CORE_OFS 0 #define MC_CRPLL_CLK_SEL_CORE_MSK 0x7F //- Коэффициент умножения/деления входной частоты // PLL_CORE (частота XTI(=10MHz), деленная на 2) #endif //!__reg_h