分享
 
 
 

学习ARM开发(17)

王朝other·作者佚名  2006-02-26
窄屏简体版  字體: |||超大  

因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深

入了解,最好的方法,就是去写程序,然后不断地调试。在这个程序之前,先要深入去了解ARM的中断方式,知

道它有7种工作方式。下面先看初始化的代码是怎么样初始化不同模式栈的。

/* IRQMODE。 */

orr r1,r0,#0x12|0xc0

msr cpsr,r1

ldr sp,=IRQ_MODE_SP_START

这段代码,就是初始化IRQ模式的栈,这样在IRQ中断时就可以使用栈了。

S3C44B0的中断过运行过程是这样的:

当有中断发生时,就会跳到FLASH中的地址0x18处理取到一条指令并执行,因为那里只允许放一条指令,因此只

能放一条跳转指令了。比如:ldr pc,=0x0c000018 ,这条指令就是跳到SDRAM里运行,意思从0x0c000018取一

条指令运行,其实我总是在那地址里放一条跳转指令的,这样又到相应的中断处理程序了。比如在那里一条:

b irq,这条指令就是跳到IRQ的中断处理程序运行,它的作用就是根据不同的中断源来进一步查找不同的

中断处理程序。它的代码如下:

/*

采用IRQ中断,查找各个中断的入口函数地址,并且跳到相应的入口函数运行。 蔡军生 2006/02/10

*/

irq:sub sp,sp,#4 /* 保留一个栈给PC */

stmfd sp!,{r8-r9}

ldr r9,=I_ISPR /* 读取中断源寄存器 */

ldr r9,[r9]

cmp r9, #0x0 /* 如果没有中断源发生,就退出去。 */

beq IDLE_IRQ

mov r8,#0x0 /* 计算中断源对应的中断程序位置 */

LOOP_IRQ:

movs r9,r9,lsr #1

bcs HAVE_IRQ

add r8,r8,#4 /* 每个中断入口占4个字节 */

b LOOP_IRQ

HAVE_IRQ:

ldr r9,=CONFIG_SDRAM_START+4*8 /* 从HandleADC中断入口 */

add r9,r9,r8

ldr r9,[r9]

str r9,[sp,#8] /* 保存到前面保留的SP位置 */

ldmfd sp!,{r8-r9,pc} /* 跳到中断程序运行. */

IDLE_IRQ: /* 没有中断处理。 */

ldmfd sp!,{r8-r9}

add sp,sp,#4

subs pc,lr,#4

这段代码的功能就是先从S3C44B0的中断源保存寄存器I_ISPR取出中断源的标识位,然后不断移位,判断这位是

否有中断,如果有中断就处理它。根据移位来算出它的中断入口地址在那里,这样的做法,就可以动态地改变中

断入口函数。CONFIG_SDRAM_START+4*8,这个就是中断入口函数基地址,如果是第一位有中断,就是ADC中断。

那么就直接跳到这个地址运行就OK了。

比如我使用S3C44B0的TICK中断,就是时间片中断。就会在相应的地址设置入口函数,使用如下代码:

///////////////////////////////////////////////////////////////////////////////

//函数名称: TickInstall

//函数功能: 安装Tick中断函数。

//输入参数:

//输出参数:

//返 回 值:

//开发人员: 蔡军生

//时 间: 2006/02/13

//修改说明:

//

///////////////////////////////////////////////////////////////////////////////

void TickInstall(unsigned int nTickFunc)

{

//

*((unsigned int *)(INT_ADDR_START + 20*4)) = nTickFunc;

}

上面语句就是把一个中断入口函数设置为时间片运行函数。当有TICK中断时,就会跑到时间片函数里运行了。

总结一下,写一个S3C44B0的中断处理需要做以下几部分工作:

1. 在FLASH里0x18处放一条跳转指令,跳到SDRAM里运行。

2. 在SDRAM里0x0c000018处,放一条跳转指令,跳到IRQ子程序运行。

3. 写一段IRQ处理程序。

4. 写一段处理实际中断源的处理函数。

5. 设置中断寄存器,清除中断源屏蔽位。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有