天桥陨石分享 http://blog.sciencenet.cn/u/chrujun 让地球物理仪器飞起来

博文

UART串口驱动程序移植

已有 10529 次阅读 2010-6-6 01:16 |个人分类:地球物理及仪器|系统分类:科研笔记| 移植, 驱动, 串口, UART

UART串口驱动程序移植

仇洁婷,陈儒军

在嵌入式控制系统采集站的设计方案中,需要用到AT91RM92005UART串口,就会涉及到多个中断的优先级分配问题,而且也可能造成串行通信的中断不能及时响应,从而造成数据丢失。在Linux2.6.21内核中,UART驱动程序成功地解决了这个问题,它采用了DMA传输的串行通信方式。DMADirect Memory Access)是一种高速的数据传输操作,在外部设备和存储器之间直接读/写数据,提高了通信的可靠性。
Linux对串口驱动支持很完善,具有统一的编程接口。包含3层:tty核心、tty线路规范和tty驱动。tty核心层向上提供统一的访问接口,使得用户不必关注具体终端的类型。tty线路规范指定数据交互的形式。tty驱动层用来操作硬件。一般只需针对不同的串口功能在tty驱动层中添加相应的配置宏即可。本系统将Linux-2.6.21打上at91rm9200dk体系结构的补丁后,基本上就能够使用UART设备驱动。
根据本系统的硬件设计要求,还需进行如下修改:
一、注册串口次设备号
       Linux2.6内核中,就只引出了2个串口的驱动注册信息,需要增加其他3个串口。可以在linux2.6.21/arch/mach-at91/board-dk.c文件中只定义了DEBUG UARTUART1,因此要改为
       .nr_tty          = 5,
       .tty_map       = { 4, 0, 1, 2, 3 }
       UART0UART1UART2UART3Debug UART这些串行端口和设备名称、设备号、次设备号的对应关系如下表
串行端口
设备名称
设备号
次设备号
UART0
/dev/ttyS1
4
1
UART1
/dev/ttyS2
4
2
UART2
/dev/ttyS3
4
3
UART3
/dev/ttyS4
4
4
Debug UART
/dev/ttyS0
4
0
      
     在本方案中,需要用到UART0UART2串口的时钟信号SCK,但是在Linux2.6内核的串口驱动程序中,并没有引出UART0UART3所带有的时钟信号,所以需要进行修改。
二、注册时钟信号SCK引脚
       AT91RM9200芯片的定义中,UART0UART2串口的时钟信号SCK分别是PA19PA24管脚中的外设A功能,因此,需要用at91_set_A_periph函数把PA19PA24引脚赋予Periph A
       linux-2.6.21archarmmach-at91at91rm9200_devices.c文件中的configure_ usart0_pinsconfigure_usart2_pins函数中增加:
       at91_set_A_periph(AT91_PIN_PA19, 0);          
       at91_set_A_periph(AT91_PIN_PA24, 0);          
三、设置UART模式寄存器的CLKO
       UART模式寄存器US_MR中提供了UART时钟的设置位CLKO。若CLKO设置位为0UART不驱动SCK引脚;CLKO设置位为1,如果US_MR寄存器的USCLKS设置位(时钟选择)没有选择外部时钟SCK,则UART驱动SCK引脚。在linux-2.6.21driversserialatmel_serial.c文件中,USCLKS设置位没有选择外部时钟SCK,则只需要在atmel_set_termios函数中设置CLKO位即可。
       UART_PUT_MR(port, mode | ATMEL_US_CLKO);


https://blog.sciencenet.cn/blog-39626-332583.html

上一篇:LINUX下字符设备、块设备和网络接口
下一篇: SPI串行外围设备驱动移植
收藏 IP: .*| 热度|

2 姚红春 邓景华

发表评论 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-4 14:55

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部