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

概述

1、中断方式:

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

CMT2300A接收数据的中断:

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

2、查询方式:

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

//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、串口通讯中的查询方式和中断方式:

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

                     接收数据——先查后收。

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

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

//先发送数据
 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】中断方式和查询方式的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部