我是靠谱客的博主 欣慰溪流,这篇文章主要介绍【2】中断方式和查询方式的区别,现在分享给大家,希望可以做个参考。

1、中断方式:

接收数据时,MCU转入中断服务程序,再处理接收到的数据;

CMT2300A接收数据的中断:

        检测RX_FIFO_TH 中断,一旦有效表示FIFO 已经被填入预设的数据长度,就可以开始读取,这样适合数据包长度不等于FIFO 深度,并且用户要做接收完整数据包之后,才读取FIFO 的情况。

2、查询方式:

查询MCU状态寄存器中的接收缓冲器状态位,再对数据进行处理;

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//SPI驱动CMT2300A发送数据: //使能写FIFO CMT2300A_EnableWriteFifo(); //把【pBuf+sendlen】写到CMT2300的FIFO中,一次写64byte CMT2300A_WriteFifo(pBuf+sendlen, 64); //进入发送状态 CMT2300A_GoTx(); delay = 1000; while(1) { //cmt2300a_寄存器中查询到发送完成标识:TX_DONE if(CMT2300A_MASK_TX_DONE_FLG & CMT2300A_ReadReg(CMT2300A_CUS_INT_CLR1)) { break; } }

3、中断和查询方式的区别:

        中断方式,MCU可以执行别的任务,而查询方式只能进行接收查询,在此期间不能执行其他任务,在实现的区别当然是:是否把接收中断使能位置为有效。

4、串口通讯中的查询方式和中断方式:

查询方式:   发送数据——先发后查; 

                     接收数据——先查后收。

中断方式:   发送数据——发送、等待中断、中断中发送;

                     接收数据——等待中断、在中断中接收。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//先发送数据 CMT2300A_GoTx();  //再查询状态寄存器  if(CMT2300A_MASK_TX_DONE_FLG &CMT2300A_ReadReg(CMT2300A_CUS_INT_CLR1))      {                            break;                     }   //先查询寄存器的标志位:完整接收到一包数据,再接收 if(CMT2300A_MASK_PKT_OK_FLG & CMT2300A_ReadReg(CMT2300A_CUS_INT_FLAG)) { //CMT2300A_GoStby(); //读FIFO中的数据,接收到的数据先存储在FIFO中 CMT2300A_ReadFifo(pBuf,len); CMT2300A_ClearRxFifo(); CMT2300A_ClearInterruptFlags(); CMT2300A_EnableReadFifo(); //进入接收状态 CMT2300A_GoRx(); return 1; }

最后

以上就是欣慰溪流最近收集整理的关于【2】中断方式和查询方式的区别的全部内容,更多相关【2】中断方式和查询方式内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部