【感芯科技MC3172开发板体验】并行测试 - RISC-V MCU技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

jinyi7016 关注 私信
[文章]

【感芯科技MC3172开发板体验】并行测试

并行功能可以说是这个芯片最大的一个特点了,对于多路高实时控制来说,是很用的。

这里先启动了两个线程,把时钟设置为内部高速时钟,主频可以到达200M。每个线程使用一个GPIO进行翻转。为了确定每次线程的开始时间,把GPIO翻转设置成一次,下降沿是进程的开始位置,这样好进行测量。
clipboard.png
代码如下:

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));

    }
    thread_end();
}

////////////////////////////////////////////////////////////

void thread1_main(void)
{
    INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
    GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN15),GPIO_SET_ENABLE);

    while(1){
        GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,(GPIO_PIN15));
        GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,(GPIO_PIN15));
    }
    thread_end();
}

如下所示,两个低电平的时间差大约是13ns,这个时间延时是非常低的了。但这个时间并不是绝对时间,随着程序运行时间,这个时间也是在变化的。

clipboard.png

两个线程调度还是比较好处理的,那再多添加几个线程呢,如下图所示:

clipboard.png

这时,再测量线程0与线程1中的GPIO翻转延时,两个下降沿之间的时间差最约为34ns。

由于添加的几个线程都是空的,只是占用了一个位置,可能线程中添加相应的代码后,这个调度时间也还是会有所变化。不过对于这个时间来说,也几乎算是并行 了。
clipboard.png

所以,此芯片并不是与FPGA似的结构原理,猜测还应该是内部有一个调度机制,并行运行是在这个机制上进行优化,最大程度的减小线程调度所需要的时间。

对目前的调度时间来说,确实是比RTOS要快很多,大部分实时性要求高的场景都可以使用的,但也要注意这个时间,有严格时序要求的,还得用FPGA。

芯片的外设目前还不是很丰富,但每组都可以设置成相应的功能,可以全设置成串口或是CAN或是SPI,一些特殊应用就比较合适,比如全设置成CAN接口,可以做成多路的CAN总线分析工具。

更多回帖

×
发帖