打印
[ZLG-ARM]

使用H-JTAG调试LPC2366出现不能时LPC2366进入DEBUG state

[复制链接]
2495|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feifan570|  楼主 | 2007-7-27 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
feifan570|  楼主 | 2007-7-29 11:27 | 只看该作者

芯片没有坏,但是还是调试不能通过

但是就是调试过不去,把程序贴出来,让大侠们来把把脉。这个程序参考MCB2300的EasyWeb的EMAC.C写的,几乎没有改变。
void Init_EMAC(INT8U MACAddr[])
{
    extern void Ethernet_Handler(void);
// Keil: function modified to access the EMAC
// Initializes the EMAC ethernet controller
    INT32U regv,tout,id1,id2;

    /* Power Up the EMAC controller. */
    PCONP |= 0x40000000;

    /* Enable P1 Ethernet Pins. */
    //  PINSEL2 = 0x55555555;
    PINSEL2 = 0x50151105;
    PINSEL3 = (PINSEL3 & ~0x0000000F) | 0x00000005;

    /* Reset all EMAC internal modules. */
    MAC_MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX |
             MAC1_SIM_RES | MAC1_SOFT_RES;
        /*MAC_MAC1 = 0xCF00 */
    MAC_COMMAND = CR_REG_RES | CR_TX_RES | CR_RX_RES;
        /* MAC_COMMAND = 0x0038 */
    /* A short delay after reset. */
    for (tout = 0; tout < 100; tout++);

    /* Initialize MAC control registers. */

    MAC_MAC1 = MAC1_PASS_ALL; /* 就在此过不去了  */
    MAC_MAC2 = MAC2_CRC_EN | MAC2_PAD_EN;
    MAC_MAXF = ETH_MAX_FLEN;
    MAC_CLRT = CLRT_DEF;
    MAC_IPGR = IPGR_DEF;

    /* Enable Reduced MII interface. */
    MAC_COMMAND = CR_RMII | CR_PASS_RUNT_FRM;

    /* Reset Reduced MII Logic. */
    MAC_SUPP = SUPP_RES_RMII;        
    for (tout = 0; tout < 100; tout++);
    MAC_SUPP = 0;

    /* Put the DM9161A in reset mode */
    write_PHY (PHY_REG_BMCR, 0x8000);

    /* Wait for hardware reset to end. */
    for (tout = 0; tout < 0x100000; tout++) 
    {
        regv = read_PHY (PHY_REG_BMCR);
        if (!(regv & 0x8000)) 
        {
          /* Reset complete */
            break;
        }
      }

    /* Check if this is a DP83848C PHY. */
    id1 = read_PHY (PHY_REG_IDR1);
    id2 = read_PHY (PHY_REG_IDR2);
    if (((id1 << 16) | (id2 & 0xF800)) == DM9161A_ID) 
    {
        /* Configure the PHY device */

        /* Use autonegotiation about the link speed. */
        write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG);
        /* Wait to complete Auto_Negotiation. */
        for (tout = 0; tout < 0x100000; tout++) 
        {
            regv = read_PHY (PHY_REG_BMSR);
            if (regv & 0x0020) 
            {
                /* Autonegotiation Complete. */
                break;
              }
        }
      }

    /* Check the link status. */
    for (tout = 0; tout < 0x10000; tout++) 
    {
        regv = read_PHY (PHY_REG_BMSR);
        if (regv & 0x0004) 
        {
            /* Link is on. */
            break;
        }
      }
    /* Configure Full/Half Duplex mode. */
    if (regv & 0x5000) 
    {
        /* Full duplex is enabled. */
        MAC_MAC2    |= MAC2_FULL_DUP;
        MAC_COMMAND |= CR_FULL_DUP;
        MAC_IPGT     = IPGT_FULL_DUP;
      }
      else 
      {
        /* Half duplex mode. */
        MAC_IPGT = IPGT_HALF_DUP;
      }

    /* Configure 100MBit/10MBit mode. */
    if ((regv & 0x6000) == 0x0000) 
    {
        /* 10MBit mode. */
        MAC_SUPP = 0;
      }
    else 
      {
        /* 100MBit mode. */
        MAC_SUPP = SUPP_SPEED;
    }

    /* Set the Ethernet MAC Address registers */
    MAC_SA0 = (MACAddr[0] << 8) | MACAddr[1];
    MAC_SA1 = (MACAddr[2] << 8) | MACAddr[3];
    MAC_SA2 = (MACAddr[4] << 8) | MACAddr[5];

    /* Initialize Tx and Rx DMA Descriptors */
    rx_descr_init ();
    tx_descr_init ();
  
    install_irq(EMAC_INT,(void *)Ethernet_Handler,EMAC_PRIO);
  
    /* Receive Broadcast and Perfect Match Packets */
    MAC_RXFILTERCTRL = RFC_UCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN;

    /* Enable EMAC interrupts. */
    MAC_INTENABLE = INT_RX_DONE | INT_TX_DONE;

    /* Reset all interrupts */
    MAC_INTCLEAR  = 0xFFFF;

    /* Enable receive and transmit mode of MAC Ethernet core */
    MAC_COMMAND  |= (CR_RX_EN | CR_TX_EN);
    MAC_MAC1     |= MAC1_REC_EN;
}

使用特权

评论回复
板凳
sodwell| | 2007-7-29 13:37 | 只看该作者

re

LS兄台我的也是和你一模一样,我用的是2131的开发板,我不知道是怎么回事,刚开始我也以为是芯片坏了,但是用ISP擦除后也能用,但是在debug的时候,一按停止就出现和你一样的情况,就再也不能debug了,必须用ISP擦除后才能用,不知道咋办?!但是我用开发光盘里的demo就没有问题,我把我的main函数替换demo里的main函数还是一样,我写的只是一个简单的main.c程序啊!

使用特权

评论回复
地板
zlgARM| | 2007-7-29 14:24 | 只看该作者

RE楼上2位

  有可能是时钟设置得太快。建议仅在RAM中调试,将ISP短接。

使用特权

评论回复
5
feifan570|  楼主 | 2007-7-29 16:09 | 只看该作者

我的时钟只设成57.6MHz

我在板上调其他的程序都没有问题,偏偏就是调void Init_EMAC(INT8U MACAddr[])出现,而且每次都是相同的位置。

使用特权

评论回复
6
zlgARM| | 2007-7-29 16:16 | 只看该作者

feifan570

您好:
    请拨打020-22644385。

使用特权

评论回复
7
feifan570|  楼主 | 2007-7-31 16:33 | 只看该作者

郁闷,问题还没有解决

不管是多简单的程序,只要调用了void Init_EMAC(INT8U MACAddr[]),都会出现这个问题。不知是不是硬件问题,但是我把PHY芯片拿掉,还是有问题。现在只能准备买个LPC2368A版的来试试。大侠们来看看是什么问题?指点一下。

使用特权

评论回复
8
feifan570|  楼主 | 2007-8-10 10:07 | 只看该作者

大侠进来看看

现在问题还是没有解决,我在一个简单的串口程序中调用还是void Init_EMAC(INT8U MACAddr[])还是出现问题,但是如不调用这个函数,怎么跑都可以。换了LPC2368还是这样。void Init_EMAC(INT8U MACAddr[])函数是来自keil的easyweb的。是硬件问题还是软件问题?

使用特权

评论回复
9
feifan570|  楼主 | 2007-8-10 10:11 | 只看该作者

重贴一下图

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

195

帖子

1

粉丝