社区闲人 发表于 2024-9-13 14:21:27

如何设置TFPU时钟源为PLL时钟96MHz / 120MHz | 已在完善演示程序的说明

最近写了一个包含浮点运算的函数void calc_ccr2(void),在AI8051U上跑,目标运算时间不大于15US。
通过      P02 = ~P02;
            calc_ccr2();   
            P02 = ~P02;
用逻辑分析仪抓取运算时间。

使用30MHZ的系统时钟:
1,用C251的软件库,耗时61us
2,用论坛里老许的STC32G_MDU32.LIB库函数,耗时53.4us
3,使用AI8051U_32_TFPU_V1.0.LIB硬件库函数,耗时17us。

想着设置TFPU时钟源为96MHZ,烧录时设置频率为24MHZ。代码为:

#define CKMS            0x80
#define PCKI_MSK      0x60
#define PCKI_D1         0x00
#define PCKI_D2         0x20
#define PCKI_D4         0x40
#define PCKI_D8         0x60

void main(void)
{
    WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    //选择PLL输出时钟
    CLKSEL &= ~CKMS;                        //默认选择PLL的96M作为PLL的输出时钟
   
#define FOSC            24000000UL


    //选择PLL输入时钟分频,保证输入时钟为12M
    USBCLK &= ~PCKI_MSK;
#if (FOSC == 12000000UL)
    USBCLK |= PCKI_D1;                      //PLL输入时钟1分频
#elif (FOSC == 24000000UL)
    USBCLK |= PCKI_D2;                      //PLL输入时钟2分频
#elif (FOSC == 48000000UL)
    USBCLK |= PCKI_D4;                      //PLL输入时钟4分频
#elif (FOSC == 96000000UL)
    USBCLK |= PCKI_D8;                      //PLL输入时钟8分频
#else
    USBCLK |= PCKI_D1;                      //默认PLL输入时钟1分频
#endif   
   
    //启动PLL
    USBCLK |= 0x80;//ENCKM;               //使能PLL倍频
    delay();                              //等待PLL锁频
   
    //DMAIR = 0x3e;   //选择 系统时钟 为TFPU时钟源
    DMAIR = 0x3f;   //选择 PLL时钟 为TFPU时钟源
   
    InitGpio();                              //初始化GPIO工作模式
   
    while(1)
    {
      ...
      ...
      ...
    }
}

烧录时设置频率为24MHZ,结果抓取运算时间为37us.

问:该如何设置 系统时钟 为30MHZ, TFPU时钟 为96MHZ ?

神农鼎 发表于 2024-9-14 17:39:01



https://www.stcaimcu.com/forum.php?mod=viewthread&tid=10791

神农鼎 发表于 2024-9-13 15:01:56




CPU 跑 36.864MHz
36.864MHz / 4 给 PLL时钟输入 = 9.216MHz
9.216MHz * 12 = 110.592MHz





DebugLab 发表于 2024-9-13 15:02:09

本帖最后由 DebugLab 于 2024-9-13 23:35 编辑

系统时钟24MHz,PCKI 2分频   或   系统时钟48MHz,PCKI 4分频,PLL*8,12MHz*8=96MHz

系统时钟16MHz,PCKI 2分频   或   系统时钟32MHz,PCKI 4分频,PLL*12,8MHz*12=96MHz







神农鼎 发表于 2024-9-13 15:06:57











社区闲人 发表于 2024-9-13 17:09:28

我一楼的代码就是按照上面的代码写的,可惜不成功。

杨为民 发表于 2024-9-13 20:52:35

DebugLab 发表于 2024-9-13 15:02
系统时钟40MHz,PCKI 4分频,PLL * 12
10MHz * 12 = 120MHz
10MHz *   8 =96MHz

这个方案比较好,可怎么实现?

soma 发表于 2024-9-13 22:16:14

DebugLab 发表于 2024-9-13 15:02
系统时钟40MHz,PCKI 4分频,PLL * 12
10MHz * 12 = 120MHz
10MHz *   8 =96MHz

不是12*8=96吗?

DebugLab 发表于 2024-9-13 23:06:06

杨为民 发表于 2024-9-13 20:52
这个方案比较好,可怎么实现?


社区闲人 发表于 2024-9-14 06:32:57

经过反复确认,1楼的代码能够实现96Mhz的PLL时钟,。
问题是: 代码的运行时间反而变慢 。......... 好无语呀!

可能 异步时钟切换需要消耗一定时间,而不是无缝快速切换。

将主频改为35Mhz, 取消PLL时钟。TFPU使用系统时钟,抓取的运行时间为14us。

结帖。

杨为民 发表于 2024-9-14 06:42:13

DebugLab 发表于 2024-9-13 23:06


谢谢
页: [1] 2 3
查看完整版本: 如何设置TFPU时钟源为PLL时钟96MHz / 120MHz | 已在完善演示程序的说明