您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页74hc14的485流控分析

74hc14的485流控分析

来源:五一七教育网


74hc14的485流控分析

1. 首先硬件方面肯定要改动,485与232相比多了一个方向控制信号nRTS0,当其为低电平时,MAX485处于接收状态,反正为发送状态。因此我们在修改驱动时主要就是要让串口2发送时,nRTS0必须为低电平,接收时必须为高电平。

2. 我们要修改的linux串口驱动主要为driver/serial/serial_s3c2410.c文件. 涉及到的函数主要有s3c2410uart_startup,s3c2410uart_start_tx和s3c2410uart_stop_tx,他们的作用分别为启动串口,开始串口接收,停止串口接收。

3.首先修改s3c2410uart_startup函数,在其初始化的最后即return 0之前添加如下代码:if( port!=&s3c2410_ports[2] ) { //如果初始化的是串口2GPHCON = (GPHCON&0xfffffff3)+0x04; //将GPH1,即nRTS0设为输出功能GPHDAT &= 0xfffd; //将nRTS0设为低电平,使串口启动时处于接收数据状态。}

4. 修改s3c2410uart_start_tx,在enable_irq语句前添加如下代码:if( port!=&s3c2410_ports[2] ) { //如果启动发送的是的是串口2GPHCON = (GPHCON&0xfffffff3)+0x04; //将GPH1,即nRTS0设为输出功能GPHDAT = 0x02; //将nRTS0设为高电平,使串口进入发送数据状态。}

5.修改s3c2410uart_stop_tx,在disable_irq语句前添加如下代码:if( port!=&s3c2410_ports[2] ) { //如果停止发送的是的是串口2while( !(UART_UTRSTAT(port)&0x04) ) ; //等待串口发送完成 ,这句千万不能少GPHCON = (GPHCON&0xfffffff3)+0x04; //将GPH1,即nRTS0设为输出功能GPHDAT = 0x02; //将nRTS0设为低电平,使串口重新进入接收数据状态。}

其中特别需要注意的是第二行的while语句千万不能少,否则可能导致发送的数据丢失,因为在串口没发送完毕时就将nRTS0设为低电平会使MAX485芯片退出发送状态,导致发送数据的丢失。至此驱动修改完成,重新编译内核即可。其中用于控制485发送接收状态的信号可以是任意的空闲CPU引脚,修改原理与使用nRTS0是相同的。

6. 关于linux串口编程的文章推荐下面两篇,注意485编程时务必将串口设为RAW MODE.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务