📄 main.c
字号:
#include <stdio.h>#include <stdlib.h>#include <termios.h>#include <fcntl.h>#include <asm/io.h>#define DATA_LENGTH 9#define ISR 2#define LSR 5#define IER 1#define FCR 2#define BASEADDR 0x200int main(int argc,char *argv[]){ int fd,res; int i,portnum; unsigned char txbuf[255],rxbuf[2000]; unsigned char DataISR,DataLSR,DataIER,tmp; if(argc < 2) { perror("You don't input parameters!\n"); return(-1); } if((fd = open(argv[1],O_RDWR|O_NONBLOCK)) <= 0) { perror("Open operation error!\n"); return fd; } portnum=atoi(argv[2]); if (ioperm(BASEADDR+portnum*8,8,1)==-1) printf("the %d ioperm port failed \n",i); txbuf[0] = 0x01; txbuf[1] = 0x83; txbuf[2] = 0x04; txbuf[3] = 0xff; txbuf[4] = 0xff; txbuf[5] = 0x3f; txbuf[6] = 0x00; txbuf[7] = 0xef; txbuf[8] = 0x27; while(1) { for(i=0;i<255;i++) { rxbuf[i] = 0; } if(res = write(fd,txbuf,9) != 9) { perror("Write failed.\n"); continue; } printf("TX: "); for(i=0;i<DATA_LENGTH;i++) { printf("%02x ",txbuf[i]); } printf("\n"); usleep(200000); DataISR=inb(BASEADDR+portnum*8+ISR); DataIER=inb(BASEADDR+portnum*8+IER); DataLSR=inb(BASEADDR+portnum*8+LSR); printf("ISR=%02x IER=%02x LSR=%02x\n",DataISR,DataIER,DataLSR);//inb(BASEADDR+portnum*8+ISR), // inb(BASEADDR+portnum*8+IER),inb(BASEADDR+portnum*8+LSR)); if ((DataISR&0x0c)==0x0c) {getchar();outb(0x0c,BASEADDR+portnum*8+FCR);} printf("RX: "); if(res = read(fd,rxbuf,3) <= 0) { perror("Receive 1nd failed.\n"); continue; } if(res = read(fd,&rxbuf[3],rxbuf[2]+2) <= 0) { perror("Receive 2nd failed.\n"); continue; } for(i=0;i<rxbuf[2]+5;i++) { printf("%02x ",rxbuf[i]); } printf("\n"); } close(fd); if (ioperm(BASEADDR+portnum*8,8,0)) return EXIT_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -