CH32V307/CH32V203 IO极限翻转测试

记录RISC-V MCU CH32V307/CH32V203 在144MHz主频、-Os优化下,IO极限翻转频率。

GPIO初始化代码如下:

  1. /*********************************************************************
  2. * @fn GPIO_Toggle_INIT
  3. *
  4. * @brief Initializes GPIOA.0
  5. *
  6. * @return none
  7. */
  8. void GPIO_Toggle_INIT(void)
  9. {
  10. GPIO_InitTypeDef GPIO_InitStructure = {0};
  11. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  12. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  13. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  14. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15. GPIO_Init(GPIOA, &GPIO_InitStructure);
  16. }
  17. int main(void)
  18. {
  19. Delay_Init();
  20. USART_Printf_Init(115200);
  21. printf("ch32v307 hello world\r\n");
  22. GPIO_Toggle_INIT();
  23. while(1)
  24. {
  25. GPIOA->OUTDR |= GPIO_Pin_0;
  26. GPIOA->OUTDR &= ~GPIO_Pin_0;
  27. }
  28. }

使用A0作为测试IO口,初始化为推挽输出模式,翻转速度设置为50MHz。

翻转频率为 9.6MHz,测试结果如下:

9.6MHz 的速度与预估差距有点大,看下反汇编结果如下:

两条C语言代码,需要翻译成7条汇编指令执行,速度当然快不起来。

7条汇编指令,共花费 144MHz / 9.6MHz = 15 个周期,

换个方式,采用异或的方式翻转IO GPIOA->OUTDR ^= GPIO_Pin_0;反汇编只有4条指令。

测试结果如下:

只有 9MHz,虽然执行指令数量只有 4 条,但是翻转速度竟然变慢了,共花费 144Mhz / 9MHz = 16 个周期。

我猜测是 xori 这条异或指令的执行周期比 oriaddi 指令执行周期长导致的。

为了测试 IO 的极限翻转速度,将执行指令压缩至最短,不用 ori 或 addi 指令,共3条汇编指令,代码如下:

测试结果如下:

IO翻转速度提高到 24MHz, 3条汇编指令共花费 144Mhz / 24MHz = 6 个周期。


上面测试的是GPIO的极限翻转速率,即通过GPIO引脚模拟通信协议波特率最高不会超过 24Mbps

如需更高频率,可以通过 SPI 等外设模拟。

CH32V307/CH32V203 IO翻转速度测试的更多相关文章

  1. VPS性能测试(3):磁盘IO读写速度、SSD硬盘速度测试

    1.磁盘IO,即输入/输出(Input/Output),这是测试磁盘性能一个重要指标,一些便宜的VPS主机为了降低成本,以大量的低性能的硬盘来充当服务器,导致VPS主机因为IO差而拖了整个主机性能的后 ...

  2. Aliyun上Linux服务器挂载数据盘及速度测试

    原始文档来自于阿里云官方文档:  Linux 系统挂载数据盘 铁锚 于 2013年12月19日 根据自己的需要进行整理 操作系统: CentOS 6.3, 平台  : 阿里云 ECS 云服务器 1. ...

  3. snprintf/strncpy/strlcpy速度测试

    速度测试代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <un ...

  4. iOS5系统API和5个开源库的JSON解析速度测试

    iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件. 我们选择的测试对 ...

  5. TF卡速度测试对比 Class数越高速度越快

    存储卡(TF卡)是手机扩展存储的大杀器,让你多装n部学习资料,多装n个外语听力练习.除了装东西外,存储卡性能不佳也会影响手机的整体性能以及体验的.本文主要针对Android手机,我是懒人,但我讨厌懒人 ...

  6. 手机闪存速度测试工具,AndroBench

    手机闪存速度测试工具,AndroBench

  7. 在线HTTP速度测试(响应时间测试)及浏览器兼容测试

    一.前言 网站的响应时间,是判断一个网站是否是好网站的重要的因素之一.百度首页的响应时间在全国各个省份小于10ms.这个响应时间远远好于竞争对手.根据美丽说的技术负责人分析,美丽说访问速度提升10%, ...

  8. Linux硬盘速度测试的命令

    测试下硬盘的读写速度如何,在linux下可以使用hdparm 对硬盘进行测试或查看硬盘的相关信息. hdparm 命令进行硬盘速度测试.参数: -a 表示是否关闭磁盘预读取功能.对于大文件读取,这个显 ...

  9. VPS速度测试(4):上传下载速度、服务器带宽、Ping响应时间

    1.VPS的速度好坏经常是我们选择某一个VPS商家的重要参考指标,对于国外的VPS主机我们可以执行以下命令来测试VPS入口带宽是多少. wget https://cachefly.cachefly.n ...

  10. StretchDIBits速度测试(HALFTONE)

    StretchDIBits速度测试(HALFTONE) 下面实验中显示窗口大小为1024*768,拉伸模式设为HALFTONE. 一.单通道图像 (1) 保持图像高度为1024,宽度从24到2024递 ...

随机推荐

  1. 微信小程序 添加域名

    1.不校验合法域名.web-view (业务域名).TLS版本以及 HTTPS证书 2.小程序上的请求=>服务器的根地址=>都需要添加微信公众平台(否则会无法发送请求,导致代码报错)

  2. LG P4213【模板】杜教筛(Sum)

    \(\text{Problem}\) 求 \[\sum_{i=1}^n \varphi(i) \] 和 \[\sum_{i=1}^n \mu(i) \] \(1 \le n < 2^{31}\) ...

  3. JZOJ 4320. 【NOIP2015模拟11.5】旅行

    题目 思路 不想写了,直接使用 没错,关键就在求第 \(k\) 小的路径 上述提到堆的做法,我们可以用 \(STL\) 的优先队列来实现 只不过常数有点大~~~ \(Code\) #include&l ...

  4. JZOJ 5343. 【NOIP2017模拟9.3A组】健美猫

    题面 其中 \(1 \leq n \leq 2 \times 10^6\) 分析 考虑每次移动,发现负数对答案贡献少 \(1\),非负数多 \(1\) 每次移动都加了 \(1\) 负数变非负数关键点在 ...

  5. Quartz.Net 主要概念介绍和吐槽

    我们经常遇到需要定时执行某些任务的情况,比如清理缓存.异步结果轮询等,如果不打算造轮子,那么选择一款合适的定时任务组件就很关键了.所幸,.Net 世界中的选项并不多:) 选型 主要有以下四款: Qua ...

  6. DESIR队列:早期axSpA的脊柱放射学进展

    DESIR队列:早期axSpA的脊柱放射学进展 EULAR2015; PresentID: FRI0234 SPINAL RADIOGRAPHIC PROGRESSION IN EARLY AXIAL ...

  7. 基于Linux编译JDK18

    1.概述 JDK都没手动编译过,敢说自己是Java程序员吗?(By 羊哥--JDK都没手动编译过,敢说自己是Java程序员吗?实战编译Java源码(JDK源码,JVM)视频教程_哔哩哔哩_bilibi ...

  8. mysql 数据库的一些参数,常用模版和调优方式

    innodb_buffer_pool_size :这个参数是Mysql数据库最重要的参数之一,表示InnoDB类型的 表 和索引的最大缓存 .它不仅仅缓存 索引数据 ,还会缓存 表的数据 .这个值越大 ...

  9. Vue mixin混入的介绍

    功能:可以把多个组件共用的配置提取成一个混入对象 使用方式: 1.第一步:定义混合,例如: 2.第二步:使用混合(全局混合和局部混合) (1)局部混合 mixins:['XXX'] (2)全局混合 V ...

  10. opencv-python 批量更改图像分辨率并且保留图像原有的透明度

    opencv-python环境安装:https://www.cnblogs.com/technicist/p/17138657.html 案例代码(批量压缩图像分辨率为原来的一半,例如2400*139 ...