s3c6410在裸机下用中断点灯
声明:
1.程序中部分源码来自网络.不清楚是否可以商用,请自行考虑.
2.如需署名,请邮件通知我.
3.如需源码,请邮件索取.(不懂怎么传附件下载)
1.硬件
FriendlyARM的tiny6410 ram128 flash256
2.软件
Eclipse + yagarto
3.调试器
Jlink 4.32a
4.过程
4.1 IDE
eclipse + yagarto IDE的搭建可以参考yagarto的网站. www.yagarto.de 德国人这么方面真不错.
整个介绍都很详细.不过给出的例子中没有arm11. 可在给出的例子基础上进行修改.
4.2中断方法
网上讲的很多,googl看看就知道什么道理了.指出两点:1. 打开VIC的控制器.可在startup.s中,或者在c程序中.2.看看cpsr中是否禁止了IRQ的中断.
我当时就卡在这个地方了.
1 /* Enable VIC Port */
2 MRC p15,0,r0,c1,c0,0
3 ORR r0,r0,#(1<<24)
4 MCR p15,0,r0,c1,c0,0
1 #define IRQ_MASK 0x00000080
2
3 static inline unsigned asm_get_cpsr(void)
4 {
5 unsigned long retval;
6 asm volatile (" mrs %0, cpsr" : "=r" (retval) : /* no inputs */ );
7 return retval;
8 }
9
10 static inline void asm_set_cpsr(unsigned val)
11 {
12 asm volatile (" msr cpsr, %0" : /* no outputs */ : "r" (val) );
13 }
14
15 unsigned EnableIRQ(void)
16 {
17 unsigned _cpsr;
18
19 _cpsr = asm_get_cpsr();
20 asm_set_cpsr(_cpsr & ~IRQ_MASK);
21 return _cpsr;
22 }
23
24 unsigned DisableIRQ(void)
25 {
26 unsigned _cpsr;
27
28 _cpsr = asm_get_cpsr();
29 asm_set_cpsr(_cpsr | IRQ_MASK);
30 return _cpsr;
31 }
32
33 unsigned RestoreIRQ(unsigned oldCPSR)
34 {
35 unsigned _cpsr;
36
37 _cpsr = asm_get_cpsr();
38 asm_set_cpsr((_cpsr & ~IRQ_MASK) | (oldCPSR & IRQ_MASK));
39 return _cpsr;
40 }
其他的地方网上都有讲.我就不罗嗦了.
5.问题
在单步调试的时候,中断无法返回.全速运行就没有问题.可能是我对中断的理解有误.有时间在单片机上试试,这东西我比较了解.