【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;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值