一种嵌入式电网监测仪的实现方案
P自动检测模式,支持外接闪烁存储器读写操作,支持I/O口地址的完全解码,具有LED指示功能。
3.1 网卡初始化函数
void ethernetif_init(struct netif*netif)用于初始化网卡,在程序启动之初被调用。这里主要完成网卡的复位操作以及通过对各个寄存器赋值,确定网卡的工作方式等。
3.2 网卡发送函数
函数err_t ethernetif_output(struct netif*netif,struct pbuf*p,struct ip_addr*ipaddr)为IP层传来的IP报文加上以太网包头并通过网络接口发送。RTL8019AS使用远端DMA将封装好的以太网包写到RTL8019AS内部的双口RAM的发送缓冲环中,然后启动本地DMA,网卡自动发送缓冲环里的数据到以太网。
发送过程有三个步骤:数据包的封装;通过远程DMA将数据包送到数据发送缓冲区;通过RTL8019的本地DMA将数据送入FIFO进行发送。
3.3 网卡接收函数
函数void ethernetif_input(struct netif*netif)从网络接口接收以太网数据包并把其中的IP报文向IP层发送。网卡对于以太网上目的地为该网卡的包会自动启动本地DMA接收数据,并存放在RTL8019AS芯片内部RAM的接收缓冲环中,然后以中断的方式通知CPU。此时该函数使用远端DMA接收数据到系统的RAM当中。
3.4 中断处理函数
void ethernetif_isr(void)处理网卡相关的中断,RTL8019AS接收到数据后,就通过中断入口把接收数据的工作交给函数ethernetif_input()来处理。
在实时多任务环境中,一般采用中断方式处理RTL8019AS的收发。图1是一个典型中断处理程序(ISR)的流程。当主程序响应RTL8019AS的中断时,ISR的入口将根据读取的中断状态寄存器(ISR)的值来确定程序的走向。
4 系统任务
图2是基于μC/OS-II的嵌入式系统的框架结构。按电网监测系统所要实现的功能,整个系统划分为二个中断程序和五个并行存在的任务层。
中断程序按其优先级从高到低分别是网络通信和数据采集。将系统的任务按其优先级从高到低顺序排列的次序是:系统监控任务,键盘扫描任务,任务之间的通信,数据运算统计处理任务,液晶显示任务。中断发生时,系统将强行剥夺运行态任务时CPU的使用权,将它转入中断态并保存相关数据到堆栈区之后,执行中断服务程序。在中断返回时,系统返回函数将重新进行任务调度,将优先权最高的就绪态任务转为运行态。
在该电网远程监测系统软件中,系统监视任务优先权最高,最先进入运行态。该任务分别查询每一个被监视的任务是否向其发送消息。按优先权级别顺序,键盘扫描任务将由就绪态转为运行态。在该任务将要执行完毕时,向系统监视任务发送消息,然后执行延时函数将自身转为挂起态,交出CPU使用权,让其他任务得以执行。如果没有,则进入挂起态,再次等待其他被监视任务的运行消息。系统按任务优先级继续执行优先级高的就绪态任务,依次类推。
- SN2005学习系统 数字语音室解决方案(05-19)
- 以可编程DSP架构应对TD-SCDMA以及TD-LTE带来的设计挑战 (02-14)
- ARM-μCLinux嵌入式系统启动引导的实现(07-26)
- 多核处理器架构及调试方案(03-28)
- 基于DSP的电源解决方案(06-13)
- 间歇性Bug最佳解决方案(09-24)