基于单片机以太网通信模块的软件设计内容摘要:
编写带来了很大的方便。 RTL8019AS 的内部 RAM 结构 RTL8029AS和 RTL8019AS的内核其实是一样的,都是 NE2020兼容的寄存器结构,都有一样大小的 RAM,读取和操作的方法都是一样的。 事实上对 RTL8029AS 的驱动跟RTL8019AS 的驱动除了 PCI 接口配置部分不同外,其余 NE2020 兼容的寄存器部分的驱动都是一样的。 下面只对 RTL8019AS 进行讨论。 D15 D0 0000H 001FH 4000H 7FFFH 8000H C000H 图 RTL8019AS 的内部 RAM 结构图 RTL8019AS 有两块 RAM,一块 16k 字节的 RAM 的地址为 0x4000~ 0x7fff,一块32 字节的 RAM 的地址为 0x0000~ 0x00lf。 其内部 RAM 的存储是分页的,每 256 个字节称为一页。 RTL8019AS 的内部 RAM 分布如图 所示。 其 16 位内部 RAM 地址的高8 位表示的是 RAM 的页地址,例如 :0x4000~ 0x40ff 是一页,我们称该页为第 0x40页。 整个 RAM 空间的利用情况如表 所示: PROM ALIASED PROM 8K*16 BUFFER RAM ALIASED PROM ALIASED BUFFER RAM [键入文字 ] 第 14 页 表 RTL8019AS 内部 RAM 的利用情况 页码 地主范围 附注 0 0x00000x00ff 可以使用 0x010x3F 0x01000x3fff 空,不能使用 0x400x7F 0x40000x7fff 可以使用 0x800xFF 0x80000xffff 跟 0x00000x7fff 的内容是一样的(不要使用它) 其中,第 0 页的内存又叫 Prom,是 Ne2020 兼容的网络接口芯片都有的。 Prom实际上只有 32字节,地址范围为 0x0000~ 0x00lF,其它地址 0x0020~ 0x00FF 存储的内容跟 0x0000~ 0x00lf部分是完全重复的。 RTL8019AS内部 RAM的 0x0000~ 0x001F地址段存储的内容为: 表 RTL8019AS 的内部 RAM 的 0x0000~0x001F 段的内容 地址 内容 地址 内容 0x0000 以太网地址第 1 个字节 0x0001 以太网地址第 1 个字节 0x0002 以太网地址第 2 个字节 0x0003 以太网地址第 2 个字节 0x0004 以太网地址第 3 个字节 0x0005 以太网地址第 3 个字节 0x0006 以太网地址第 4 个字节 0x0007 以太网地址第 4 个字节 0x0008 以太网地址第 5 个字节 0x0009 以太网地址第 5 个字节 0x000A 以太网地址第 6 个字节 0x000B 以太网地址第 6 个字节 0x000C0x001F 其他内容(不同公司生产芯片的定义可能不同) 我们可以发现以太网地址被重复存储。 这主要是为了适应 RTL8019AS 的 8 位和16 位的两种数据总线宽度。 我们一般使用 8 位的数据总线,一次传输一个字节,而16 位宽度的数据总线是一次传输 2 个字节,适合使用 16位的单片机或 DSP 作为处理器。 对于己经做在网卡上的 RTL8019AS 来说,它的 prom 是网卡在复位的时候从网卡上的 EEPROM(一般使用 93C46)里读出来的。 网卡上的 EEPROM 一般是用来存储本网卡的物理地址及其它一些配置信息的。 因此可以直接读取 RTL8019AS 的 Prom 来获得本[键入文字 ] 第 15 页 地的物理地址。 但是本地的 物理地址最终是由 RTL8019AS 中的寄存器 MARO, MARI,MAR2, MAR3, MAR4, MAR5 决定,而不是 93C46,也不是 prom。 而这几个寄存器的内容需要用户自己编写程序写入。 一般可以读出 Prom 里的物理地址,然后写入到这 6个寄存器里。 如果没有使用 93C46,那么 Prom 也是可以不使用的,这时要在 RTL8019AS的初始化程序中指定一个物理地址。 在本课题中,我虽然预留了 EEPROM(93C46)的位置,但为了节省资源没有使用,而是将本地的物理地址放在了 RTL8019AS 的驱动程序中,在其初始化的 时候予以配置。 RTL8019AS的 RAM中从 0x4000到 0x7fff共 16k字节的这段内存是网络接口芯片用来作为接收和发送数据包的缓冲区用的。 该 16k字节的 RAM实际上是双端口的 RAM,可以同时被网络接口芯片内部的本地总线读写,也可以被外部用户 (比如 CPU)读写,相互之间不影响。 但其内部的本地总线的读写优先级要比外部用户读写的优先级高。 图 RTL8019AS 内部 RAM 的总线仲裁逻辑 所谓 16kB 的双端口 RAM 就是说有两套总线连结到该 RAM,一套总线 A是网络接口芯片的本地总线读写 16kB 的双端口 raln,另一套总线 B 是主处理器用来读写这16k 双端口 RAM 的。 总线 A 又叫 Local DMA,总线 B又叫 Remote DMA。 在图 中,虚线框住的部分为 Remote DMA,也就是处理器对 RTL8019AS 的 RAM进行读写的总线,对 8019 来说就是 ISA 总线。 没有框住的部分 (左边的部分 ),就是LocalDMA 即网络控制器对其本身的 RAM 进行读写的总线。 其中的地址总线没有画出[键入文字 ] 第 16 页 来,只画了数据总线。 实际在 RAM 的内部还有一些总线仲裁的逻辑,这里也没有画出来。 所谓总线仲裁的逻辑就是为了实现两套总线都能进行对 RAM 的读写而不互相冲突,而进行的一些判断、控制逻辑。 RTL8019AS 的 Local DMA 读写网卡 RAM 的优先级比处理器读写其 RAM 的优先级要高的意思是: 1.当两者都要请求控制总线时, Local DMA 优先获得控制权。 2.高优先级的 Local DMA 可以中断 Remote DMA,而 Remote DMA 不能中断 Local DMA。 3.在 Remote DMA,也就是处理器对网卡 RAM 读写的过程 进行中可以被 Local DMA中断。 Local DMA 中断 Remote DMA,然后进行 Local DMA 的数据传输, Local DMA 传输完毕之后继续刚才被中断的 Remote DMA,以完成 Remote DMA 的传输。 Remote DMA被打断多久的时间取决于 FTI, FT0 的取值,其中 FT1 和 FT0 是 RTL8019AS 的 DCR 配置寄存器的位。 在本课题中,主处理器用的是单片机,单片机的总线要比 RTL8019AS 的 DMA 总线慢很多。 RTL8019AS 的 DMA 总线大概在 10Mhz,而单片机的总线大概 1Mhz, 所以在Remote DMA 的过程中不需要特别的等待时序。 RTL8019AS 驱动过程 RTL8019AS 的复位及初始化 RTL8019AS 在进行具体操作之前,需要进行一系列的系统复位及初始化工作。 其具体过程如下 : 1.对 RTL8019AS 进行复位:这是 RTL8019AS 驱动程序需要做的第一个内容,由于我们将 RTL8019AS 设置为跳线模式,而不是即插即用的模式, 中介绍的 PLUG and PLAY 的一些过程,我们不需要做,因为单片机的资源有限,能够减少的操作都尽量减少。 对 RTL8019AS的复位端口 (1FH)的读或写都将复位 RTL8019AS,RTL8019AS 内部将执行复位过程,读写是随意的。 2.选择寄存器页面:向命令寄存器 CR(00H)写入 21H,选择寄存器页面 0,以进行后面的操作。 3.设置数据结构寄存器 DCR(0EH)为 49H。 4.设置方式状态寄存器 TCR(0DH)为 00H。 [键入文字 ] 第 17 页 5.设置接收状态寄存器 RCR(0CH)为 1FH。 6.划分缓冲区为接收缓冲区和发送缓冲区,并建立接收缓冲 环。 具体的工作是设 PSTART 和 PSTOP 寄存器的值。 7.设置 CR 为 61H,选择页面 1。 8.设置 RTL8019AS 的物理地址寄存器,把 PAR0(0lH)PARS(06H)设置为合适的物理地址。 9.设置当前页面寄存器 CURR(07H)为 PSTART+1,即 4DH。 10.清除组播地址寄存器,即 MAR(08H)MAR(OFH)为 00H。 11.设置 CR 为 21H,选择寄存器页面 0。 12.清除中断状态寄存器 ISR(07H)为 OFFH。 13.设置中断屏蔽寄存器 IMR(0FH)为 0FFH,即屏蔽掉所有的中 断。 14.设置发送配置寄存器 TCR(0DH)为 00H。 15.设置 CR 为 22H,芯片进入工作状态。 驱动程序提供给上层协议的复位及初始化函数是 Init8019( )。 RTL8019AS 的数据包接收程序的编写 RT18019AS 的 16k 字节 RAM 地址范围为 0x4000~ 0x7fff,一共有 64 页,这 64页 RAM 是被用来接收和发送数据包的。 一般把前面的 12 页用来存放发送的数据包,后面的 52 页用来存放接收的数据包。 当然也可以配置成前面 52 页用来接收,而后面的 12 页用来发送。 或者也可以不使用那么多的缓冲区,比如只用 32 页来作为缓冲区,前面的 6 页用来发送,接下来的 26 页用来接收,而把空出来的 32 页给单片机使用,用来存储别的数据。 [键入文字 ] 第 18 页 图 RTL8019AS 数据包接收缓冲示意图 RT18019AS 的 16k 的 RAM 中哪些 页被用来做接收缓冲区,哪些页被用来做发送缓冲区由两个寄存器决定: PSTART(page start register)页起始寄存器 PSTOP(page stop register)页终止寄存器 在设置了接收缓冲区之后,那么接收到的第一个数据包放在哪里呢 ?这是由 CURR寄存器决定的。 控制接收缓冲区操作的有两个寄存器:当前指针寄存器 CURR 和边界指针寄存器 BNRY。 CURR 是 RTL8019AS 写缓冲区的指针,指向此时要写的页。 BNIW 是读指针,指向用户已经读走的页。 我们可以通过判断 CURR 指针和 BNRY 指针的距离确定是否收到新数据包,当 CURR 和 BNRY 不等时说明收到新数据包。 这里收到的数据包中,在正常的以太包前面还有 4 个字节的附加信息,尾部还有 4 个字节的 CRC校验码。 前 4个字节的格式如下: Receive Status Next Packet Pointer Receive Byte Count 0 Receive Byte Count 1 图 以太包前面 4 个字节的含义 第一个字节表示接收包的状态,其内容和 RSR 接收状态寄存器的值完全一样。 第二个字节表示下一个包的存放页地址,读取该数据包后要根据该值更新 BNRY 寄存[键入文字 ] 第 19 页 器。 后两个字节表示数据包的大小。 在接收一个数据包的时候要先读出这 4个字节,通过第一字节的接收状态判断数据包接收是否正确,如果是正确接收的数据包,则根据 Receive Byte count 的值修改远程 DMA 计数器 RBCRI、 RBCR0 的值,读出整个数据包。 最后根据 Next Packet Pointer 的值更新 BNRY 寄存器,以进行下一个包的接收。 对于数据包的接收,驱动程序提供给上层协。基于单片机以太网通信模块的软件设计
相关推荐
A60S2单片机控制器 温度采集模块 按键模块 显示模块 报警模块 电源模块 AD 转换模块 西安航空职业技术学 院 毕业设计论文 5 路高速 10位 A/D 转换( 250K/S,即 25 万次 /秒),针对电机控制,强干扰场合。 1. 增强型 8051 CPU, 1T 单时钟 /机器周期,指令代码完全兼容传统 8051 2. 工作电压: STC12LE5A60S2 系列单片机: ( 3V
性,不仅使得 硬 件电路复杂,软件调试 麻烦 , 而且 制作成本 昂贵。 3. 方案 三 在 温度检测 系统中,传统的测温方法是 对温度进行 远距离采样 ,通过 A/D转换 电路将 模拟信号 转换成数字信号。 为了获得 高精度数值 ,必须解决测量切换晶振电路 复位电路 显示电路 测温电路 ADC0809 按键防抖动 报警电路 AT89C51 单 片 机 10 与 零点漂移等 产生 的误差。
结构图 本设计的系统结构图 该系统本着充分利用太阳能和实现路灯照明系统的智能化 为目的,以单片机为控制核心,自行设计了一套太阳能 LED 路灯智能节能照明系统。 本设计是在原有太阳能路灯电路的基础上,加上热释电红外传感器改良而来的。 通过热释电红外传感器感应是否有人通过,将人体所携带的温度信号转化为电信号,从而实现当有人经过时路灯亮度自动开启,无人经过路灯亮度自动关闭的节能效果。 图 12
代法可以对所要分析位姿无限小的逼近其精度。 此外 ,为了改善 Stewart 类型的平台正解的实用性与工程性 ,工程项目中一 般利用 Newton 迭代法外接传感器法两者结合六自由度并联结构的混合型正解方法 ,并且在精度要求不是十分严格的情况下 ,此方法方便、使用。 六自由度运动平台的工作空间 工作空间就是并联运动机构的工作区域,它是衡量并联机构性能的一个重要指标。
个button 按钮一个用于确认提交,一个用于清空信息重新输入。 其中手机、 Email,邮编,送货地址相应信息的填写设置了验证。 界面如下图 48 所示 图 48 订单 页面 用户注册页面 ( 1)用户注册。 添 加 6 个 textbox 用于输入相关信息,一个按钮用于确认创建用户。 界面如下图 49 所示 图 49 用户注册页面 6 5 系统前台页面兼容性解决 (1)何谓兼容性
接连接,用户可以根据需要方便地进行配置,组成实用、紧凑的控制 系统。 ,调试维修方便 PLC 的接线极其方便,只需将产生输入信号的设备(按钮、开关等)与 PLC 的输入端子连接,将接收输出信号的被控设备(如接触器、电磁阀等)与的输出端子连接,仅用螺丝刀即可完成全部接线工作。 PLC 的用户程序可在实验室摸拟调试,输入信号用开关来摸拟,输出信号可以观察 PLC 的发光二极管。 调试后再将 PLC