📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date:
** Last Version:
** Description:
**
**------------------------------------------------------------------------------------------------------
** Created By:
** Created date:
** Version:
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include "config.h"
#define DM9000_VIDL 0x28
#define DM9000_VIDH 0x29
#define DM9000_PIDL 0x2A
#define DM9000_PIDH 0x2B
#define DM9000_ID 0x90000A46
#define CONFIG_DM9000_BASE 0x18000300
#define DM9000_IO 0x18000300 //命令端口
#define DM9000_DATA 0x18000304 //数据端口
#define DM9000_outb(d,r) ( *(volatile uint8 *)r = d )
#define DM9000_inb(r) (*(volatile uint8 *)r)
/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
** 延时时间与系统时钟有关。
** Input: dly 延时参数,值越大,延时越久
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
/*Read a byte from I/O port*/
uint8 DM9000_ior(int reg)
{
DM9000_outb(reg,DM9000_IO);
return DM9000_inb(DM9000_DATA);
}
/*Write a byte to I/O port*/
void DM9000_iow(int reg, uint8 value)
{
DM9000_outb(reg, DM9000_IO);
DM9000_outb(value, DM9000_DATA);
}
void dm9000_reset(void)
{
Uart_Printf("resetting\n");
rGPGCON = (rGPGCON & (~(3<<4))) | (1<<4);
//DelayNS(1000); /* delay 1ms */
DM9000_iow(0,0x01); //软件复位
DelayNS(10); /* delay 1ms */
}
int dm9000_probe(void)
{
uint32 id_val;
id_val = DM9000_ior(DM9000_VIDL);
id_val |= DM9000_ior(DM9000_VIDH) << 8;
id_val |= DM9000_ior(DM9000_PIDL) << 16;
id_val |= DM9000_ior(DM9000_PIDH) << 24;
if (id_val == DM9000_ID)
{
Uart_Printf("dm9000 i/o: 0x%x, id: 0x%x \n", CONFIG_DM9000_BASE,
id_val);
return 0;
}
else
{
Uart_Printf("dm9000 not found at 0x%08x id: 0x%08x\n",
CONFIG_DM9000_BASE, id_val);
return -1;
}
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 主函数,程序入口。
** Input: 无
** Output: 系统返回值0
** Created by: 黄绍斌
** Created Date: 2005-12-31
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main(void)
{
UART_Select(0);
UART_Init();
dm9000_reset();
dm9000_probe();
while(1);
return(0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -