?? 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 + -