4615|0

12

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

嵌入式linux中关于485串口方向的控制问题: [复制链接]

嵌入式linux中关于485串口方向的控制问题:

对于485串口来讲,在默认的方式下是处于AB电平持平是接受状态,当要发送数据的时候,首先要通过CPU置位操作拉高电平(拉高电平的目的就是为了写操作),然后再写数据,可是会出现这样的情况:由于CPU置位操作很快,当置位结束的时候,就立即开始写数据了,可是在这个时候电平有可能还没有拉高到稳定状态,这样就会导致出现误码。

 

解决这种问题的思路就是:在CPU置位结束和写数据之间加一个延时

 

可是由于在我的系统中CPU置位操作和写操作是在中断下进行的,做延时显然是不可以的,不知道有没有更好的方法可以解决。下面是我的程序框架:

static void rs_interrupt(int irq, void *dev_id, struct pt_regs * regs)

{

    transmit_char(port);//准备发送数据

}

static inline void transmit_char(struct rs_port *port)

{

               while (--count >= 0)

                              {

                   status = in_be16(&psc->mpc5xxx_psc_status);

                   /*

                    * XXX -df

                    * check_modem_status(status);

                   */

                   if (!(status & MPC5xxx_PSC_SR_TXRDY))

                            break;

 

                   if (port->x_char) {

                            out_8(&psc->op1, MPC5xxx_PSC_OP1_RTS)   //CPU通过置位拉高电平

                           

                            out_8(&psc->mpc5xxx_psc_buffer_8, port->x_char);//往串口写数据

                            port->icount.tx++;

                            port->x_char = 0;

                   }

                   else if (port->gs.xmit_cnt <= 0 ||

                                     (port->gs.tty && (port->gs.tty->stopped ||

                                                          port->gs.tty->hw_stopped))) {

                            break;

                   }

                   else {

                            out_8(&psc->op1, MPC5xxx_PSC_OP1_RTS)  //CPU通过置位拉高电平  

                  

                            out_8(&psc->mpc5xxx_psc_buffer_8,

                                     port->gs.xmit_buf[port->gs.xmit_tail++]););//往串口写数据

                            port->icount.tx++;

                            port->gs.xmit_tail &= SERIAL_XMIT_SIZE-1;

                            if (--port->gs.xmit_cnt <= 0) {

                                     break;

                            }

                   }

         }

 

 

在我的程序注释中也就是在CPU拉高电平和往串口写数据之间能加个延时就可以搞定,但是这段代码是在中断下执行的,延时会导致很多问题(因为延时至少需要1MS才不会出现误码),不知道各位高手有没有其他好办法?

 

此帖出自Linux开发论坛
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表