版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
RT-ThreadlwIP协议栈培训驱动、协议栈结构RT-ThreadlwIP系统结构网络应用lwIP协议栈lwIP移植RT-ThreadRTOS以太网发送任务以太网接收任务网络驱动程序RT-ThreadlwIP网络驱动03_single_ethernet\drivers\fm3_emac.c03_single_ethernet\drivers\fm3_emac.h03_single_ethernet\drivers\eth_driver.c03_dual_ethernet\drivers\fm3_emac.c03_dual_ethernet\drivers\fm3_emac.h03_dual_ethernet\drivers\eth_driver.cRT-ThreadlwIP驱动结构fm3_emac_hw_initrt_device::init
openclosereadwriteeth_dstrevice::uct
netif
*netif;etheth_rx_txeth_device_init(eth_device)rt_device_registerRT-ThreadlwIP驱动结构netifnetifnetif_listtcp
threadtcpip_init_done_callbacknetif_adddhcp_startnetif_set_linkupRT-ThreadlwIP驱动结构etxtcp
threadetx
threadlink_output(netif,
p)eth_tx_thread_entryenetif->eth_tx(p);rt_sem_releaseRT-ThreadlwIP驱动结构erxEMAC
ISReth_device_readyerx
threadtcp
threadeth_rx_thread_entrynetifdevice->eth_rx(p)netif->input(p,
netif);//
tcpip_input(p,
netif);RT-ThreadlwIP驱动总结驱动结构体#define
MAX_ADDR_LEN6struct
rt_skeleton_eth{/*
inherit
from
ethernet
device
*/struct
eth_device
parent;/*
interface
address
info.
*/rt_uint8_t
dev_addr[MAX_ADDR_LEN];};static
struct
rt_skeleton_eth
_skeleton_device;RT-ThreadlwIP驱动总结设备接口static
rt_err_t
rt_skeleton_init(rt_device_t
dev){return
RT_EOK;}static
rt_err_t
rt_skeleton_open(rt_device_tdev,
rt_uint16_t
oflag){return
RT_EOK;}static
rt_err_t
rt_skeleton_close(rt_device_t
dev){return
RT_EOK;}static
rt_size_t
rt_skeleton_read(rt_device_t
dev,
rt_off_t
pos,
void*
buffer,rt_size_t
size){rt_set_errno(-RT_ENOSYS);return
0;}static
rt_size_t
rt_skeleton_write
(rt_device_t
dev,
rt_off_t
pos,
const
void*buffer,
rt_size_t
size){rt_set_errno(-RT_ENOSYS);return
0;}RT-ThreadlwIP驱动结构设备控制static
rt_err_t
rt_skeleton_control(rt_device_t
dev,
rt_uint8_t
cmd,
void
*args){struct
rt_skeleton_eth
*eth;eth
=
(struct
rt_skeleton_eth*)dev;RT_ASSERT(eth
!=
RT_NULL);switch
(cmd){case
NIOCTL_GADDR:/*
get
mac
address
*/if
(args)
rt_memcpy(args,
_skeleton_device.dev_addr,
6);else
return
-RT_ERROR;break;default
:break;}return
RT_EOK;}RT-ThreadlwIP驱动总结中断通知void
rt_skeleton_isr(int
irqno){rt_uint32_t
status;/*
read
status
*//*
Received
the
coming
packet
*/if
(status){/*
disable
receive
interrupt
*//*
a
frame
has
been
received
*/eth_device_ready(&(_skeleton_device.parent));}/*
Transmit
Interrupt
check
*/if
(status){}}RT-ThreadlwIP驱动总结接收struct
pbuf
*rt_skeltion_rx(struct
rt_device
*device){struct
pbuf
*p
=
RT_NULL;rt_uint32_t
pkt_len;/*
get
rx
packet
length
*/if
(pkt_len
>
0){p
=
pbuf_alloc(PBUF_LINK,
rx_len,
PBUF_RAM);/*
read
packet
to
pbuf
*/}else{/*
enable
interrupt
*/}return
p;}RT-ThreadlwIP驱动结构总结发送rt_err_t
rt_skeletion_tx(struct
rt_device
*device,
struct
pbuf*
p){struct
pbuf*
q;for
(q
=
p;
q
!=
RT_NULL;
q
=
q->next){/*
write
pbuf
to
device
*/}/*
wait
transmition
complete
*/return
RT_EOK;}MB9BF618网络驱动MB9BF618内置双EMAC,每个EMAC都单独有DMA。DMA描述符(初始化成DMA链)StatusBufferSizeBufferAddrNextDescAddrStatusBufferSizeBufferAddrNextDescAddrStatusBufferSizeBufferAddrNextDescAddrDescriptor
#1Descriptor
#2Descriptor
#3MB9BF618网络驱动发送时流程获取信号量(tx_buf_free)写入pbuf到DMA
buffer中获得DMA
buffer触发发送DMADMAbuffer换下一个位置发送完成中断释放信号量(tx_buf_free)MB9BF618网络驱动接收流程检查当前DMAbuffer状态分配pbuf,并读出数据到pbuf获得有效数据长度清除DMA
buffer状态DMAbuffer换下一个位置接收中断eth_device_ready();lwIP代码结构tcp主线程,tcpip.c入口:void
tcpip_thread(void*
arg)case
TCPIP_MSG_API:break;case
TCPIP_MSG_INPKT:break;case
TCPIP_MSG_NETIFAPI:break;case
TCPIP_MSG_TIMEOUT/UNTIMEOUT:break;case
TCPIP_MSG_CALLBACK:break;case
TCPIP_MSG_CALLBACK_STATIC:break;接收到数据包。回调消息。lwIP代码结构应用TCPIPETX网卡lwip_sendtoTCPIP_API_MSGnetif->outputethernetif_linkoutputfm3_emac_txlwIP代码结构以邮箱为基础;大多数工作都在tcp线程中完成;很多类似这样的代码:struct
api_msg
msg;msg.function
=
do_send;msg.msg.conn
=
conn;msg.msg.msg.b
=
buf;err
=
TCPIP_APIMSG(&msg);lwIP
pbuf,buffer管理nextpayloadtotal
lengthlengthtypeflagsrefpayloadnextpayloadtotal
lengthlengthtypeflagsrefpayloadfreespacenextpayloadtotal
lengthlengthtypeflagsreffreespacepayloadlwIP
pbuf,buffer管理struct
pbuf*
pbuf_alloc(pbuf_layer
layer,u16_t
length,
pbuf_type
type);u8_t
pbuf_free(struct
pbuf
*p);PBUF分配和释放u16_t
pbuf_copy_partial(struct
pbuf
*bu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科目一扣分题顺口溜记忆口诀表
- 2024年电影创作:《废墟的召唤》课件灵感探源
- 融入AI技术的《千人糕》课件:2024年教学新体验
- 二维功率因数校正技术培训:PFC2D课件详解与2024发展趋势
- 2024年《条据》公开课教案:创新教学模式
- 2024年ERP沙盘教案:打造高效率企业
- 带式压滤机操作说明
- 人教版八年级上册信息技术期末试题带答案
- 2024年特殊教育需求:《教育学原理》课件个性化改编
- 系统学习TBC软件:2024版培训教程
- 2022版小学道德与法治课程标准测试题
- GB/T 27021.1-2017合格评定管理体系审核认证机构要求第1部分:要求
- GB/T 22796-2021床上用品
- 中国联通LAN工程施工及验收规范
- 中间表模式接口相关-住院与his-adt方案
- 临床PCR检验的室内质控方法课件
- 计算机解决问题的过程-优质课课件
- 作文讲评-“忘不了……”课件
- 深基坑安全管理(安全培训)课件
- 12月4日全国法制宣传日宪法日宪法知识科普宣教PPT教学课件
- 血液透析营养管理课件
评论
0/150
提交评论