Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
nuc980
【NK-980IoT评测】EMAC之2:功能模块的硬件介绍
发布于 2022-04-03 06:18:50 浏览:1238
订阅该版
安装RT-THREAD STUDUI后,已经适配了NUC980芯片。基于NUC980IOT板卡建一个工程后,RTT中的board.h-》NuMicro.h-》nu_emac.h-》emac_reg.h可以理解寄存器的用处。 1、NUC980IOT上EMAC的硬件连接如下 ![图片11.png](https://oss-club.rt-thread.org/uploads/20220403/1ae06cb21d7e7c5283f0663e4ff6c82c.png.webp) UNC980的硬件连线基本固化了,使用PE0-9连接IP101GR,不错的PHY ![图片12.png](https://oss-club.rt-thread.org/uploads/20220403/b4071f7c8db4417c12f631862b78d57f.png.webp) 硬件上通过RMII接口与PHY连接,通过E_MDC和E_MDIO读写PHY内部寄存器,IP101G地址由PHY_AD0/3来决定,也支持IEEE 802.3定义的基本寄存器,所以不同厂家的 PHY 有可能使用相同的驱动程序控制。 2、NUC980的EMAC工作原理 EMAC中的cam用于接收包的MAC地址比对以提高接收效率,有16 组cam,其中(CAM0~CAM12)可地址比对,(CAM13~CAM15 )控制包使用。有关的寄存器如下,功能说明参见emac_reg.h。工作原理此处不写了,只要知道设置好cam后EMAC就能把封包放置到接收描述符中即可。包括特定MAC地址、广播/组播封包、暂停封包及魔术封包等。 CPU和EMAC是通过接收描述符来交换接收封包的信息。驱动程序预先准备好一些接收描述符, 当 CAM决定封包需要接收后, 封包就会接收至描述符所指定的内存地址, 封包状态及长度被储存至描述符中。每个接收描述符占四个32位字组如下表, 所有的接收描述符会组成一个单向循环链表。RXDES0[31]记录描述符由谁使用,1由EMAC使用, EMAC会通过RXDES1的指针处理接收到的封包,并将封包长度放到 RXDES0[15:0], 将接收到的封包状态如有无错误等放到RXDES0[30:16],并将RXDES0[31]清为0表示此描述符有收到封包。最后EMAC通过RXDES3找到下一个描述符,若下一个描述符的RXDES0[31]为0, 代表所有的接收描述符都已被使用, 此时, EMAC 会停止接收状态机, 直到描述符被释放并重新启动状态机为止。当在内存中的接收描述符初始化完成后, 需要将第一个描述符的地址填进 EMAC_RXDLSA寄存器以通知EMAC描述符的所在,之后将RXON(EMAC_MCMDR[0])设1, 并填写任意值进EMAC_RSDR寄存器即可起始接收状态机开始接收封包。 ![图片13.png](https://oss-club.rt-thread.org/uploads/20220403/9d7f06ce0a1e1b0090083b39e865c954.png) 参见nu_emac.h的 typedef struct { uint32_t u32Status1; /*!< Status word 1 */ uint32_t u32Data; /*!< Pointer to data buffer */ uint32_t u32Status2; /*!< Status word 2 */ uint32_t u32Next; /*!< Pointer to next descriptor */ uint32_t u32Backup1; /*!< For backup descriptor fields over written by time stamp */ uint32_t u32Backup2; /*!< For backup descriptor fields over written by time stamp */ uint32_t u32Reserved1; /*!< For Reserved */ uint32_t u32Reserved2; /*!< For Reserved */ } EMAC_DESCRIPTOR_T; 再次封装为EMAC_MEMMGR_T typedef struct { EMAC_T *psEmac; uint32_t u32TxDescSize; uint32_t u32RxDescSize; EMAC_DESCRIPTOR_T *psRXDescs; EMAC_FRAME_T *psRXFrames; EMAC_DESCRIPTOR_T *psTXDescs; EMAC_FRAME_T *psTXFrames; EMAC_DESCRIPTOR_T *psCurrentTxDesc; EMAC_DESCRIPTOR_T *psNextTxDesc; EMAC_DESCRIPTOR_T *psCurrentRxDesc; } EMAC_MEMMGR_T; ![图片14.png](https://oss-club.rt-thread.org/uploads/20220403/1d98a98a29b4173025dd6841cbf5dde2.png) 3、OK,I like it. void EMAC_EnableTS(EMAC_T *EMAC, uint32_t u32Sec, uint32_t u32Nsec); void EMAC_DisableTS(EMAC_T *EMAC); void EMAC_GetTime(EMAC_T *EMAC, uint32_t *pu32Sec, uint32_t *pu32Nsec); void EMAC_SetTime(EMAC_T *EMAC, uint32_t u32Sec, uint32_t u32Nsec); void EMAC_UpdateTime(EMAC_T *EMAC, uint32_t u32Neg, uint32_t u32Sec, uint32_t u32Nsec); void EMAC_EnableAlarm(EMAC_T *EMAC, uint32_t u32Sec, uint32_t u32Nsec); void EMAC_DisableAlarm(EMAC_T *EMAC);
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
zt1234
这家伙很懒,什么也没写!
文章
7
回答
0
被采纳
0
关注TA
发私信
相关文章
1
ENV下的NUC980能移动到RT STUDIO上吗?
2
NUC980 生成 UFFS 文件系统镜像
3
怎样生成基于NUC980、rt_thread系统的板级支持包(MDK开发环境)
4
这个接口在哪个文件里面的。
5
NUC980IOT开发板rt工程创建文件
6
NUC980之EMAC功能模块的硬件介绍
7
nuc980DDR和MDK的IRAM是怎样的映射关系
8
ncu977 跑rtthread 操作io没有反应
9
NUC980开发板生成Keil工程找不到Device和编译出错
10
rtthread studio创建NUC980工程无法设置RTC日期和时间
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
三世执戟
7
个答案
1
次被采纳
KunYi
5
个答案
1
次被采纳
RTT_逍遥
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
JonasWen
1
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
3
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部