⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 summit.h

📁 实现vxworks下的1553b通讯功能
💻 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 + -