底层函数的一些问题
当拿到例程的时候,有时候并不是很清楚有一些函数的到底是怎么样进行运行的。由于例程把很多底层的函数都封装了,开发者只需要调用你需要函数就能满足需要。但是,出于好奇,我想了解一下这个底层的函数是怎样进行对寄存器的操作,来完成我们需要的函数功能。由于底层的.lib文件是已经封装好的,我们在编译程序的时候并不需要把这些底层的C文件再次编译一次,大大节约了时间,提高了效率,而且有利于开发者或开发者们进行开发。
但是当你要进行一些编程的时候,由于找不到相应的函数或是忘记了函数该如何使用的时候,该怎么办?
举个例子:
那这个psc初始化函数来说
在psc.h文件中只有相应的定义,而没有函数具体的内容。这时,我们可以在提供的例程的source中寻找。找到psc.c文件。
int PSCModuleControl (unsigned int baseAdd, unsigned int moduleId,
unsigned int powerDomain, unsigned int flags)
{
volatile unsigned int timeout = 0xFFFFFF;
int retVal = 0;
unsigned int status = 0;
HWREG(baseAdd + PSC_MDCTL(moduleId)) = (flags & PSC_MDCTL_NEXT);
if (powerDomain == 0)
{
HWREG(baseAdd + PSC_PTCMD) = PSC_PTCMD_GO0;
}
else
{
HWREG(baseAdd + PSC_PTCMD) = PSC_PTCMD_GO1;
}
if (powerDomain == 0)
{
do {
status = HWREG(baseAdd + PSC_PTSTAT) & PSC_PTSTAT_GOSTAT0;
} while (status && timeout--);
}
else
{
do {
status = HWREG(baseAdd + PSC_PTSTAT) & PSC_PTSTAT_GOSTAT1;
} while (status && timeout--);
}
if (timeout != 0)
{
timeout = 0xFFFFFF;
status = flags & PSC_MDCTL_NEXT;
do {
timeout--;
} while(timeout &&
(HWREG(baseAdd + PSC_MDSTAT(moduleId)) & PSC_MDSTAT_STATE) != status);
}
if (timeout == 0)
{
retVal = -1;
}
return retVal;
}
找到了相应的函数内容。
虽然这对我们的开发起到的帮助很小。但是,这对我们了解和学习DSP,了解对寄存器的操作有着很重要的意义。可以帮助我们利用和理解这个函数。
搞硬件的