arm idle 명령어
글쓴이: choboja / 작성시간: 화, 2011/04/26 - 3:31오후
안녕하세요?
ARM Cortex-A8 core( ARM v7 instruction set ) 사용중입니다.
리눅스 커널에서 임의의 커널 쓰레드를 만드는데 동작은 idle상태 혹은 저전력 모드로 진입하고 싶습니다.
리눅스 arm 코드내에서 idle_task의 코드를 보면 결국 cpu_do_idle() 함수를 호출하면서 sleep 하게 되는 것 같습니다.
여러 문서를 통해 알아본결과 WFI 가 sleep상태로 들어갈 수 있는 명령어 같은데 그 전에 몇가지 레지스터를 조절해야하는것 같네요.
혹시 리눅스 커널에서 강제로 arm processor sleep상태로 들어갈려면 cpu_do_idle()을 호출하는것이 맞는가요?
그리고 WFI가 결국은 "nop" 명령어같은데 맞나요?
while(condition){ cpu_do_idle() }
위 같은 형태를 띄면 되는지. 그전에 어떤 설정을 해야되는지 답변 부탁드릴께요.
감사합니다.
Forums:
WFI는 기능적으로는 NOP과 같습니다만,
WFI는 기능적으로는 NOP과 같습니다만, interrupt 가 발생할때 까지 CPU의 클럭을 게이트해서 전력 소비를 줄이는 효과가 있습니다.
RVDS에서는 __WFI() intrinsic을 사용해서 바로 호출할 수 있습니다.
답변 감사드립니다.
다른 특정 레지스터 설정없이 __WFI() 명령어만 사용하면 cpu 클럭 게이트를 하나는건가요?
예 레지스터 세팅은 필요없습니다. 하지만 파워모드를
예 레지스터 세팅은 필요없습니다.
하지만 파워모드를 power down이나 dormant모드로 전환하기 위해서는 관련 레지스터를 세팅해줘야되고요.
답변 감사드립니다.
power down이나 dormant모드로 전환하기 위한 관련 레지스터를 알수있을까요?
시스템 제어 레지스터(0xE000ED10) 이거 말씀하시는건가요?
linux에서는 어떤식으로 접근해야되나요?( inline asm을 사용하면 되는지요?)
다시한번 감사드립니다.
댓글 달기