fga002Vme.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:6k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* fga002Vme.c - Force Computers FGA-002 gate array VMEbus library */
  2. /* Copyright 1984-1996 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01b,21jun96,wlf  doc: cleanup.
  8. 01a,13jul92,caf  created by copying routines from frc30 sysLib.c, ansified.
  9. */
  10. /*
  11. DESCRIPTION
  12. This library contains routines which relate to the VMEbus functions of the
  13. Force Computers FGA-002 gate array.
  14. The functions addressed here include:
  15.     Bus interrupt functions:
  16. - enable/disable VMEbus interrupt levels
  17. - generate bus interrupts
  18.     Mailbox/locations monitor functions:
  19. - enable mailbox/location monitor interrupts
  20. */
  21. /* includes */
  22. #include "drv/multi/fga002.h"
  23. /* locals */
  24. LOCAL FUNCPTR sysMailboxRoutine  = NULL;
  25. LOCAL int sysMailboxArg          = NULL;
  26. LOCAL BOOL sysMailboxConnected   = FALSE;
  27. /********************************************************************************
  28. * sysIntDisable - disable a bus interrupt level
  29. *
  30. * This routine disables a specified VMEbus interrupt level.
  31. *
  32. * RETURNS: OK, or ERROR if <intLevel> is not in the range 1 - 7.
  33. *
  34. * SEE ALSO: sysIntEnable()
  35. */
  36.  
  37. STATUS sysIntDisable
  38.     (
  39.     int intLevel       /* interrupt level to disable (1-7) */
  40.     )
  41.     {
  42.     switch (intLevel)
  43.         {
  44.         case 1:
  45.             *FGA_ICRVME1 &= ~FGA_ICR_ENABLE;
  46.             break;
  47.         case 2:
  48.             *FGA_ICRVME2 &= ~FGA_ICR_ENABLE;
  49.             break;
  50.         case 3:
  51.             *FGA_ICRVME3 &= ~FGA_ICR_ENABLE;
  52.             break;
  53.         case 4:
  54.             *FGA_ICRVME4 &= ~FGA_ICR_ENABLE;
  55.             break;
  56.         case 5:
  57.             *FGA_ICRVME5 &= ~FGA_ICR_ENABLE;
  58.             break;
  59.         case 6:
  60.             *FGA_ICRVME6 &= ~FGA_ICR_ENABLE;
  61.             break;
  62.         case 7:
  63.             *FGA_ICRVME7 &= ~FGA_ICR_ENABLE;
  64.             break;
  65.         default:
  66.             return (ERROR);
  67.         }
  68.     return (OK);
  69.     }
  70. /********************************************************************************
  71. * sysIntEnable - enable a bus interrupt level
  72. *
  73. * This routine enables a specified VMEbus interrupt level.
  74. *
  75. * RETURNS: OK, or ERROR if <intLevel> is not in the range 1 - 7.
  76. *
  77. * SEE ALSO: sysIntDisable()
  78. */
  79.  
  80. STATUS sysIntEnable
  81.     (
  82.     int intLevel       /* interrupt level to enable (1-7) */
  83.     )
  84.     {
  85.     switch (intLevel)
  86.         {
  87.         case 1:
  88.             *FGA_ICRVME1 |= FGA_ICR_ENABLE;
  89.             break;
  90.         case 2:
  91.             *FGA_ICRVME2 |= FGA_ICR_ENABLE;
  92.             break;
  93.         case 3:
  94.             *FGA_ICRVME3 |= FGA_ICR_ENABLE;
  95.             break;
  96.         case 4:
  97.             *FGA_ICRVME4 |= FGA_ICR_ENABLE;
  98.             break;
  99.         case 5:
  100.             *FGA_ICRVME5 |= FGA_ICR_ENABLE;
  101.             break;
  102.         case 6:
  103.             *FGA_ICRVME6 |= FGA_ICR_ENABLE;
  104.             break;
  105.         case 7:
  106.             *FGA_ICRVME7 |= FGA_ICR_ENABLE;
  107.             break;
  108.         default:
  109.             return (ERROR);
  110.         }
  111.     return (OK);
  112.     }
  113.  
  114. /********************************************************************************
  115. * sysBusIntAck - acknowledge a bus interrupt
  116. *
  117. * This routine acknowledges a specified VMEbus interrupt level.
  118. *
  119. * NOTE: This routine has no effect, since the hardware acknowledges VMEbus
  120. * interrupts automatically if the interrupt level is enabled.
  121. *
  122. * RETURNS: NULL.
  123. *
  124. * SEE ALSO: sysBusIntGen()
  125. */
  126.  
  127. int sysBusIntAck
  128.     (
  129.     int intLevel       /* interrupt level to acknowledge */
  130.     )
  131.     {
  132.     return (NULL);
  133.     }
  134. /*******************************************************************************
  135. *
  136. * sysBusIntGen - generate a bus interrupt
  137. *
  138. * This routine generates a bus interrupt for a specified level with a specified
  139. * vector.
  140. *
  141. * NOTE: This routine has no effect, since the hardware cannot generate a VMEbus
  142. * interrupt.
  143. *
  144. * RETURNS: ERROR, always.
  145. *
  146. * SEE ALSO: sysBusIntAck()
  147. */
  148.  
  149. STATUS sysBusIntGen
  150.     (
  151.     int  level,        /* VMEbus interrupt level to generate (1-7) */
  152.     int  vector        /* interrupt vector to generate (0-255)     */
  153.     )
  154.     {
  155.     return (ERROR);
  156.     }
  157. /*******************************************************************************
  158. *
  159. * sysMailboxInt - handle a mailbox interrupt
  160. *
  161. * This routine handles the interrupts associated with the FGA-002 MBOX0.
  162. *
  163. * RETURNS: N/A
  164. *
  165. * SEE ALSO: sysMailboxConnect()
  166. */
  167. LOCAL void sysMailboxInt (void)
  168.     {
  169.     *FGA_MBOX0 = 0x0;                           /* acknowledge interrupt */
  170.     if (sysMailboxRoutine != NULL)
  171.         (* sysMailboxRoutine) (sysMailboxArg);  /* call mailbox routine */
  172.     }
  173. /********************************************************************************
  174. * sysMailboxConnect - connect a routine to the mailbox interrupt
  175. *
  176. * This routine specifies the interrupt service routine to be called at each
  177. * mailbox interrupt.
  178. *
  179. * RETURNS: OK, or ERROR if the routine cannot be connected to the interrupt.
  180. *
  181. * SEE ALSO: intConnect(), sysMailboxEnable()
  182. */
  183.  
  184. STATUS sysMailboxConnect
  185.     (
  186.     FUNCPTR routine,   /* routine called at each mailbox interrupt */
  187.     int arg            /* argument with which to call routine      */
  188.     )
  189.     {
  190.     sysMailboxConnected = TRUE;
  191.     sysMailboxRoutine   = routine;
  192.     sysMailboxArg       = arg;
  193.  
  194.     return (OK);
  195.     }
  196. /*******************************************************************************
  197. *
  198. * sysMailboxEnable - enable the mailbox interrupt
  199. *
  200. * This routine enables the first mailbox of the FGA-002 chip.
  201. *
  202. * RETURNS: OK, always.
  203. *
  204. * SEE ALSO: sysMailboxConnect()
  205. */
  206. STATUS sysMailboxEnable
  207.     (
  208.     char *mailboxAdrs   /* address of mailbox (ignored) */
  209.     )
  210.     {
  211.     *FGA_ICRMBOX0 |= FGA_ICR_ENABLE;
  212.     return (OK);
  213.     }