阅读:4585回复:10
求教:怎么用gpio口模拟成串口?
我用的cpu是三星的2440,想用gpio口来模拟一个串口,可是不知道怎么下手,刚学WinCE,好多都不懂,希望做过的指点一下。
我现在的想法是:将gpio口模拟成rx,tx,然后将rx接到cpu的中断那里,这样gpio口有数据来时,就用中断的方式通知系统去读数据。而数据的发送和接收,都按照串口的波特率来进行发送,即每隔一段时间就向gpio口发数据或者有数据来时(即收到中断)按照一定的时间间隔去读数据。 我现在是这么想的,不过在坛子里看了几个人问这个问题,似乎不用这么麻烦。还请大家指点一下,最好能讲的通俗点,我才刚学这个咚咚,多谢了:) |
|
沙发#
发布于:2007-09-06 19:15
在google里搜索IO 模拟串口,可以找到大量你想要的信息
|
|
板凳#
发布于:2007-09-06 21:41
wenzai,能否指点一下呢。如果按照中断的方式来做,即用数据的开始位来触发中断,那么接下来的一段时间内,是否要隔一段时间就接收一下数据呢?那这样的话,cpu是不是就不能执行其他的任务了? 底层这里是不是没有多线程这个概念?这个我一直想不通
|
|
地板#
发布于:2007-09-06 21:45
我刚开始学WinCE,看网上很多人都说只要懂得改就好了,结果马上就遇到一个想不通的问题了:( ,现在都不知道在哪实现这个功能呢 。 如果用起始位来产生中断,不知道是不是应该在系统响应中断的地方做这个事情呢?那这样就不知道会不会独占cpu了。
|
|
地下室#
发布于:2007-09-06 22:36
兄弟你是因为串口不够用吗?
如果是这样,就加个16C550或16C2550,驱动都有现成的 你用gpio仿真串口,数据准确性相当差 |
|
5楼#
发布于:2007-09-07 08:35
用这样的方法模拟,波特率不能很高,一般用用还行,我以前是在单片机里做的。
所以使用扩展芯片还是最佳的选择,除了使用并口扩展串口,SPI口转串口的芯片也很多 |
|
6楼#
发布于:2007-09-10 16:49
你如果想在wince的平台上用gpio实现一个全功能的串口驱动是非常复杂的。因为你需要用到wince的串口MDD,需要实现很多功能。
如果仅仅是想实现最简单的功能,那建议使用查询方式。把每个要发送的字节进行移位操作,先给io置一个起始电平,然后根据你设置的波特率,等待相应的时间,一位一位的给io口置位,最后在置一个结束电平。 接收的时候,等待rx对应的io电平,如果是有效数据起始电平,再根据设置的波特率,等待相应时间,一位一位的把io口的电平通过移位放到接受的字节中。 这样在低波特率中问题不大,但是波特率高的时候,传输会有问题。特别是如果线程被占用的 情况,就更加了。。 |
|
7楼#
发布于:2007-09-18 21:49
晕,好像很难啊 ,我现在有点思路了。用cpu的一个定时器来定时采样或者将外部的信号接到cpu的一个外部中断的引脚上。刚开始学,好多都看得很晕
|
|
8楼#
发布于:2007-10-18 14:08
波特率地的时候还好,高的时候,恰好CPU又比较忙得时候,时序就不好保证了。 我们经常用IO口模拟I2C, I2C是有CLK的,可以保证采样数据时机正确, UART需要本身不传输时钟,靠两边设置一样,用IO模拟就比较难了
|
|
9楼#
发布于:2007-10-19 22:31
我也是建议用扩展芯片
|
|
10楼#
发布于:2007-10-21 21:33
谢谢各位的回复,已经有眉目了
|
|