1
完善资料让更多小伙伴认识你,还能领取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上跑会出现奇怪的现象?
2187 浏览 6 评论
1987 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4545 浏览 1 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 04:01 , Processed in 0.943832 second(s), Total 77, Slave 58 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号