以前我刚刚开始接触单片机的时候,我一直以为是中断在产生时序,发送数据,后面我发现这不科学,以下是我的观点,望各位老大,给点建议。
大家都知道通常我们STM32的发送SPI、串口数据,都只要初始化之后,往SPIx->DR、USARTx->DR寄存器中写入数据就会自动按照时序发送数据,51或者其他嵌入式设备也都大同小异,那么中断是用来干嘛的呢?
是中断在发送数据吗,还是另有其人?
但是我屏蔽中断后,往SPIx->DR、USARTx->DR寄存器中写入数据,还是会自动按照时序发送数据,而我们看中断函数就可以知道,其实中断并没有负责处理发送,它更像是在通知CPU,某个数据发送完成,或者接收完成。由此我们可以确定,数据的发送跟中断无关。
那到底是谁在发送数据呢,我们模拟发送SPI和串口的数据的时候就知道,发送数据是需要时序的,初始化的时候,需要初始化时钟并分配到指定外设类型,这时相应的SCL时钟波形就已经产生了,后面指定相应的数据长度,以及国定的管脚,这个时候,设备根据寄存器设置,自动形成相应的数据发生电路,每当我们往DR寄存器中写入数据时,此时数据传输就已经开始了。
那么中断是怎么产生的呢,数据传输是由这些硬件产生的,但是数据传输过程中,硬件会自动产生一系列的标志,比如传输完成、传输错误等标志位,而CPU每隔一段时间会扫描这些中断标志位,根据我们设置的中断类型,符合相应的中断号就会进入中断服务函数,这就是硬件中断的由来。而软件中断,是由我们程序产生的,不在此次讨论范围内。
这些都是我瞎想的,不知道是不是错的,各位老大帮忙看看对不对
一周热门 更多>