七.页面切换子模块
7.1页面切换子模块功能
根据上一层模块传入的页号来切换页。RTL8019AS中的NE2000寄存器中用户可用于切换的页面有0,1,2三页,第四页为芯片保留。
7.2页面切换子模块组成
1> 读取命令寄存器(CR)中的值
temp=ReadFromNet(0);
2> 把命令寄存器中的PS1,PS0位清零,在清零过程中不能修改其他位,并且不能置TXP位。
// 命令寄存器中的PS1,PS0位清零注意txp位不能要
temp=temp&0x3B ;
3> 把页号写入CR命令寄存器中的PS1,PS0位
pagenumber=pagenumber <<6;
temp=temp | pagenumber;
WriteToNet(0,temp);
7.3页面切换子模块接口
页面切换子模块调用了写数据模块
Ø 写数据子模块:将数据写入RTL2019AS芯片中
7.4页面切换子模块程序
/****************************Copyright(c)********************
** 西安邮电学院
** graduate school
** XNMS实验室
** Author:冀博
** Time:2011年2月21日
** http://blog.csdn.net/tigerjb
**
**--------------FileInfo---------------------------------------------------------------------
****************************Copyright(c)******************** /
/**********************************************************
**函数原型: void page(uchar pagenumber)
**入口参数 uchar pagenumber: 要切换的页
**返 回 值: 无
**说 明: 选择页,可选择0,1,2三页,第四页ne000兼容芯片保留
**********************************************************/
void page(uint8 pagenumber)
{
uint8 temp;
temp=ReadFromNet(0);
temp=temp&0x3B ;//注意txp位不能要
pagenumber=pagenumber <<6;
temp=temp | pagenumber;
WriteToNet(0,temp);
}
八.设置芯片物理地址子模块
8.1设置芯片物理地址子模块功能
将物理地址写入实际地址寄存器(PAR0~PAR5)中并且用这些物理地址来对目标地址数据包进行比较,来确定接收或者拒绝接收数据包。
8.2设置芯片物理地址子模块接口
设置芯片物理地址子模块调用了写数据子模块
Ø 写数据子模块:将数据写入RTL2019AS芯片中
8.3设置芯片物理地址子模块程序
/****************************Copyright(c)********************
** 西安邮电学院
** graduate school
** XNMS实验室
** Author:冀博
** Time:2011年2月21日
** http://blog.csdn.net/tigerjb
**
**--------------FileInfo---------------------------------------------------------------------
****************************Copyright(c)******************** /
/**********************************************************
**函数原型: void SetMacID()
**入口参数: *mac_ptr
**返 回 值: 无
**说 明: 设置芯片物理地址,物理地址已经存储在程序空间内
**********************************************************/
void SetMacID(uint8 * mac_ptr)
{
//把MAC地址写入MY——MAC——ID中
page(1);
WriteToNet(1 , *mac_ptr);
mac_ptr++;
WriteToNet(2 , *mac_ptr);
mac_ptr++;
WriteToNet(3 , *mac_ptr);
mac_ptr++;
WriteToNet(4 , *mac_ptr);
mac_ptr++;
WriteToNet(5 , *mac_ptr);
mac_ptr++;
WriteToNet(6 , *mac_ptr);
//设置完后将页面转换到页面0
page(0);
}
九.写数据子模块
Ø 在LPC2210开发板中RTL8019AS在CPU的存储空间上映射的基地址为0X83400000,因此以太网的基地址为0X83400000
Ø LPC2210 通过16 位DMA 方式实现对RTL8019AS 双口RAM的访问,每次传输2字节(16比特数据)
9.1写数据子模块功能
根据传入的16bit Data和Add,将16bit Data写入以太网基地址0X83400000+Add处。
9.2写数据子模块程序
/****************************Copyright(c)********************
** 西安邮电学院
** graduate school
** XNMS实验室
** Author:冀博
** Time:2011年2月21日
** http://blog.csdn.net/tigerjb
**
**--------------FileInfo---------------------------------------------------------------------
****************************Copyright(c)******************** /
/**********************************************************
* 名称: WriteToNet()
* 功能: 把数据写入RTL8019AS
* 入口参数: ADDR 写入地址
WRITEDATA 写入数据
* 出口参数:无
**********************************************************/
void WriteToNet(uint8 ADDR_16,uint16 WRITEDATA)
{
(*((volatile unsigned short *) NET_BASE_ADDR+ADDR_16))=WRITEDATA;
}
十.读数据子模块
10.1读数据子模块功能:
根据传入的ADDR从以太网RTL8019AS基地址0X83400000+ADDR处读出2字节(16bit)数据
10.2读数据子模块程序
/****************************Copyright(c)********************
** 西安邮电学院
** graduate school
** XNMS实验室
** Author:冀博
** Time:2011年2月21日
** http://blog.csdn.net/tigerjb
**
**--------------FileInfo---------------------------------------------------------------------
****************************Copyright(c)********************
/**********************************************************
*名称 : ReadFromNet()
*功能 : 从RTL8019AS把数据读出
*入口参数: ADDR 读出地址
*出口参数: READDATA 读出数据
**********************************************************/
uint16 ReadFromNet(uint8 ADDR_16)
{
uint16 temp;
temp=(*((volatile unsigned short *) NET_BASE_ADDR+ADDR_16));//0x83400000
return (temp);
}
上一篇:ARM的异常中断机制
下一篇:基于LPC2210的RTL8019AS以太网驱动系统设计(三)
推荐阅读最新更新时间:2024-03-16 15:47