FTN4,L SUBROUTINE CTRST(IUNIT,IFUNC,IRGE,IARM),09580-16131 REV.2013 80013 +1 C------------------------------------------------------------------- C C RELOC. 09580-16131 C SOURCE 09580-18131 C REV. B 770315 C REV. C 770901 C REV. D 790111 C REV. E 791126 C BOB RICHARDS 800131 C C C HP 92425B TEST SYSTEM SOFTWARE IS THE PROPRIETARY C MATERIAL OF THE HEWLETT-PACKARD COMPANY. USE AND C DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT. C C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. C ALL RIGHTS RESERVED. NO PART OF THIS PROGRAM C MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED C TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR C WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. C C------------------------------------------------------------------- DIMENSION IERMS(5) DATA IERMS/10,5,2HCT,2HRS,2HT / IERMS = 10 ISTN = ISN(DUM) LU1= LUDV(ISTN,5,IUNIT) LU0 = IBLU0(LU1) IF(LU1.LE.0.OR.LU0.LE.0)GO TO 800 10 CALL XTRST(LU0,LU1,IUNIT,IERMS,IFUNC,IRGE,IARM) IF(IERMS)800,20,800 20 RETURN C C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END SUBROUTINE XTRST(LUIB, LCTR,IU,IERR,IFUNC,IRGE,IARM),09580-16131 R +EV.2013 800131 C C C C C C THIS DEVICE SUBROUTINE SETS UP THE 5328A C UNIVERSAL COUNTER COUNTER FUNCTIONS. C C CALL XTRST(LCTR,IERR,IFUNC,IRGE,IARM) C WHERE: C LCTR = LU OF HP 5328A UNIVERSAL COUNTER C LUIB = LU NUMBER FOR HPIB I/O CARD C C IERR = 5 ELEMENT ERROR ARRAY C IERR(1) = ERROR CODE C C 0= NO ERROR C 1= PARAMETER ERROR C 3= OVERRANGE ERROR C 4= BAD DATA FROM 5328A C ERROR MESSAGES WHICH PERTAIN TO THE HPIB C C 9 = I/O CALL REJECTED C 10 = LU # NOT ASSIGNED TO HPIB DEVICE OR TO STATION C 11 - DMA INPUT REQUEST PREMATURELY TERMINATED C 12 - I/O DEVICE TIME OUT C 13 - IFC (INTERFACE CLEAR) DETECTED DURING I/O REQUEST C 14 - SRQ SERVICE ABORTED C 15 - NON-EXISTENT ALARM PROGRAM C 16 - ILLEGAL CONTROL REQUEST C 17 - EQT EXTENSION AREA FULL, NO NEW DEVICE MAY BE ADDED ON LINE C C IERR(2) - IERR(5) = DEVICE SUBROUTINE NAME C C IFUNC=COUNTER FUNCTION (0-14) C 0=FREQ A C 1=PERIOD A C 2=PERIOD AVG A C 3=FREQ C C 4=T.I. A>B C 5=T.I.AVG A>B C 6=START A C 7=STOP C 8=EVENTS C,T.I. A>B C 9=CHECK C 10=N*B/A C 11=N*C/A C 12=START CLOCK C 13=RESTART A C 14=RESTART CLOCK C 15=INITIALIZE OR PRESET COUNTER ONLY C (ALL OTHER PARAMETERS ARE IGNORED) C C IRGE=COUNTER RANGE (0-7) C C IARM=ARMING MODE C 0=ARMING OFF C 1=ARMING ON C C C NOTE: WHEN CALLING THE 5328 COUNTER FOR THE "FIRST TIME" C MAKE THE CTRST (SET UP CALL) "FIRST" BEFORE ANY OTHER C COUNTER CALL. THIS WILL ENSURE THAT THE COUNTER IS C INITIALIZE FIRST. THE FUNCTION CAN BE SET TO ANY OF THE ABOVE. C INIALIZATION WILL AUTOMATICALLY TAKE PLACE WHEN CALLING THE C COUNTER FOR THE "FIRST" TIME ONLY. C C C IF IT BECOMES NECESSARY TO REINITIALIZE THE COUNTER, C THE COUNTER CAN ALWAYS BE INITIALIZE DURING THE COURSE C OF THE PROGRAM BY CALLING CTRST AND SETTING THE FUNCTION C TO 15 (INITIALIZE ONLY). ALL OTHER PARAMETERS MUST BE C PROGRAMED AFTER MAKING INITIALIZATION. C C C C ALLFL ENTRY FOR 5328 IS AS FOLLOWS: C----------------------------------------------------------- C NOTE: N= NUMBER OF 5328'S IN THE SYSTEM C C C C R 5,N,1 C U1 C 0 TEMP STORAGE FOR INITIALIZATION FLAG C C . C . C . C . C----------------------------------------------------------- C DIMENSION IDATA(5),IFNC(15),IERR(5),IARM1(2),IREG(2) EQUIVALENCE(REG,IREG,IA),(IREG(2),IB) C C C C SET PROGRAM DATA C DATA IFNC/2HF4,2HF6,2HF7,2HF>,2HF8,2HF:,2HF1,2HF0, 12HF;,2HF<,2HF9,2HF=,2HF2,2HF1,2HF2/, 2IARM1/2HS:,2HS;/ DATA IDTN/5 / C C INITIALIZE ERROR CODE C IERR = 0 C C TEST PARAMETERS C IF((IRGE.LT.0).OR.(IRGE.GT.7))GOTO 9100 IF((IFUNC.LT.0).OR.(IFUNC.GT.15))GOTO 9100 IF((IARM.LT.0).OR.(IARM.GT.1))GOTO 9100 C C C C CLEAR DATA BUFFER C DO 44 I=1,5 IDATA(I)=2H 44 CONTINUE C C C C CHECK IF COUNTER HAS BEEN PREVIOUSLY CALLED. C C C CALL TIM(IDTN,IU,1,IN,1,IERFG) IF(IERFG .NE. 0) RETURN C C C IDATA(1)=2HP C C SET TO RANGE IRGE C IDATA(2)=2HG0+IRGE C C SET TO PROPER COUNTER FUNCTION C INDEX=IFUNC+1 IDATA(3)=IFNC(INDEX) C C SET ARMING MODE C IDATA(4)=IARM1(IARM+1) IF((IFUNC.EQ.6).OR.(IFUNC.EQ.12))IDATA(4)=2HS5 C C SET INDEX AND NDATA DEPENDING ON IFUNC C INDEX=1 C C C IF COUNTER HAS ALREADY BEEN INITIALIZE DO NOT OUTPUT 'P' C IF(IN .EQ. 1) INDEX=2 C C C IF COUNTER IS TO BE INITIALIZE ONLY THEN OUTPUT 'P' ONLY. C IF(IFUNC .NE. 15) GOTO 50 INDEX=1 NDATA=1 GOTO 99 C C 50 NDATA=5-IN IF (IFUNC .EQ. 6)IDATA(5)=2HT C C SET INPUT MODULE TO CHECK C IF((IFUNC.NE.9).AND.(IFUNC.NE.12))GOTO 66 IDATA(5) = 2HA? C C SET REMOTE ENABLE ON BUS C 66 CALL EXEC(100003B,1600B+LUIB) GO TO 8000 660 CALL ABREG(IA,IB) IF(IB.LT.0)GO TO 990 C C PROGRAM UNIVERSAL COUNTER C 99 CALL REIO(100002B,2000B+LCTR,IDATA(INDEX),NDATA,IDU,0) GO TO 8000 999 CALL ABREG(IA,IB) IF(IB.LT.0)GO TO 990 C C C SET FLAG FOR INITIALIZE IN ALLFL C IF NOT ALREADY DONE. C IF(IN .EQ. 1) RETURN IN=1 CALL TIM(IDTN,IU,2,IN,1,IERFG) C C RETURN C RETURN C C ERROR RETURN C 8000 IERR = 9 GO TO 9900 9100 IERR = 1 GO TO 9900 990 IERR = IAND(IREG,377B) + 11 9900 IERR(2) = 5 IERR(3) = 2HCT IERR(4) = 2HRS IERR(5) = 2HT RETURN END END$