导航

2011年12月7日

摘要: 最近在学习ARM,教程都是在ADS环境下开发的,而我用的是Ubuntu,需要将arm标准汇编改为GNU汇编,遇到了不少问题。#define __led_on_swi_no 1 // 软中断号1,调用管理模式下的do_led_on函数int led_on(int led_no){ int ret; // 返回值 __asm // 由于C程序中没有SWI对应表达式,所以使用混合编程 ( "mov r0, %[led_no]\n\t" // 根据AT... 阅读全文

posted @ 2011-12-07 22:33 nagisa 阅读(911) 评论(0) 推荐(0)

摘要: 转自http://blog.chinaunix.net/space.php?uid=20706279&do=blog&id=1888741关于这篇文档这篇文章是本人为方便各位业界同仁而翻译,方便大家开发底层代码使用,转载请注明出处,谢谢。要是你E文功底好,本人还是建议阅读E文版的。http://www.ethernut.de/en/documents/arm-inline-asm.html对于基于ARM的RISC处理器,GNU C编译器提供了在C代码中内嵌汇编的功能。这种非常酷的特性提供了C代码没有的功能,比如手动优化软件关键部分的代码、使用相关的处理器指令。这里设想了读者是熟 阅读全文

posted @ 2011-12-07 21:59 nagisa 阅读(476) 评论(0) 推荐(0)

2011年12月6日

摘要: 中断处理完成后需要清除中断源,看到这么一句代码:INTPND = INTPND; // 清除中断结果重新用原值赋值,什么意思?INTPND定义如下:#define INTPND (*(volatile unsigned long *)0x4A000010)INTPND是最高优先级中断暂存寄存器,保存了经过优先级仲裁出的中断信号位,被置1的位表示仲裁出来优先级最高的中断号。中断处理完成后,通过向该位写入1来清除中断。所以重新用原值赋值一遍即可达到目的。 阅读全文

posted @ 2011-12-06 18:22 nagisa 阅读(446) 评论(0) 推荐(0)