单片机的内部中断时怎么得到处理的?
打个比方说,串口中断:是不是(1)使能中断——》(2)发送、接收完数据以后——》(3)标志位改变
?是不是CPU在本身主程序运转的时间片转轮之间加插不停轮询,检测到IFG变化,就进入中处理机制。
?还有就是这个中断,接收和发送信号没有通过CPU控制么?是他自己的模块实现的么?
内部中断都是本模块自己在工作,进而触发的么??
还有就是这个中断,接收和发送信号没有通过CPU控制么?是他自己的模块实现的么?
假设硬件串口,你写入SBUF后是由芯片内部硬件模块自动发送和CPU没关系,发送完成后置中断标记
中间标记的检测是在一个CPU指令周期的某一个时钟周期里检测的,
没自己研究过中断检测流程似乎是这样的,51一个CPU是12个时钟周期,在其中的某个时钟周期进行了中断检测,
详细情况还得问做芯片开发的
我印象中当年上课的时候老师是这么说的:毕业论文
外设正确配置完成后,如果满足中断触发条件,在硬件上会产生一个中断标志
MCU里的一个是什么部件来着(忘了)检测到这个标志后(当然,会按照一定的使能关系和优先级顺序)
如果条件允许,就会把当前的PC指针(程序指针,大概就是指向下一条要运行指令的寄存器)压栈
再把触发中断标志对应中断向量地址送入PC。这样就实现了中断跳转
当中断响应完成,用专用的中断返回指令或者程序主动清除中断标志后,把之前压栈的PC弹出
这就完成了中断返回。至于,期间的上下文保护什么的,很多情况下是由用户或者IDE实现,MCU不管这事
1."是不是CPU在本身主程序运转的时间片转轮之间加插不停轮询,检测到IFG变化,就进入中处理机制。"
这个不是中断的机制,中断不是通过CPU本身去查询它。中断信号完全靠硬件产生,而且这个产生的信号是能通过硬件改变CPU的PC指针的。
2."还有就是这个中断,接收和发送信号没有通过CPU控制么?是他自己的模块实现的么?"
这个中断是由硬件实现的,你也可以把它理解为一个硬件模块。如果你认为串口的发送和接收那么多程序,到底怎么产生的中断你不能理解。你可以尝试下在单片机里产生一个最简单的中断。
char a = 0x40;
a <<= 1; (这里没有产生中断)
a <<= 1; (这里产生了溢出中断)
可以看到同样运行的是a <<= 1;这一条指令,对CPU来说是一样的但是有时候能产生中断有时候却不行,所以中断的产生并不是由CPU去控制产生的,是又其他硬件模块在一定条件下产生的。
3 "内部中断都是本模块自己在工作,进而触发的么?"
中断的硬件的确是自己在工作,但是一般需要一些设置,这一般需要CPU配置。