USB3-FRM13 API Programming (Rev 1.2) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned in this document as their own property. Information furnished by DAQ system is believed to be accurate and reliable. However, no responsibility is assumed by DAQ system for its use, nor for any infringements of patents or other rights of third parties which may result from its use. No license is granted by implication or otherwise under any patent or copyrights of DAQ system. The information in this document is subject to change without notice and no part of this document may be copied or reproduced without the prior written consent. Copyrights 2010 DAQ system, All rights reserved.
Board Level API Functions Overview int int OpenDAQDevice (void) ResetBoard (int nboard) CloseDAQDevice (void) GetBoardNum (void) IsConnected(void) OpenDAQDevice 디바이스를 Open 한다. 프로그램에서초기에반드시한번함수를호출하여디바이스를 Open 하여야한다. Int OpenDAQDevice (void) 없음. 함수호출에성공한경우, 설치된보드의개수를리턴한다. ( 멀티보드인경우최대 4까지가능 ) 함수호출에실패한경우, 0 을리턴한다. 이것의의미는시스템에장치가없다는의미이다. ResetBoard 현재시스템 (PC) 에장착된디바이스를초기화한다. ResetBoard (int nboard) nboard : 현재시스템에장착되어있는보드번호를알려준다. 보드번호는보드의 DIP 스위치를이용하여설정한다. 함수호출에성공일경우 TRUE 을리턴함. 함수호출에실패한경우, 어떤 API함수도호출할수없고 CloseDAQDevice() 를부른다.
CloseDAQDevice Open된디바이스를 Close한다. 장치의사용이끝나게되면, 반드시장치를 Close하여다른프로그램에서사용할수있도록한다. CloseDAQDevice (void) 없음. 디바이스 Open에성공할경우 TRUE를실패할경우 FALSE를리턴한다. GetBoardNum 시스템에서오픈된후보드의개수를알려준다. int GetBoardNum (void) 없음. 보드의개수. ( 멀티보드인경우최대 4까지가능 ) IsConnected USB 에연결이되어있는지를알려준다. IsConnected (void) 없음.
LVDS(Camera Link) API Functions Overview DWORD LVDS_Init (void) LVDS_Start (void) LVDS_GetFrame (DWORD* ncnt, unsigned char* buf) LVDS_Close (void) LVDS_GetResolution (DWORD *xres, DWORD *yres) LVDS_Stop (void) LVDS_SetDataMode (int nmode) LVDS_GetVersion (int *nfpgaver, int *nfirmver) LVDS_GetError (DWORD *dwstatuse) LVDS_BufferFlush (void) LVDS_SetDeUse ( buse) LVDS_SetHsPol ( bpol) LVDS_CameraMode (int nmode) LVDS_SetReferrenceClock (int nclock) LVDS_ConfigureCc (DWORD dwcfg) LVDS_CcOutput (DWORD dwcc) LVDS_SetLineCount (DWORD dwcount) LVDS_SetPageStart (DWORD dwevent) LVDS_SetPageDelay (DWORD dwcount) LVDS_ConfigureTrig1 (DWORD dwevent, DWORD dwdelay, DWORD dwwidth, DWORD dwblank) LVDS_ConfigureTrig2 (DWORD dwevent, DWORD dwdelay, DWORD dwwidth, DWORD dwblank) LVDS_SetTrigger ( buse) LVDS_SetTrigEdge ( buse) LVDS_SetPoCLDelay (int nmode)
LVDS_Init LVDS sub-system 의자원, 예를들어 interrupt 와 LVDS control register 을초기화한다. LVDS_Init (void) 없음. LVDS_Start 프레임데이터수집을시작한다. 이함수를호출한후에 LVDS_GetFrame 함수를 호출하여데이터가완성이되었는가를확인할수있다. LVDS_Start (void) 없음. LVDS_GetFrame 프레임데이터가완성이되었는가를검사하고완성이되었으면프레임데이터를가 져온다. 이때데이터를받아올버퍼크기를반드시알려주어야한다. LVDS_GetFrame (DWORD* ncnt, unsigned char* buf) ncnt : 프레임데이터를받아올버퍼의크기가저장되어있는변수의번지이다. 함수를호출할때버퍼크기를지정하고호출한후에는변수값을읽어서실제로읽어온개수를확인한다. 데이터크기는바이트단위이다. buf : 프레임버퍼포인터. 호출이성공하면 ncnt 값을확인하여원하는크기만큼읽어졌는가를확인한다. 프레임데이터가완성이되지않았으면바로 FALSE를리턴하고 ncnt 값을 0으로해서리턴이일어난다.
LVDS_Close LVDS 함수에서사용된모든자원을되돌려준다. 어플리케이션프로그램은프로그램 종료시이함수를부른다. LVDS_Close (void) 없음. LVDS_GetResolution Video 입력의해상도를가져온다. LVDS_GetResolution (DWORD *xres, DWORD *yres) *xres : 수평해상도값즉, Frame의 Width를가져온다. *yres : 수직해상도값즉, Frame의 Height를가져온다. LVDS_Stop 프레임데이터 Capture 를중지한다. LVDS_Stop (void) 없음.
LVDS_SetDataMode 프레임 ( 이미지 ) 데이터모드를선택한다. LVDS_SetDataMode (int nmode) nmode : 0 이면 8bit Mode이고 1 이면 16bit Mode이고 2 이면 32bit Mode이고 3 이면 64bit Mode이다. LVDS_GetVersion 현재프로그램의버전을가져온다. LVDS_GetVersion (int *nfpgaver, int *nfirmver) *nfpgaver : 현재 FPGA 버전값. *nfirmver : 현재 Firmware 버전값. LVDS_GetError 프레임 ( 이미지 ) 에러를가져온다. DWORD LVDS_GetError (DWORD *dwstatus) *dwstatus : 에러상태값을가져온다. 1 이면 Overflow error 2 이면 Read error 4 이면 Size error
LVDS_BufferFlush 버퍼를초기화한다. LVDS_BufferFlush (void) 없음. LVDS_SetDeUse 데이터유효 (Data Valid) 신호선을선택한다. LVDS_SetDUse ( buse) buse : True 이면 DVAL(Data Validation) 사용하고 False 이면 HSYNC (Horizontal Synchronization) 를사용한다 LVDS_SetHsPol 수평신호 (HSYNC : Horizontal Synchronization) 신호선을선택한다. LVDS_SetHsPol ( bpol) bpol : True 이면 Normal HSYNC 사용하고 False 이면 Inverse HSYNC를사용한다
LVDS_CameraMode 카메라모드가 Area Line Scan Camera 인지 Line Scan Camera 인지를선택한다. LVDS_CameraMode (int nmode) nmode : 0 이면 Area Scan Camera 이고 (Default) Others 이면 Line Scan Camera 이다 LVDS_SetReferenceClock 레퍼런스클럭을무엇으로사용할것인지를선택한다. LVDS_SetReferenceClock (int nclcok) nclock : 0 이면프레임그레버내의 Internal Clcok 을사용하고 (Default) Others 이면엔코더나다른보드에서제공되는 External Clock을사용한다. LVDS_ConfigureCc 해당비트의환경설정값을선택한다. LVDS_ConfigureCc (DWORD dwcfg) dwcfg : bit0(cc1 configure) = 0 : digital out1 / 1 : alternate (Trigger1 output) bit1(cc2 configure) = 0 : digital out2 / 1 : alternate (Trigger2 output) bit2(cc3 configure) = 0 : digital out3 / 1 : (Digital output) bit3(cc4 configure)= 0 : digital out4 / 1 : alternate (Reference clock output) others : Reserved
LVDS_CcOutput 해당비트의 CC 값을출력한다. LVDS_CcOutput (DWORD dwcc) dwcc : bit0(cc1 out) = 0 : output 0 / 1 : output 1 bit1(cc2 out) = 0 : output 0 / 1 : output 1 bit2(cc3 out) = 0 : output 0 / 1 : output 1 bit3(cc4 out) = 0 : output 0 / 1 : output 1 others : Reserved LVDS_SetLineCount 한페이지에서하나의이미지를얻기위해필요한라인의수를선택한다. LVDS_SetLineCount (DWORD dwcount) dwcount : 1 ~65535 LVDS_SetPageStart 페이지초기이벤트를선택한다. LVDS_SetPageStart (DWORD dwevent) dwevent : 0 이면 Continuous (Free Running) 1 이면 Rising edge in Page Trigger input 2 이면 Rising edge on encoder z phase
LVDS_SetPageDelay 한페이지에서하나의이미지를얻기전에필요한클럭의수를선택한다. LVDS_SetPageDelay (DWORD dwcount) dwcount : 1 ~ 15 LVDS_ConfigureTrig1 트리거 1 의입력모드선택과출력지연, 출력폭, 출력공백을선택한다. LVDS_ConfigureTrig1 (DWORD dwevent, DWORD dwdelay, DWORD dwwidth, DWORD dwblank) dwevent : 0 이면 Continuous (Free running without any condition) 1 이면 Rising edge on Line Trigger input 2 이면 Rising edge on encoder A phase 3 이면 Rising edge on encoder B phase 4 이면 Rising edge encoder up clock using A and B phase 5 이면 Rising edge encoder down clock A and B phase dwdelay : 출력 Trig1이 high가되기전에필요한레퍼런스클럭수 dwwidth : 출력 Trig1이 high에필요한레퍼런스클럭수 dwblank : 출력 Trig1이지연에서복귀전에필요한레퍼런스클럭수
LVDS_ConfigureTrig2 트리거 2 의입력모드선택과출력지연, 출력폭, 출력공백을선택한다. LVDS_ConfigureTrig2 (DWORD dwevent, DWORD dwdelay, DWORD dwwidth, DWORD dwblank) dwevent : 0 이면 Continuous (Free running without any condition) 1 이면 Rising edge on Line Trigger input 2 이면 Rising edge on encoder A phase 3 이면 Rising edge on encoder B phase 4 이면 Rising edge encoder up clock using A and B phase 5 이면 Rising edge encoder down clock A and B phase dwdelay : 출력 Trig2가 high가되기전에필요한레퍼런스클럭수 dwwidth : 출력 Trig2가 high에필요한레퍼런스클럭수 dwblank : 출력 Trig2가지연에서복귀전에필요한레퍼런스클럭수 LVDS_SetTrigger Trigger 를시작한다. LVDS_SetTrigger ( buse) buse : True 이면 Trigger를사용하고 False 이면 Normal 상태를유지한다
LVDS_SetTrigMode Trigger 모드를선택한다.. LVDS_SetTrigMode ( buse) buse : True 이면 Trigger Edge Mode False 이면 Trigger Level Mode LVDS_SetPoCLDelay PoCL(Power over Camera Link) 전원을사용할때지연시간 (Delay time) 을선택할수 있다. (DEFAULT 는 0.5sec 이다.) LVDS_SetPoCLDelay (int nmode) nmode : 0 : 0.5sec, 1 : 1sec, 2 : 1.5sec, 3 : 2sec 4 : 2.5sec, 5 : 3sec, 6 : 3.5sec, 7 : 4sec
UART API Functions Overview UART_Init (void) UART_GetData (DWORD* ncnt, unsigned char* buf) UART_SendData (DWORD* ncnt, unsigned char* buf) UART_Close (void) UART_SetBaud (DWORD nbaud) UART_BufferFlush (void) UART_Init UART sub-system 의자원, 예를들어 interrupt 와 UART control register 를초기화한다. UART_Init (void) 없음. UART_GetData 차동 UART 를통하여문자를받는다. UART_GetData (DWORD* ncnt, unsigned char* buf) ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대받을수있는문자는 1000 bytes 로제한되어있다. buf : 버퍼어드레스.
UART _SendData 차동 UART 를통하여문자를보낸다. UART_SendData (DWORD* ncnt, unsigned char* buf) ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대전송할수있는문자는 1000 bytes 로제한되어있다. buf : 버퍼어드레스. UART _Close UART 함수에서사용한모든자원을되돌려준다. UART_Close (void) 없음. UART_SetBaud UART Baud 를정한다. UART_SetBaud (DWORD nbaud) nbaud : 0: 9600, 1: 19200, 2: 38400, 3:57600, 4:115200bps
UART _BufferFlush UART Rx 버퍼를 clear 한다. UART_BufferFlush (void) 없음. CC(Camera Control) API Functions Overview DIO_Write (DWORD dwval) DIO_Write 원하는카메라제어값을출력포트에출력한다. ( 카메라사양참조 ) DIO_Write (DWORD dwval) dwval : 출력포트에기록할값.
Multi Board support APIs 싱글보드의 API 인경우단지하나의보드가인스톨된시스템에서사용된다. 하지만, 두개의보드이거나그이상 ( 최대 4개지원 ) 의보드가인스톨된시스템에서는다중 API 를사용해야만한다. Multi-Board LVDS(Camera Link) API Functions Overview IsConnected_Mul (int nboard) LVDS_Init_Mul (int nboard) LVDS_Check_Mul (int nboard) LVDS_Start_Mul (int nboard) LVDS_GetFrame_Mul (int nboard, DWORD* ncnt, unsigned char* buf) LVDS_Close_Mul (int nboard) LVDS_GetResolution_Mul (int nboard, DWORD *xres, DWORD *yres) LVDS_Stop_Mul (int nboard) LVDS_SetDataMode_Mul (int nboard, int nmode) LVDS_GetVersion_Mul (int nboard, int *nversion) LVDS_BufferFlush_Mul (int nboard) LVDS_SetDeUse_Mul (int nboard, buse) LVDS_SetHsPol_Mul (int nboard, bpol) LVDS_CameraMode_Mul (int nboard, int nmode) LVDS_SetReferrenceClock_Mul (int nboard, int nclock) LVDS_ConfigureCc_Mul (int nboard, DWORD dwcfg) LVDS_CcOutput_Mul (int nboard, DWORD dwcc) LVDS_SetLineCount_Mul (int nboard, DWORD dwcount) LVDS_SetPageStart_Mul (int nboard, DWORD dwevent) LVDS_SetPageDelay_Mul (int nboard, DWORD dwcount) LVDS_ConfigureTrig1_Mul (int nboard, DWORD dwevent, DWORD dwdelay, DWORD dwwidth, DWORD dwblank) LVDS_ConfigureTrig2_Mul (int nboard, DWORD dwevent, DWORD dwdelay, DWORD dwwidth, DWORD dwblank) LVDS_SetTrigger_Mul (int nboard, buse) LVDS_SetTrigEdge_Mul (int nboard, buse) LVDS_SetPoCLDelay_Mul (int nboard, int nmode)
IsConnected_Mul USB 에연결이되어있는지를알려준다. IsConnected _Mul (int nboard) LVDS_Init_Mul LVDS sub-system 의자원, 예를들어 interrupt 와 LVDS control register 을초기화한다. LVDS_Init _Mul (int nboard) LVDS_Check_Mul 받은프레임데이터의완료를체크함. LVDS_Check_Mul (int nboard) 프레임데이터를완벽하게받았다면 TRUE 을리턴함.
LVDS_Start_Mul 프레임데이터수집을시작한다. 이함수를호출한후에 LVDS_GetFrame 함수를 호출하여데이터가완성이되었는가를확인할수있다. LVDS_Start_Mul (int nboard) LVDS_GetFrame_Mul 프레임데이터가완성이되었는가를검사하고완성이되었으면프레임데이터를 가져온다. 이때데이터를받아올버퍼크기를반드시알려주어야한다. LVDS_GetFrame_Mul (int nboard, DWORD* ncnt, unsigned char* buf) ncnt : 프레임데이터를받아올버퍼의크기가저장되어있는변수의번지이다. 함수를호출할때버퍼크기를지정하고호출한후에는변수값을읽어서실제로읽어온개수를확인한다. 데이터크기는바이트단위이다. buf : 프레임버퍼포인터.
LVDS_Close_Mul LVDS 함수에서사용된모든자원을되돌려준다. 어플리케이션프로그램은프로그램 종료시이함수를부른다. LVDS_Close (int nboard) LVDS_GetResolution_Mul Video 입력의해상도를가져온다. LVDS_GetResolution_Mul (int nboard, DWORD *xres, DWORD *yres) *xres : 수평해상도즉, Frame의 Width를가져온다. *yres : 수직해상도즉, Frame의 Height를가져온다. LVDS_Stop_Mul LVDS_Stop_Mul (int nboard) 프레임데이터 Capture를중지한다.
LVDS_SetDataMode_Mul 이미지픽셀데이터모드를설정한다. LVDS_SetDataMode_Mul (int nboard, int nmode) nmode : 1 이면 8bit Mode이고 2 이면 16bit Mode이고 3 이면 32bit Mode이고 4 이면 64bit Mode이다. LVDS_GetVersion_Mul 현재 FPGA version 을가져온다. LVDS_GetVersion_Mul (int nboard, int *nfpgaver, int *nfirmver) *nfpgaver : 현재 FPGA 버전값. *nfirmver : 현재 Firmware 버전값.
LVDS_GetError_Mul 프레임 ( 이미지 ) 에러를가져온다. DWORD LVDS_GetError_Mul (int nboard, DWORD *dwstatus) *dwstatus : 에러상태값을가져온다. 1 이면 Overflow error 2 이면 Read error 4 이면 Size error LVDS_BufferFlush_Mul 버퍼를초기화한다. LVDS_BufferFlush_Mul (int nboard) LVDS_SetDeUse_Mul 데이터유효 (Data Valid) 신호선을선택한다. LVDS_SetDUse_Mul (int nboard, buse) buse : True 이면 DVAL(Data Validation) 사용하고 False 이면 HSYNC (Horizontal Synchronization) 를사용한다
LVDS_SetHsPol_Mul 수평신호 (HSYNC : Horizontal Synchronization) 신호선을선택한다. LVDS_SetHsPol_Mul (int nboard, bpol) bpol : True 이면 Normal HSYNC 사용하고 False 이면 Inverse HSYNC를사용한다 LVDS_CameraMode_Mul 카메라모드가 Area Line Scan Camera 인지 Line Scan Camera 인지를선택한다. LVDS_CameraMode_Mul (int nboard, int nmode) nmode : 0 이면 Area Scan Camera 이고 (Default) Others 이면 Line Scan Camera 이다 LVDS_SetReferenceClock_Mul 레퍼런스클럭을무엇으로사용할지를선택한다. LVDS_SetReferenceClockMul (int nboard, int nclcok) nclock : 0 이면프레임그레버내의 Internal Clcok 을사용하고 (Default) Others 이면엔코더나다른보드에서제공되는 External Clock을사용한다.
LVDS_ConfigureCc_Mul 해당비트의환경설정값을선택한다. LVDS_ConfigureCc_Mul (int nboard, DWORD dwcfg) dwcfg : bit0(cc1 configure) = 0 : digital out1 / 1 : alternate (Trigger1 output) bit1(cc2 configure) = 0 : digital out2 / 1 : alternate (Trigger2 output) bit2(cc3 configure) = 0 : digital out3 / 1 : (Digital output) bit3(cc4 configure)= 0 : digital out4 / 1 : alternate (Reference clock output) others : Reserved LVDS_CcOutput_Mul 해당비트의 CC 값을출력한다. LVDS_CcOutput_Mul (int nboard, DWORD dwcc) dwcc : bit0(cc1 out) = 0 : output 0 / 1 : output 1 bit1(cc2 out) = 0 : output 0 / 1 : output 1 bit2(cc3 out) = 0 : output 0 / 1 : output 1 bit3(cc4 out) = 0 : output 0 / 1 : output 1 others : Reserved
LVDS_SetLineCount_Mul 한페이지에서하나의이미지를얻기위해필요한라인의수를선택한다. LVDS_SetLineCount_Mul (int nboard, DWORD dwcount) dwcount : 1 ~65535 LVDS_SetPageStart_Mul 페이지초기이벤트를선택한다. LVDS_SetPageStart_Mul (int nboard, DWORD dwevent) dwevent : 0 이면 Continuous (Free Running) 1 이면 Rising edge in Page Trigger input 2 이면 Rising edge on encoder z phase LVDS_SetPageDelay_Mul 한페이지에서하나의이미지를얻기전에필요한클럭의수를선택한다. LVDS_SetPageDelay_Mul (int nboard, DWORD dwcount) dwcount : 1 ~ 15
LVDS_ConfigureTrig1_Mul 트리거 1 의입력모드선택과출력지연, 출력폭, 출력공백을선택한다. LVDS_ConfigureTrig1_Mul (int nboard, DWORD dwevent, DWORD dwdelay, DWORD dwwidth, DWORD dwblank) dwevent : 0 이면 Continuous (Free running without any condition) 1 이면 Rising edge on Line Trigger input 2 이면 Rising edge on encoder A phase 3 이면 Rising edge on encoder B phase 4 이면 Rising edge encoder up clock using A and B phase 5 이면 Rising edge encoder down clock A and B phase dwdelay : 출력 Trig1이 high가되기전에필요한레퍼런스클럭수 dwwidth : 출력 Trig1이 high에필요한레퍼런스클럭수 dwblank : 출력 Trig1이지연에서복귀전에필요한레퍼런스클럭수
LVDS_ConfigureTrig2_Mul 트리거 2 의입력모드선택과출력지연, 출력폭, 출력공백을선택한다. LVDS_ConfigureTrig2_Mul (int nboard, DWORD dwevent, DWORD dwdelay, DWORD dwwidth, DWORD dwblank) dwevent : 0 이면 Continuous (Free running without any condition) 1 이면 Rising edge on Line Trigger input 2 이면 Rising edge on encoder A phase 3 이면 Rising edge on encoder B phase 4 이면 Rising edge encoder up clock using A and B phase 5 이면 Rising edge encoder down clock A and B phase dwdelay : 출력 Trig2가 high가되기전에필요한레퍼런스클럭수 dwwidth : 출력 Trig2가 high에필요한레퍼런스클럭수 dwblank : 출력 Trig2가지연에서복귀전에필요한레퍼런스클럭수 LVDS_SetTrigger_Mul Trigger 를시작한다. LVDS_SetTrigger_Mul (int nboard, buse) buse : True 이면 Trigger를사용하고 False 이면 Normal 상태를유지한다
LVDS_SetTrigMode_Mul Trigger 모드를선택한다.. LVDS_SetTrigMode (int nboard, buse) buse : True 이면 Trigger Edge Mode False 이면 Trigger Level Mode LVDS_SetPoCLDelay_Mul PoCL(Power over Camera Link) 전원을사용할때지연시간 (Delay time) 을선택할수 있다.(DEFAULT 는 0.5sec 이다.) LVDS_SetPoCLDelay_Mul (int nboard, int nmode) nmode : 0 : 0.5sec, 1 : 1sec, 2 : 1.5sec, 3 : 2sec 4 : 2.5sec, 5 : 3sec, 6 : 3.5sec, 7 : 4sec
Multi-Board UART API Functions Overview UART_Init_Mul (int nboard) UART_GetData_Mul (int nboard, DWORD* ncnt, unsigned char* buf) UART_SendData_Mul (int nboard, DWORD* ncnt, unsigned char* buf) UART_Close_Mul (int nboard) UART_SetBaud_Mul (int nboard, DWORD nbaud) UART_BufferFlush_Mul (int nboard) UART_Init_Mul UART sub-system 의자원, 예를들어 interrupt 와 UART control register 를초기화한다. UART_Init_Mul (int nboard) UART_GetData_Mul 차동 UART 를통하여문자를받는다. UART_GetData_Mul (int nboard, DWORD* ncnt, unsigned char* buf) ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대받을수있는문자는 4Kbyte(4096) 로제한되어있다. buf : 버퍼어드레스.
UART _SendData_Mul 차동 UART 를통하여문자를보낸다. UART_SendData_Mul (int nboard, DWORD* ncnt, unsigned char* buf) ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대전송할수있는문자는 4Kbyte(4096) 로제한되어있다. buf : 버퍼어드레스. UART _Close_Mul UART 함수에서사용한모든자원을되돌려준다. UART_Close_Mul (int nboard) UART_SetBaud_Mul UART Baud 를정한다. UART_SetBaud_Mul (int nboard, DWORD nbaud) nbaud : 0: 9600, 1: 19200, 2: 38400, 3:57600, 4:115200bps
UART _BufferFlush_Mul UART Rx 버퍼를 clear 한다. UART_BufferFlush_Mul (int nboard) Multi-board CC(Camera Control) API Functions Overview DIO_Write (int nboard, DWORD dwval) DIO_Write 원하는카메라제어값을출력포트에출력한다. ( 카메라사양참조 ) DIO_Write (int nboard, DWORD dwval) dwval : 출력포트에기록할값.