/* * GigaSpaceWire switch driver for MC-30SF6EM-6U evaluation kit * * Copyright (c) 2019 Elvees (support@elvees.com) * Author: Dmitry Evtushenko * */ #ifndef __reg_h #define __reg_h #if defined(CONFIG_MC30SF6) #include #define GSPW_ADDR_OFS 0xA000 #endif //- defined(CONFIG_MC30SF6) /////////////////// GigaSpaceWire switch registers: /////////////////// // routing table register (RW): #define GSPW_RT_REG( addr) MC_R( GSPW_ADDR_OFS | 0x400 | addr) #define GSPW_RT_SEND_CFG_PORT (1<<0) //- Признак отправки пакета в конфигурационный порт #define GSPW_RT_SEND_SPW_PORT_OFS 1 //- Признак отправки пакета в SpW порт #define GSPW_RT_SEND_SPW_PORT_MSK 0x3 #define GSPW_RT_SEND_GSPW_PORT_OFS 3 //- Признак отправки пакета в GigaSpW порт #define GSPW_RT_SEND_GSPW_PORT_MSK 0xF #define GSPW_RT_PACK_PRIOR (1<<7) //- Уровень приоритета пакета #define GSPW_RT_DIV_HDR (1<<8) //- Признак отделения заголовка #define GSPW_RT_FUNCT_ROUTE (1<<9) //- Признак функциональной маршрутизации (в данном проекте не используется) #define GSPW_RT_ADAPT_ROUTE (1<<10) //- Признак адаптивной маршрутизации по таблице маршрутизации #define GSPW_RT_VALID_STRING (1<<11) //- Признак действительности строки таблицы маршрутизации // регистр версии (R): #define GSPW_ID_VER_REG MC_GSPW_ID_VER //- 0xA000 // регистр идентификатора gigaSpWR (RW): #define GSPW_ID_SWITCH_REG MC_GSPW_ID_SWITCH //- 0xA004 // регистр идентификации сетевых линков gigmaiaSpWR (RW): #define GSPW_ID_NET_REG MC_GSPW_ID_NET //- 0xA008 #define GSPW_ID_NET_LINK_OFS 0 //- Поле идентификации сетевых линков. i разряд соответствует i порту, // если i разряд установлен в 1, то пакеты, рассылаемые широковещательно, // в этот порт рассылаться не будут. #define GSPW_ID_NET_LINK_MSK 0x3F // регистр режима блока коммутатора gigaSpWR 1 (RW): #define GSPW_MOD_REG MC_GSPW_MODE_R //- 0xA00C #define GSPW_MOD_KOEFF10_OFS 0 //- Значение коэффициента локальной частоты. #define GSPW_MOD_KOEFF10_MSK 0x1FF #define GSPW_MOD_PRIOR_WIND_LEN_OFS 9 //- Значение длительности окна смены приоритетов #define GSPW_MOD_PRIOR_WIND_LEN_MSK 0x1FFF #define GSPW_MOD_DMA_ENA (1<<23) //- азрешение работы блоков сопряжения с интерфейсом DMA #define GSPW_MOD_DMA_CLR_FIFO (1<<24) //- Очистка буферов блоков сопряжения с интерфейсом DMA #define GSPW_MOD_GIGASPWR_WE (1<<25) //- азрешение работы блока gigaSpWR // регистр режима блока коммутатора gigaSpWR 2 (RW): #define GSPW_MOD1_REG MC_GSPW_MODE_R1 //- 0xA010 #define GSPW_MOD1_CPU_INT_ACK_5B (1<<0) //- ежим обработки кодов распределенных прерываний при работе // (приеме/отправке) со стороны встроенного процессорного ядра. // если данное поле установлено в значение '1', то используются // 5-и битные коды распределенных прерываний. #define GSPW_MOD1_CPU_INT_CODE_OFS 1 //- Кодировка INT при работе (приеме/отправке) со стороны CPU. #define GSPW_MOD1_CPU_INT_CODE_MSK 0x7 #define GSPW_MOD1_CPU_ACK_CODE_OFS 4 //- Кодировка ACK при работе (приеме/отправке) со стороны CPU. #define GSPW_MOD1_CPU_ACK_CODE_MSK 0x7 // регистр состояния блока коммутатора gigaSpWR (RW): #define GSPW_STATE_REG MC_GSPW_STATE_R //- 0xA014 #define GSPW_STATE_GOT_TIME (1<<0) //- Признак получения маркера времени (GOT_TIME). #define GSPW_STATE_GOT_INT (1<<1) //- Признак получения кода распределенного прерывания (GOT_INT). #define GSPW_STATE_GOT_ACK (1<<2) //- Признак получения подтверждения (GOT_ACK). #define GSPW_STATE_GOT_C01_CODE (1<<3) //- Признак получения кода С01 #define GSPW_STATE_GOT_C11_CODE (1<<4) //- Признак получения кода С11 #define GSPW_STATE_SPW_CON_MSK_OFS 5 //- Признаки соединения по всем портам SpW и gigaSpW #define GSPW_STATE_SPW_CON_MSK 0x3F #define GSPW_STATE_SPW_ERR_MSK_OFS 11 //- Признаки разрыва соединения по всем портам SpW и gigaSpW #define GSPW_STATE_SPW_ERR_MSK 0x3F #define GSPW_STATE_PORT_CON_MSK_OFS 17 //- Флаги установки соединения по всем портам SpW и gigaSpW #define GSPW_STATE_PORT_CON_MSK 0x3F #define GSPW_STATE_PORT_ERR_MSK_OFS 23 //- Флаги разрыва соединения по всем портам SpW и gigaSpW #define GSPW_STATE_PORT_ERR_MSK 0x3F #define GSPW_STATE_INT_RST (1<<29) //- Признак получения команды сборса (External reset) // от удаленного сетевого администратора #define GSPW_STATE_GIGA_CON_MSK ((0x3C & GSPW_STATE_PORT_CON_MSK) << GSPW_STATE_PORT_CON_MSK_OFS) // 0x00780000 // регистр глобальных масок прерываний для встроенного процессорного ядра (RW): #define GSPW_RISC_IRQ_MSK_REG MC_GSPW_RISC_IRQ_MASK //- 0xA018 #define GSPW_RISC_IRQ_MSK_CON (1<<0) //- Маска прерывания по факту установки соединения #define GSPW_RISC_IRQ_MSK_DISCON (1<<1) //- Маска прерывания по факту разрыва соединения #define GSPW_RISC_IRQ_MSK_IA_CODE (1<<2) //- Маска прерывания по коду распределенного // прерывания и подтверждения #define GSPW_RISC_IRQ_MSK_TIME (1<<3) //- Маска установки прерывания по управляющему // коду при приходе маркера времени #define GSPW_RISC_IRQ_MSK_INT (1<<4) //- Маска установки прерывания по управляющему // коду при приходе кода распределенного преры-вания #define GSPW_RISC_IRQ_MSK_ACK (1<<5) //- Маска установки прерывания по управляющему // коду при приходе кода подтверждения #define GSPW_RISC_IRQ_MSK_C01 (1<<6) //- Маска установки прерывания по управляющему // коду при приходе С01 #define GSPW_RISC_IRQ_MSK_C11 (1<<7) //- Маска установки прерывания по управляющему // коду при приходе С11 #define GSPW_RISC_IRQ_MSK_RMT_RST (1<<8) //- Маска установки прерывания по приходу ко-манды // сброса от удаленного администратора #define GSPW_RISC_IRQ_MSK_ISR_TMOUT (1<<9) //- Маска установки прерывания по истечении таймаутов // Th, Tg, ISR_change #define GSPW_RISC_IRQ_MSK_TMOUT_ARB (1<<10) //- Маска прерывания по факту истечения тай-маута арбитража #define GSPW_RISC_IRQ_MSK_TMOUT_RCV (1<<11) //- Маска прерывания по факту истечения тай-маута // ожидания очередного символа при прие-ме. #define GSPW_RISC_IRQ_MSK_TSEND_SND (1<<12) //- Маска прерывания по факту истечения тай-маута // ожидания очередного символа при пере-даче // регистр управления автоматической установкой соединения (RW): #define GSPW_AUTO_CON_REG MC_GSPW_AUTO_COU //- 0xA01C #define GSPW_AUTO_CON_UNSUC_QNT_OFS 0 //- Количество неуспешных переходов на базовую скорость #define GSPW_AUTO_CON_UNSUC_QNT_MSK 0x1F #define GSPW_AUTO_CON_SUC_TMOUT_OFS 5 //- Таймаут успешного перехода на базовую скорость #define GSPW_AUTO_CON_SUC_TMOUT_MSK 0x7FF #define GSPW_AUTO_CON_TMOUT_MKS (1<<16) //- ежим отсчета таймаута CONTROL_TIME в мкс (1) #define GSPW_AUTO_CON_TRY_QNT_OFS 17 //- Поле флагов истечения количества попыток прехо-да на базовую скорость #define GSPW_AUTO_CON_TRY_QNT_MSK 0x3F // регистр контроля соединения (RW): #define GSPW_CTRL_CON_REG MC_GSPW_CONTROL_CONNECTION //- 0xA020 #define GSPW_CTRL_CON_RUN_TMOUT_OFS 0 //- Таймаут нахождения в состоянии Run #define GSPW_CTRL_CON_RUN_TMOUT_MSK 0x3F #define GSPW_CTRL_CON_RUN_TMOUT_MKS (1<<6) //- ежим отсчета таймаута RUN_TMOUT в мкс (1) #define GSPW_CTRL_CON_UNCON_TMOUT_OFS 7 //- Таймаут отсутствия соединения #define GSPW_CTRL_CON_UNCON_TMOUT_MSK 0x7FF #define GSPW_CTRL_CON_UNCON_TMOUT_MKS (1<<18) //- ежим отсчета таймаута UNCON_TMOUT в мкс (1) #define GSPW_CTRL_CON_UNCON_TMOUT_DEL_PACK (1<<19) //- азрешение стирать пакеты, адресованные в порт, // для которого истек таймаут отсутствия соединения (1) // регистр флагов состояния соединения (RW): #define GSPW_STATE_CON_REG MC_GSPW_STATE_CONNECTION //- 0xA024 #define GSPW_STATE_CON_RUN_TMOUT_MSK_OFS 0 //- Поле флагов таймаутов нахождения в состоянии Run #define GSPW_STATE_CON_RUN_TMOUT_MSK 0x3F #define GSPW_STATE_CON_UNCON_TMOUT_MSK_OFS 6 //- Поле флагов таймаутов отсутствия соеди-нения #define GSPW_STATE_CON_UNCON_TMOUT_MSK 0x3F // регистр глобальных таймаутов данных (RW): #define GSPW_DAT_TMOUT_REG MC_GSPW_SW_DAT_TOUTS //- 0xA028 #define GSPW_DAT_TMOUT_GLOB_OFS 0 //- Значение глобального периода подсчета таймаутов #define GSPW_DAT_TMOUT_GLOB_MSK 0xFFFF #define GSPW_DAT_TMOUT_ARB_OFS 16 //- Значение таймаута арбитража #define GSPW_DAT_TMOUT_ARB_MSK 0x3FF #define GSPW_DAT_TMOUT_MKS (1<<26) //- ежим подсчета глобального периода таймаутов // регистр глобальных таймаутов данных 2 (RW): #define GSPW_DAT_TMOUT2_REG MC_GSPW_SW_DAT_TOUTS2 //- 0xA02C #define GSPW_DAT_TMOUT2_RX_TX_OFS 0 //- Значение таймаута ожидания приема/передачи символа. #define GSPW_DAT_TMOUT2_RX_TX_MSK 0xFF #define GSPW_DAT_TMOUT2_RX_ALLOW (1<<8) //- Флаг разрешения счета таймаута при приеме символов #define GSPW_DAT_TMOUT2_TX_ALLOW (1<<9) //- Флаг разрешения счета таймаута при передаче символов // регистр флагов глобальных таймаутов данных (RW): #define GSPW_DAT_TMOUT3_REG MC_GSPW_SW_DAT_TOUTS3 //- 0xA030 #define GSPW_DAT_TMOUT3_TX_MSK_OFS 0 //- Флаги истечения таймаута при передаче символов #define GSPW_DAT_TMOUT3_TX_MSK 0x3F #define GSPW_DAT_TMOUT3_RX_MSK_OFS 6 //- Флаги истечения таймаута при приеме символов #define GSPW_DAT_TMOUT3_RX_MSK 0x3F #define GSPW_DAT_TMOUT3_ARB_MSK_OFS 12 //- Флаги истечения таймаута при арбитраже #define GSPW_DAT_TMOUT3_ARB_MSK 0x7F #define GSPW_DAT_TMOUT3_ARB_CFG_PACK_ADDR_OFS 19 //- последнее значение адреса пакета, для которого истек таймаут арбитража для конф порта #define GSPW_DAT_TMOUT3_ARB_CFG_PACK_ADDR_MSK 0xFF // регистр специальных условий арбитража (RW): #define GSPW_SPEC_ARB_REG MC_GSPW_SPEC_ARB //- 0xA034 #define GSPW_SPEC_ARB_SPW_OFS 0 //- Поле специальных условий арбитража для портов SpW #define GSPW_SPEC_ARB_SPW_MSK 0x7F #define GSPW_SPEC_ARB_CFG 7 //- Поле специальных условий арбитража для конфигу-рационного порта #define GSPW_SPEC_ARB_MSK 0x7F // регистр управляющего кода для отправки в сеть (RW): #define GSPW_CCODE_OUT_REG MC_GSPW_CCODE_OUT //- 0xA038 #define GSPW_CCODE_OUT_VAL_OFS 0 //- Значение управляющего кода (маркера времени, // кода распределенного прерывания или подтверждения) // кото-рый должен быть отправлен в сеть #define GSPW_CCODE_OUT_VAL_MSK 0xFF #define GSPW_CCODE_OUT_TX_PORTS_MSK_OFS 8 //- маска специального набора портов для отправки // управ-ляющего кода в сеть #define GSPW_CCODE_OUT_TX_PORTS_MSK 0x3F #define GSPW_CCODE_OUT_TX_PORTS_MSK_ENA (1<<14) //- Признак специального набора портов // регистр маркера времени из сети (RW): #define GSPW_TIME_MARK_REG MC_GSPW_CUR_TIME //- 0xA03C #define GSPW_TIME_MARK_CUR_OFS 0 //- Поле текущего маркера времени #define GSPW_TIME_MARK_CUR_MSK 0x3F #define GSPW_TIME_MARK_TRUE_OFS 6 //- Поле последнего правильного маркера времени #define GSPW_TIME_MARK_TRUE_MSK 0x3F // Младшая половина регистра ISR ISR_L (RW): #define GSPW_ISR_L_REG MC_GSPW_ISR_L //- 0xA040 // Старшая половина регистра ISR ISR_H (RW): #define GSPW_ISR_H_REG MC_GSPW_ISR_H //- 0xA044 // регистр маски прерывания для встроенного процессора при приеме кода // распределенного прерывания (младшая половина) (RW): #define GSPW_INTR_IRQ_MSK_L_REG MC_GSPW_INTR_IRQ_MASK_L //- 0xA048 // регистр маски прерывания для встроенного процессора при приеме кода // распределенного прерывания (старшая половина) #define GSPW_INTR_IRQ_MSK_H_REG MC_GSPW_INTR_IRQ_MASK_H //- 0xA04C // регистр маски прерывания для встроенного процессора при приеме кода // подтверждения (младшая половина) #define GSPW_INTA_IRQ_MSK_L_REG MC_GSPW_INTA_IRQ_MASK_L //- 0xA050 // регистр маски прерывания для встроенного процессора при приеме кода // подтверждения (старшая половина) (RW): #define GSPW_INTA_IRQ_MSK_H_REG MC_GSPW_INTA_IRQ_MASK_H //- 0xA054 // регистр маски входных и выходных портов для управляющих кодов 1 (RW): #define GSPW_CCODE_MSK1_REG MC_GSPW_CCODES_MASK1 //- 0xA058 #define GSPW_CCODE_MSK1_SND_TM_MSK_OFS 0 //- маска выходных портов для маркеров времени #define GSPW_CCODE_MSK1_SND_TM_MSK 0x3F #define GSPW_CCODE_MSK1_RCV_TM_MSK_OFS 6 //- маска входных портов для маркеров времени #define GSPW_CCODE_MSK1_RCV_TM_MSK 0x3F #define GSPW_CCODE_MSK1_IA_SND_MSK_OFS 12 //- маска выходных портов для кодов // распре-деленных прерываний и подтверждений #define GSPW_CCODE_MSK1_IA_SND_MSK 0x3F #define GSPW_CCODE_MSK1_IA_RCV_MSK_OFS 18 //- маска входных портов для кодов // распреде-ленных прерываний и подтверждений #define GSPW_CCODE_MSK1_IA_RCV_MSK 0x3F // регистр маски входных и выходных портов для управляющих кодов 2 (RW): #define GSPW_CCODE_MSK2_REG MC_GSPW_CCODES_MASK2 //- 0xA05C #define GSPW_CCODE_MSK2_INTR_SND_MSK_OFS 0 //- маска выходных портов для кодов // распределен-ных прерываний #define GSPW_CCODE_MSK2_INTR_SND_MSK 0x3F #define GSPW_CCODE_MSK2_INTR_RCV_MSK_OFS 6 //- маска входных портов для кодов // распределен-ных прерываний #define GSPW_CCODE_MSK2_INTR_RCV_MSK 0x3F #define GSPW_CCODE_MSK2_INTA_SND_MSK_OFS 12 //- маска выходных портов для кодов подтверждений #define GSPW_CCODE_MSK2_INTA_SND_MSK 0x3F #define GSPW_CCODE_MSK2_INTA_RCV_MSK_OFS 18 //- маска входных портов для кодов подтверждений #define GSPW_CCODE_MSK2_INTA_RCV_MSK 0x3F #define GSPW_CCODE_MSK2_ADD_RCV_MSK_OFS 24 //- маска входных портов для кодов,назначение // которых не определено стандартом SpaceWire #define GSPW_CCODE_MSK2_ADD_RCV_MSK 0x3F // регистр таймаутов распределенных прерыаний 1 (RW): #define GSPW_DIST_INTS_TMOUT1_REG MC_GSPW_DIST_INTS_TOUTS1 //- 0xA060 #define GSPW_DIST_INTS_TMOUT1_GLOB_VAL_OFS 0 //- Глобальный период счета таймаутов // распределенных прерываний и подтверждений #define GSPW_DIST_INTS_TMOUT1_GLOB_VAL_MSK 0xFFFF #define GSPW_DIST_INTS_TMOUT1_SW_VAL_OFS 16 //- Значение таймаута ISR_reset при работе в // режиме коммутатора для режима распределенных // прерываний с подтверждениями #define GSPW_DIST_INTS_TMOUT1_SW_VAL_MSK 0xF #define GSPW_DIST_INTS_TMOUT1_EP_VAL_OFS 20 //- Значение таймаута ISR_reset при работе в // режиме терминального узла для ре-жима // распределенных прерываний с подтверждениями #define GSPW_DIST_INTS_TMOUT1_EP_VAL_MSK 0xF // регистр таймаутов распределенных прерыаний 2 (RW): #define GSPW_DISTR_INTS_TMOUT2_REG MC_GSPW_DIST_INTS_TOUTS2 //- 0xA064 #define GSPW_DISTR_INTS_TMOUT2_SW_VAL_NACK_OFS 0 //- Значение тай-маута ISR_reset при работе в режиме // коммутатора для режима распределенных прерываний // без подтверждений #define GSPW_DISTR_INTS_TMOUT2_SW_NACK_VAL_MSK 0xF #define GSPW_DISTR_INTS_TMOUT2_EP_NACK_VAL_OFS 4 //- Значение тай-маута ISR_reset при работе в режиме // терминального узла для режима распределенных // прерываний без подтверждений #define GSPW_DISTR_INTS_TMOUT2_EP_NACK_VAL_MSK 0xF #define GSPW_DISTR_INTS_TMOUT2_EP_TG_VAL_OFS 8 //- Значение таймаута TG для тер-минальных узлов #define GSPW_DISTR_INTS_TMOUT2_EP_TG_VAL_MSK 0xF #define GSPW_DISTR_INTS_TMOUT2_EP_TH_VAL_OFS 12 //- Значение таймаута Th для тер-минальных узлов #define GSPW_DISTR_INTS_TMOUT2_EP_TH_VAL_MSK 0xF #define GSPW_DISTR_INTS_TMOUT2_ISR_CH_ACK_VAL_OFS 16 //- Значение таймаута TISR_change для режима // с подтверждениями #define GSPW_DISTR_INTS_TMOUT2_ISR_CH_ACK_VAL_MSK 0xF // регистр флагов режима обработки распределенных прерываний // (с подтверждением / без подтверждения) (RW): #define GSPW_ACK_NON_ACK_REGIME_REG MC_GSPW_ACK_NON_ACK_REGIME //- 0xA068 // регистр специального режима работы с управляющими кодами (RW): #define GSPW_CCODES_SPEC_REGIME_REG MC_GSPW_CCODES_SPEC_REGIME //- 0xA06C #define GSPW_CCODES_SPEC_REGIME_TYPE_OFS 0 //- Тип кода #define GSPW_CCODES_SPEC_REGIME_TYPE_MSK 0x3 #define GSPW_CCODES_SPEC_REGIME_HREG (1<<2) //- Признак младшей/старшей половины регистра #define GSPW_CCODES_SPEC_REGIME_NUM_OFS 3 //- Номер кода #define GSPW_CCODES_SPEC_REGIME_NUM_MSK 0x3F #define GSPW_CCODES_SPEC_REGIME_LAST_PORT_OFS 9 //- Последний номер порта #define GSPW_CCODES_SPEC_REGIME_LAST_PORT_MSK 0x1F // регистр флагов автоматической отправки подтверждения (RW): #define GSPW_SPEC_ISR_REGIME_REG MC_GSPW_SPEC_ISR_REGIME //- 0xA070 // Флаги-признаки обработчика для распределенных прерываний (RW): #define GSPW_INT_HANDL_TERM_FUNCT_REG MC_GSPW_INTER_HANDLER_TERM_FUNCT //- 0xA074 // Флаги-признаки источника для распределенных прерываний (RW): #define GSPW_ISR_SOURCE_TERM_FUNCT_REG MC_GSPW_SR_SOURCE_TERM_FUNCT //- 0xA078 // Младшая половина регистра флагов таймаутов (RW): #define GSPW_ISR_TMOUTS_FLS_L_REG MC_GSPW_ISR_TOUTS_FLS_L //- 0xA07C // Старшая половина регистра флагов таймаутов (RW): #define GSPW_ISR_TMOUTS_FLS_H_REG MC_GSPW_ISR_TOUTS_FLS_H //- 0xA080 // Значение регистра ISR для управляющих кодов, назначение которых не определено стандартом (RW): #define GSPW_ISR_1101_REG MC_GSPW_ISR_1101 //- 0xA084 // регистр параметров удаленного сброса (RW): #define GSPW_EXT_RST_PARAM_REG MC_GSPW_EXTERNAL_RESET_PARAMETERS //- 0xA088 #define GSPW_EXT_RST_PARAM_GLOB_CNT_OFS 0 //- Значение глобального счетчика периода для команды // удаленного сброса #define GSPW_EXT_RST_PARAM_GLOB_CNT_MSK 0xFFFF #define GSPW_EXT_RST_PARAM_LOC_CNT_OFS 16 //- Значение локального счетчика периода для команды // удаленного сброса #define GSPW_EXT_RST_PARAM_LOC_CNT_MSK 0x3F #define GSPW_EXT_RST_PARAM_AFTER_CNT_OFS 22 //- Значение периода времени между получением команды // удаленного сброса и фактическим сбросом устройства #define GSPW_EXT_RST_PARAM_AFTER_CNT_MSK 0x1FF #define GSPW_EXT_RST_PARAM_GLOB_CNT_MKS (1<<31) //- ежим подсчета глобального периода для команды // удаленного сброса в мкс (1) // регистр состояния порта SpW (R): #define GSPW_SPW_STAT_REG(n) MC_GSPW_SPW_STATUS(n) //- 0xA08C #define GSPW_SPW_STAT_DC_ERR (1<<0) //- Признак ошибки рассоединения (RW) #define GSPW_SPW_STAT_PAR_ERR (1<<1) //- Признак ошибки паритета (RW) #define GSPW_SPW_STAT_ESC_ERR (1<<2) //- Признак ошибки escape последовательности (RW) #define GSPW_SPW_STAT_CREDIT_ERR (1<<3) //- Признак ошибки кредитования (RW) #define GSPW_SPW_STAT_ALL_ERRS (GSPW_SPW_STAT_DC_ERR | GSPW_SPW_STAT_PAR_ERR | GSPW_SPW_STAT_ESC_ERR | GSPW_SPW_STAT_CREDIT_ERR) #define GSPW_SPW_STAT_NOCON_ERRS (GSPW_SPW_STAT_PAR_ERR | GSPW_SPW_STAT_ESC_ERR | GSPW_SPW_STAT_CREDIT_ERR) #define GSPW_SPW_STAT_BDS_OFS 4 #define GSPW_SPW_STAT_BDS_MSK 0x7 //- Текущее состояние порта SpaceWire. Значение 000 - ErrorReset, // 001 - ErrorWait, 010 - Ready, 011 - Started, // 100 - Connecting, 101 - Run (enum EBdsStat) #define GSPW_STAT_BUF_FULL (1<<7) //- Признак того, что приемный буфер порта SpaceWire полон. #define GSPW_STAT_BUF_EMPTY (1<<8) //- Признак того, что приемный буфер порта SpaceWire пуст. #define GSPW_STAT_DISCON_D_SPW (1<<9) //- Признак отсутствия физического канала на линии D. // Если LVDS включен, то 1 означает отсутствие физического // подключения. Используется только для SpW портов. #define GSPW_STAT_DISCON_S_SPW (1<<10) //- Признак отсутствия физического канала на линии S. // Если LVDS включен, то 1 означает отсутствие физического // подключения. Используется только для SpW портов. #define GSPW_STAT_LVDS_D_IN (1<<11) //- LVDS_D_IN. Если SPW_MODE.LVDS_CONTROL установлено в // значение '1', то значение с LVDS D отображается в этом поле. #define GSPW_STAT_LVDS_S_IN (1<<12) //- LVDS_S_IN. Если SPW_MODE.LVDS_CONTROL установлено в // значение '1', то значение с LVDS S отображается в этом поле. #define GSPW_STAT_ARB_TMOUT_ADDR_OFS 13 //- Последнее значение адреса пакета, для которого // ис-тек таймаут арбитража. #define GSPW_STAT_ARB_TMOUT_ADDR_MSK 0xFF // Служебный регистр (RW): #define GSPW_SERVICE1_REG(n) (MC_BASE_ADDR | GSPW_ADDR_OFS + 0x94 + (n * 4)) //- 0xA080 // регистр режима работы порта SpW (RW): #define GSPW_MODE_REG(n) MC_GSPW_SPW_MODE(n) //- 0xA0A4 #define GSPW_MODE_LINK_DISA (1<<0) //- LinkDisabled (1) #define GSPW_MODE_AUTOSTART (1<<1) //- AutoStart (1) #define GSPW_MODE_LINKSTART (1<<2) //- LinkStart (1) #define GSPW_MODE_BDS_RST (1<<3) //- синхронный сброс порта SpW #define GSPW_MODE_CODEC_LOOPB (1<<4) //- CODEC LOOPBACK (1). Включен режим петли обратной связи, // расположенной перед блоком кодирования и декодирования // символов порта #define GSPW_MODE_LVDS_LOOPB (1<<5) //- LVDS LOOPBACK (1). Включен режим петли обратной связи, // расположенной перед LVDS. //#define GSPW_MODE_RX_SINGLE (1<<6) // В данной версии не используется. //#define GSPW_MODE_TX_SINGLE (1<<7) //- В данной версии не используется. #define GSPW_MODE_BUF (1<<8) //- ежим буферизации (1) #define GSPW_MODE_AUTO_SPEED (1<<9) //- режим установки соединения (1) #define GSPW_MODE_K10_LOCAL_OFS 10 //- koeff_10_local - Коэффициент локальной частоты #define GSPW_MODE_K10_LOCAL_MSK 0x1FF #define GSPW_MODE_D_INT_ACK (1<<19) //- режим обработки кодов распределенных прерываний и //подтверждений для данного порта. 1 - режим 5-и битных кодов. #define GSPW_MODE_INT_CODES_OFS 20 //- Кодировка кодов распределенных прерываний в 5-и битном режиме. #define GSPW_MODE_INT_CODES_MSK 0x7 #define GSPW_MODE_ACK_CODES_OFS 23 //- Кодировка кодов подтверждений в 5-и битном режиме. #define GSPW_MODE_ACK_CODES_MSK 0x7 #define GSPW_MODE_LVDS_CONTROL (1<<26) //- Управление подачей данных на блок LVDS. // 0 - TX_LVDS подключен к блоку bds, 1 - на TX_LVDS подаются // значения из регистра и значения с RX_LVDS прочитываются в регистр #define GSPW_MODE_LVDS_D_OUT (1<<27) //- Зачение, подаваемое на TX_LVDS D. Если GSPW_MODE_REG.LVDS_CONTROL=1, // то на TX_LVDS D подается значе-ние этого поля #define GSPW_MODE_LVDS_S_OUT (1<<28) //- Зачение, подаваемое на TX_LVDS S. Если GSPW_MODE_REG.LVDS_CONTROL=1, // то на TX_LVDS S подается значе-ние этого поля // Служебный регистр (RW): #define GSPW_SERVICE2_REG(n) (MC_BASE_ADDR | GSPW_ADDR_OFS + 0xAC + (n * 4)) //- 0xA0AC // регистр скорости передачи порта SpW (RW): #define GSPW_TX_SPEED_REG(n) MC_GSPW_SPW_TX_SPEED(n) //- 0xA0BC #define GSPW_TX_SPEED_COEF_OFS 0 #define GSPW_TX_SPEED_COEF_MSK 0xFF //- Коэффициент скорости передачи. Мбит/c: // 0x01 - 5; 0x02 – 10; ... 0x4F – 395; 0x50 – 400. #define GSPW_TX_SPEED_PLL_TX_ENA (1<<8) //- Управление работой PLL_TX_SWIC: 1 – работа разре-шена #define GSPW_TX_SPEED_LVDS_ENA (1<<9) //- азрешение работы приемопередатчиков LVDS SWIC (1) #define GSPW_TX_SPEED_10MB_COEF_OFS 10 #define GSPW_TX_SPEED_10MB_COEF_MSK 0xFF //- Коэффициент скорости передачи, соответствующий // 10Мбит/с (должен быть 0x02). #define GSPW_TX_SPEED_PLL_TX_ENA_10 (1<<20) //- азрешение работы PLL_TX_SWIC // при восстановлении соединения (1) #define GSPW_TX_SPEED_LVDS_ENA_10 (1<<21) //- азрешение работы приемопередатчиков LVDS SWIC // при восстановлении соединения (1) // регистр параметров передачи порта gigaSpW (RW): #define GSPW_GIGA_TX_SPEED_REG(n) MC_GSPW_GIGA_SPW_TX_SPEED(n) //- 0xC4 // регистр скорости приема порта SpW и порта gigaSpW (R) #define GSPW_RX_SPEED_REG(n) MC_GSPW_SPW_RX_SPEED(n) //- 0xD4 #define GSPW_SPW_RX_SPEED_MSK 0x3FF //- Cкорость приема (кол-во символов SpW, из канала в единицу времени) // регистр параметров приема порта gigaSpW (RW): #define GSPW_GIGA_RX_SPEED_REG(n) (MC_BASE_ADDR | GSPW_ADDR_OFS + 0xDC + (n * 4)) //- 0xDC // регистр адаптивной групповой маршрутизации порта SpW (RW): #define GSPW_ADG_REG(n) MC_GSPW_ADG(n) //- 0xEC #define GSPW_ADG_MSK 0x7F //- Вектор адаптивной групповой маршрутизации. // i разряд данного поля соответствует i порту // Служебный регистр (RW): #define GSPW_SERVICE3_REG(n) (MC_BASE_ADDR | GSPW_ADDR_OFS + 0xF4 + (n * 4)) //- 0xF4 // регистр состояния PMA порта gigaSpW: #define GSPW_GIGA_PMA_STATUS_REG(n) MC_GSPW_GIGA_PMA_STATUS(n) //- 0x104 // регистр режима работы PMA порта gigaSpW: #define GSPW_GIGA_SPW_PMA_MODE_REG(n) MC_GSPW_GIGA_SPW_PMA_MODE(n) //- 0x114 // GSPW 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 // Адреса каналов DMA (for CONFIG_MC30SF6): #define SWIC_RX_DESC_CHAN 0xA800 #define SWIC_RX_DATA_CHAN 0xA840 #define SWIC_TX_DESC_CHAN 0xA880 #define SWIC_TX_DATA_CHAN 0xA8C0 // Системные регистры: // Формат регистра управления и состояния CSR (RW): #define SYS_CSR_REG MC_CSR #define YS_CSR_GSPW_CLK_PLL (1<<25) //- ежим тактирования GigaSpWR: 1 – GigaSpWR тактируется только частотой от PLL_CORE // Управление PLL0 (RW): #define SYS_CRPLL0_REG MC_CRPLL #define SYS_CRPLL0_PLL_CORE_ENA (1<<7) //- Выбор источника тактовой частоты для работы // CPU, UART, IT, WDT, SPI, коммутатора AXI, // системной части всех устройств микросхемы: // 1 – PLL_CORE, 0 – вход XTI #define SYS_CRPLL0_CLK_SEL_CORE_OFS 0 #define SYS_CRPLL0_CLK_SEL_CORE_MSK 0x3F //- Коэффициент умножения/деления входной частоты PLL_CORE // (частота XTI, деленная на 2): 00 – 1/16; 01 – 1, 02 – 2, 7F – 127. // Управление PLL1 (RW): #define SYS_CRPLL1_REG MC_CRPLL1 // Управление отключением частоты от устройств: #define SYS_CLKEN_REG MC_CLKEN MC_R (0x4004) // описание некоторых (нужных) полей регистров MC_MASKR0 & MC_QSTR0 контроллера прерываний: #define SYS_IRQ_MSK0_REG MC_MASKR0 #define SYS_IRQ_REQ0_REG MC_QSTR0 #define SYS_IRQ_GSPW_RX_DES (1<<16) //- Прерывание от канала DMA GigaSpWR_RX_DES_CH #define SYS_IRQ_GSPW_RX_DAT (1<<17) //- Прерывание от канала DMA GigaSpWR_RX_DAT_CH #define SYS_IRQ_GSPW_TX_DES (1<<18) //- Прерывание от канала DMA GigaSpWR_TX_DES_CH #define SYS_IRQ_GSPW_TX_DAT (1<<19) //- Прерывание от канала DMA GigaSpWR_TX_DAT_CH #define SYS_IRQ_GSPW_RX_TX_OFS 16 #define SYS_IRQ_GSPW_RX_TX_MSK 0xF #define SYS_IRQ_GSPW_OFS 24 //- Прерывания от GigaSpWR #define SYS_IRQ_GSPW_MSK 0xFF /* irq.h : #define IRQ_SPW_RX_DES_CH QSTR_IRQNO(16) #define IRQ_SPW_RX_DAT_CH QSTR_IRQNO(17) #define IRQ_SPW_TX_DES_CH QSTR_IRQNO(18) #define IRQ_SPW_TX_DAT_CH QSTR_IRQNO(19) #define IRQ_SPW0 QSTR_IRQNO(23) #define IRQ_SPW1 QSTR_IRQNO(24) #define IRQ_SPW2 QSTR_IRQNO(25) #define IRQ_SPW3 QSTR_IRQNO(26) #define IRQ_SPW4 QSTR_IRQNO(27) #define IRQ_SPW5 QSTR_IRQNO(28) #define IRQ_SPW6 QSTR_IRQNO(29) #define IRQ_SPW7 QSTR_IRQNO(30) */ #define TX_PACK_PORT_MSK_CFG (1<<0) #define TX_PACK_PORT_MSK_SWIC0 (1<<1) #define TX_PACK_PORT_MSK_SWIC1 (1<<2) #define RX_PACK_PORT_MSK_CFG 0 #define RX_PACK_PORT_MSK_SWIC0 1 #define RX_PACK_PORT_MSK_SWIC1 2 #endif //!__reg_h