limingth 发表于 2005-9-12 07:57:28

Learn-lumit-Step-18 : 串口通讯实验

Learn-lumit-Step-18 : 串口通讯实验
++++++++++++++++++++++++++++++++++++++++++++++++++++++

    串口是常用的输入/输出设备,也是一个非常典型的可以用设备驱动模型来
实现的设备:即可以从设备读 read ,也可以向设备写入 write ,同时也可以
打开 open 或者关闭 release ,另外还有控制接口 ioctl 。

    在这个例子里,我们实现了 lumit4510 上的两个串口驱动,并将它们统一
到了 uart_driver.c 这一个文件中,对用户来说,uart 仅是一个设备 device,
但这个设备提供了两个通道 channel 来实现读写和控制。

设备通道选择接口:
uart_ioctl( UART_SELECT_CHANNEL, UART0_BASE );
uart_ioctl( UART_SELECT_CHANNEL, UART1_BASE );

设备通道波特率设置接口:
uart_ioctl( UART_SET_BAUDRATE, baud );

其中常用的几种波特率已经使用宏定义列出了
#define BAUD_19200        (80 << 4)
#define BAUD_38400        (40 << 4)
#define BAUD_57600        (26 << 4)
#define BAUD_115200        (13 << 4)

设备通道发送字符接口:
int uart_write( unsigned char * buf, int count );

设备通道接收字符接口:
int uart_read( unsigned char * buf, int count );


   对于上层应用程序来说,为了方便调用,我们采用了两组接口,
通过明确的含义来提供给用户调用,隐蔽了其中底层的通道选择。

具体可以参考 uart_api.h

int uart0_init( void );

int uart1_init( void );

int uart0_set_baudrate( int baud );

int uart1_set_baudrate( int baud );

int uart0_putchar( char ch );

int uart1_putchar( char ch );

char uart0_getchar( void );

char uart1_getchar( void );

int uart0_puts( char * string );

int uart1_gets( char * string );       

int uart0_gets( char * string );                       
                       
int uart1_puts( char * string );

int uart_test( void );

    和前面的例子类似,在 uart_api.c 里面,我们提供了一个简单的例子 uart_test,
通过这个例子的代码,大家能够很快学会如何使用 uart api 来编写一个通讯程序的流程。
这些代码都并不太难理解,因此对照芯片手册看一下相关寄存器的设置基本就能明白了。
页: [1]
查看完整版本: Learn-lumit-Step-18 : 串口通讯实验