我是汇编语言的新手。最近我正在尝试使用程序集来控制 PowerPC Booke 架构的计时器。控制的内容是启用、禁用和设置中断 CPU 的时间。我完全不知道如何编写这些汇编语言。有没有 PowerPC 组装专家可以帮助我或至少给我一些帮助?
问候李思佳
对于 PowerPC 组装的任何新手,我建议一个好的方法是:
一种。找出基本的操作码是什么:
湾。谷歌有关 PowerPC 组装示例的资源:
http://www.ibm.com/developerworks/library/l-ppc/
http://www.csd.uwo.ca/~mburrel/stuff/ppc-asm.html
C。下载 Linux 内核并直接进入“arch/powerpc”子目录:这是 Linux 内核中所有 PowerPC 硬件特定逻辑的实现位置——大部分是 C 语言,一些是汇编语言。例如,计时器的硬件逻辑(根据您的问题) - 从 arch/powerpc 子目录开始:
./include/asm/reg_booke.h:
#define SPRN_PIT 0x3DB /* Programmable Interval Timer */
#define SPRN_TSR 0x150 /* Timer Status Register */
#define SPRN_TCR 0x154 /* Timer Control Register */
#define SPRN_TSR 0x3D8 /* Timer Status Register */
#define SPRN_TCR 0x3DA /* Timer Control Register */
#define CCR1_TCS 0x00000080 /* Timer Clock Select */
#define DBCR0_FT 0x00000001 /* Freeze Timers on debug event */
#define DBCR0_FT 0x00000001 /* Freeze Timers on debug event */
#define DBCR_FT 0x00040000 /* Freeze Timers on Debug Event */
对于自我教育,评论字段具有很高的教育意义,例如:
include/asm/time.h:
/* Accessor functions for the decrementer register.
* The 4xx doesn't even have a decrementer. I tried to use the
* generic timer interrupt code, which seems OK, with the 4xx PIT
* in auto-reload mode. The problem is PIT stops counting when it
* hits zero. If it would wrap, we could use it just like a decrementer.
*/
static inline unsigned int get_dec(void)
{
#if defined(CONFIG_40x)
return (mfspr(SPRN_PIT));
#else
return (mfspr(SPRN_DEC));
#endif
}
/*
* Note: Book E and 4xx processors differ from other PowerPC processors
* in when the decrementer generates its interrupt: on the 1 to 0
* transition for Book E/4xx, but on the 0 to -1 transition for others.
*/
static inline void set_dec(int val)
{
并且内核源代码应该具有满足您设置/启用/禁用计时器要求的源代码。
d。开始感到技术困难?然后你需要阅读更多的技术笔记,例如,与 PowerPC 相关的大学讲义:
https://www.google.com.sg/search?q=powerpc+timer+filetype%3Appt
e. 与 PowerPC 相关的数据表(主要在摩托罗拉/AMCC 和飞思卡尔网站上)应该是您的最后选择,因为它们技术含量高且不易消化:
https://www.google.com.sg/search?q=powerpc+datasheet+site%3Afreescale.com
特别是这是您的 BookE 架构用户指南:
http://www.freescale.com/files/32bit/doc/user_guide/BOOK_EUM.pdf (第 8 章介绍了计时器概念)。
玩得开心。