打印

(香主请进)移植Ethernet出现无法进入中断,求指点

[复制链接]
7902|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 aizhixi106 于 2013-6-2 21:48 编辑

背景:我有一个STM32F107的板子, 调以太网没有问题, 能Ping通,可以Telnet ,可以打开板子上面的网页。

目前在做STM32F439的一个项目:
所以把STM32F107的以太网程序移植到STM32F439上,目前出现无法进入中断。(网口LED是亮的,发送数据LED也是亮的),证明硬件没有问题,
时钟使用外接晶振,25MHZ,我测过RXCLK TXCLK 也都是25MHZ,所以时钟没有问题。
一般情况下出现进入不了中断有两种情况:
第一种:PHY 配置不正确,导致无法接收到数据,无法进入中断。
所以第一件事件,我去查了PHY的连接,这个端口是没有问题的,(按照官方的给的接口来配置)。
然后我觉得可能我GPIO配置有问题,我是这样配置的,
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);
使用MII模式, 总共用到PA0,1,2,7     PB8,      PC1,2,3,4,5,            PG11,13,14 PH6,7 PI10;

我打开了所有引脚的第二功能,使能相应的时钟,我觉得配置没有问题,
然后我去配置MAC 和DMA 使用static void ETH_MACDMA_Config(void)
这个里面初始化MAC 和DMA的配置,
最后读
EthInitStatus = ETH_Init(Ð_InitStructure, DP83848_PHY_ADDRESS);
关于DP83848_PHY_ADDRESS 我设置的是0x01 ,(我查过DP84848的数据手册 没有问题)
最后使能
ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R |ETH_DMA_IT_T,ENABLE);
ETH_Start();
这个之后我读取过PHY SR的状态寄存器值是0x4115,这个值是对的,我对过寄存器,100M 全双工模式。也是没有问题,
第二:没有进入中断,可能的情况是中断使能位没有打开,中断向量表配置不对,但是我确实是打开。
void NVIC_Configuration(void)
{
   NVIC_InitTypeDef   NVIC_InitStructure;
  /* Enable the Ethernet global Interrupt  */
  NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);   
}
这个是中断的配置,也没有问题,
ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R |ETH_DMA_IT_T,ENABLE);
ETH_Start();
使能我已经打开,我断点调试,看过DMAIER的寄存器的值,对应到相应的位,已经开了接收中断和发送中断。
LWIP使用的是1.3.1的,IP地址设置在同一个网关里面。
定时器使用系统时钟定时10MS。处理周期响应。

程序框架
void main
{
  eth_config();  LwIP_Init();
  HelloWorld_init();
// tcp_echoserver_init();
  while(1)
  {
         //LwIP_Periodic_Handle(LocalTime);        
           System_Periodic_Handle();
  }
}

void eth_config()
{
  RCC_ClocksTypeDef RCC_Clocks;

//enable clock
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx |
                        RCC_AHB1Periph_ETH_MAC_Rx, ENABLE);  
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB |
                         RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOD|
                          RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG|RCC_AHB1Periph_GPIOH
                            | RCC_AHB1Periph_GPIOI, ENABLE);
  NVIC_Configuration();
  GPIO_config();
  Ethernet_Security();
  ETH_MACDMA_Config();
  if (EthInitStatus == 0)
  {
     LCD_DisplayStringLine(LCD_LINE_8, (uint8_t*)" Ethernet Init failed ");
     while(1);
  }
   Eth_Link_PHYITConfig(DP83848_PHY_ADDRESS);
   SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
   SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);  //150M 主频如果使用RMII 模式 DIV 3 =50MHZ 为PHY 提供时钟

   NVIC_SetPriority (SysTick_IRQn, 1);
}
分析来分析去,觉得不应该不进入中断,但实际情况是不进入中断,但是奇怪的是有些时候又能进入中断,(只有很少情况下进入一两次)。
我Ping ip 无响应。电脑提示网络连接有问题。
使用ARP -A 无法解析IP地址和MAC地址。
网线选的crossover table。MCU STM32F439. IAR 版本6.4
感觉可能还是哪个地方配置不对,但是现在无法想明白,哪里不对,求指点。(LWIP协议栈 目前没有动)
连接后时候这个情况,


ping不通是正常的,但是不知道为什么会出现感叹号,我用STM32F107没有任何问题,ping ip时关闭无线网络,设置固定IP。
在ST的E2E论坛发了帖子,还没有人回答。
求点拨,哪里配置不对~~~









沙发
aizhixi106|  楼主 | 2013-5-28 20:21 | 只看该作者
自己顶顶吧~··

使用特权

评论回复
板凳
mmuuss586| | 2013-5-28 21:38 | 只看该作者
STM32F439:什么地方弄的?

使用特权

评论回复
地板
aizhixi106|  楼主 | 2013-5-28 22:24 | 只看该作者
mmuuss586 发表于 2013-5-28 21:38
STM32F439:什么地方弄的?

ST 送的~~~

使用特权

评论回复
5
mmuuss586| | 2013-5-28 22:30 | 只看该作者
aizhixi106 发表于 2013-5-28 22:24
ST 送的~~~

自己申请的还是?
我也想弄几片啊

使用特权

评论回复
6
aizhixi106|  楼主 | 2013-5-28 22:41 | 只看该作者
这个估计不大可能,你可以申请其它的,这个芯片目前买不到,我们是以公司名义申请的~~~

使用特权

评论回复
7
aizhixi106|  楼主 | 2013-5-29 13:12 | 只看该作者
自己再顶顶吧~~~木有人回复~~~

使用特权

评论回复
8
aizhixi106|  楼主 | 2013-5-29 22:45 | 只看该作者
自己再顶顶吧

使用特权

评论回复
9
aizhixi106|  楼主 | 2013-5-31 08:49 | 只看该作者
自己再顶顶~~~~~

使用特权

评论回复
10
aizhixi106|  楼主 | 2013-6-2 21:49 | 只看该作者
自己再顶顶~~~

使用特权

评论回复
11
aizhixi106|  楼主 | 2013-6-4 14:35 | 只看该作者
自己顶顶吧,分析了一圈,刚开始的时候觉得LWIP协议栈有问题,后来用Wireshark 抓包,抓不到,说明单片机不能reply电脑发出的数据包,证明还是因为没有进入中断,无法收到数据包,所以肯定不会有反应,现在问题缩小到,要么是单片机的配置有问题,要么是PHY芯片配置有问题,导致不能进入中断,但是,奇怪的是有些时候又能进入中断,这个就奇怪了~~~~

使用特权

评论回复
12
water0313| | 2013-6-19 09:49 | 只看该作者
楼主是不一直在用407做以太网部分,我目前想用407完成以太网部分MAC与DMA的配置,但是不需要涉及协议,只是通过中断的方式发送报文,但一直配置的不对,想向楼主请教一下

使用特权

评论回复
13
aizhixi106|  楼主 | 2013-7-2 09:49 | 只看该作者
怎么不用协议栈呢?这个不明白? 你怎么解析数据包呢?

使用特权

评论回复
14
gaopan19| | 2015-2-11 16:26 | 只看该作者
楼主问题解决没有

使用特权

评论回复
15
搞IT的| | 2015-2-16 22:00 | 只看该作者
这款板子还没用过,不知道是否好用呀

使用特权

评论回复
16
icecut| | 2015-2-17 14:15 | 只看该作者
顶一下,不熟悉,用示波器抓中断信号试试

使用特权

评论回复
17
zh113214| | 2015-2-28 20:57 | 只看该作者
帮楼主顶一个

使用特权

评论回复
18
1018974736| | 2015-7-28 12:06 | 只看该作者
我是在群里看见你的,我的事加入了RT_thread内核后中断无法使用,而开始的时候中断可以使用,表明中断配置是没错的,但是无法进入中断,我的情况是因为加入RT_thread内核前自身有一个tick中断,而加入RT_thread 内核后,由于会是用到线程各部分,所以它自身也有个tick时钟中断,但是这个中断时根据每个线程来设置的,从代码中可以看出来这一点,所以导致了我之前的tick时钟中断无**常使用,从而导致了中断也无法使用。我不知道你那是什么情况,仅做参考吧

使用特权

评论回复
19
O_o桃子o_O| | 2016-3-19 16:25 | 只看该作者
楼主您的问题解决了吗 后辈遇到了一摸一样的问题

使用特权

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

本版积分规则

1

主题

15

帖子

0

粉丝