用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧计算机应用

利用RCM2200实现以太网与异步串口的通信

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 11:55:07
化函数
     void sock_init(void)
     该函数将使用默认配置初始化本地信息包驱动器以及DCRTCP.LIB函数库。该函数必须在其他网络库函数被使用前进行调用。
3.3.2  打开数据报套接字
     int udp_open( *s, lport, remote_IP, port, *data_handler ())
其中的参数解释如下:
s : 指向UDP套接字的指针;
lport : 本地协议端口;
remote_IP : 可接受的远地主机IP地址,如果该项为-1,则支持广播通信;
port : 可接受的远地进程协议端口,如果该项为-1,则为广播数据报;
data_handler() : 如果接收到数据则调用该函数;
该函数的返回值,如果成功返回非零,否则返回零值。
3.3.3  接收远地主机发送的数据报
     int udp_recv( *s, *buf_recv, recv_len)
     当套接字初始化后用该函数扫描接收缓冲区,,察看是否有数据报到达。其中,
buf_recv : 指向用于存放已到达数据报的数组的指针;
recv_len : 存放数据报的数组的大小。
如果接收到数据报则返回数据报的长度;否则返回-1。
3.3.4  发送数据报给远地主机
     int udp_send( *s, *buf_send, send_len )
     调用该函数发送数据报给远地主机。如果成功返回该数据报的长度,否则返回-1。
     buf_send : 指向待发送数据报的指针;
     send_len : 待发送数据报的长度。
3.3.5  网络信息处理函
    int tcp_tick( *s )
     该函数将察看网络连接状态,检查数据报的到达情况,处理新到数据报并重传丢失的数据报。若出现网络连接被复位及套接字已关闭的情况或参量s为NULL,则返回值为零;否则返回非零值。
3.3.6  关闭套接字
     void sock_close( *s )
     当数据传送工作完成或传送过程中发生错误时,可调用该函数关闭套接字
4    串口通信的实现
4.1  RS232电平与TTL电平的转换
PC机的串行接口是符合EIA RS-232C规范的外部总线标准接口,而RCM2200配备有四个串行接口,都是采用TTL电平,因此两者之间必须进行电平转换。以RCM2200的串行口C(位于核心模块的J4插槽上)为例,电平转换如图2所示。

          图2  RS232与TTL电平转换图
4.2  使用Dynamic C实现串口数据的传输
     Dynamic C提供了一些与计算机串行口进行通信的函数可供用户程序调用,下面简要介绍其中的一部分。
4.2.1  打开串行接口
int serXopen( bard )
         bard : 长整型,每秒钟传送的比特数。
     该函数用于打开RCM2200的串行接口,由于RCM2200核心模块拥有四个串行口,故X可根据需要取为A/B/C/D其中一个。在调用该函数之前,还必须先定义串行口的输入输出缓冲区大小,通常情况下设定为2n-1,否则就采用默认值31,但在编译时会给出警告。该函数的返回值:成功则为1,否则为0。
4.2.2  读取PC机串行口数据
     int serXgetc()       /* X = ABCD */
     程序可以调用该函数查询串行口是否有字符来到,如果有,返回该字符值;否则,返回值-1。
4.2.3  发送数据到PC机串行口
     int serXputs( *s )
     int serXwrite( s, length )  /* X = ABCD */
     这两个函数均可用于发送字符串给计算机的串行口,返回成功发送的字符数。
     s : 待发送字符串的首地址;
     length : 待发送字符串的长度。
4.2.4  关闭串行口
     void serXclose()     /* X = ABCD */
     该函数用于关闭已经打开的串行口。
5      实现以太网与串口之间的通信
5.1      定义网络以及串口初始化数据
在程序的开头,必须使用#define定义一些初
始化数据,比如:RCM2200所使用的本地IP地址以及端口,与之通信的远地IP地址以及端口以及串口输入输出缓冲区的大小等等。
5.2 主程序
     在主程序中调用PC机串口发送字符串给RCM2200经过处理后再由RCM2200发送UDP报文给以太网以及RCM2200接收以太网发送来的UDP报文后再送给计算机的串行口两个子程序。
main()
{
     sock_init(); //初始化网络库函数
     :   //打开串行口及网络套接字
     for(;;;)
     {
           tcp_tick(NULL);//察看套接字状态
           init_comm();//网络发报文串口接收
           comm_init();//串口发数据网络接收
     }
}
5.3网络发报文串口接收
     子程序init_comm() 使用库函数udp_recv查询RCM2200以太网接口是否有UDP报文来到,如果没有则返回主程序,否则将UDP报文存放到buf_init数组中,然后调用serCputs(buf_init)通过RCM2200的串行口C发送到计算机的串行口。值得一提的是,当RCM2200接收到了一次报文之后,它将自动关闭接收报文的套接字,因此,如果还想接受下一次发送的报文,必须再次调用函数udp_open打开该套接字。
5.4串口发字符串网络接收
     子程序 comm_init()调用函数serCgetc()用于查询计算机的串行口是否有数据到来,如果没有则返回主程序,否则将接收到的字符存储到buf_comm数组中,直到检测到结束符到来,将字符串以UDP报文的形式通过函数udp_send发送给以太网。如果发送成功,则返回主程序等待下一次数据的到来,否则关闭该套接字后重新打开再返回主程序等待。
5.5程序调试结果
    在该程序的调试过程中,利用Visual C++语言编写了一个接收和发送UDP报文的程序用于以太网的计算机上,另外还使用了从网上下载的串口调试帮助软件,结果表明,该程序能实现基于RCM2200以太网与异步串口之间的成功通信。
结论
     RCM2200是为了促进嵌入式系统的快速开发和实

上一页  [1] [2] [3]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:8,203.12500 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号