基于AT91RM9200的以太网接口模块设计
读RAM见RTLReadRam函数,代码如下:本文引用地址:http://www.amcfsurvey.com/article/152469.htm
这个函数表示从address开始读取size个字节的内容到buff指向的内存中。设置CR寄存器指令为:writereg(cr,(0x00 | er_remote_read | cr_start_com-mand));然后从Remote DMA Port读取size次,就得到所需的数据。
写RAM函数,操作基本上和读RAM函数差不多,只要将最后一步的读size次改成写size次就可以。
4.3 发送数据包
发送数据包的基本步骤如下:
(1)首先将发送的起始页,一般是发送缓冲区内的页(Ox40~Ox4b),写入StartPage变量中。将要发送的数据写入地址为StartPage8开始的缓冲区中,然后等待上一次发送结束。对于过大或者过小的数据包,不发送;对于过小的帧,在发送时要填充。
TPSR为发送起始寄存器,将StartPage写入TPSR寄存器,高字节写入TBCRH(TBCRl),低字节写入TBCRL(TBCRO)。当写发送命令时,RTL8019AS将从TPSR8地址开始发送size个字节的数据。
(2)发送数据帧:发送缓冲区可以存储2个最大的以太网帧,一个起始页为SEND_START_PAGEO,另一个起始页SEND_START_PAGEl,两个交替使用。发送数据帧时,CR寄存器设置为:writereg(cr,((prepageOxCO)|cr_abort_compile_dma|cr_txp |cr_start_command]));发送数据包函数代码如下:
4.4 接收数据包
接收数据包的步骤如下:
(1)接收缓冲操作。当RTL8019AS接收到一个数据包后,自动将接收的数据包放到CURR页。如果一页放不下,则CURR加1;如果CURR=接收结束页,则CURR自动变成接收开始页,继续写入接收的数据。
(2)用户读取接收数据包。RTL8019AS通过Local DMA把接收的数据写入接收缓冲区,并自动改变CURR和识别缓冲区的界限,这些都不需要用户干预。
当一个无错的数据接收完毕,则触发中断处理函数。然后读取数据包到分配的内存,可以从接收字节计数器中得知读取数据。这里要处理一种情况:如果接收的数据包存储不是连续的,在这种情况下要分2次才能读取1个完整的数据包,判断是否存储不连续的条件是:
bnry>Head[1]&&Head[1]!=RECEIVE_START_PAGE
其中:bnry是这个包的起始页;Head[1]是下一个包的起始页。
接收数据包函数与发送数据包函数相似,只需要修改相应寄存器配置即可。然后将接收的数据写入网络接口层的输入队列,如果写入失败则释放内存。写入后上层协议将提取这个数据包。最后网卡通过中断控制器向ARM响应中断,中断完毕清除中断标志。
5 结 语
ARM微处理器正以其极好的性价比和极低的功耗,与其他体系结构的微处理器进行激烈的竞争,其应用将进一步深入到各行各业。可以预测,在将来的一段时期内,ARM微处理器将成为32位微处理器市场的统治者。了解、学习、掌握和应用ARM微处理器技术很有必要,也非常重要。在ARM系统采用高性能的以太网控制器,系统通信和调试快速、可靠,具有很高的实时性。该设计构造一个基于以太网的嵌入式系统的应用,该接口模块的主要任务是完成与外界的信息交互,以达到网络监控的目的。在实际应用中,它运行稳定,能够十分方便地实现网络互连。该系统已在视频监控光端机上得到成功应用,传输速度相当于PC机的10兆网口。
评论