记录AM335x 与 DM9000C GPMC接口调试

一、环境

    AM3358 DM9000C startware2.0 裸机调试

二、寄存器配置

    AM335x与DM9000C的GPMC接口主要是GPMC_CONFIG1-7寄存器的调试.首先需要考虑的是地址段的划分。

    GMPC外接存储器给定的地址范围为0x0000 0000 ~ 0x1FFF FFFF,不要超出这个范围。另外也不要出现地址冲突,否则都会产生异常错误。

    寄存器CONFIG7负责地址段分配,这里我们使用HWREG(GPMC_BASE + GPMC_CONFIG7(1)) = 0x00000F54;意思是基地址0x1400 0000 size: 0100 0000,细节可以查看手册。CONFIG7(1)中(1)的意思是使用片选1.当操作设定的地址范围内数据时,片选1会生效。

   其他寄存器配置重要涉及到时序控制,配置如下:

  

//-----  时钟为100Mhz.
#define CS_DEASSERT_WR      0x0F  
#define CS_DEASSERT_RD      0x0F


#define CS_ON_TIME          0x00


//-----  config4
#define OE_ASSERT           0x02
#define OE_DEASSERT         0x0C


#define WE_ASSERT           0x06
#define WE_DEASSERT         0x0C


//-----  config5
#define CFG_5_RD_CYCLE_TIM      0x0F
#define CFG_5_WR_CYCLE_TIM      0x0F


#define CFG_5_RD_ACCESS_TIM    0x0A


//-----  config6
#define CFG_6_WR_ACCESS_TIM     0x06
#define CYC2CYC_DELAY           0x4
AM335x读取时序

最后,初始化寄存器

HWREG(GPMC_BASE + GPMC_CONFIG1(1)) = (0x0 |
    (GPMC_CONFIG1_1_DEVICESIZE_SIXTEENBITS <<
    GPMC_CONFIG1_1_DEVICESIZE_SHIFT ) |
    (GPMC_CONFIG1_1_ATTACHEDDEVICEPAGELENGTH_SIXTEEN << GPMC_CONFIG1_1_ATTACHEDDEVICEPAGELENGTH_SHIFT )
    //(GPMC_CONFIG1_1_TIMEPARAGRANULARITY_X2 << GPMC_CONFIG1_1_TIMEPARAGRANULARITY_SHIFT)

    );

    //-----  ontime
    //-----  de-assert-rd
    //-----  de-assert-wr
    HWREG(GPMC_BASE + GPMC_CONFIG2(1)) = (0x0 |
    (CS_ON_TIME ) |
    (CS_DEASSERT_RD << GPMC_CONFIG2_1_CSRDOFFTIME_SHIFT) |
    (CS_DEASSERT_WR << GPMC_CONFIG2_1_CSWROFFTIME_SHIFT));
    
    //-----  OE-ASSERT
    //-----  OE-DE-ASSERT
    //-----  WE-ASSERT
    //-----  WE-DE-ASSERT
    HWREG(GPMC_BASE + GPMC_CONFIG4(1)) = (0x0 |
    (OE_ASSERT << GPMC_CONFIG4_1_OEONTIME_SHIFT) |
    (OE_DEASSERT << GPMC_CONFIG4_1_OEOFFTIME_SHIFT) |
    (WE_ASSERT << GPMC_CONFIG4_1_WEONTIME_SHIFT)|
    (WE_DEASSERT << GPMC_CONFIG4_1_WEOFFTIME_SHIFT));

    //-----  RD-CYCLE
    //-----  WR-CYCLE
    //-----  RD-ACCESS
    HWREG(GPMC_BASE + GPMC_CONFIG5(1)) = (0x0 |
    (CFG_5_RD_CYCLE_TIM << GPMC_CONFIG5_1_RDCYCLETIME_SHIFT)|
    (CFG_5_WR_CYCLE_TIM << GPMC_CONFIG5_1_WRCYCLETIME_SHIFT)|
    (CFG_5_RD_ACCESS_TIM << GPMC_CONFIG5_1_RDACCESSTIME_SHIFT)
    );

    //-----  CYCLE2CYCLESAMECSEN
    //-----  CYC2CYC_DELAY
    //-----  WR_DATA_ON_ADMUX
    //-----  WR_ACCESS_TIM
    HWREG(GPMC_BASE + GPMC_CONFIG6(1)) = (0x0 |
    (GPMC_CONFIG6_1_CYCLE2CYCLESAMECSEN_C2CDELAY << GPMC_CONFIG6_1_CYCLE2CYCLESAMECSEN_SHIFT) |
    (CYC2CYC_DELAY << GPMC_CONFIG6_1_CYCLE2CYCLEDELAY_SHIFT) |
    (WR_DATA_ON_ADMUX << GPMC_CONFIG6_1_WRDATAONADMUXBUS_SHIFT)|
    (CFG_6_WR_ACCESS_TIM << GPMC_CONFIG6_1_WRACCESSTIME_SHIFT));

    //-----  BASE ADDR
    //-----  CS VALID
    //-----  BASEADDRESS
    //-----  NORFLASH 基地址:0x1000 0000 size: 0400 0000
    //-----  DM9000   基地址:0x1400 0000 size: 0100 0000
    //HWREG(GPMC_BASE + GPMC_CONFIG7(1)) = 0x00000C50;*/
    HWREG(GPMC_BASE + GPMC_CONFIG7(1)) = 0x00000F54;

三、测试与数据访问

    我们硬件部分将CMD引脚接到了地址脚的A2,因此,访问数据时我们采用地址 0x1400 0004,访问索引时采用地址0x1400 0000.

    我们写下读取DM9000C的测试函数

    

#define DM9000_REG_ADDR             (0x14000000)
#define DM9000_DAT_ADDR             (0x14000004)

//=====================================================================
//======                                                         ======
//======        原型: uint16 DM9000CIEP_ReadReg(uint16 reg)      ======
//======                                                         ======
//======        功能:寄存器读取                                   ======
//======                                                         ======
//=====================================================================
uint16 DM9000CIEP_ReadReg(uint16 reg)
{
    *((vu16*)DM9000_REG_ADDR) = reg;

    return *((vu16*)DM9000_DAT_ADDR);
}

//=====================================================================
//======                                                         ======
//======        原型: uint32 DM9000ID_Read(void)                ======
//======                                                         ======
//======        功能:DM9000 ID读取                               ======
//======                                                         ======
//=====================================================================
uint32 DM9000ID_Read(void)
{
    uint32 id_val;
    id_val = DM9000CIEP_ReadReg(DM_REG_VID0);
    id_val |= DM9000CIEP_ReadReg(DM_REG_VID1) << 8;
    id_val |= DM9000CIEP_ReadReg(DM_REG_PID0) << 16;
    id_val |= DM9000CIEP_ReadReg(DM_REG_PID1) << 24;

    return id_val;
}

如果可以读取到0x90 00 0A 46的ID,说明时序配置无误,可以进行后续的操作。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GPMC即组策略管理控制台,与windows 2000/2003 Server上传统的组策略编辑器截然不同,由一个全新的MMC管理单元及一整套脚本化的接口组成,提供了集的组策略管理方案,可以大大减少不正确的组策略可能导致的网络问题并简化组策略相关的安全问题,解决组策略部署的难点,   减轻了IT管理员们在实施组策略时所承担的沉重包袱。   组策略概述   相信"组策略"(Group Policy)这个名词已经为广大的Windows用户所知晓。微软在Windows NT 4.0早就有了基于策略的管理--策略编辑器--一个深受NT管理员欢迎的实用程序,但它个并不为大多数用户所掌握并加以应用。为此,微软在 Windows 2000不但彻底更新了目录服务,而且推出了与这个目录完全集成的策略管理--组策略对象(GPO)。随着Windows 2000的深入应用,组策略的应用也随之遍地开花,影响力远远超过了它的前身。可以说,组策略配置的正确与否将与您整个网络息息相关--虽然您可以完全放弃它,然而,作为一种手段,组策略的成功应用将起到事半功倍的效果。   GPMC的起源   当然,并不是每个人都成功了。随着组策略的深入应用,对这些组策略的管理成了用户最大的负担,而部分用户根本无法预料他所配置的组策略会产生什么样的后果,很多时候结果大大出乎他们的意料。在微软新闻组里,恐怕最著名的组策略问题就是"本地策略不允许您交互式登录"。GPMC(Group Policy Management Console,组策略管理控制台)就是微软在汲取遍布全球的合作伙伴及大量客户反馈的基础上酝酿而成的。   GPMC由一个全新MMC管理单元及一整套脚本化的接口组成,提供了集的组策略管理方案,可以大大减少不正确的组策略可能导致的网络问题并简化组策略相关的安全问题,解决组策略部署的难点,减轻了IT管理员们在实施组策略时所承担的沉重包袱

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值