s3c6410在裸机下用中断点灯
声明:
1.程序中部分源码来自网络.不清楚是否可以商用,请自行考虑.
2.如需署名,请邮件通知我.
3.如需源码,请邮件索取.(不懂怎么传附件下载)
1.硬件
FriendlyARM的tiny6410 ram128 flash256
2.软件
Eclipse + yagarto
3.调试器
Jlink 4.32a
4.过程
4.1 IDE
eclipse + yagarto IDE的搭建可以参考yagarto的网站. 德国人这么方面真不错.
整个介绍都很详细.不过给出的例子中没有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.问题
在单步调试的时候,中断无法返回.全速运行就没有问题.可能是我对中断的理解有误.有时间在单片机上试试,这东西我比较了解.