📄 summit.h
字号:
#ifndef __SUMMITH
#define __SUMMITH
#define Max_Channels 8
#define Start_DPRAM 0x40/2 /* word offset */
#define BANKSIZE 0x8000/2 /* in words */
struct exc_bd /* structure for Summit registers */
{
unsigned short volatile control; /* 0 Control Register */
unsigned short status; /* 1 Operational Status Register */
unsigned short current_cmd_block; /* 2 Current Command (Block) */
unsigned short int_mask; /* 3 interrupt mask register */
unsigned short int_pending; /* 4 pending interrupt register */
unsigned short intr_log_list; /* 5 Interrupt Log List Pointer Register */
unsigned short bit_word; /* 6 BIT word */
/* MODE DEPENDENT REGISTER */
unsigned short timetag_minor; /* 7 RT/MON timtag / BC Minor Frame timer*/
unsigned short pointer; /* 8 SRT Descriptor PTR /BC Cmd Block ptr*/
/* RT MODE ONLY */
unsigned short status1553; /* 9 RT 1553 Status Word Bits */
/* BC MODE ONLY */
unsigned short BC_initcount; /* 10 BC Cmd Block Initialization Count */
/* MONITOR MODE ONLY */
unsigned short cmd_blk_ptr; /* 11 Initial Monitor Command Block Ptr */
unsigned short data_ptr; /* 12 Initial Monitor Data Pointer */
unsigned short blk_counter; /* 13 Monitor Block Count */
unsigned short filter1; /* 14 Monitor Filter */
unsigned short filter2; /* 15 Monitor Filter */
/* RT MODE ONLY */
unsigned short illegal[16]; /* 16 RT illegalization registers */
/* COMMON MEMORY SPACE */
};
/*
// global to help force a full WORD write for the structure above
// use when anding or or-ing to the structure; in these cases a compiler
// optimization would often turn the word write into a byte operation.
// Needed for PCMCIA, but can't hurt in MCH
*/
extern volatile usint wForceWordWrite;
extern struct exc_bd * exc_summit;
extern unsigned short * exc_summit_int;
extern short milstd1553B;
extern short nextmsg;
extern short curmode;
struct bm_command_block /* structure of one stack entry */
{
unsigned short msginfo; /* Message Information Word */
unsigned short command1;
unsigned short command2;
unsigned short data_ptr;
unsigned short status1;
unsigned short status2;
unsigned short timetag;
unsigned short reserved;
};
extern struct bm_command_block * bm_command_blocks; /* messages command blocks */
struct BM_MSG /* structure needed by user to read monitored messages */
{
unsigned short data[32]; /* msg data words */
unsigned short command1; /* command word */
unsigned short command2; /* 2nd command word (for RT to RT) */
unsigned short status1; /* status word */
unsigned short status2; /* 2nd status word (for RT to RT) */
unsigned short timetag; /* time tag associated with the message */
unsigned short msginfo; /* bus and error information */
};
struct bc_command_block /* structure of one BC cmd entry */
{
unsigned short control; /* Control Word */
unsigned short command1;
unsigned short command2;
unsigned short data_ptr;
unsigned short status1;
unsigned short status2;
unsigned short branch;
unsigned short timer;
};
extern struct bc_command_block *bc_command_blocks; /* messages command blocks */
struct CMDENTRY
{
unsigned short control; /* control word */
unsigned short command1; /* command word */
unsigned short command2; /* 2nd command word (for RT to RT) */
unsigned short status1; /* status word */
unsigned short status2; /* 2nd status word (for RT to RT) */
unsigned short timer; /* minor frame time or shortermessage gap */
unsigned short datablk; /* block number of associated data block*/
unsigned short gotocmd; /* command block number for branch cmds */
};
/* Mode defines */
#define MSEL 0x0300 /* status word bits for mode selection */
#define BC_MODE 0x0000
#define RT_MODE 0x0100
#define BM_MODE 0x0200
#define BM_RT_MODE 0x0300
/* Memory Partitions */
#define INIT_RT_BUFFER (0x4880/2) /* location of first RT Buffer */
#define INIT_RT_DSCRPT (0x7b80/2) /* location of first Descriptor Block */
#define INIT_DATA_BLK Start_DPRAM /* location of first Monitor Data */
/* for MCH */
#define MAXMESSAGES (((INIT_RT_BUFFER - INIT_DATA_BLK)/(32 + 8)) - 1)
#define INIT_MON_BLK (((MAXMESSAGES + 1) * 32) + INIT_DATA_BLK) /* location of first Monitor Block */
/* until here */
#define CMDOFFSET (0x6000/2) /* command block start */
#define MAXCMDS ((BANKSIZE - CMDOFFSET) / 8) /* max num of 8 word commands */
#define MAXDATABLKS ((CMDOFFSET - Start_DPRAM) / 32) /* max num of 32 word data blocks */
/* RT mode defines */
#define DESCRIPTORSIZE 4
#define TRANSMIT 1
#define RECEIVE 0
#define LEGAL 1
#define ILLEGAL 0
#define MODECODE 32
#define NOMODECODE 0
/* Add buffers for ping pong double buffering. reduce mode code
buffer size to make room for the new buffers
*/
#define TRANSMIT_SECTION 96
#define PINGPONG 4 /* bit in control word indicating current buffer */
#define MODEBUFSIZE 3 /* control + timetag + data word */
#define MCH_BUFSIZE 34 /* memory is allocated subaddr 0 receive A */
#define MODEAREA 160*34 /* as follows: subaddr 0 receive B */
/* subaddr 0 broadcast */
/* subaddr 1 receive A */
/* each buffer is 34 subaddr 1 receive B */
/* words long to allow . */
/* for a time tag word . */
/* a status word and subaddr 31 receive B */
/* 32 data words subaddr 31 broadcast */
/* (mode codes get 1 subaddr 0 transmitA */
/* data word) subaddr 1 transmitB */
/* . */
/* . */
/* subaddr 31 transmitA */
/* subaddr 31 transmitB */
/* mode 0 receive A */
/* mode 0 receive B */
/* mode 0 broadcast */
/* mode 1 receive A */
/* mode 1 receive B */
/* mode 1 broadcast */
/* . */
/* . */
/* mode 31 receive A */
/* mode 31 receive B */
/* mode 31 broadcast */
/* mode 0 transmit A */
/* mode 0 transmit B */
/* . */
/* . */
/* mode 31 transmit A */
/* mode 31 transmit B */
#define STANDARD 0
#define BRDCAST 1
#define MODE 2
#define BROADCAST_MODE 3
/* BC mode defines */
#define DATABLKSIZE 32 /* 32 words per data block */
#define CMDENTRYSIZE 8 /* 8 words per command entry */
/* RT defines */
#define STATIC 0
#define IMMEDIATE 1
/* Control word opcode defines */
#define END_OF_LIST 0x0000 /* stop transmitting */
#define SKIP 0x1000
#define GOTO 0x2000
#define BUILT_IN_TEST 0x3000
#define EXEC_BLK_CONTINUE 0x4000
#define EXEC_BLK_BRANCH 0x5000
#define EXEC_BLK_BRANCH_ON_COND 0x6000
#define RETRY_ON_COND 0x7000
#define RETRY_ON_COND_BRANCH 0x8000
#define RETRY_ON_COND_BRANCH_ALL_FAIL 0x9000
#define INTERRUPT_CONTINUE 0xa000
#define CALL 0xb000
#define RETURN_TO_CALL 0xc000
#define LOAD_MINOR_FRAME_TIMER 0xe000
#define RETURN_TO_BRANCH 0xf000
#define INVALID_OPCODE_MASK 0x0fff
#define SENDMSG 0x4000 /* opcode for sending a message */
#define GOTO_MSG 0x2000 /* for infinite loops */
/* Control word defines */
#define BUS_A 0x0200 /* send message on bus A */
#define BUS_B 0x0000 /* send message on bus B */
#define RT2RT 0x0100 /* message is RT to RT */
#define RT_ERROR 0x0001 /* error in RT response */
#define NOT_RT2RT 0x0000 /* message is not RT to RT */
/* Condition Codes defines */
#define ALL_CCODES 0xFE
#define MESSAGE_ERROR 0x80
#define SWR_MESSAGE_ERROR 0x40
#define SWR_BUSY 0x20
#define SWR_TERMINAL_FLAG 0x10
#define SWR_SUBSYSFAIL 0x08
#define SWR_INSTRUM 0x04
#define SWR_SREQ 0x02
#define LOWEST_CCODE 0x02
/* Control Register */
#define START_EXECUTION 0x8000 /* STEX bit in Control register */
#define START_BIT 0x4000 /* Start BIT */
#define RESET 0x2000 /* Reset Summit */
#define BUAEN 0x1000 /* Bus A enable */
#define BUBEN 0x0800 /* Bus B enable */
#define BMTC 0x0020 /* Bus Monitor Control */
#define BROADCAST 0x0010 /* set to make RT31 Broadcast */
#define NOBROADCAST 0x0 /* RT 31 is normal RT */
#define PPEN 0x4 /* Ping Pong enable */
/* Status Register */
#define SUMMIT_READY 0x2
/* Set Interrupt Mask */
#define MERR 0x0800 /* message error (bit, word, parity) */
#define SUBAD 0x0400 /* subaddress accessed */
#define ACCESS 0x0001 /* interrupt on any access (must be
different from value of BROADCAST */
/* Protocol */
#define MIL_STD_1553A 1
#define MIL_STD_1553B 2
/* BIT Word Registers bits */
#define DMAF (1 << 15)
#define WRAPF (1 << 14)
#define TAPF (1 << 13)
#define BITF (1 << 12)
#define CHAF (1 << 11)
#define CHBF (1 << 10)
#define HANGF (1 << 0) /* BIT failed to complete */
#define BIT_WORD_MASK 0xfc00
/* for Peek/Poke Time Tag Control Register */
#define TIME_TAG_REGISTER 7
/* Misc defines */
#define Clear_Pattern 0
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -