新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ARM9和Linux的嵌入式打印终端系统

基于ARM9和Linux的嵌入式打印终端系统

作者: 时间:2012-04-11 来源:网络 收藏

3.1.3 初始化端口

初始化机第一个要做的事情就是要对GPIO口进行初始化,初始化函数如下:

static void weida_init(void){
devfs_register(); /*注册设备驱动*/
set_gpio_ctrl(WEIDA_STB|GPIO_PULLUP_DIS|GPIO_MODE_OUT); /*设置STB口*/
write_gpio_bit(WEIDA_STB,1);
weida_printer_io_port_init();
/*设置其它IO口,以及赋初值*/ }

其中,WEIDA_STB为连接机选通口初始化为高电平,GPIO_PULL_DIS是设置是否需要上拉电阻,GPIO_MODE_OUT 设置GPIO口为输出口。最后使用module_init(weida_printer_init);采用模块方式加载驱动。[2]

3.1.4 接口函数设计

ioctl()函数主要完成打印机字体、行距等参数的设置,在设计过程中必须解决用户数据和内核数据之间如何传递。从用户态读取数据,然后在内核态运行,可以使用copy_from_user函数来完成传递数据。

weida_printer_write ( )先对打印机是否在线,是否忙,是否准备好做进一步的判断,然后再进行打印。在打印的时候要注意每发一个字符要延迟150毫秒,因为如果打印数据发得过快打印机的来不急处理,所以要设置延时。

open/close函数打开/关闭文件,因为在LINUX下设备都是当作文件来操作的,所以需要open和close这两个接口函数。

3.2 扫描仪串口的设置

移动打印中使用到的扫描仪是串口扫描仪,这种扫描仪相对于USB接口的扫描仪来说,控制较简单,在扫描仪扫描后,可以直接从串口读取数据。

3.2.1 串口设置[3]

设置串口速率函数:set_speed(int fd, int speed),其中fd 为打开的设备文件,speed为速率。

设置串口参数:set_parity(int fd,int databits,int stopbits,int parity),databits为有多少个数据位,stopbit为设置多少个停止位,parity为奇偶校验位设置。设置串口波特率为9600,数据位为8位,一位停止位,没有校验位。

3.2.2 编写读取扫描仪数据函数

首先打开设备文件,该中使用的串口为串口2,因此打开函数为:

open(“/dev/ttyS1”,O_RDWR|O_NONBLOCK|O_NDELAY);其中,O_RDWR表示可读可写,O_NONBLOCK表示非堵塞模式,O_NDELAY表示没有延迟,立即发出去。

3.2.3 客户端和服务器的socket编写

打印采用C/S的模式,把PC机作为服务器,开发板作为客户端,通过以太网连接。客户端建立一个socket连接去寻找PC机上的服务程序。PC机上同时也运行一个socket用来listen请求和绑定。采用的是TCP的连接方式。

3.4 主应用程序的设计

开发板上的应用程序Main函数注册两个线程p1和p2,两个全局数组c1和c2。

线程p1将从串口读到的数据放入c1中,然后sent socket直接从c1中取走数据发送给服务器。线程p2负责将received socket数据放入c2数组中,然后直接从c2取走数据交给打印机去打印。

这里对线程使用了两个信号量,并初始化为:sem_init(sem1,0,1); sem_init(sem2,0,0); [4]

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux相关文章:linux教程


三维扫描仪相关文章:三维扫描仪原理


评论


相关推荐

技术专区

关闭