ARM9——中断学习

本文介绍了中断的概念,它是CPU在执行程序时因内部或外部事件暂停现行程序,转而执行服务程序的过程。文章还讨论了中断的优先级划分,确保系统能够按重要性和紧迫程度及时响应中断事件。此外,还阐述了中断的嵌套现象,即在处理中断服务时,更高优先级的中断可以打断并先执行,待处理完后再返回继续原来的中断服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中断的概念

指 CPU 在正常运行程序时,由于内部或外部事件引起 CPU 暂时中止执行现行程序,转

去执行请求 CPU 为其服务的那个外设或事件的服务程序,待该服务程序执行完后又返

回到被中止的程序这样一个过程。

中断的优先级:

为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。

 

中断的嵌套:

是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套。


PRESERVE8

先是在启动代码里设置异常向量表
start
 b reset
 b halt
 b halt
 b halt
 b halt
 b halt
 b _irq
 b halt
reset
(关闭看门狗)

ldr sp,=(0x32000000+0x100000)	;在reset中设置reset异常的栈指针
 MOV r0,#0x53		; 设置 ARM9 的工作模式和中断允许
 msr CPSR_cxsf,r0

_irq
 ldr sp,=(0x31000000+0x100000)
 stmdb sp!,{r0-r12,lr}	
 IMPORT do_irq		
bl do_irq
 ldmia sp!,{r0-r12,pc}^		;压栈内容出栈 
halt
 b halt



void do_irq()	//中断服务函数
{
	unsigned int i;
	for(i=0; i<4; i++)	//四个按键
	{
		if(SRCPND1 & (1<<i))	//中断触发
		{
			if(GPFDAT & (1<<i))	//下降沿
			{
				my_printf("K%d is release\r\n",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值