S3C2440实现dm9000网卡驱动程序移植

发布者:xi24最新更新时间:2024-08-05 来源: cnblogs关键字:S3C2440  dm9000  网卡驱动  程序移植 手机看文章 扫描二维码
随时随地手机看文章

 592         

 593         //PHY_REG 27 (1Bh) <- 0037h

 594         phy_write(db, 27, 0x0037);

 595         //PHY_REG 27 (1Bh) <- AA37h

 596         phy_write(db, 27, 0xaa37);

 597         

 598         //PHY_REG 27 (1Bh) <- 0040h

 599         phy_write(db, 27, 0x0040);

 600         //PHY_REG 27 (1Bh) <- AA40h

 601         phy_write(db, 27, 0xaa40);

 602         

 603         //For long code:

 604         //PHY_REG 27 (1Bh) <- 0050h

 605         phy_write(db, 27, 0x0050);

 606         //PHY_REG 27 (1Bh) <- AA50h

 607         phy_write(db, 27, 0xaa50);

 608         

 609         //PHY_REG 27 (1Bh) <- 006Bh

 610         phy_write(db, 27, 0x006b);

 611         //PHY_REG 27 (1Bh) <- AA6Bh

 612         phy_write(db, 27, 0xaa6b);

 613         

 614         //PHY_REG 27 (1Bh) <- 007Dh

 615         phy_write(db, 27, 0x007d);

 616         //PHY_REG 27 (1Bh) <- AA7Dh

 617         phy_write(db, 27, 0xaa7d);

 618         

 619         //PHY_REG 27 (1Bh) <- 008Dh

 620         phy_write(db, 27, 0x008d);

 621         //PHY_REG 27 (1Bh) <- AA8Dh

 622         phy_write(db, 27, 0xaa8d);

 623         

 624         //PHY_REG 27 (1Bh) <- 009Ch

 625         phy_write(db, 27, 0x009c);

 626         //PHY_REG 27 (1Bh) <- AA9Ch

 627         phy_write(db, 27, 0xaa9c);

 628         

 629         //PHY_REG 27 (1Bh) <- 00A3h

 630         phy_write(db, 27, 0x00a3);

 631         //PHY_REG 27 (1Bh) <- AAA3h

 632         phy_write(db, 27, 0xaaa3);

 633         

 634         //PHY_REG 27 (1Bh) <- 00B1h

 635         phy_write(db, 27, 0x00b1);

 636         //PHY_REG 27 (1Bh) <- AAB1h

 637         phy_write(db, 27, 0xaab1);

 638         

 639         //PHY_REG 27 (1Bh) <- 00C0h

 640         phy_write(db, 27, 0x00c0);

 641         //PHY_REG 27 (1Bh) <- AAC0h

 642         phy_write(db, 27, 0xaac0);

 643         

 644         //PHY_REG 27 (1Bh) <- 00D2h

 645         phy_write(db, 27, 0x00d2);

 646         //PHY_REG 27 (1Bh) <- AAD2h

 647         phy_write(db, 27, 0xaad2);

 648         

 649         //PHY_REG 27 (1Bh) <- 00E0h

 650         phy_write(db, 27, 0x00e0);

 651         //PHY_REG 27 (1Bh) <- AAE0h

 652         phy_write(db, 27, 0xaae0);

 653         //PHY_REG 27 (1Bh) <- 0000h

 654         phy_write(db, 27, 0x0000);

 655     }

 656 }

 657 

 658 /* 

 659     Initilize dm9000 board

 660 */

 661 static void dmfe_init_dm9000(struct net_device *dev)

 662 {

 663     board_info_t *db = (board_info_t *)dev->priv;

 664     DMFE_DBUG(0, 'dmfe_init_dm9000()', 0);

 665 

 666     spin_lock_init(&db->lock);

 667     

 668     iow(db, DM9KS_GPR, 0);    /* GPR (reg_1Fh)bit GPIO0=0 pre-activate PHY */

 669     mdelay(20);        /* wait for PHY power-on ready */

 670 

 671     /* do a software reset and wait 20us */

 672     iow(db, DM9KS_NCR, 3);

 673     udelay(20);        /* wait 20us at least for software reset ok */

 674     iow(db, DM9KS_NCR, 3);    /* NCR (reg_00h) bit[0] RST=1 & Loopback=1, reset on */

 675     udelay(20);        /* wait 20us at least for software reset ok */

 676 

 677     /* I/O mode */

 678     db->io_mode = ior(db, DM9KS_ISR) >> 6; /* ISR bit7:6 keeps I/O mode */

 679 

 680     /* Set PHY */

 681     db->op_mode = media_mode;

 682     set_PHY_mode(db);

 683 

 684     /* Program operating register */

 685     iow(db, DM9KS_NCR, 0);

 686     iow(db, DM9KS_TCR, 0);        /* TX Polling clear */

 687     iow(db, DM9KS_BPTR, 0x3f);    /* Less 3kb, 600us */

 688     iow(db, DM9KS_SMCR, 0);        /* Special Mode */

 689     iow(db, DM9KS_NSR, 0x2c);    /* clear TX status */

 690     iow(db, DM9KS_ISR, 0x0f);     /* Clear interrupt status */

 691     iow(db, DM9KS_TCR2, 0x80);    /* Set LED mode 1 */

 692     if (db->chip_revision == 0x1A){ 

 693         /* Data bus current driving/sinking capability  */

 694         iow(db, DM9KS_BUSCR, 0x01);    /* default: 2mA */

 695     }

 696 #ifdef FLOW_CONTROL

 697     iow(db, DM9KS_BPTR, 0x37);

 698     iow(db, DM9KS_FCTR, 0x38);

 699     iow(db, DM9KS_FCR, 0x29);

 700 #endif

 701 

 702 #ifdef DM8606

 703     iow(db,0x34,1);

 704 #endif

 705 

 706     if (dev->features & NETIF_F_HW_CSUM){

 707         printk(KERN_INFO 'DM9KS:enable TX checksumn');

 708         iow(db, DM9KS_TCCR, 0x07);    /* TX UDP/TCP/IP checksum enable */

 709     }

 710     if (db->rx_csum){

 711         printk(KERN_INFO 'DM9KS:enable RX checksumn');

 712         iow(db, DM9KS_RCSR, 0x02);    /* RX checksum enable */

 713     }

 714 

 715 #ifdef ETRANS

 716     /*If TX loading is heavy, the driver can try to anbel 'early transmit'.

 717     The programmer can tune the 'Early Transmit Threshold' to get 

 718     the optimization. (DM9KS_ETXCSR.[1-0])

 719     

 720     Side Effect: It will happen 'Transmit under-run'. When TX under-run

 721     always happens, the programmer can increase the value of 'Early 

 722     Transmit Threshold'. */

 723     iow(db, DM9KS_ETXCSR, 0x83);

 724 #endif

 725  

 726     /* Set address filter table */

 727     dm9000_hash_table(dev);

 728 

 729     /* Activate DM9000/DM9010 */

 730     iow(db, DM9KS_IMR, DM9KS_REGFF); /* Enable TX/RX interrupt mask */

 731     iow(db, DM9KS_RXCR, DM9KS_REG05 | 1);    /* RX enable */

 732     

 733     /* Init Driver variable */

 734     db->tx_pkt_cnt         = 0;

 735         

 736     netif_carrier_on(dev);

 737 

 738 }

 739 

 740 /*

 741   Hardware start transmission.

 742   Send a packet to media from the upper layer.

 743 */

 744 static int dmfe_start_xmit(struct sk_buff *skb, struct net_device *dev)

 745 {

 746     board_info_t *db = (board_info_t *)dev->priv;

 747     char * data_ptr;

 748     int i, tmplen;

 749     u16 MDWAH, MDWAL;

 750     

 751     #ifdef TDBUG /* check TX FIFO pointer */

 752             u16 MDWAH1, MDWAL1;

 753             u16 tx_ptr;

 754     #endif

 755     

 756     DMFE_DBUG(0, 'dmfe_start_xmit', 0);

 757     if (db->chip_revision != 0x1A)

 758     {    

 759         if(db->Speed == 10)

 760             {if (db->tx_pkt_cnt >= 1) return 1;}

 761         else

 762             {if (db->tx_pkt_cnt >= 2) return 1;}

[1].. [10] [11] [12] [13] [14] [15] [16] [17] [18] ..[20]
关键字:S3C2440  dm9000  网卡驱动  程序移植 引用地址:S3C2440实现dm9000网卡驱动程序移植

上一篇:s3c2440的USB热插拔驱动问题
下一篇:S3C实现DMA驱动程序编写

推荐阅读最新更新时间:2024-11-13 19:27

S3C2440时钟系统详解
在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分析时钟图可以得到以下结论: 经过选择的外部时钟进入MPLL,进行锁相环倍频,经过锁相环之后的时钟MPLL_IN分成了三股,分别是FCLK,HCLK,PCLK.这其中HCLK和PCLK又是从HCLK分频得到的,最后ARM920T这个系统内核模块得到了两个时钟HCLK和FCLK,DMA控制器,LCD控制器,内存控制器,总线控制器,外部nand控制器和TIC,摄像头接口都来自于HCLK时钟,LCD控制器,nand控制器,cam摄像头
[单片机]
<font color='red'>S3C2440</font>时钟系统详解
了解S3C2440触摸屏驱动的原理及其应用
一、开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二、前提知识 1、Linux输入子系统(Input Subsystem): 在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层就为我们用
[单片机]
了解<font color='red'>S3C2440</font>触摸屏<font color='red'>驱动</font>的原理及其应用
STM32网络通信之DM9000了解
简介: 3.3V 供电,IO端口最高支持5V,提供两个接口,一个是可以以8、16、32这三种不同的方式与处理器相连接的接口,一个是与EEPROM连接的I2C接口,如此在外接的EEPROM中可以存放要缓存的数据信息。此外,DM9000内部有一个16K缓存数据区,分为发送FIFO缓冲区和接收FIFO缓冲区。 DM9000有三类寄存器,数据寄存器、状态寄存器和控制寄存器。 常用到的寄存器有6个: (1)网络控制寄存器 NCR 作用:对DM9000芯片的网络相关功能的配置,各位解释如下: (2)网络状态寄存器 NSR 作用: 寄存器的各位表示网络连接状态,通过这些标志位判断芯片的状态,写驱动的时候,一般会用到连接
[单片机]
STM32网络通信之<font color='red'>DM9000</font>了解
s3c2440实时时钟中断
s3c2440实时时钟(RTC)中,定义了两个中断源:报警中断和时间节拍中断。前面有网友问到了这两个中断的用法,最近我抽出时间对这两个中断研究了一番,发现这两个中断都很实用。现在就给大家介绍一下它们的用法。 时间节拍中断,顾名思义,就像一个节拍器,可以等时性的控制节拍。因此它类似于定时器中断。但时间节拍中断是毫秒级的,而定时器中断可以达到微秒,甚至更小级别。时间节拍中断的周期公式为:(n+1) 128,单位是秒,即每隔这么长时间,会中断一次。其中n的值为1~127,它存储在寄存器TICNT的低6位中,当寄存器TICNT的第7位被置1时,表示开启时间节拍中断,这时n递减,当减为0时,进入时间节拍中断。 报警中断可以
[单片机]
基于S3C2440嵌入式系统的以太网接口电路设计方案
文章主要介绍了一个基于三星ARM9芯片S3C2440嵌入式系统的以太网接口电路设计方案,采用了工业级以太网控制器DM9000AEP成功实现了嵌入式系统网络数据交换。论文在重点阐述了网络接口电路基础之上,对Windows CE系统控制软件部分DM9000AEP的驱动程序和注册表项进行了具体分析。 随着微电子技术和计算机技术的发展,嵌入式技术得到广阔的发展,已成为现代工业控制、通信类和消费类产品发展的方向。以太网在实时操作、可靠传输、标准统一等方面的卓越性能及其便于安装、维护简单、不受通信距离限制等优点,已经被国内外很多监控、控制领域的研究人员广泛关注,并在实际应用中展露出显着的优势。本文提出了一种基于DM9000AE网络接口
[单片机]
基于<font color='red'>S3C2440</font>嵌入式系统的以太网接口电路设计方案
S3C2440——使用URAT0中断方式发送和接收字符串
设置中断向量表 ;文件ASM_Interrupt.s ;(1)设置中断向量表 Mode_USR EQU 0x50 ;IRQ中断开放,FIQ中断关闭 Mode_FIQ EQU 0xD1 ;关闭IRQ、FIQ中断 Mode_IRQ EQU 0xD2 ;关闭IRQ、FIQ中断 Mode_SVC EQU 0xD3 ;关闭IRQ、FIQ中断 GET 2440Reg_addr.inc AREA MyCode, CODE,READONLY IMPORT Uart_Init IMPORT INT_UART0 ENTRY ;设置中断向量表 B
[单片机]
S3C2440时钟电源管理
S3C2440的时钟可以选用晶振(XTAL),也可以使用外部时钟(EXTCLK),由系统复位时,在复位信号上升沿对引脚OM3、OM2所测的状态来确定。由于我所用的开发板这两个引脚接地,故外部晶振作为主锁相环(MPLL)和usb锁相环(UPLL)的时钟源。 含有两个锁相环MPLL、UPLL产生系统所需要的不同频率的时钟 MPLL: 为CPU产生FCLK时钟 为AHB产生HCLK时钟 为APB产生PCLK时钟 UPLL: 为usb(Host and Device)产生UCLK(48M) FCLK,HCLK和 PCLK FCLK是提供给ARM920T 的时钟。 HCLK 是提供给用于 ARM920T,存储器控制器,中断控
[单片机]
<font color='red'>S3C2440</font>时钟电源管理
linux 2.6.32 在arm9(s3c2440)平台的移植
板子用的友善的mini2440, 起初按照光盘提供的手册, 照猫画虎,,,,,,,,,但是遇到各种问题, 很多未解决.....原因是还没理解每层目录的Makefile和Kconfig的关系, 以及在Kernel Configure菜单树中对应的选项, 以及对nand_flash设备的结构体的意义没搞清楚,~ so~ 在http://www.kernel.org/ 下载2.6.32的源代码. 编译器用的arm-linux-gcc 4.1.2 . 1 内核代码/uboot代码中中机器码的定义位置,在/root/linux-2.6.32/arch/arm/tools/mach-types 和 uboot/include/asm-
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved