进来在探索在嵌入式arm平台上低功耗的研究,和强哥和fp一起商谈了一下技术路线,准备先把最简单的idle吃掉,idle就是指在系统没有任务的时候自动进入idle模式,直至中断唤醒。
idle的实现是比较简单的:
这是at91rm9200的idle过程,当然对于我们sep4020也是相同的,
最终都会掉到include/asm-arm/arch-sep4020/system.h中的处理器相关函数,在这里就是static inline void arch_idle(void)函数,很奇怪很多处理器在实现这个函数的时候都直接使用了cpu_do_idle,下面分析一下这个函数:
include/asm-arm/Cpu-single.h中
#ifdef __STDC__
#define __cpu_fn(name,x) cpu_##name##x
#else
#define __cpu_fn(name,x) cpu_/**/name/**/x
#endif
#define cpu_fn(name,x) __cpu_fn(name,x)
#define cpu_do_idle cpu_fn(CPU_NAME,_do_idle)
对于我们sep4020是arm720T的,所以CPU_NAME=arm720
,因此我在这里写cpu_do_idle的话,相应的函数就是,
#define cpu_do_idle cpu_arm720_do_idle
cpu_arm720_do_idle函数时在arch/arm/mm文件夹中proc-arm720.S中:
具体代码如下:
/*
* Function: arm720_proc_do_idle(void)
* Params : r0 = unused
* Purpose : put the processer in proper idle mode
*/
ENTRY(cpu_arm720_do_idle)
mov pc, lr
可以看到就用cpu_do_idle是实现不了进入sep4020的idle模式,因此需要在这里面做改动,按照我们的idle的配置方法,对pmc进行配置,不管怎样,搞清楚了这个问题了。
阅读(3556) | 评论(0) | 转发(0) |