This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28M35x板上移植enet_uip_m3例程 - uDMA的无法响应中断的问题



硬件平台:  F28M35H52C的自主开发的板子

                    根据自己的硬件平台修改了  set_pinout_f28m35x.c  .h 文件实现io的配置

软件开发现状:

                      通过例程确认了:已经实现了enet、led、uart等接口的正确。

                       例程实现led的blinky_m3、enet_lwip\enet_ptpd_m3,双核共享ram的等例程。

目前在开发整体的嵌入式软件,需要把各个接口整合起来,具体做法,是

基于双核例程,manage_ram为基础逐步添加新的驱动,最终形成目标的软件。

发错分论坛了,原文在

www.deyisupport.com/.../67613.aspx

  • 但是基于RAM_management的例程扩展,逐步添加了LED、UART接口,但是在添加enet-uip-m3的例程,发现问题。

    (备注:单独的enet-uip-m3例程已经实现并确认)

    基本过程:

     1 -将源文件的enet-uip.c拆分为2个部分, 一个enet-uip.h,主要保存全局配置的宏定义。一个整合到主题main文件(RAM_management_m3.c)

          详见附件。

    2- enet-uip移植过程,就个人理解,依次是下列步骤

        ① 硬件初始化:

              包括ENET硬件:gpio端口配置(set_pinout_f28m35x.c )、外设时钟使能、配置寄存器

              包括systick系统时钟初始化

              uDMA的初始化,用于发送和接收聚聚

        ② uip的初始化,包括mac地址、静态ip

        ③全局控制标志g_ulFlags的设置。

        ④ 配置  EthernetIntHandler 为 处理  INT_ETH(网口中断)、INT_UDMA(udma软件中断)的ISR

            SysTickIntHandler()为系统节拍的ISR,为uip 的timer提供时间计数

         ⑤实现机理:EthernetIntHandler中断例程修改标志位,main-loop根据标志位做具体操作。

         uip的移植文章很多了,F28M35基本上就是类似。

         通过EthernetIntHandler提供驱动,根据中断源修改全局状态标志g_ulFlags,

        main函数有个mainloop循环,轮询各个g_ulFlags来处理数据。

    EthernetPacketGetDMA 函数中通过    uDMAChannelRequest(UDMA_CHANNEL_ETH0RX);

    来软件中断  udma,发起一个dma传送,接收网络数据,

    正确的原例程,会引起 EthernetIntHandler 的中断响应。

    而我修改过的,则一直停留在下一个语句。

    // Wait for the previous transmission to be complete.
    while(HWREGBITW(&g_ulFlags, FLAG_RXPKTPEND) == 1)

    已经做过的尝试:

    1 debug运行检查和对比了正确和错误的UDMA寄存器情况:(主要全一样)

    当 运行过 uDMAChannelEnable(UDMA_CHANNEL_ETH0RX);

          正确的源程序:                                          错误的

    DMASWREQ  = 0000 0000(不变)       DMASWREQ  = 0000 0040(表示通道6,符合记录)

    DMAENASET =>0000 0000 (变化)             

    DMAENACLR =>0000 0000(变化)  

    2 观察COREPERIPH寄存器

    正确的源程序

    uDMAChannelEnable指令后                          == 》    进入EthernetIntHandler后

    NVIC_PEND1    => 0x0000 4000                                  NVIC_PEND1    => 0x0000 0000

    NVIC_UNPED1    => 0x0000 4000                              NVIC_UNPED1    => 0x0000 0000

    NVIC_ACTIVE1    => 0x0000 0000                              NVIC_ACTIVE1    => 0x0000 4000

    而不正确的程序,则完全没有变化。

    问题是:

    1 - 基本上拷贝源程序,为什么会有这样的问题。

    2 - m3核的中断寄存器是怎么个机理。怎么调试,确认。

  • 没有人知道么?

    1 怀疑是不是全局中断被屏蔽,但是可以跳入systickhandle的,说明全局中断还是使能的。

        原来一直做的是铺铜c2000,对于F28M35x的M3核,中断系统不熟悉,有没有高手解惑。

    2 第二步怀疑没有跳转到isr,因为uDMA控制寄存器组对应的寄存器DMASWREQ  是标志置位了的。

        因为拷贝ram_例程的startup_ccs.c,难道中断向量跳转不一致。

        有没有跟踪中断跳转的方法。

  • 单步跟踪调试,寄存器太多,眼花了。高手指点下,

    m3中,中断控制寄存器主要是哪几个?或者介绍个资料看看。

    好像有个xPSR的EXCEPTION块,但是不明白和NVIC的关系。

    按道理,应该都是,一个全局的使能寄存器、一个外设自身的控制中断的寄存器,一个挂起标志位,一个清除的寄存器。

    。。。求指点。

  • 你好,我是一个初学者,关于enet_uip移植有一些问题,能请教一下你么,我的QQ是1579474052

  • 同样在调试,移植uip_m3程序,一块交流下吧,qq:981312251.

  • 遇到与楼主相同的问题,楼主解决了吗?同求答案。谢谢楼主