51单片机上网 RTL8019AS 寄存器配置C源代码 下载本文

#include #include #include \

sbit RESET=P4^0;

typedef unsigned char uchar; typedef unsigned int uint;

#define TX_PAGES 6

#define NE_START_PG 0x40 //发送寄存器的首页地址 #define TX_START_PG NE_START_PG

#define NE_STOP_PG 0x60 //接收寄存器环的末地址+1 #define RX_STOP_PG NE_STOP_PG //

#define RX_START_PG NE_START_PG + TX_PAGES #define RX_CURR_PG RX_START_PG + 1 //下面定义的是RTL8019AS特殊寄存器 #define BASE_ADDRESS 0x8000

#define CR XBYTE [BASE_ADDRESS+0x0000] //设置CR寄存器地址 #define DMA_PORT XBYTE [BASE_ADDRESS+0x1000] //设置远程DMA端口 #define RESET_PORT XBYTE [BASE_ADDRESS+0x1800] //设置复位端口

//---------定义PAGE0------------- //定义PAGE0中的只读寄存器

#define PG0_CLDA0 XBYTE [BASE_ADDRESS+0x0100] #define PG0_CLDA1 XBYTE [BASE_ADDRESS+0x0200] #define PG0_BNRY XBYTE [BASE_ADDRESS+0x0300] #define PG0_TSR XBYTE [BASE_ADDRESS+0x0400] #define PG0_NCR XBYTE [BASE_ADDRESS+0x0500] #define PG0_FIFO XBYTE [BASE_ADDRESS+0x0600] #define PG0_ISR XBYTE [BASE_ADDRESS+0x0700] #define PG0_CRDA0 XBYTE [BASE_ADDRESS+0x0800] #define PG0_CRDA1 XBYTE [BASE_ADDRESS+0x0900] #define PG0_8019D0 XBYTE [BASE_ADDRESS+0x0A00] #define PG0_8019D1 XBYTE [BASE_ADDRESS+0x0B00] #define PG0_RSR XBYTE [BASE_ADDRESS+0x0C00] #define PG0_CNTR0 XBYTE [BASE_ADDRESS+0x0D00] #define PG0_CNTR1 XBYTE [BASE_ADDRESS+0x0E00] #define PG0_CNTR2 XBYTE [BASE_ADDRESS+0x0F00]

//定义PAGE0中的只写寄存器

#define PG0_PSTART XBYTE [BASE_ADDRESS+0x0100] #define PG0_PSTOP XBYTE [BASE_ADDRESS+0x0200] #define PG0_BNRY XBYTE [BASE_ADDRESS+0x0300] #define PG0_TPSR XBYTE [BASE_ADDRESS+0x0400]

#define PG0_TBCR0 XBYTE [BASE_ADDRESS+0x0500] #define PG0_TBCR1 XBYTE [BASE_ADDRESS+0x0600] #define PG0_ISR XBYTE [BASE_ADDRESS+0x0700] #define PG0_RSAR0 XBYTE [BASE_ADDRESS+0x0800] #define PG0_RSAR1 XBYTE [BASE_ADDRESS+0x0900] #define PG0_RBCR0 XBYTE [BASE_ADDRESS+0x0A00] #define PG0_RBCR1 XBYTE [BASE_ADDRESS+0x0B00] #define PG0_RCR XBYTE [BASE_ADDRESS+0x0C00] #define PG0_TCR XBYTE [BASE_ADDRESS+0x0D00] #define PG0_DCR XBYTE [BASE_ADDRESS+0x0E00] #define PG0_IMR XBYTE [BASE_ADDRESS+0x0F00]

//定义PAGE1 读写寄存器

#define PG1_PAR0 XBYTE [BASE_ADDRESS+0x0100] #define PG1_PAR1 XBYTE [BASE_ADDRESS+0x0200] #define PG1_PAR2 XBYTE [BASE_ADDRESS+0x0300] #define PG1_PAR3 XBYTE [BASE_ADDRESS+0x0400] #define PG1_PAR4 XBYTE [BASE_ADDRESS+0x0500] #define PG1_PAR5 XBYTE [BASE_ADDRESS+0x0600] #define PG1_CURR XBYTE [BASE_ADDRESS+0x0700] #define PG1_MAR0 XBYTE [BASE_ADDRESS+0x0800] #define PG1_MAR1 XBYTE [BASE_ADDRESS+0x0900] #define PG1_MAR2 XBYTE [BASE_ADDRESS+0x0A00] #define PG1_MAR3 XBYTE [BASE_ADDRESS+0x0B00] #define PG1_MAR4 XBYTE [BASE_ADDRESS+0x0C00] #define PG1_MAR5 XBYTE [BASE_ADDRESS+0x0D00] #define PG1_MAR6 XBYTE [BASE_ADDRESS+0x0E00] #define PG1_MAR7 XBYTE [BASE_ADDRESS+0x0F00]

//定义PAGE2 只读寄存器

#define PG2_PSTART XBYTE [BASE_ADDRESS+0x0100] #define PG2_PSTOP XBYTE [BASE_ADDRESS+0x0200] #define PG2_TPSR XBYTE [BASE_ADDRESS+0x0400] #define PG2_RCR XBYTE [BASE_ADDRESS+0x0C00] #define PG2_TCR XBYTE [BASE_ADDRESS+0x0D00] #define PG2_DCR XBYTE [BASE_ADDRESS+0x0E00] #define PG2_IMR XBYTE [BASE_ADDRESS+0x0F00] //定义PAGE3 寄存器

#define PG3_9346CR XBYTE [BASE_ADDRESS+0x0100] #define PG3_CONFIG0 XBYTE [BASE_ADDRESS+0x0300] #define PG3_CONFIG1 XBYTE [BASE_ADDRESS+0x0400] #define PG3_CONFIG2 XBYTE [BASE_ADDRESS+0x0500] #define PG3_CONFIG3 XBYTE [BASE_ADDRESS+0x0600] #define PG3_CONFIG4 XBYTE [BASE_ADDRESS+0x0D00]

//以下是特殊寄存器的位定义 // CR寄存器

#define stop_cmd 0x01 //停止接受或发送数据 #define start_cmd 0x02 //启动接受或发送数据 #define txp 0x04 //发送数据 #define no_dma 0x00 //禁止DMA

#define read_dma 0x08 //允许远程DMA读 #define write_dma 0x10 //允许远程DMA写 #define send_pck 0x18 //发送数据

#define abort_dma 0x20 //退出/完成远程DMA #define page0 0x00 //PAGE0选择 #define page1 0x40 //PAGE1选择 #define page2 0x80 //PAGE2选择 #define page3 0xc0 //PAGE3选择

// ISR中断状态寄存器

#define isr_prx 0x01 //无错误接受数据包 #define isr_ptx 0x02 //无错误发送数据包

#define rxe 0x04 //接受数据包带有如下错误:CRC错误、包丢失错误以及帧队列错误

#define txe 0x08 //过分冲突导致传输错误 #define ovw 0x10 //接受缓冲器溢出

#define cnt 0x20 //当一个或多个网络计数器的MSB 设置完成时该位被设置。 #define rdc 0x40 //远程DMA操作完成 #define rst 0x80 //复位

// DCR数据结构寄存器

#define wts 0x01 //字长的DMA传送

#define bos 0x02 //传送过程中高位放到MD15-8,低位放到MD7-0 #define las 0x04 //16位DMA传送模式 #define ls 0x08 //回路检测,正常操作

#define arm 0x10 //自动初始化远程操作,发送包命令执行 #define fifo00 0x00 // 2字节 #define fifo01 0x20 // 4字节 #define fifo10 0x40 // 8字节 #define fifo11 0x60 // 12字节

// TCR传输配置寄存器

#define tcr_config 0x00//设置将要配置TCR寄存器的值 #define tcr_crc 0x00 //CRC正常操作 #define lb00 0x00 //正常操作

#define lb01 0x02 //内部LOOKBACK

#define lb10 0x04 //外部LOOKBACK #define lb11 0x06 //外部LOOKBACK #define atd 0x08 //多播地址混乱接受 #define ofst 0x10 //冲突补偿

// TSR传送状态寄存器

#define tsr_ptx 0x01 //无错误接收数据

#define col 0x04 //数据传输过程中出现冲突 #define abt 0x08 //超频导致传送失败

#define crs 0x10 //传送数据包时,有包丢失 #define cdh 0x40 // #define owc 0x80 //

// RCR接受配置寄存器

#define rcr_config 0x04//设置将要配置的RCR寄存器的值 #define sep 0x01 //允许错误数据包被接受

#define ar 0x02 //允许帧长度小于64bytes的数据包被接受 #define ab 0x04 //允许广播地址帧数据包被接收 #define am 0x08 //允许多播地址数据包被被接收

#define pro 0x10 //允许所有具有目的地址数据包被接收 #define mon 0x20 //

// RSR接受状态寄存器

#define rsr_prx 0x01 //无错误接受数据标志 #define rsr_crc 0x02 //CRC错误位 #define fae 0x04 //帧同步错误位 #define mpa 0x10 //数据包丢失位 #define phy 0x20 //多播或广播位 #define dis 0x40 //禁止接受位 #define dfr 0x80 //冲突位 void Send(uchar a); bit etherdev_init(void); void etherdev_send(void);

unsigned int etherdev_read(void);