📄 sysio.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 + -