fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
阅读:4270回复:10

求教:怎么用gpio口模拟成串口?

楼主#
更多 发布于:2007-09-05 22:54
我用的cpu是三星的2440,想用gpio口来模拟一个串口,可是不知道怎么下手,刚学WinCE,好多都不懂,希望做过的指点一下。
我现在的想法是:将gpio口模拟成rx,tx,然后将rx接到cpu的中断那里,这样gpio口有数据来时,就用中断的方式通知系统去读数据。而数据的发送和接收,都按照串口的波特率来进行发送,即每隔一段时间就向gpio口发数据或者有数据来时(即收到中断)按照一定的时间间隔去读数据。
我现在是这么想的,不过在坛子里看了几个人问这个问题,似乎不用这么麻烦。还请大家指点一下,最好能讲的通俗点,我才刚学这个咚咚,多谢了:)
wenzai
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2011-03-04
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望424点
  • 贡献值0点
  • 好评度309点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-06 19:15
在google里搜索IO 模拟串口,可以找到大量你想要的信息
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-06 21:41
wenzai,能否指点一下呢。如果按照中断的方式来做,即用数据的开始位来触发中断,那么接下来的一段时间内,是否要隔一段时间就接收一下数据呢?那这样的话,cpu是不是就不能执行其他的任务了? 底层这里是不是没有多线程这个概念?这个我一直想不通
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-06 21:45
我刚开始学WinCE,看网上很多人都说只要懂得改就好了,结果马上就遇到一个想不通的问题了:( ,现在都不知道在哪实现这个功能呢 。 如果用起始位来产生中断,不知道是不是应该在系统响应中断的地方做这个事情呢?那这样就不知道会不会独占cpu了。
harktrip
驱动小牛
驱动小牛
  • 注册日期2003-11-30
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望457点
  • 贡献值0点
  • 好评度170点
  • 原创分0分
  • 专家分2分
地下室#
发布于:2007-09-06 22:36
兄弟你是因为串口不够用吗?
如果是这样,就加个16C550或16C2550,驱动都有现成的

你用gpio仿真串口,数据准确性相当差
wenzai
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2011-03-04
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望424点
  • 贡献值0点
  • 好评度309点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-09-07 08:35
用这样的方法模拟,波特率不能很高,一般用用还行,我以前是在单片机里做的。
所以使用扩展芯片还是最佳的选择,除了使用并口扩展串口,SPI口转串口的芯片也很多
buaadallas
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2007-10-18
  • 粉丝0
  • 关注0
  • 积分470分
  • 威望47点
  • 贡献值0点
  • 好评度47点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-09-10 16:49
你如果想在wince的平台上用gpio实现一个全功能的串口驱动是非常复杂的。因为你需要用到wince的串口MDD,需要实现很多功能。
如果仅仅是想实现最简单的功能,那建议使用查询方式。把每个要发送的字节进行移位操作,先给io置一个起始电平,然后根据你设置的波特率,等待相应的时间,一位一位的给io口置位,最后在置一个结束电平。
接收的时候,等待rx对应的io电平,如果是有效数据起始电平,再根据设置的波特率,等待相应时间,一位一位的把io口的电平通过移位放到接受的字节中。
这样在低波特率中问题不大,但是波特率高的时候,传输会有问题。特别是如果线程被占用的 情况,就更加了。。
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-09-18 21:49
晕,好像很难啊   ,我现在有点思路了。用cpu的一个定时器来定时采样或者将外部的信号接到cpu的一个外部中断的引脚上。刚开始学,好多都看得很晕
pumbpeng
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2010-04-02
  • 粉丝0
  • 关注0
  • 积分185分
  • 威望32点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-10-18 14:08
波特率地的时候还好,高的时候,恰好CPU又比较忙得时候,时序就不好保证了。 我们经常用IO口模拟I2C, I2C是有CLK的,可以保证采样数据时机正确, UART需要本身不传输时钟,靠两边设置一样,用IO模拟就比较难了
ok138ok
驱动牛犊
驱动牛犊
  • 注册日期2007-07-23
  • 最后登录2010-04-12
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望171点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-10-19 22:31
我也是建议用扩展芯片
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-10-21 21:33
谢谢各位的回复,已经有眉目了
游客

返回顶部