📄 hardware.c
字号:
#define HARDWARE_GLOBALS
#include "config.h"
#include "../include/cfg_net.h"
#include "44blib.h"
EX_RAM uint16 iic=0;
#define RPSTART 0x4c
#define RPSTOP 0x80
#define SPSTART 0x40
#define out
extern void outportb(uint8, uint32);
extern void outportw(uint16, uint32);
extern void outportl(uint32, uint32);
extern uint8 inportb(uint32);
extern uint16 inportw(uint32);
extern uint32 inportl(uint32);
static uint8 rBNRY;
union REC_BUFF_UNION REC_BUFF[MAX_REC_BUFF];
/**********************************************************************
**函数原型: void SetMacID()
**入口参数: *mac_ptr
**出口参数: 无
**返 回 值: 无
**说 明: 设置芯片物理地址,物理地址已经存储在程序空间内
************************************************************************/
void SetRegPage(uint8 PageIdx)
{
uint8 temp;
temp = inportb(BaseAddr);
// temp = (temp&(0x3a|net_start))|(PageIdx<<6); //ensure bit0 clear!!!
temp = (temp&0x3b)|(PageIdx<<6);
outportb(temp, BaseAddr);
}
/**********************************************************************
**函数原型: void SetMacID(uint8 * mac_ptr)
**入口参数: *mac_ptr
**出口参数: 无
**返 回 值: 无
**说 明: 设置芯片物理地址,物理地址已经存储在程序空间内
************************************************************************/
void SetMacID(uint8 * mac_ptr)
{
//把MAC地址写入MY——MAC——ID中
SetRegPage(1);
outportb(*mac_ptr,PAR0);
mac_ptr++;
outportb(*mac_ptr,PAR1);
mac_ptr++;
outportb(*mac_ptr,PAR2);
mac_ptr++;
outportb(*mac_ptr,PAR3);
mac_ptr++;
outportb(*mac_ptr,PAR4);
mac_ptr++;
outportb(*mac_ptr,PAR5);
}
/**********************************************************************
**函数原型: uint8 Rst8019()
**入口参数: 无
**出口参数: 无
**返 回 值: 无
**说 明: 设置芯片物理地址,物理地址已经存储在程序空间内
************************************************************************/
uint8 Rst8019()
{
int i;
outportb(0x5a, RstAddr);
i = 2000;
while(i--);
SetRegPage(0);
return (inportb(ISR));
}
/**********************************************************************
**函数原型: static void WakeRtl8019as()
**入口参数: 无
**出口参数: 无
**返 回 值: 无
**说 明: 设置芯片物理地址,物理地址已经存储在程序空间内
************************************************************************/
static void WakeRtl8019as()
{
SetRegPage(3);
outportb(0xcf, CR9346); //set eem1-0, 11 ,enable write config register
outportb(0x70, CONFIG3); //clear pwrdn, sleep mode, set led0 as led_link, led1 as led_rx
outportb(0x3f, CR9346); //disable write config register
}
/**********************************************************************
**函数原型: static void InitRS8019()
**入口参数:
**出口参数: 无
**返 回 值: 无
**说 明: 设置芯片物理地址,物理地址已经存储在程序空间内
************************************************************************/
static void InitRS8019()
{
outportb(0x21, BaseAddr); /* set page 0 and stop */
outportb(RPSTART, Pstart); /* set Pstart 0x4c */
outportb(RPSTOP, Pstop); /* set Pstop 0x80 */
outportb(RPSTART, BNRY); /* BNRY-> the last page has been read */
outportb(SPSTART, TPSR); /* transmit page start register, 0x40 */
outportb(0xcc, RCR); /* set RCR 0xcc */
outportb(0xe0, TCR); /* set TCR 0xe0 */
outportb(0xc8, DCR); /* 8bit DMA */
outportb(0x03, IMR); /* set IMR 0x03 */
outportb(0xff, ISR);
SetRegPage(1);
outportb(RPSTART+1, CURR);
outportb(0x00, MAR0);
outportb(0x41, MAR1);
outportb(0x00, MAR2);
outportb(0x80, MAR3);
outportb(0x00, MAR4);
outportb(0x00, MAR5);
outportb(0x00, MAR6);
outportb(0x00, MAR7);
outportb(0x22, BaseAddr); /* set page 0 and start */
rBNRY = RPSTART;
}
/**********************************************************************
**函数原型: void InitNic()
**入口参数:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -