微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 底层函数的一些问题

底层函数的一些问题

时间:10-02 整理:3721RD 点击:

当拿到例程的时候,有时候并不是很清楚有一些函数的到底是怎么样进行运行的。由于例程把很多底层的函数都封装了,开发者只需要调用你需要函数就能满足需要。但是,出于好奇,我想了解一下这个底层的函数是怎样进行对寄存器的操作,来完成我们需要的函数功能。由于底层的.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,了解对寄存器的操作有着很重要的意义。可以帮助我们利用和理解这个函数。


搞硬件的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top