历史上的今天
今天是:2024年12月24日(星期二)
2019年12月24日 | S3c2410裸板程序入门---单按键(一)
2019-12-24 来源:elecfans
有点入门了,好吧,开始学点稍微复杂的,写一个单按键的程序。
有人可能会笑,这个复杂?的确,只有一个按键是比较简单的,关键是我们要通过这个按键引出中断处理的部分,这个就比较核心了。中断是学习某个CPU最重要的部分之一。
这次我们将使用realview提供的初始化文件,学会自己配置(以后还有自己写呢)。然后完成一次按键触发一次中断处理函数的功能。怎么判断有没有触发中断呢?我们不是写了串口的程序吗,中断一次由串口向PC机发送个数据好了。
1 配置(s3c2410a.s 对应的configuration):
等会儿截几个图吧,现在手头没有截图工具。
2 s3c2410a.s 的几个片段,着重关注中断部分。
159IntVT_SETUP
EQU
1
160IntVTAddress
EQU
0x33FFFF20
...........
795
AREA
RESET
,
CODE
,
READONLY
796
ARM
799; Exception Vectors
800; Mapped to Address 0.
801; Absolute addressing mode must be used.
802; Dummy Handlers are implemented as infinite loops which can be modified.
803
804Vectors
LDR
PC
,
Reset_Addr
805
LDR
PC
,
Undef_Addr
806
LDR
PC
,
SWI_Addr
807
LDR
PC
,
PAbt_Addr
808
LDR
PC
,
DAbt_Addr
809
NOP
; Reserved Vector
810
LDR
PC
,
IRQ_Addr
811
LDR
PC
,
FIQ_Addr
813
814
IF
IntVT_SETUP
<>
0
816;Interrupt Vector Table Address
817HandleEINT0
EQU
IntVTAddress
818HandleEINT1
EQU
IntVTAddress
+
4
819HandleEINT2
EQU
IntVTAddress
+
4
*
2
820HandleEINT3
EQU
IntVTAddress
+
4
*
3
821HandleEINT4_7
EQU
IntVTAddress
+
4
*
4
822HandleEINT8_23
EQU
IntVTAddress
+
4
*
5
823HandleReserved
EQU
IntVTAddress
+
4
*
6
850IRQ_Entry
851
sub
sp
,
sp
,
#4 ;reserved for PC
852
stmfd
sp!,{r8-r9} ;备份r8 r9
853
854
ldr
r9
,=
INTOFFSET ;取的中断偏移
855
ldr
r9
,[
r9
]
856
ldr
r8
,=
HandleEINT0 ;得到中断处理函数地址的基地址
857
add
r8
,
r8
,
r9
,
lsl
#2 ;根据基地址和偏移得到实际中断处理函数地址
858
ldr
r8
,[
r8
]
859
str
r8
,[
sp
,
#8]
860
ldmfd
sp!,{r8-r9,pc} ;修改pc指针,跳转到二级中断处理函数处
861
862
ENDIF
863
864Reset_Addr
DCD
Reset_Handler
865Undef_Addr
DCD
Undef_Handler
866SWI_Addr
DCD
SWI_Handler
867PAbt_Addr
DCD
PAbt_Handler
868DAbt_Addr
DCD
DAbt_Handler
869
DCD
0
; Reserved Address
870IRQ_Addr
DCD
IRQ_Handler
871FIQ_Addr
DCD
FIQ_Handler
872
873Undef_Handler
B
Undef_Handler
874SWI_Handler
B
SWI_Handler
875PAbt_Handler
B
PAbt_Handler
876DAbt_Handler
B
DAbt_Handler
877
878
IF
IntVT_SETUP
<>
1
879IRQ_Handler
B
IRQ_Handler
880
ENDIF
881
882
IF
IntVT_SETUP
<>
0
883IRQ_Handler
B
IRQ_Entry
884
ENDIF
885
886FIQ_Handler
B
FIQ_Handler
可见触发irq中断时,cpu自动把cpsr保存到spsr,把pc指针置为0x18。经过LDR PC,IRQ_Addr,IRQ_Handler B IRQ_Entry,两次跳转,最终跳到了IRQ_ENTRY, 这其实就是一级中断处理函数,一级中断处理函数的作用就是根据中断偏移寄存器查的其处理函数的地址,请看代码中的注释。
因为用html粘贴的代码,所以提示我文章过长,只有另开一文喽。
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:45 编辑 本科组: 本科A 程控音频功率放大器 本科B 点阵电子显示屏制作 本科C 简易发射机 本科D 超声波倒车测距仪 本科E 水温监控及液位报警系统 专科组: 专科A 无线安全监控系统的设计与实现 专科B ...… 查看全部问答> |
|
前言 现在市面上的笔记本电脑外观设计上,越来越趋于外观新颖,外形纤薄,重量也是越来越轻便。 所以,作为电脑的配件之一的电源也就相应要在外观上做一定的改变,以此来在外形上取得协调及一致性。 但是要想在厚度有一定限制的电源机壳空间里面 ...… 查看全部问答> |
|
软件被拷贝,产品被抄袭,这是众多方案公司以及企业所面临的难题,自己公司花费众多人力,物 力投资项目,最后做他人嫁衣。样品一发,订单没了;产品刚一上市,市场没了。 我司针对当前市场的无规则和混乱,推出专业硬件加密方案,保护设计者的利 ...… 查看全部问答> |
|
今天一个同事拿了一个据说是430的源程序给我,但是我不知道zhge程序是采用什么编译器编辑的 请教一下网上的大虾,这个源程序是采用什么编译器编译的 贴上程序的一段 #include <msp430x11x.h> #include<iostream.h> int main( void ...… 查看全部问答> |
|
招聘单位: 浙江兆益电气有限公司,北京招聘,目前不能解决社保问题。招聘需求: 电气类相关专业,熟练使用示波器等相关工具,精通C语言编程,对数字电路,模拟电路,计算机接口有较好的理解。&n ...… 查看全部问答> |




