完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
正在使用W5500的中断机制,发现wizchip_socket.c(原ioLibrary中为socket.c)文件的wizchip_send(原send)函数中发送数据前存在对中断Sn_IR_SENDOK的处理和判断,因此不能在中断处理程序/线程中对SENDOK进行清除,否则会导致数据发送不出。 但我认为这样是否会导致其他中断在此期间无法及时被响应比如RECV或其他端口的SENDOK中断。 通过使用逻辑分析仪测量INT和SPI,发现时序是这样的: 由于可能需要用到多个端口,同时传输数据的情况下,请问这种情况下应该如何处理? wizchip_send.c: int32_t wizchip_send(uint8_t sn, uint8_t * buf, uint16_t len) { uint8_t tmp=0; uint16_t freesize=0; CHECK_SOCKNUM(); CHECK_SOCKMODE(Sn_MR_TCP); CHECK_SOCKDATA(); tmp = getSn_SR(sn); if(tmp != SOCK_ESTABLISHED && tmp != SOCK_CLOSE_WAIT) return SOCKERR_SOCKSTATUS; if( sock_is_sending & (1< tmp = getSn_IR(sn); if(tmp & Sn_IR_SENDOK) { setSn_IR(sn, Sn_IR_SENDOK); //M20150401 : Typing Error //#if _WZICHIP_ == 5200 #if _WIZCHIP_ == 5200 if(getSn_TX_RD(sn) != sock_next_rd[sn]) { setSn_CR(sn,Sn_CR_SEND); while(getSn_CR(sn)); return SOCK_BUSY; } #endif sock_is_sending &= ~(1< else if(tmp & Sn_IR_tiMEOUT) { wizchip_close(sn); return SOCKERR_TIMEOUT; } else return SOCK_BUSY; } ...... } 暂时只能修改源代码了 |
|
相关推荐
2个回答
|
|
|
|
|
|
好的,我现在修改了send函数,暂时可以使用了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
643 浏览 0 评论
2710 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2303 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2778 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
30071 浏览 11 评论
72457 浏览 21 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 17:31 , Processed in 0.745974 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号