- 打卡等级:以坛为家II
- 打卡总天数:514
- 最近打卡:2025-05-02 10:18:47
荣誉版主
- 积分
- 990
|
最近写了一个包含浮点运算的函数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 ?
|
|