完善资料让更多小伙伴认识你,还能领取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函数,暂时可以使用了。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
999 浏览 0 评论
2781 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9368 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2895 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2300 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:53 , Processed in 0.618760 second(s), Total 44, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
83