硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5058|回复: 2
收起左侧

[STM32CubeF4] STM32F4 以太网发送描述符问题 请教

[复制链接]

1

主题

0

回帖

5

积分

新手上路

积分
5
发表于 2018-10-14 00:17:05 | 显示全部楼层 |阅读模式
关于STM32F407 以太网 发送描述符。一共2个问题
问题一:
如图:
1.红圈处    “获取一个DMA描述符”  指是把当前 描述符指针指向 某个描述符?还是 要在指向某个描述符后 还要更改 描述符的从属关系,把描述符的从属关系改为  DMA发送引擎所拥有?(置位 使TDES0[31]=1)

2. 绿圈处    如果是 要程序来置位  TDES0[31]=1,那么在这里 为什么还要判断 DMA描述符 是不是 属于DMA引擎(TDES0[31]==1)。DMA描述符 是块内存单元  难道还有置位 不成功的时候?

我看您程序里处理如下:
void send_frame (OS_FRAME *frame)
{
.................................
  while (Tx_Desc[j].CtrlStat & DMA_TX_OWN);  //等待上一帧数据发送完毕。
................................
}
/*****************************************************************************************/
StmCUBE 生成的程序如下:
static err_t low_level_output(struct netif *netif, struct pbuf *p)
{


  if((DmaTxDesc->Status & ETH_DMATXDESC_OWN) != (uint32_t)RESET)
      {
        errval = ERR_USE;
        goto error;
      }
   ..................................
   error:
  
  /* When Transmit Underflow flag is set, clear it and issue a Transmit Poll Demand to resume transmission */
  if ((heth.Instance->DMASR & ETH_DMASR_TUS) != (uint32_t)RESET)
  {
    /* Clear TUS ETHERNET DMA flag */
    heth.Instance->DMASR = ETH_DMASR_TUS;


    /* Resume DMA transmission*/
    heth.Instance->DMATPDR = 0;
  }

}
相比较而言,  CUBE生成的程序 多了一次让发送 进行一次轮询而且是在 在发送下溢的情形下 。  有没有一种可能,发送DMA引擎 挂掉了,当前描述符一直是DMA所有的状态,这样 发送不就 卡死了?








问题二:
     1.还有相关的 异常中断   DMASR寄存器中的     比如 AHB错误等 。如下的 这些个中断 哪个要处理,要怎么处理。  似乎文档上没有交代清楚。
     2.这些个 异常中断 怎么测试呢?怎么模拟出这些个异常 ,只有这些异常能 模拟出来 ,才知道 程序处理的对不对


位 15 AIS:异常中断汇总 (Abnormal interrupt summary)
当使能 ETH_DMAIER 寄存器中对应的中断位时,异常中断汇总位的值是以下位的逻辑或运
算结果:
— ETH_DMASR [1]:发送过程停止 (Transmit process stopped)
— ETH_DMASR [3]:发送 jabber 超时 (Transmit jabber timeout)
— ETH_DMASR [4]:接收 FIFO 上溢 (Receive FIFO overflow)
— ETH_DMASR [5]:发送下溢 (Transmit underflow)
— ETH_DMASR [7]:接收缓冲区不可用 (Receive buffer unavailable)-------------------这个应该是正常的不用处理
— ETH_DMASR [8]:接收过程停止 (Receive process stopped)
— ETH_DMASR [9]:接收看门狗超时 (Receive watchdog timeout)
— ETH_DMASR [10]:提前发送中断 (Early transmit interrupt)--------------------------这个应该是正常的不用处理
— ETH_DMASR [13]:致命总线错误 (Fatal bus error)



                                                                          盼复  谢谢!




           

STM32F4以太网Tx_DMA

STM32F4以太网Tx_DMA
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2018-10-14 03:04:44 | 显示全部楼层
楼主可以先看下我们的RL-TCPnet教程的第5章,虽然是直接的寄存器配置,但是注释比较详细,比Cube这个好理解的多。

http://www.armbbs.cn/forum.php?m ... &extra=page%3D1

回复

使用道具 举报

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2018-10-14 16:51:15 | 显示全部楼层
谢谢  eric2013。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 07:28 , Processed in 0.193746 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表