完善资料让更多小伙伴认识你,还能领取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函数,暂时可以使用了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
883 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3025 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1409 浏览 0 评论
2039 浏览 0 评论
1574 浏览 0 评论
75142 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 17:40 , Processed in 0.552353 second(s), Total 41, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号