本帖最后由 鬼鬼一哈 于 2010-9-26 15:18 编辑
我有点不明白,我的理解是:你说光盘里的测试程序串口部分,里面全是对寄存器操作,而且那也没有宏定义!例如下面一段代码,难道我要自己加宏定义?
#define rULCON0 (*(volatile unsigned *)0x50000000)
#define rUCON0 (*(volatile unsigned *)0x50000004)
#define rUFCON0 (*(volatile unsigned *)0x50000008)
void Uart_Init(int pclk,int baud)
{
int i;
if(pclk == 0)
pclk = PCLK;
rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable
rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable
rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable
rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable
rUMCON1 = 0x0; //UART chaneel 1 MODEM control register, AFC disable
//UART0
rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits
rUCON0 = 0x245; // Control register
rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); //Baud rate divisior register 0
//UART1
rULCON1 = 0x3;
rUCON1 = 0x245;
rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 );
}
而linux中的串口只是把其设备文件进行操作,头文件要加入#include <termios.h>旧可以对串口进行操作你看下我这个简单的打开串口的程序:
int open_port(int com_port)
{
int fd;
#if(COM_TYPE == GNR_COM)
char *dev[] = {"/dev/tq2440_serial0","/dev/tq2440_serial1","/dev/tq2440_serial2"};
#else
char *dev[] = {"/dev/ttyUSB0","/dev/ttyUSB1","/dev/ttyUSB2"};
#endif
if((com_port <0) || (com_port > MAX_COM_NUM)) { return -1; }
fd = open(dev[com_port-1],O_RDWR|O_NOCTTY|O_NDELAY);
if(fd <0)
{
perror("open serial port");
return (-1);
}
if(fcntl(fd,F_SETFL,0) < 0) { perror("fctnl F_sETFL\n");}
if(isatty(STDIN_FILENO)==0) { perror("standard input is not a termial device");}
return fd;
}
大家指导指导啊。。。。。。。。。。。 |