This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

在C6746下是否有DelayUs()函数现成源码?



我们之前在开发28335时用到了DelayUs()函数,该函数是TI官方用汇编语言写的源代码,现在我们应用程序要移植到C6746上,请问是否还有DelayUs()函数的现成源码可供使用?如果有应该在哪下载?如果没有我们应用程序中用到的DelayUs()函数应该怎么修改?附件为28335下DelayUs()函数的源码。如果在C6746下使用应该怎么修改?谢谢!

DelayUs.asm
  • 可以在starterware的timer实现的tick上做修改。

    void TimerTickPeriodSet(unsigned int milliSec)

    你附件的asm文件,无非是一个汇编的空循环,只不过根据一次循环是几个指令周期,再根据CPU频率得出1us对应几个循环。

  • void TimerTickPeriodSet(unsigned int milliSec)
    {

    TimerPeriodSet(SOC_TMR_0_REGS, TMR_TIMER34, (milliSec * TMR_PERIOD_LSB32));
    TimerReloadSet(SOC_TMR_0_REGS, TMR_TIMER34, (milliSec * TMR_PERIOD_LSB32));
    }

    这个函数好像是设置定时器周期的,而我应用程序是需要做一段延时,比如先让GPIO口置1,然后延时一定时间(如1us、10us等,程序中有多处用到该延时,且延时时间不同),再让GPIO口置0。应该怎么修改这个函数呢?谢谢。

  • 这是用timer做延时。配置完周期后就在等timer中断改标志, while(flagIsrCnt); 然后再退出,作用是一样的。

    你的代码对应的是一个二层for 循环:

    for(i=count; i>0; i--) {

       for(j=0; j<138; j++)

            { asm( "nop");}  

    }

    只是在你原来的芯片上1us对应的就是138个循环,在新平台上,你需要测算一下要多少循环。

  • 好的,谢谢。