完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*I2c中断函数,每接收或发送一个数据产生一次中断*/
void i2c_interrupt_func(....) { ....... /*p_cur_msg->cnt_transferred这个数起始值为-1 *每传输完成一个数据+1 */ p_cur_msg->cnt_transferred++; /*最后一次数据传输完毕将产生一个中断, 此时p_cur_msg->cnt_transferred==p_cur_msg->len*/ ....... else { /* 发出停止信号 */ IICSTAT = 0x90; IICCON &= ~(1<<4); delay(1000); } } int do_master_rx(...) { ..... /* 循环等待中断处理完毕 */ while ( p_cur_msg->cnt_transferred != p_cur_msg->len); ..... } /*我的问题是: 1,传输完最后一个数据,产生中断,p_cur_msg->cnt_transferred==p_cur_msg->len条件成立, 此时cpu是继续执行完中断程序呢? 还是立即跳到do_master_rx函数中, 从while ( p_cur_msg->cnt_transferred != p_cur_msg->len)语句中跳出往下执行呢? 2,如果是立即跳到do_master_rx中,那么是不是最后一次产生中断,p_cur_msg->cnt_transferred++后面的语句都执行不到了呢? */ |
|
相关推荐
1个回答
|
|
1. 中断程序不可能调用do_master_rx
2.流程是这样的: do_master_rx 循环过程中,发生了中断, CPU跳去执行中断程序; 中断程序执行完后,恢复被打断的do_master_rx,do_master_rx继续执行 |
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2177 浏览 6 评论
1982 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4540 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 02:16 , Processed in 0.537407 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号