Mar 7,1997 onl5v4: Solaris 2.5 cc ドライバのデバッグ. ブロック転送のデバッグ、その3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/CAMAC/onl5v4-sol2.5/debug-step12-log.txt) (ftp://onl5v4.kek.jp/export/home/onl5v4/inoue/CAMAC/Log/step12.log) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認。 o ブロック転送によるデータ読みだしはできているが、読みだしに時間が かかっている。 NAFを指定した後、go を始めてから5秒ぐらいたっ後、 データがコンソールに表示される。 そして、コンソール上には以下の メッセージが表示される。 "WARNING: spurios VMEbus interrupt on level 4, vec 0" (2). k2917のインタラプト・ベクタ・レジスタがリセットされてしまっている可能性 がある。 "k->csr = CC_RST;"を実行しているのはどこか、チェック。 onl5v4[40]% vi cc.c : static int cc_open(dev_t *devp, int flag, int otyp, cred_t *cred_p) { : k->csr = CC_RST; /* K2917 Reset */ : } : static int cc_ioctl(dev_t dev, int cmd, int arg, int flag, cred_t *cred_p, int *rval_p) { : case CCIOC_REG_DUMP : : k->csr = CC_RST; break; : case CCIOC_READ_STATUS : : k->csr = CC_RST; break; : static int cc_strategy(struct buf *bp) { : k->csr = CC_RST; /* K2917 Reset */ : } o k2917をパワーオン・リセットの状態にしているのは、次の4個所である。 1. cc_openルーチン 2. cc_ioctlルーチン、CCIOC_REG_DUMP処理部 3. cc_ioctlルーチン、CCIOC_READ_STATUS処理部 4. cc_strategyルーチン これらのルーチンが実行された後は、LAM、DMA等の割り込み処理は正しく 実行できないだろう。 この中で、今問題にしているDMAに関係しているのは 項目4の、cc_strategyルーチンの中で実行されている、k2917をパワーオン・ リセットのようだ。 チェック。 (3). まず、今問題にしているDMAに関係している部分のcc_strategyルーチンの中の " k->csr = CC_RST;" をはずしてテストする。 onl5v4[62]% vi cc.c : static int cc_strategy(struct buf *bp) { : cc->retlen = 0; /* k->csr = CC_RST; */ /* K2917 Reset */ if (cc->klist == CC_KLIST_NO) { k->cma = CC_CMA_INIT; /* Initialize memory pointer */ : onl5v4[63]% cc.c をコンパイルし直して、実行してみる。 onl5v4[65]% make ./script/cc_build.sh [Building for sun4m] "cc.c", line 1064: warning: semantics of ">>" change in ANSI C; use explicit cast "cc.c", line 1310: warning: semantics of "<" change in ANSI C; use explicit cast "cc.c", line 1312: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2019: warning: semantics of ">" change in ANSI C; use explicit cast "cc.c", line 2029: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2039: warning: semantics of "<" change in ANSI C; use explicit cast "cc.c", line 2049: warning: semantics of "<=" change in ANSI C; use explicit cast "cc.c", line 2111: warning: semantics of ">=" change in ANSI C; use explicit cast "cc.c", line 2218: warning: semantics of "<=" change in ANSI C; use explicit cast rm -f cc.o onl5v4[66]% onl5v4# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl5v4# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] onl5v4# onl5v4[72]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >10 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >0 Input data counts >5 Input n a f >3 0 0 MODE=0 N= 3 A= 0 F= 0 len= 5 lenr= 0 error= 0(Hex) Data( 1)= 0 0x 0(Hex) Data( 2)= 0 0x 0(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 MODE=0 N= 3 A= 1 F= 0 len= 5 lenr= 0 error= 0(Hex) Data( 1)= 0 0x 0(Hex) Data( 2)= 0 0x 0(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >^C *** TERMINATING cam2 *** Received signal 2 (SIGINT) onl5v4[73]% DMA を GO するとすぐに表示されるようになったが、データが常にゼロになって しまう。 なんだ ??? cam1 を実行してみよう。 onl5v4[73]% cam1 Open error: : No such file or directory onl5v4[74]% open できなくなってしまった。 "boot -r" をやり直してから、"make load" をやってみよう。 # /usr/sbin/shutdown -i0 -g0 Shutdown started. Tue Mar 4 11:43:04 JST 1997 Do you want to continue? (y or n): y Broadcast Message from root (console) on onl5v4 Tue Mar 4 11:43:29... THE SYSTEM IS BEING SHUT DOWN NOW ! ! ! Log off now or risk your files being damaged Changing to init state 0 - please wait # INIT: New run level: 0 The system is coming down. Please wait. System services are now being stopped. Print services stopped. Stopping the syslog service. Mar 4 11:43:39 onl5v4 syslogd: going down on signal 15 umount: /net busy nfs umount: /vol: not mounted Mar 4 11:43:49 cssd: Got sig#15, sending it to all CSes and exit Mar 4 11:43:50 /usr/sbin/vold[623]: problem unmounting /vol; Interrupted system call umount: /net busy The system is down. syncing file systems... [7] [2] done Program terminated Type help for more information ok boot -r Resetting ... screen not found. Can't open input device. Keyboard not present. Using tty for input and output. SPARC CPU-5V, No Keyboard ROM Rev. 2.15.3, 16 MB memory installed, Serial #9149788. Ethernet address 0:80:42:b:2d:5c, Host ID: 808b9d5c. Rebooting with command: -r Boot device: /iommu/sbus/espdma@5,8400000/esp@5,8800000/sd@3,0 File and args: - r SunOS Release 5.5 Version Generic [UNIX(R) System V Release 4.0] Copyright (c) 1983-1995, Sun Microsystems, Inc. NOTICE: VME SYSFAIL (clr) not handled. NOTICE: VME: slavewin at vme=0x0, size=0x100000 space=0x2c020017 configuring network interfaces: le0. Hostname: onl5v4 Configuring the /devices directory vmeplus0 at VME0: vme16d16 0x0 and vme24d16 0x0 and vme32d16 0x0 and vme16d32 0x 0 and vme24d32 0x0 and vme32d32 0x0 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 vmemem0 at VME0: vme32d16 0x0 vmemem1 at VME0: vme16d16 0x0 vmemem2 at VME0: vme24d16 0x0 vmemem3 at VME0: vme32d32 0x0 vmemem4 at VME0: vme16d32 0x0 vmemem5 at VME0: vme24d32 0x0 vmectl0 at VME0 Configuring the /dev directory Configuring the /dev directory (compatibility devices) The system is coming up. Please wait. checking ufs filesystems /dev/rdsk/c0t3d0s5: is clean. /dev/rdsk/c0t3d0s7: is clean. Flushing routing table: add net default: gateway ICCFG0 NIS domainname is kek.jp starting rpc services: rpcbind keyserv kerbd done. Setting netmask of le0 to 255.255.252.0 Setting default interface for multicast: add net 224.0.0.0: gateway onl5v4 syslog service starting. Print services started. starting Kana-Kanji converters: cssd. Loading /kernel/strmod/jconv7. Loading /kernel/strmod/jconv8. Loading /kernel/strmod/jconvs. volume management starting. The system is ready. onl5v4 console login: ここで、ログインしてdmesgコマンドを実行したらkterm上の表示が文字化けした 日本語になってしまって、読めない。 xterm上に表示すればアルファベット表示 で正しく見えた。 ccドライバに関する表示も確認できた。 : vmeplus0 is /iommu@0,10000000/VME@0,7ffffe00/vmeplus@2d,0 CAMAC device driver V1.3x, 1991-1993 by Y.TAKEUCHI (T.I.T.) cc0 at VME0: vme16d16 0xff00 VME level 4 vector 0xff sparc ipl 7 cc0 is /iommu@0,10000000/VME@0,7ffffe00/cc@2d,ff00 Unable to install/attach driver 'ipi3sc' : "make load" をやり直す。 onl5v4# make unload ./script/cc_unload.sh [Removing CAMAC device driver] [Removing CAMAC device driver from system] [Deleting CAMAC device files] onl5v4# make load ./script/cc_load.sh [Installing CAMAC device driver] [Adding CAMAC device driver to system] [Configuring CAMAC device driver] [Making CAMAC device files] onl5v4# cam2 を実行する。 onl5v4[45]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >10 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >0 Input data counts >5 Input n a f >3 0 0 in: 10 1 34 0 0 count in 32bit=10 out: -277782876 0 24 0 10 MODE=0 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 0 0x 0(Hex) Data( 2)= 0 0x 0(Hex) Data( 3)= 0 0x 0(Hex) Data( 4)= 0 0x 0(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 10 1 34 0 0 count in 32bit=10 out: -277782876 0 24 0 10 MODE=0 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 21845 0x 5555(Hex) Data( 2)= 21845 0x 5555(Hex) Data( 3)= 21845 0x 5555(Hex) Data( 4)= 21845 0x 5555(Hex) Data( 5)= 21845 0x 5555(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >^C *** TERMINATING cam2 *** Received signal 2 (SIGINT) onl5v4[46]% ok. エラーは起きていない。 テストを繰り返す。 Input loop=3, Input data counts=4 で実行してみる。 onl5v4[50]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >3 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >0 Input data counts >4 Input n a f >3 1 0 in: 8 1 32 0 0 count in 32bit=8 out: -268166508 0 24 0 8 MODE=0 N= 3 A= 1 F= 0 len= 4 lenr= 4 error= 0(Hex) Data( 1)= 21845 0x 5555(Hex) Data( 2)= 21845 0x 5555(Hex) Data( 3)= 21845 0x 5555(Hex) Data( 4)= 21845 0x 5555(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 8 1 32 0 0 count in 32bit=8 out: -277782876 0 24 0 8 MODE=0 N= 3 A= 1 F= 0 len= 4 lenr= 4 error= 0(Hex) Data( 1)= 21845 0x 5555(Hex) Data( 2)= 21845 0x 5555(Hex) Data( 3)= 21845 0x 5555(Hex) Data( 4)= 21845 0x 5555(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 8 1 32 0 0 count in 32bit=8 out: -277782876 0 24 0 8 MODE=0 N= 3 A= 1 F= 0 len= 4 lenr= 4 error= 0(Hex) Data( 1)= 21845 0x 5555(Hex) Data( 2)= 21845 0x 5555(Hex) Data( 3)= 21845 0x 5555(Hex) Data( 4)= 21845 0x 5555(Hex) Data( 5)= 0 0x 0(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: this program was linked with -fast or -fnonstd and so may have produced nonstandard floating-point results. Sun's implementation of IEEE arithmetic is discussed in the Numerical Computation Guide. onl5v4[51]% ok. いまのところ実行のエラーは起きていない。 しかし、実行終了時に表示されるメッセージはどうやったら出なくなるのかな。 これは、デバッグ用の表示の部分での問題であって、DMAのデータには関係の無 いことなので気にしないことにする。 in: 8 1 32 0 0 count in 32bit=8 out: -277782876 0 24 0 8 onl5v4[79]% vi cc.c : static int camac_b(struct cc_device *cc, u_short mode, u_short naf, int len, int *retlen) { : /* set uio for DMA */ uio->uio_iov->iov_base = (caddr_t)cc->ptr_udata; uio->uio_iov->iov_len = (mode & CC_BIT16) ? len * 2: len * 4; uio->uio_iovcnt = 1; uio->uio_segflg = UIO_USERSPACE; uio->uio_offset = 0; uprintf(" in: %d %d %d %d %d\n", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); : physio(cc_strategy, NULL, dev, B_READ, cc_minphys, uio); : uprintf("out: %d %d %d %d %d\n", uio->uio_iov->iov_len, uio->uio_iovcnt, uio->uio_resid, uio->uio_segflg, uio->uio_offset); : onl5v4[80]% ロング・ワードのDMA転送を実行してみる。 onl5v4[76]% cam2 Input transfer mode (1:word 2:long word) >2 Input loop >3 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >0 Input data counts >5 Input n a f >3 1 0 in: 20 1 44 0 0 count in 32bit=20 out: -268166508 0 24 0 20 MODE=0 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 1431699200 0x 5555FF00(Hex) Data( 2)= 1431699200 0x 5555FF00(Hex) Data( 3)= 1431699200 0x 5555FF00(Hex) Data( 4)= 1431699200 0x 5555FF00(Hex) Data( 5)= 1431699200 0x 5555FF00(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 20 1 44 0 0 count in 32bit=20 out: -278045020 0 24 0 20 MODE=0 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 1431699200 0x 5555FF00(Hex) Data( 2)= 1431699200 0x 5555FF00(Hex) Data( 3)= 1431699200 0x 5555FF00(Hex) Data( 4)= 1431699200 0x 5555FF00(Hex) Data( 5)= 1431699200 0x 5555FF00(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 20 1 44 0 0 count in 32bit=20 out: -278045020 0 24 0 20 MODE=0 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 1431699200 0x 5555FF00(Hex) Data( 2)= 1431699200 0x 5555FF00(Hex) Data( 3)= 1431699200 0x 5555FF00(Hex) Data( 4)= 1431699200 0x 5555FF00(Hex) Data( 5)= 1431699200 0x 5555FF00(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: this program was linked with -fast or -fnonstd and so may have produced nonstandard floating-point results. Sun's implementation of IEEE arithmetic is discussed in the Numerical Computation Guide. onl5v4[77]% ok. 問題なし。 Input mode=QIGNORE で実行してみる。 onl5v4[77]% cam2 Input transfer mode (1:word 2:long word) >1 Input loop >3 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >5 Input n a f >3 1 0 in: 10 1 34 0 0 count in 32bit=10 out: -268166508 0 24 0 10 MODE=1 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 21845 0x 5555(Hex) Data( 2)= 21845 0x 5555(Hex) Data( 3)= 21845 0x 5555(Hex) Data( 4)= 21845 0x 5555(Hex) Data( 5)= 21845 0x 5555(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 10 1 34 0 0 count in 32bit=10 out: -278045020 0 24 0 10 MODE=1 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 21845 0x 5555(Hex) Data( 2)= 21845 0x 5555(Hex) Data( 3)= 21845 0x 5555(Hex) Data( 4)= 21845 0x 5555(Hex) Data( 5)= 21845 0x 5555(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 10 1 34 0 0 count in 32bit=10 out: -278045020 0 24 0 10 MODE=1 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 21845 0x 5555(Hex) Data( 2)= 21845 0x 5555(Hex) Data( 3)= 21845 0x 5555(Hex) Data( 4)= 21845 0x 5555(Hex) Data( 5)= 21845 0x 5555(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: this program was linked with -fast or -fnonstd and so may have produced nonstandard floating-point results. Sun's implementation of IEEE arithmetic is discussed in the Numerical Computation Guide. onl5v4[78]% ok. 問題なし。 (4). cam2プログラムの問題。 現在のcam2プログラムは、各ループの終りでデータ・ バッファをリセットしていないので、正しくないデータ表示がされてしまう可能 性がある。 そこで、各ループの終りにデータ・バッファのリセットをするよう に変更する。 さらに、現在のcam2プログラムは、write DMA 時のデータの設定 がされていない。 データの設定をするように変更する。 onl5v4[51]% vi cam2new.f : do 100 i = 1, loop print 10 read(*, *) nn, na, nf if (nf .ge. 16 .and. nf .lt. 24) then CCCC CCCC set up on 16bits data or 24 bits data. CCCC print 20 read(*, *) dat do 200 j = 1, len if (nword .eq. 1) then ndats(j) = dat else ndat(j) = dat endif 200 continue endif CCCCC nnaf = NAF(nn, na, nf) if (nword .eq. 1) then call CDMAW(mode, nnaf, ndats, len, lenr, nerr) else : onl5v4[52]% onl5v4[52]% cam2new Input transfer mode (1:word 2:long word) >1 Input loop >3 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >6 Input n a f >3 0 16 Input data >777 in: 12 1 36 0 0 count in 32bit=12 out: -277782876 0 24 0 12 MODE=1 N= 3 A= 0 F=16 len= 6 lenr= 6 error= 0(Hex) Data( 1)= 777 0x 309(Hex) Data( 2)= 777 0x 309(Hex) Data( 3)= 777 0x 309(Hex) Data( 4)= 777 0x 309(Hex) Data( 5)= 777 0x 309(Hex) Data( 6)= 777 0x 309(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 12 1 36 0 0 count in 32bit=12 out: -277782876 0 24 0 12 MODE=1 N= 3 A= 1 F= 0 len= 6 lenr= 6 error= 0(Hex) Data( 1)= 21845 0x 5555(Hex) Data( 2)= 21845 0x 5555(Hex) Data( 3)= 21845 0x 5555(Hex) Data( 4)= 21845 0x 5555(Hex) Data( 5)= 21845 0x 5555(Hex) Data( 6)= 21845 0x 5555(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 0 in: 12 1 36 0 0 count in 32bit=12 out: -277782876 0 24 0 12 MODE=1 N= 3 A= 0 F= 0 len= 6 lenr= 6 error= 0(Hex) Data( 1)= 777 0x 309(Hex) Data( 2)= 777 0x 309(Hex) Data( 3)= 777 0x 309(Hex) Data( 4)= 777 0x 309(Hex) Data( 5)= 777 0x 309(Hex) Data( 6)= 777 0x 309(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: this program was linked with -fast or -fnonstd and so may have produced nonstandard floating-point results. Sun's implementation of IEEE arithmetic is discussed in the Numerical Computation Guide. onl5v4[53]% ok. 16ビットDMA転送 read および write は正常に実行できた。 次に24ビットDMA転送をやってみる。 onl5v4[83]% cam2new Input transfer mode (1:word 2:long word) >2 Input loop >3 Input mode (0:QSTOP 1:QIGNORE 2:QREPEAT 3:QSCAN) >1 Input data counts >6 Input n a f >3 0 16 Input data >777 in: 24 1 48 0 0 count in 32bit=24 out: -268166508 0 24 0 24 MODE=1 N= 3 A= 0 F=16 len= 6 lenr= 6 error= 0(Hex) Data( 1)= 777 0x 309(Hex) Data( 2)= 777 0x 309(Hex) Data( 3)= 777 0x 309(Hex) Data( 4)= 777 0x 309(Hex) Data( 5)= 777 0x 309(Hex) Data( 6)= 777 0x 309(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 1 0 in: 24 1 48 0 0 count in 32bit=24 out: -277782876 0 24 0 24 MODE=1 N= 3 A= 1 F= 0 len= 6 lenr= 6 error= 0(Hex) Data( 1)= 1431699200 0x 5555FF00(Hex) Data( 2)= 1431699200 0x 5555FF00(Hex) Data( 3)= 1431699200 0x 5555FF00(Hex) Data( 4)= 1431699200 0x 5555FF00(Hex) Data( 5)= 1431699200 0x 5555FF00(Hex) Data( 6)= 1431699200 0x 5555FF00(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 0 in: 24 1 48 0 0 count in 32bit=24 out: -277782876 0 24 0 24 MODE=1 N= 3 A= 0 F= 0 len= 6 lenr= 6 error= 0(Hex) Data( 1)= 65289 0x FF09(Hex) Data( 2)= 65289 0x FF09(Hex) Data( 3)= 65289 0x FF09(Hex) Data( 4)= 65289 0x FF09(Hex) Data( 5)= 65289 0x FF09(Hex) Data( 6)= 65289 0x FF09(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Note: this program was linked with -fast or -fnonstd and so may have produced nonstandard floating-point results. Sun's implementation of IEEE arithmetic is discussed in the Numerical Computation Guide. onl5v4[84]% NG. 先に "naf=3 0 16" で "777" を書き込んだのに、読み出した時には、 "65289" になってしまっている。 (5). 24ビットDMA転送をもっと詳しく調べる。 スイッチ・レジスタのデータ・スイッチを、0x654321 に設定して読み出してみ る。 まず、16ビットDMA転送では、 nput n a f >3 1 0 in: 10 1 34 0 0 count in 32bit=10 out: -268166508 0 24 0 10 MODE=1 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 17185 0x 4321(Hex) Data( 2)= 17185 0x 4321(Hex) Data( 3)= 17185 0x 4321(Hex) Data( 4)= 17185 0x 4321(Hex) Data( 5)= 17185 0x 4321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f > ok. データを正しく読み出している。 次に、24ビットDMA転送をやってみる。 Input n a f >3 1 0 in: 20 1 44 0 0 count in 32bit=20 out: -277782876 0 24 0 20 MODE=1 N= 3 A= 1 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 1126301541 0x 4321FF65(Hex) Data( 2)= 1126301541 0x 4321FF65(Hex) Data( 3)= 1126301541 0x 4321FF65(Hex) Data( 4)= 1126301541 0x 4321FF65(Hex) Data( 5)= 1126301541 0x 4321FF65(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f > 念のために、16ビットDMA転送 read/write、24ビットDMA転送 read/write を やってみる。 o 16ビットDMA転送 read/write Input n a f >3 0 16 Input data >17185 in: 10 1 34 0 0 count in 32bit=10 out: -277782876 0 24 0 10 MODE=1 N= 3 A= 0 F=16 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 17185 0x 4321(Hex) Data( 2)= 17185 0x 4321(Hex) Data( 3)= 17185 0x 4321(Hex) Data( 4)= 17185 0x 4321(Hex) Data( 5)= 17185 0x 4321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 0 in: 10 1 34 0 0 count in 32bit=10 out: -277782876 0 24 0 10 MODE=1 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 17185 0x 4321(Hex) Data( 2)= 17185 0x 4321(Hex) Data( 3)= 17185 0x 4321(Hex) Data( 4)= 17185 0x 4321(Hex) Data( 5)= 17185 0x 4321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f > o 24ビットDMA転送 read/write Input n a f >3 0 16 Input data >6636321 in: 20 1 44 0 0 count in 32bit=20 out: -277782876 0 24 0 20 MODE=1 N= 3 A= 0 F=16 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 6636321 0x 654321(Hex) Data( 2)= 6636321 0x 654321(Hex) Data( 3)= 6636321 0x 654321(Hex) Data( 4)= 6636321 0x 654321(Hex) Data( 5)= 6636321 0x 654321(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f >3 0 0 in: 20 1 44 0 0 count in 32bit=20 out: -277782876 0 24 0 20 MODE=1 N= 3 A= 0 F= 0 len= 5 lenr= 5 error= 0(Hex) Data( 1)= 6684449 0x 65FF21(Hex) Data( 2)= 6684449 0x 65FF21(Hex) Data( 3)= 6684449 0x 65FF21(Hex) Data( 4)= 6684449 0x 65FF21(Hex) Data( 5)= 6684449 0x 65FF21(Hex) Data( 6)= 0 0x 0(Hex) Data( 7)= 0 0x 0(Hex) Data( 8)= 0 0x 0(Hex) Data( 9)= 0 0x 0(Hex) Data(10)= 0 0x 0(Hex) Input n a f > 16ビットDMA転送時 (1) write 時 naf = 3 0 16, data = 0x4321 を write した。 CAMACスイッチ・レジスタ・モジュールのLEDの表示は、0x4321と正しく 点灯している。 (2) read 時 naf = 3 0 0 で read した。 データウェイ・ディスプレーのLEDの表示は、0x4321と正しく点灯してい る。 上で示したように、リード・データ・バッファの内容も0x4321と正 しい値が返っている。 24ビットDMA転送時 (1) write 時 naf = 3 0 16, data = 0x654321 を write した。 CAMACスイッチ・レジスタ・モジュールのLEDの表示は、0x210065と異常な 値を点灯している。 (2) read 時 naf = 3 0 0 で read した。 データウェイ・ディスプレーのLEDの表示は、0x0x210065と異常な値を 点灯している。 上で示したように、リード・データ・バッファの内容も 0x65FF21と異常な値が返っている。