⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysio.c

📁 用AVR单片机和RTL8019实现TCP/IP协议.支持ARP,PING,UDP,TCP,HTML网页显示等功能.
💻 C
字号:
//**********************************
//*版本: Test 1.0
//*作者: XUGUOHONG
//*E-MAIL: KK20Y@YAHOO.COM.CN
//*WEBSITE:microdesign.000webhost.com
//**********************************

#include <sysio.h>
#include <iom162v.h>
//
void sysio_init(void);
//
void write_62256(unsigned int,unsigned char);
//
unsigned char read_62256(unsigned int);
//
void write_8019(unsigned char,unsigned char);
//
unsigned char read_8019(unsigned char);
//
void rtl8019_rst(void);
//
void delay_ms(unsigned char);

/*外围器件端口初始化*/
void sysio_init(void)
{
//外围控制总线初始化
  DDRD|=1<<WRITE;
  DDRD|=1<<READ;
  DDRE|=1<<LATCH;
  PORTD|=1<<WRITE;         // WR=1,Disable Write
  PORTD|=1<<READ;          // RD=1,Disable Write
  PORTE&=~(1<<LATCH);      // LATCH=0,Disable Latch
//外围数据总线初始化
  DB_DIR=0XFF;             // Data bus output
  DB_PORT=0X00;            // data =0x00
//外围地址总线初始化
  AB_DIRL=0XFF;
  AB_DIRH=0XFF;            // Address bus output
  AB_PORTL=0X00;
  AB_PORTH=0X00;           // address=0x0000
//62256 SRAM片选接口初始化
  DDRD|=(1<<RAMCS);
  PORTD|=(1<<RAMCS);       // RAMCS=1,62256未选中
//RTL8019接口初始化
  DDRD&=~(1<<RTL8019_INT); // RTL8019中断输入接口,INT0设定为输入
  DDRD|=1<<RTL8019_CS;     // RTL8019片选端设定为输出
  DDRD|=1<<RTL8019_RST;    // RTL8019复位端设定为输出
  PORTD|=1<<RTL8019_CS;    // RTL8019_CS=1,未选中
  PORTD&=~(1<<RTL8019_RST);// RTL8019_RST=0,不复位
//EEPROM存储器接口初始化
  DDRE|=1<<IIC_SCL;        // IIC_SCL输出
  DDRE|=1<<IIC_SDA;        // IIC_SDA输出
}

//62256 SRAM 总线IO操作
//SRAM地址分配表:
//容量:0X0000---0X7FFF  32K * 8 Bits
//1. 0X0000---0X05ED   1518 Byte  ETHERNET数据包缓存,发送接收共用
//2. 0X05EE---0X05F7
void write_62256(unsigned int address,unsigned char data)
{
 PORTD&=~(1<<RAMCS);       // RAMCS=0,62256选中
 AB_DIRL=0XFF;             // 低8位地址信号输出
 AB_PORTL=address;         // 写入低8位地址信号
 PORTE|=1<<LATCH;          // LATCH=1,Latch Enable
 asm("nop");
 asm("nop");
 PORTE&=~(1<<LATCH);       // LATCH=0,Latch Disable
 AB_PORTH=(address>>8);    // 写入高8位地址信号
 asm("nop");
 asm("nop");
 DB_DIR=0XFF;              // Data bus output
 DB_PORT=data;             // 数据端口写入数据 
 asm("nop");
 asm("nop");
 PORTD&=~(1<<WRITE);       // WR=0,Write Enable
 asm("nop");
 asm("nop");
 PORTD|=1<<WRITE;          // WR=1,Write Enable
 PORTD|=1<<RAMCS;          // RAMCS=1,62256未选中
 asm("nop");
}

unsigned char read_62256(unsigned int address)
{
 unsigned char temp;
 PORTD&=~(1<<RAMCS);       // RAMCS=0,62256选中
 AB_DIRL=0XFF;             // 低8位地址信号输出
 AB_PORTL=address;         // 写入低8位地址信号
 PORTE|=1<<LATCH;          // LATCH=1,Latch Enable
 asm("nop");
 asm("nop");
 PORTE&=~(1<<LATCH);       // LATCH=0,Latch Disable
 AB_PORTH=(address>>8);    // 写入高8位地址信号
 asm("nop");
 asm("nop");
 DB_DIR=0X00;              // Data bus input
 PORTD&=~(1<<READ);        // RD=0,Write Enable
 asm("nop");
 asm("nop");
 temp=DB_PIN;
 asm("nop");
 asm("nop");
 PORTD|=1<<READ;          // RD=0,Write Enable
 PORTD|=1<<RAMCS;         // RAMCS=1,62256未选中
 asm("nop");
 return temp;
}

//RTL8019总线IO操作
void write_8019(unsigned char address,unsigned char data)
{
 PORTD&=~(1<<RTL8019_CS);  // RTL8019_CS=0,选中
 AB_DIRL=0XFF;             // 低8位地址信号输出
 AB_PORTL=address;         // 写入低8位地址信号
 PORTE|=1<<LATCH;          // LATCH=1,Latch Enable
 asm("nop");
 PORTE&=~(1<<LATCH);       // LATCH=0,Latch Disable
 DB_DIR=0XFF;              // Data bus output
 DB_PORT=data;             // 数据端口写入数据 
 asm("nop");
 PORTD&=~(1<<WRITE);       // WR=0,Write Enable
 asm("nop");
 PORTD|=1<<WRITE;          // WR=1,Write Enable
 PORTD|=1<<RTL8019_CS;     // RTL8019_CS=1,未选中
 asm("nop");
}

unsigned char read_8019(unsigned char address)
{
 unsigned char temp;
 PORTD&=~(1<<RTL8019_CS);  // RTL8019_CS=0,选中
 AB_DIRL=0XFF;             // 低8位地址信号输出
 AB_PORTL=address;         // 写入低8位地址信号
 PORTE|=1<<LATCH;          // LATCH=1,Latch Enable
 asm("nop");
 PORTE&=~(1<<LATCH);       // LATCH=0,Latch Disable
 DB_DIR=0X00;              // Data bus input
 PORTD&=~(1<<READ);        // RD=0,Write Enable
 asm("nop");
 temp=DB_PIN;
 asm("nop");
 PORTD|=1<<READ;           // RD=0,Write Enable
 PORTD|=1<<RTL8019_CS;     // RTL8019_CS=1,未选中
 asm("nop");
 return temp;
}

void rtl8019_rst(void)
{
 PORTD|=1<<RTL8019_RST;      // RTL8019_RST=1,复位
 delay_ms(2);                // 延时2ms
 PORTD&=~(1<<RTL8019_RST);   // RTL8019_RST=0
 delay_ms(2);                // <PAT:此处必须加延时>
}

void delay_ms(unsigned char time)
{
 unsigned int temp;
 for(  ;time>0;time--)
 {
  for(temp=0;temp<0x3E80;temp++)
     asm("nop");
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -