CH32V307/CH32V203 IO极限翻转测试

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

GPIO初始化代码如下:

/*********************************************************************
* @fn GPIO_Toggle_INIT
*
* @brief Initializes GPIOA.0
*
* @return none
*/
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
} int main(void)
{ Delay_Init();
USART_Printf_Init(115200);
printf("ch32v307 hello world\r\n"); GPIO_Toggle_INIT(); while(1)
{
GPIOA->OUTDR |= GPIO_Pin_0;
GPIOA->OUTDR &= ~GPIO_Pin_0;
}
}

使用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 等外设模拟。

最新文章

  1. C++ Sqlite3
  2. 聚光灯下的熊猫TV技术架构演进
  3. centos下在线安装mysql
  4. JavaScript数组删除重复元素(去重)的方法
  5. (五)Struts2 标签
  6. [转] 使用git自动部署简单网站
  7. Linux Kernel 空指针逆向引用拒绝服务漏洞
  8. 对比iOS网络组件:AFNetworking VS ASIHTTPRequest
  9. Xamarin devexpress datagrid 样式
  10. HTML浅识
  11. 自定义 cell 自适应高度
  12. spring Annotation 笔记2.1
  13. 帮助Bsny(乱搞做法)
  14. Delphi XE7试用记录1
  15. 使用Retrofit2+RxJava2+ProtoBuf实现网络请求
  16. IIS性能优化篇
  17. mysql通信协议的半双工机制理解
  18. Computer - 在VM7虚拟机中使用主机打印机
  19. libgdx学习记录8——对话框Dialog
  20. 路径重写,适用于laravel,yii

热门文章

  1. Vue组件之间的通信方式都有哪些?
  2. NOIP2022 总结
  3. 流量加密之:使用Openssl反弹加密shell
  4. 代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
  5. vue路由中pdfjs插件使用及找不到 viewer.html解决
  6. 重新配置 Idea Webapp 部署
  7. unity 音频曲线
  8. ubuntu20.04虚拟机无法自动获取IP地址
  9. bash编辑功能,在命令行里编辑快捷键
  10. ts(keyof,typeof)