LKV-316A SW 사용자메뉴얼 Board Rev. 1.2 BSP Version 1.2.1.3 2009 년 03 월 04 일
알 림 여기에실린내용은제품의성능향상과신뢰도의증대를위하여예고없이변경될수도있습니다. 여기에실린내용의일부라도엘케이일레븐의사전허락없이어떠한유형의매체에복사되거나저장될수없으며전기적, 기계적, 광학적, 화학적인어떤방법으로도전송될수없습니다. 엘케이일레븐경기도성남시중원구상대원동 191-1 SKn 테크노파크메가동 1306 호 LKV-316A 은 엘케이일레븐의등록상표입니다. 2009-03-04 2/27
차례 알림... 2 1. INTRODUCTION... 6 1.1. LKV-316A 보드의소개... 6 1.2. 본문서의내용... 6 2. BOOT PARAMETER... 7 2.1. BOOT PARAMETER 정보... 7 2.2. BOOT PARAMETER 입력예... 7 3. LKV-316A CONTROL METHOD... 9 3.1. LKV-316A 보드 MEMORY MAP... 9 3.1.1. NVRAM... 10 3.1.1.1. NVRAM 의기능... 10 3.1.1.2. NVRAM Control Function... 10 3.1.2. FLASH MEMORY... 11 3.1.2.1. Flash Memory 의기능... 11 3.1.2.2. Flash Memory Control Function... 11 3.1.2.3. Flash Memory R/W Function... 12 3.1.3. SRAM... 13 3.2. THE CONTENTS OF A LKV-316A 보드 IO CONTROL... 13 3.2.1. WATCH DOG TIME OUT RESET CONTROL... 13 3.2.1.1. Watchdog Time Reset 기능... 13 3.2.1.2. Watchdog time control function... 14 3.2.2. FRONT PANEL LED CONTROL METHOD... 14 3.2.2.1. Front Panel LED Control Function... 14 3.2.3. DIP SWITCH READ METHOD... 14 3.2.3.1. Function Description... 14 3.2.3.2. Dip Switch Read Fucntion... 14 4. LKV-316A SERIAL CONTROL METHOD... 16 2009-03-04 3/27
4.1. LKV-316A 보드 SERIAL DRIVER INITIALIZATION... 16 4.2. VXWORKS IO SYSTEM... 16 4.2.1. OPEN ()... 16 4.2.2. CLOSE ()... 17 4.2.3. READ ()... 17 4.2.4. WRITE ()... 17 4.2.5. IOCTL ()... 18 4.3. XR16L788 DRIVER IO CONTROL METHOD... 20 4.3.1. XR16L788 BSP SPECIFIC IOCTL... 20 4.3.1.1. XR16L788 General Function... 20 4.3.1.2. XR16L788 Auto Control IOCTL Function... 20 4.3.1.3. XR16L788 Error Check IOCTL Function... 21 4.3.2. XR16L788 RS485 CONTROL METHOD PROGRAM EXAMPLE... 22 4.3.2.1. RS485 통신 test Example... 22 5. LKV-316A 보드 VMEBUS CONTROL METHOD... 24 5.1. LKV-316A 보드 VME MEMORY MAP... 24 5.2. LKV-316A VME BUS ACCESS EXAMPLE... 24 5.2.1. EXTENDED MODE STANDARD MODE ACCESS EXAMPLE... 24 6. 주의사항... 26 2009-03-04 4/27
그림목차 그림 1. LKV-316A 보드의 Boot Parameter 입력정보... 8 표목차 표 1. LKV-316A Memory Map... 9 표 2. DS9034(RTC) Register Map... 11 표 3. LKV-316A VME Bus Memory Map... 24 2009-03-04 5/27
1. Introduction 1.1. LKV-316A 보드의소개 LKV-316A CPU board 는 VMEbus 용 board 로써 Motorola 사의 PowerPC core 가내장된 embedded communication processor 인 MPC860 을사용하여고성능과다기능을가능하게하였다. Front panel 을통하여 1 개의 ethernet port 와 2 개의통신용 serial port 와 console port 가장착되어있다. 통신용 port 는 RS232 또는 RS485 통신이가능하다. 또한 TM-8 Transition Module 을장착할때 8 개의 RS232/RS485 serial 통신 port 를추가할수있으며 TM-16 Transition Module 을장착할때 16 개의 RS232/RS485 serial 통신 port 를추가할수있다. 또한 Transition Module 을사용하지않고 VMEbus P2 커넥터를통해서 16 개의 RS232 serial port 통신을할수있다. board 내에 ARCnet mezzanine board 를장착하면 VMEbus 를통해서 ARCnet 통신도가능하다. VMEbus 에서는 system controller 기능과 Master 기능, Slave 기능, Interrupt handler 기능을가지고있다. board 내에 32 MB SDRAM, 1 MB EPROM, 512 KB RTC/NVRAM, 4 MB Flash Memory, 1MB SRAM 을가지고있어서다양한 application 에의사용이가능하도록설계되어있다. OS 로는 VxWorks 가지원된다. 또한 Backplane 기능이지원되며, Master 보드에서 1 개의 LEN 으로 Slave 보드를 VME 버스를통해서 Booting 시킬수있습니다. 1.2. 본문서의내용 LKV-316A 보드는보드내에 32Mbyte 의 SDRAM, 4Mbyte 의 Flash Memory, 512Kbyte 의 RTC/NVRAM, 1Mbyte 의 EPROM 으로구성되어있다. 또한 Serial Port3 개와 VMEBus Interface 가구현되어있어 Master/Slave 보드로사용가능하다. 본문서에서는위와같은보드구성에따라 1 장에서는 LKV-316A 보드에대한소개및구성에대한내용이수록되어있으며, 2 장부터는보드사용자가 LKV-316A 보드사용시 Setting 해야할 Boot Parameter 에관해자세한설명이되어있다. 3 장에서는본보드에서지원되는다양메모리종류의컨트롤방법및예가주어지며, 4 장에서는 Serial Port Setting 및사용방법에대해서소개되며그에관한예가주어진다. 2009-03-04 6/27
2. Boot Parameter 2.1. Boot Parameter 정보 boot device : cpm unit number : 0 processor number : 0 host name : hjahn file name : vxworks inet on ethernet (e) : 220.76.45.97 host inet (h) : 220.76.45.36 user (u) : hjahn ftp password (pw) : 1234 flags (f) : 0x0 target name (tn) : other (o) : 위의내용은 Boot Parameter 설정예제이다. 먼저 boot device 는 Ethernet 드라이버의 name 을가리키고보드에따라달라지며, Device Driver 의구성도또한다르다. File name 은 VxWorks 이미지가있는경로명을적어준다. [ 그림 1] 은 VxWorks Boot 를하기위한 boot parameter 의실제입력정보이다. inet on Ethernet(e) 는보드의 IP 주소를적어주며, host inet 은 VxWorks 이미지를다운로드받을 host 의주소를적어준다. 다음으로 user(u) 와 ftp password 에는 ftp demon 의 ID 와 Password 를적어주면된다. 여기서 Debug 용 Console 프로그램은 Tera Term 을사용한다. BSP 는 FTP 를이용하여 host 로부터 OS+Application image 를다운로드받으며, 후에이를실행한다. 2.2. Boot Parameter 입력예 VxWorks Boot Prompt([VXWorks Boot]:) 상에서 p 를입력하면 [ 그림 1] 과같은 Boot Parameter 에관한정보를볼수있다. 또한 Prompt 상에서 c 를입력하면 Boot Parameter 에대한정보를사용자의환경에맞게 Setting 가능하도록되어있다. Boot Parameter 의입력이끝난후 Prompt 상에서 @ 를입력하면 Ethernet 을통해부팅이실행되는것을확인할수있다. 2009-03-04 7/27
그림 1. LKV-316A 보드의 Boot Parameter 입력정보 2009-03-04 8/27
3. LKV-316A Control Method 3.1. LKV-316A 보드 Memory Map 표 1. LKV-316A Memory Map Memory range Size(Byte) Description 0x00000000 ~ 0x01FFFFFF 32M SDRAM 0x10000000 ~ 0xEFFFFFFF 3.6G VME Extended Address 0xF0000000 ~ 0xF0FFFFFF 16M VME Standard Address 0xF1000000 ~ 0xF11FFFFF 1M SRAM Space 0xF2000000 ~ 0xF201FFFF 128K NVRAM Space 0xF3000000 RESERVED 0xF4000000 ~ 0xF400FFFF 64K VME Short Address 0xF5000000 FAIL LED OFF 0xF5000002 FAIL LED ON 0xF6000000 1 DIP SW Read Address 0xF6000001 VMEbus Interrupt Request Status Read 0xF700000X VMEbus Interrupt Acknowledge 0xF800000X SCC0 Chip Select 0xF900000X SCC1 Chip Select 0xFA00000X ARCS Chip Select 0xFB000000 VMEbus Interrupt Vector Write Register 0xFB000001 VMEbus Interrupt request register 0xFB000002 RESERVED 0xFC000000 SCC Reset 0xFC000001 Watch Dog Timer Disable/Enable 0xFD000000 ~ 0xFD3FFFFF 4M Flash Memory 0xFE000000 VMEbus RMC Cycle 0xFF000000 IMMR 0xFFF00000 ~ 0xFFFFFFFF 1M EPROM 2009-03-04 9/27
3.1.1. NVRAM 3.1.1.1. NVRAM 의기능 NVRAM 은 Boot Parameter 의저장을주목적으로한다. 비휘발성메모리로 Rom 은아니지만내부에 battery 가내장되어있어특정 data 를저장하기위한용도로사용가능하다. 또한 RTC 기능으로사용되며, NVRAM 에 Setting 한시간값에의해정확한시간을알아낼수있다. 현재 LKV-316A 보드는 Dallas 사의 DS1646 를사용하며, 메모리는 128Kbyte 이다. NVRAM 을 Access 할경우 MPC860 의특성으로인하여 8bit 단위로 Access 되며, Read 시에는 16bit 나 32bit 단위로 Access 가능하다. NVRAM 의 Access Range 는 0xF2000000 ~ 0xF201f000 까지 Access 가능하다. 현재 0xF201fdd0 부터 0xF201fed0 까지는 Boot Parameter 의정보가저장되어있다. 3.1.1.2. NVRAM Control Function 1) STATUS timeset(char *str) RTC 의시간정보를 Setting 하는함수이다. Setting 값의순서는 MM DD YY HH MM SS 의순서로설정된다. Ex) timeset( 100504014800 ) MM : Month DD : Day YY : Year HH : Hour MM : Minutes SS : Second 2) void timeshow(void) 현재 NVRAM 에저장되어있는시간정보를출력해주는함수이다. Ex) timeshow WED AUG 27 11:30:04 2003 2009-03-04 10/27
3) void rtcinit(base) RTC 초기화함수이다. 표 2. DS9034(RTC) Register Map ADDRESS DATA B7 B6 B5 B4 B3 B2 B1 B0 FUNCTION 1FFFF - - - - - - - - YEAR 00-99 1FFFE 0 0 0 - - - - - MONTH 01-12 1FFFD 0 0 - - - - - - DATE 01-31 1FFFC 0 FT 0 0 0 - - - DAY 01-07 1FFFB KS 0 - - - - - - HOUR 00-23 1FFFA 0 - - - - - - - MINUTES 00-59 1FFF9 ST - - - - - - - SECONDS 00-59 1FFF8 W R S - - - - - CONTROL A ST : Stop Bit R : Read Bit FT : Frequency Test W : Write Bit S : Sign Bit KS : Kick Start 3.1.2. Flash Memory 3.1.2.1. Flash Memory 의기능 LKV-316A 보드의 Flash Memory 는 4Mbyte 의용량을가지고있으며 flash Memory 를이용하여 Flash Boot 기능으로사용가능하다. 3.1.2.2. Flash Memory Control Function 1) makeflashboot(); 2009-03-04 11/27
Flash 에 bootrom.bin 파일을플래쉬메모리에다운로드하는함수이다. LKV-316A 보드의 Flash Booting 을하기위해서는아래와같은절차를수행해야한다. 순서 1) DOS 프롬프트상에서 " WINDBASE host x86-win32 bin torvars.bat" 를실행하여 Path 를잡아준다. 순서 2) VxWorks bootrom.hex 파일을 Binary 형식으로만든다. DOS 프롬프트상에서 BSP 파일이있는디렉토리에서다음을실행한다. Ex) make bootrom.hex 순서 3) 아래와같은명령으로 bootrom.bin 파일을생성한다. Ex) elftobin <infile> outfile_bsd elftobin <bootrom> bootrom.bin 실행시 aout file 이 Binary 파일형식으로바뀜. 도스명령의가운데인자는롬파일만들때생성된 bootrom 파일이다. 순서 4) 생성된 Binary 파일을 Target Board 에서 Load 할수있는위치로옮긴다. 순서 5) Console 상에서 ls 명령시다음과같이 binary 파일이보이는지확인한다 -> ls bootrom.bin 순서 6) makeflashboot 함수를이용하여 Binary 파일을 Flash Memory 에기록한다. 순서 7) 아래의 makeflashboot Test 와같은메시지가나오면정상적으로플래쉬메모리에기록된다. 아래상태에서롬의우측하단부에있는점퍼 2 개를밑으로옮기면플래쉬부팅이이루어진다. 3.1.2.3. Flash Memory R/W Function 1) Flash Erase Function - STATUS block_erase(int blknum) 2009-03-04 12/27
blknum 에해당되는 block 만을지우는함수이다. Block 의개수는 32 개이다. - void all_erase(void) flash Memory 전체를 clear 하는 function 이다. 현재 flash Memory 는 4Mbyte 이며, 전체블록은 32 개의블록을가지고있다. 2) flash Write Function - STATUS flash_write(uint32 addr, UINT16 *buf_pt, UINT32 buf_cnt) 현재 flash Memory 에 Write 하는 function 이다. 첫번째함수인자는 Flash Memory 의 Address 이다. 두번째인자는 Flash Memory 의 Write 될 Data 를담고있는 Buffer 의첫벗째 pointer 가된다. 마지막으로세번째인자는 flash memory 에 Write 될 Buffer 의 Size 가된다. 3) flash Read Function - STATUS flash_read(uint32 faddr, dst, UINT32 cnt) 현재 flash Memory 를 Read 하는 function 이다. 첫번째함수인자는 Flash Memory 의 Address 이다. 두번째인자는 Flash Memory 의 Read 될 Data 를저장할수있는 Buffer 의첫벗째 pointer 가된다. 마지막으로세번째인자는 flash memory 를 Read 할 Buffer 의 Size 가된다. 3.1.3. SRAM LKV-316A 보드의 SRAM 는 1Mbyte 의용량을가지고있다. Address Range 는 0xF1000000 ~ 0xF11FFFFF 이다. SRAM 은 8bit, 16bit, 32bit 모두 Read/Write Access 가능하다 3.2. The contents of a LKV-316A 보드 IO Control 3.2.1. Watch dog time out reset control 3.2.1.1. Watchdog Time Reset 기능 LKV-316A Board 에서는 Maxim 사의 MAX690 칩을사용하여 Watchdog time out 기능을구현하였다. Watchdog Enable 함으로서보드의동작이불안정시다시안정상태로가능하게할수있다 ( 보드 reset). 2009-03-04 13/27
3.2.1.2. Watchdog time control function 1) void watchdogtimer_enable(void) Watchdog timer Enable Fucntion 이며, Watch Dog Timer Disable 시 Address 0xFC000001 에 0xFF 를 Write 하면 Watch Timer 가 Enable 이된다. 2) void watchdogtimer_disable(void) Watchdog timer Disable Fucntion 이며, Watch Dog Timer Enable 시 Address 0xFC000001 에 0x00 를 Write 하면 Watch Timer 가 Disable 이된다. 3) STATUS watchdogtimer_clear_set(void) Watchdog timer Setting Fucntion 이며, 호출시 Watchdog Timer 가 Clear 함으로서 Watchdog timer reset 이걸리지않게된다. 실행시 Diag1 LED 가 On/Off 되며, Timer 가 clear 된다. 4) STATUS watchdogtimer_clear_free(void) 함수호출시 Watchdog timer 는 clear 되지않는다. 따라서 board 는 reset 된다. 3.2.2. Front Panel LED Control Method 3.2.2.1. Front Panel LED Control Function 1) STATUS ledcon(char led_value) led_value 따라서 Diag LED 가 On/Off 된다. EX) ledcon(1) : Diag0 LED ON ledcon(2) : Diag0 LED OFF ledcon(3) : Diag1 LED ON ledcon(4) : Diag1 LED OFF 3.2.3. Dip Switch Read method 3.2.3.1. Function Description LKV-316A Board 는 1 개의 Dip Switch 가있으며, Switch On 시 data 는 0 으로 Read 되며, Switch Off 시 data 는 1 로 read 된다. DIP SWITCH READ Address 는 0xF6000000 이다. 3.2.3.2. Dip Switch Read Fucntion 2009-03-04 14/27
1) char DipSwValue(void) Dip Switch Read 시 char 값이 return 되며, 값의범위는 0x00 ~ 0xFF 사이의값이다. 2009-03-04 15/27
4. LKV-316A Serial Control method 4.1. LKV-316A 보드 Serial Driver Initialization LKV-316A 보드는 1 개의 Ethernet Port 와 3 개의 Serial Port 가전면에장착되어있으며, Serial Device 로는 XR16L788 2 개가장착되어있어 Serial Port 를 16channel 까지지원한다. 또한 Baud rate generation 을위한기본 Clock 은 14.7456MHz 가공급된다. 4.2. vxworks IO System LKV-316A 보드는 IO System 을통해서 create(), remove() open(), close(), read(), write(), ioctl() 함수를지원하며 vxworks 에서일반적으로지원하는기능과같다. 4.2.1. open () 1) Synopsis int open ( const char * name, int flag, int mode ) 2) Description a name 현재생성되어야될프로세서의드라이버를가리킨다. 드라이버의이름은각각의프로세서마다다르며파일단위로생성됨. Name 을통해서드라이버에접근가능함. b flag O_RDONLY(0) : 드라이버읽기전용으로생성 O_WRONLY(1) : 드라이버쓰기전용으로생성 O_RDWR(2) : 드라이버읽기 / 쓰기로생성 O_CREATE(0x0200) : 드라이버를파일단위로생성 c mode UNIX 시스템에서파일접근허가를나타내는숫자를수록함. 3) Return Value a number 파일단위로생성된디바이스의개수를나타냄 b ERROR 해당디바이스가없거나파일네임과맞지않을경우를나타냄 2009-03-04 16/27
4.2.2. close () 1) Synopsis STATUS close ( int fd ) 2) Description a fd 시스템으로부터드라이버파일의사용이끝났음을알림. 3) Return Value a OK 호출이성공적으로이루어졌을경우를나타냄 b ERROR 해당드라이버가없을경우또는파일기술자가아닐경우. 4.2.3. read () 1) Synopsis int read (int fd, char * buffer, size_t maxbytes) 2) Description 개방된드라이버파일로부터일정수의바이트를버퍼로복사하기위해사용됨. a fd 버퍼로읽어들일드라이버의파일명 b buffer 읽어들일파일의저장공간으로 char type 의포인터로정식선언되며 1 문자와 1 바이트는구별없이사용할수있다. 즉 buffer 는자료가복사되어질문자배열에대한포인터임. c maxbytes 파일로부터읽혀질바이트의수를나타내는양의정수임. 3) Return Value a number 파일단위로생성된디바이스에서버퍼에저장된바이트의개수를나타냄 b ERROR 해당디바이스가없거나파일네임과맞지않을경우를나타냄 4.2.4. write () 1) Synopsis int write ( int fd, char * buffer, size_t nbytes) 2009-03-04 17/27
2) Description write 의호출은 read 와는반대로문자배열로선언된프로그램버퍼로부터개방된파일드라이버를통해일정수의바이트를출력하거나쓰기위해사용됨 a fd 출력하거나쓰기위한드라이버의파일명 b buffer 문자배열로선언된프로그램버퍼로 char type 의포인터로정식선언되며 1 문자와 1 바이트는구별없이사용할수있다즉 buffer 는출력될자료의문자배열에대한포인터임. c nbytes 파일로부터출력되어야할바이트의수를나타내는양의정수임. 3) Return Value a number 프로그램버퍼로부터디바이스에쓰여진바이트의개수를나타냄 b ERROR 해당디바이스가없거나파일네임과맞지않을경우를나타냄 4.2.5. ioctl () 1) Sysnopsis int ioctl ( int fd, int function, int arg ) 2) Description Device 의 I/O 컨트롤함수로매우유용하게쓰인다. a fd 컨트롤할디바이스의터미널명 b function I/O 컨트롤함수는디바이스드라이버에따라각함수에대한옵션이정해져있으며제공되는드라이버의옵션은다음과같다. - FIOBAUDRATE Baud Rate 을 Set 한다. - FIOGETOPTIONS 각채널에대한옵션을얻어옴 - FIOSETOPTIONS 각채널에대한옵션을 Setting 함 - FIOCANCEL 각채널에대한 read/write 요청을거부함 - FIOFLUSH RX Buffer clear 2009-03-04 18/27
- FIOWFLUSH TX Buffer clear VxWorks Programmer s Guide 3 장참조 주의 : 통신도중에에러가발생해서데이터수신이불안정한경우에는기본적으로사용중이던포트를 close() API 를이용해서사용중지하고, 다시 open() API 를사용해서해당통신포트를초기화한후에 read()/write() API 등을사용해서통신을수행하는것이보다안전합니다. 2009-03-04 19/27
4.3. XR16L788 Driver IO Control Method LKV-316A 보드는 IO System 을통해서 create(), remove() open(), close(), read(), write(), ioctl() 함수를지원하며 xr16l788 에서제공되는 ioctl 의 parameter 는다음과같다. 4.3.1. XR16L788 BSP Specific IOCTL 4.3.1.1. XR16L788 General Function XR16L788 에서제공되는드라이버옵션은다음과같다. - FIO_SET_BAUDRATE Baud Rate 을 Setting 함 - FIO_GET_BAUDRATE 현재 channel 별로 Setting 되어있는 BAUDRATE 의값을읽음 - FIO_R_FLUSH Read Buffer Flush - FIO_W_FLUSH Write Buffer Flush - FIO_GET_DREV Driver 의 Reversion Number 을읽어옴 - FIO_CHAN_RESET Serial Channel 을 Reset 함 - FIO_SET_DATA_LEN Channel 의 Data length 을 Set - FIO_SET_STOP_BIT Channel 의 Stop Bit 의개수를 Set - FIO_SET_PARITY Channel 의 Parity Bit 를 Set(NONE, EVEN, ODD) - FIO_SET_RTS_ON - FIO_SET_RTS_OFF - FIO_SET_DTR_ON - FIO_SET_DTR_OFF 4.3.1.2. XR16L788 Auto Control IOCTL Function 1) XR16L788 Auto Control Function 2009-03-04 20/27
XR16L788 에서제공되는드라이버옵션은다음과같다. - FIO_SET_FLOW_CTR Channel Sortware Flow Control - FIO_SET_AUTO_RS485CTR Channel Auto RS485 Control Enable - FIO_UNSET_AUTO_RS485CTR Channel Auto RS485 Control Disable - FIO_SET_AUTO_RTSDTR Channel Auto RTSDTR Control Enable - FIO_UNSET_AUTO_RTSDTR Channel Auto RTSDTR Control Disable - FIO_SET_AUTO_CTSDSR Channel Auto CTSDSR Control Enable - FIO_UNSET_AUTO_CTSDSR Channel Auto CTSDSR Control Disable 4.3.1.3. XR16L788 Error Check IOCTL Function 1) XR16L788 Error Check Function XR16L788 에서제공되는드라이버옵션은다음과같다. - FIO_RX_OVER_RUN_ERR Channel Rx Over Run Error Number Check - FIO_RX_PARITY_ERR Channel Rx Parity Error Number Check - FIO_RX_FRAMING_ERR Channel Rx Framing Error Number Check - FIO_RX_BREAK_ERR Channel Rx Break Error Number Check - FIO_RX_FIFO_ERR Channel Rx FIFO Error Number Check 2009-03-04 21/27
4.3.2. XR16L788 RS485 Control Method Program Example LKV-316A 보드의 TM Module 에서 jumper 를 RS485 모드로 Setting 한다. (Setting 방법은 TM Module 하드웨어설명서를참조 ) 기본적으로 RS485 통신의신호선은 RS232 와별차이가없고다만물리적으로하나의신호선에두개의라인이필요한데그들의표현은신호선명뒤에 + 와 - 로구분표기한다. 하지만 UART 의 TXD, RXD 신호선이멀티포인트버스에의하여공동으로사용하게됨에유의하여야한다. 즉하나의마스터는멀티포인트버스를출력이면출력, 입력이면입력으로구분하여사용할수밖에없다. 일반적으로 RS485 통신시개폐신호는 RTS 나 DTR 신호중하나를사용하며, 시스템베이스의경우 RTS 신호를사용한다. 4.3.2.1. RS485 통신 test Example void tmrs485test(int from, int to, int loop_cnt) { volatile char *buf; char *str="1234567890abcdef1234567890abcdef"; int k, r_byte, i=0; int temp; printf(" n n n n n"); printf(" t************************************************** n"); printf(" t* * n"); printf(" t* TM RS485 LOOP Test * n"); printf(" t* * n"); printf(" t************************************************** n"); printf(" n n"); /* 데이터송신포트처리 */ tmopenport(from); ioctl(tmfp_port[from], 0xF44, 0); ioctl(tmfp_port[from], 0xF04, 10); 2009-03-04 22/27
/* 데이터수신포트처리 */ tmopenport(to); ioctl(tmfp_port[from], 0xF44, 0); ioctl(tmfp_port[to], 0xF04, 10); if( (from < 0 from > 15) (to < 0 from > 15) ) { printf("select correct port number : 0 ~ 15 n"); return; } while(1) { write(tmfp_port[from],str+i,16); /* TX */ r_byte=read(tmfp_port[to],buf,16); /* RX */ printf("r_byte = %d n",r_byte); for (k=0; k<r_byte; k+=1) printf("%c"); printf(" n"); i++; if (I == 16) i=0; /* 송신 / 수신포트바꿈 */ temp = to; to = from; from = temp; } if (loop_cnt!= -1) { loop_cnt--; if (loop_cnt == 0) } break; } /* 송신 / 수신포트 close */ tmuartclose(from); tmuartclose(to); 2009-03-04 23/27
5. LKV-316A 보드 VMEBus Control method 5.1. LKV-316A 보드 VME Memory Map 표 3. LKV-316A VME Bus Memory Map NAME Address Size(Byte) Access Description VMEBUS Extended 0x10000000 ~ 3.6G R/W VME A32 Access Address 0xEFFFFFFF VMEBUS Standard 0xF0000000 ~ 16M R/W VME A24 Access Address 0xF0FFFFFF VMEBUS Short Address 0xF4000000 ~ 0xF400FFFF 64K R/W VME A16 Access 5.2. LKV-316A VME Bus Access Example 5.2.1. Extended Mode Standard Mode Access Example void vme_rw_test (unsigned int *extended_adrs, unsigned int *standard_adrs, unsigned int vmemsize, int flag) { unsigned int i; unsigned int extendedsize, standardsize; unsigned int *extendedadrs, *standardadrs; int extendeddata, standarddata; unsigned int vme_loopcnt = 0; extendedsize = vmemsize/4; standardsize = vmemsize/4; while(1) { if (flag!= -1) { flag--; if (flag == 0) } break; 2009-03-04 24/27
extendedadrs = extended_adrs; printf("[%d]vme Extended Mode RW Test!! n", vme_loopcnt); for (i=0; i<extendedsize; i++) *(extendedadrs++) = 0; extendedadrs = extended_adrs; for (i=0; i<extendedsize; i++) *(extendedadrs++) = i; extendedadrs = extended_adrs; for (i=0; i<extendedsize; i++) { extendeddata = *(extendedadrs++); if (i!= extendeddata) printf("data Compare Error!! Extended Adrs[0x%x] : Original Data[0x%x] : Error Data[0x%x] n", extendedadrs, i, *(extendedadrs)); } printf("[%d]vme Extended Mode RW Test OK!! n", vme_loopcnt); standardadrs = standard_adrs; printf("[%d]vme Standard Mode RW Test!! n", vme_loopcnt); for (i=0; i<standardsize; i++) *(standardadrs++) = 0; standardadrs = standard_adrs; for (i=0; i<standardsize; i++) *(standardadrs++) = i; standardadrs = standard_adrs; for(i=0; i<standardsize; i++) { standarddata = *(standardadrs++); if (i!= standarddata) printf("data Compare Error!! Standard Adrs[0x%x] : Original Data[0x%x] : Error Data[0x%x] n", standardadrs, i, *(standardadrs)); } printf("[%d]vme Standard Mode RW Test OK!! n", vme_loopcnt++); } } 2009-03-04 25/27
6. 주의사항! CAUTION VME Rack에서가장왼쪽에위치한보드는 System Controller로설정할것. System Controller 보드는하나의 Rack에하나만장착할것. System Controller 보드이외의보드는마스터 /Slave 보드로설정할것. KVME402 보드가장착되는 Rack의 GND는 FGND와직접연결하거나 Capacitor를통해연결할것.! WARNING KVME402 보드는정전기 (Electrostatic Discharge) 에취약할수있으니, 보드취급시주의할것. KVME402 보드를 Rack에장착할시에는가능하면전원을끄고작업할것. Rack이접지되지않았을경우감전의우려가있으므로, 반드시접지여부를확인하고, 물이나땀이뭍은손으로작업하지말것. 2009-03-04 26/27
엘케이일레븐 138-809 서울특별시송파구가락 2 동 545-5 번지동명빌딩 3 층 http://www.lk11.com, 전화 :02-3012-3788 2009-03-04 27/27