一、GPIO速度测试
芯片的 主频最高是是200M,每个线程的频率最高是50M,其实,代码的运行速度还是按200M来运行的,芯片本质上还是个单片机,而不是CPLD或是FPGA,所以,本质上,代码的运行并不能做到完全的并行
GPIO时钟配置为:INTDEV_CLK_IS_CORECLK_DIV2
GPIO翻转函数为:GPIO_SET_OUTPUT_PIN_TO_0与GPIO_SET_OUTPUT_PIN_TO_1
代码为:
void thread0_main(void)
{
INTDEV_SET_CLK_RST(GPIOD_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
GPIO_SET_OUTPUT_EN_VALUE(GPIOD_BASE_ADDR,(GPIO_PIN0),GPIO_SET_ENABLE);
while(1){
GPIO_SET_OUTPUT_PIN_TO_0(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_1(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_0(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_1(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_0(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_1(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_0(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_1(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_0(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_1(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_0(GPIOD_BASE_ADDR,(GPIO_PIN0));
GPIO_SET_OUTPUT_PIN_TO_1(GPIOD_BASE_ADDR,(GPIO_PIN0));
}
thread_end();
}
使用逻辑分析仪测量时序,速度大约为6M左右
从这个速度上看,并不是200M的主频啊,经过测试,发现,要达到200M,时钟源的选择要选择内部的高速RC振荡器才可以,外部输入的时钟,并没有进行倍频,也就是芯片内部并没有PLL。
而且外部支持的最高时钟也只有133M,所以,目前板子上的晶振是48M的,速度当然不快了。
如下,这是修改了时钟源后的时序图:
可以看到修改了时钟源后,GPIO的翻转速度可以达到24M左右了。
芯片数据手册目前看,还不完整,没有时钟树,只是一些简单的介绍,期待官方早日完善。
二、计算性能
在两个线程中,分别进行1万次的整形乘法与浮点乘法,运行时间如下所示:
整形乘法使用时间为2ms左右,浮点乘法运行时间为30ms左右。
之后又测试了除法,分别是4.5ms与28.3ms,这里除法运算时间低于乘法,有一些不解啊。
|