硬件平台: F28M35H52C的自主开发的板子
根据自己的硬件平台修改了 set_pinout_f28m35x.c .h 文件实现io的配置
软件开发现状:
通过例程确认了:已经实现了enet、led、uart等接口的正确。
例程实现led的blinky_m3、enet_lwip\enet_ptpd_m3,双核共享ram的等例程。
目前在开发整体的嵌入式软件,需要把各个接口整合起来,具体做法,是
基于双核例程,manage_ram为基础逐步添加新的驱动,最终形成目标的软件。
硬件平台: F28M35H52C的自主开发的板子
根据自己的硬件平台修改了 set_pinout_f28m35x.c .h 文件实现io的配置
软件开发现状:
通过例程确认了:已经实现了enet、led、uart等接口的正确。
例程实现led的blinky_m3、enet_lwip\enet_ptpd_m3,双核共享ram的等例程。
目前在开发整体的嵌入式软件,需要把各个接口整合起来,具体做法,是
基于双核例程,manage_ram为基础逐步添加新的驱动,最终形成目标的软件。
但是基于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核的中断寄存器是怎么个机理。怎么调试,确认。
调试思路如下,高手大侠帮忙提点:
uDMA的软中断无法跳入,怀疑几种可能;
1 系统中断全局屏蔽 ---- 因为systickhandle可以响应,排除
2 对应uDMA中断允许没有置位
3 被高优先级的中断霸占;
4 程序isr例程跳转表错误
5 前面的中断,没有清楚标志位。
我与你的情况差不多,但用F28M35x_generic_wshared_M3_RAM.cmd在内存调试正常,但用F28M35x_generic_wshared_M3_Flash.cmd在Flash中就停在和你一样的位置。你解决了吗?帮顶一下。