s3c6410的裸机中断点灯

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.问题

在单步调试的时候,中断无法返回.全速运行就没有问题.可能是我对中断的理解有误.有时间在单片机上试试,这东西我比较了解.

转载于:https://www.cnblogs.com/darwin/archive/2011/09/04/2166108.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值