728x90
반응형
컴퓨터의 병렬 포트를 이용해서 직접 입출력을 해보았다.
1. 먼저, 컴퓨터의 BIOS에서 다음과 같이 설정한다.
Parallel Port Address : 378
Parallel Port Mode : Normal
Parallel Port IRQ : IRQ7
2. vmware 자체 바이오스에서도 위와 같이 설정한다.
3. vmware에서 리눅스 부팅 후, vmware 메뉴 vm->setting을 클릭하면 새로운 창이 하나 뜬다. Hardware 탭을 보면 Parallel Port가 보일 것이다. 클릭 하면 옆에 Device status에 Connected가 있는데 이를 체크하고 OK버튼을 누른다. 이 설정을 해야만 vmware에서 Parallel Port를 사용할 수 있다.
4. 병렬 포트의 출력 부분에 LED를 연결하면 1초 간격으로 ON/OFF를 반복한다.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int iDev;
int iCnt;
char cDummy;
// "/dev/port" 파일을 연다
iDev = open("/dev/port", O_RDWR);
if(iDev >= 0)
{
printf("open() 성공\n");
}
else
{
printf("open() 실패\n");
return 0;
}
// Led ON/OFF..
for(iCnt = 0 ; iCnt < 10 ; ++iCnt)
{
// /dev/port의 0x378위치로 파일 포인터를 옮긴다.
lseek(iDev, 0x378, SEEK_SET);
cDummy = 0xFF;
write(iDev, &cDummy, 1); // 병렬 포트에 cDummy값을 출력
sleep(1); // 1초 딜레이
// /dev/port의 0x378위치로 파일 포인터를 옮긴다.
lseek(iDev, 0x378, SEEK_SET);
cDummy = 0x00;
write(iDev, &cDummy, 1); // 병렬 포트에 cDummy값을 출력
sleep(1); // 1초 딜레이
}
close(iDev);
return 0;
}
5. 프린트 포트에 대한 정보를 읽는다.(SELECT핀, 13번핀의 상태에 따라 ON/OFF가 출력된다)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/lp.h>
int main()
{
int iDev;
int iState;
// "/dev/lp0" 파일을 연다
iDev = open("/dev/lp0", O_RDWR | O_NDELAY);
if(iDev >= 0)
{
printf("open() 성공\n");
}
else
{
printf("open() 실패\n");
return 0;
}
while(1)
{
// 프린트 포트에 대한 정보를 읽어 온다.
ioctl(iDev, LPGETSTATUS, &iState);
// PSELECT핀이 High면 ON 출력, Low면 OFF 출력
if(iState & LP_PSELECD)
{
printf("ON\n");
}
else
{
printf("OFF\n");
}
usleep(50000);
}
close(iDev);
return 0;
}
그 외에 /dev/parport0 을 이용해서도 병렬 포트 출력이 가능했다.
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/ppdev.h>
#include <linux/parport.h>
int main()
{
int fd;
int iCnt;
int mode;
int cDummy;
// "/dev/parport0"을 연다.
fd = open("/dev/parport0", O_RDWR);
if(fd == -1) {
printf("open() error\n");
return 0;
}
mode = IEEE1284_MODE_ECP;
// Claim the port
ioctl(fd, PPCLAIM);
// set ECP mode
ioctl(fd, PPSETMODE, &mode);
for(iCnt = 0 ; iCnt < 10 ; ++iCnt)
{
cDummy = 0xff;
write(fd, &cDummy, 1);
sleep(1);
cDummy = 0x00;
write(fd, &cDummy, 1);
sleep(1);
}
// Release the port
ioctl(fd, PPRELEASE);
close(fd);
return 0;
}
728x90
'코스웨어 > 10년 스마트폰BSP' 카테고리의 다른 글
[BSP]업무일지-전현수-20100913 (0) | 2010.09.13 |
---|---|
[bsp]업무일지 -한경수- (0) | 2010.09.10 |
[BSP]업무일지-박동수-20100909 (0) | 2010.09.09 |
[BSP]업무일지-서동준-20100908 (0) | 2010.09.08 |
부서 발령 받았습니다. (2) | 2010.09.07 |
[BSP]업무일지-20100906-임종현 (0) | 2010.09.07 |
[BSP]업무일지 - 김강수 -20100903 (0) | 2010.09.07 |
[BSP]업무일지 - 김병찬-20100902 (0) | 2010.09.02 |