如果了解 使能中断 和 中断标志位发生置位的 本质,就不会产生以下疑问了,不过没时间去了解,只能先用下面的结论了
为什么不使能中断,中断标志位也会被置一
不使能中断,不影响中断标志位的变化,但是程序不会跳转到中断处理函数入口的地址处,去执行中断程序了
使能中断的情况下,中断标志位不清除, 结果是完成中断处理程序后, 它就继续再进中断, 根本不会回到主程序。
注意:中断标志位,,,置一时,由硬件置一。。置零时,可以硬件置零(即硬件置零),也可以程序员置零(软件置零)。
中断标志位硬件清零(自动清零)和软件清零(程序员用程序清零)
举一个我在项目开发中用到的实例
必须由MCU清零才能使中断复位--------他这里的意思应该是软件复位,
MCU与INT相连的那个GPIO口配置为输入状态,当INT引脚被mcp2515拉低时,GPOI引脚就收到一个低电平,进而使MCU产生中断
前提是你要在程序中配置好该GPIO口,当收到一个低电平时,产生中断。
那么INT引脚什么时候被MCP2515拉低,什么时候被拉高?
在中断使能位置1的前提下,中断标志位被置一,INT就会被MCP2515拉低,进而使MCU产生中断。
当MCU通过SPI总线将中断标志位清零时,MCP2515把INT拉高。
今天才发现我用了这么长时间的中断服务函数,竟然不知道中断请求标志位到底具体是什么意思~~~悲哀!!!
一般就用了定时器中断服务函数,没关心中断请求标志位,今天才发现,原来定时器中断请求标志位就是定时器溢出标志位,定时器溢出时自动跳到相应中断向量处,当主机响应该定时器中断时,该标志位由硬件自动清零。所以,我虽然写了定时器中断服务函数,而没操作定时器溢出标志位,程序还能运行,是因为单片机自己把这事儿给办了~~是典型的瞎猫碰到死老鼠
对于外部中断,其中断请求标志位跟定时器溢出标志位相似,都是主机相应中断后自动硬件清零,所以,也不必考虑需要不需要软件清零
串行口中断就不一样了,它分为发送中断标志位和接受中断标志位,在方式0中,当发送完或者接受完第八位数据后,由硬件置位,而其他工作方式下,(发送时)当发送停止位前或者(接收时)当接受到停止位的中间时刻由硬件置位。标志位置位象征着一帧数据的操作完成,继而转到中断服务函数,但是,这些标志位不能由硬件清零,只能用软件清零。
其他扩展的单片机,还有N多可以产生中断的功能,如果写中断服务函数,就要看清楚这些中断标志位了,看下到底需要不需要软件清零,需要软件清零但是不软件清零的,可能就要死在终端服务函数中了~~~~~~应该是吧,至少我这么理解
版权声明:本文为CSDN博主「学无止境2022」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dianqicyuyan/article/details/122350302
如果了解 使能中断 和 中断标志位发生置位的 本质,就不会产生以下疑问了,不过没时间去了解,只能先用下面的结论了
为什么不使能中断,中断标志位也会被置一
不使能中断,不影响中断标志位的变化,但是程序不会跳转到中断处理函数入口的地址处,去执行中断程序了
使能中断的情况下,中断标志位不清除, 结果是完成中断处理程序后, 它就继续再进中断, 根本不会回到主程序。
注意:中断标志位,,,置一时,由硬件置一。。置零时,可以硬件置零(即硬件置零),也可以程序员置零(软件置零)。
中断标志位硬件清零(自动清零)和软件清零(程序员用程序清零)
举一个我在项目开发中用到的实例
必须由MCU清零才能使中断复位--------他这里的意思应该是软件复位,
MCU与INT相连的那个GPIO口配置为输入状态,当INT引脚被mcp2515拉低时,GPOI引脚就收到一个低电平,进而使MCU产生中断
前提是你要在程序中配置好该GPIO口,当收到一个低电平时,产生中断。
那么INT引脚什么时候被MCP2515拉低,什么时候被拉高?
在中断使能位置1的前提下,中断标志位被置一,INT就会被MCP2515拉低,进而使MCU产生中断。
当MCU通过SPI总线将中断标志位清零时,MCP2515把INT拉高。
今天才发现我用了这么长时间的中断服务函数,竟然不知道中断请求标志位到底具体是什么意思~~~悲哀!!!
一般就用了定时器中断服务函数,没关心中断请求标志位,今天才发现,原来定时器中断请求标志位就是定时器溢出标志位,定时器溢出时自动跳到相应中断向量处,当主机响应该定时器中断时,该标志位由硬件自动清零。所以,我虽然写了定时器中断服务函数,而没操作定时器溢出标志位,程序还能运行,是因为单片机自己把这事儿给办了~~是典型的瞎猫碰到死老鼠
对于外部中断,其中断请求标志位跟定时器溢出标志位相似,都是主机相应中断后自动硬件清零,所以,也不必考虑需要不需要软件清零
串行口中断就不一样了,它分为发送中断标志位和接受中断标志位,在方式0中,当发送完或者接受完第八位数据后,由硬件置位,而其他工作方式下,(发送时)当发送停止位前或者(接收时)当接受到停止位的中间时刻由硬件置位。标志位置位象征着一帧数据的操作完成,继而转到中断服务函数,但是,这些标志位不能由硬件清零,只能用软件清零。
其他扩展的单片机,还有N多可以产生中断的功能,如果写中断服务函数,就要看清楚这些中断标志位了,看下到底需要不需要软件清零,需要软件清零但是不软件清零的,可能就要死在终端服务函数中了~~~~~~应该是吧,至少我这么理解
版权声明:本文为CSDN博主「学无止境2022」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dianqicyuyan/article/details/122350302
暂无评论