CH32V307/CH32V203 IO翻转速度测试
2024-10-19 21:28:22
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
这条异或指令的执行周期比 ori
或 addi
指令执行周期长导致的。
为了测试 IO 的极限翻转速度,将执行指令压缩至最短,不用 ori 或 addi 指令,共3条汇编指令,代码如下:
测试结果如下:
IO翻转速度提高到 24MHz, 3条汇编指令共花费 144Mhz / 24MHz = 6 个周期。
上面测试的是GPIO的极限翻转速率,即通过GPIO引脚模拟通信协议波特率最高不会超过 24Mbps。
如需更高频率,可以通过 SPI 等外设模拟。
最新文章
- C++ Sqlite3
- 聚光灯下的熊猫TV技术架构演进
- centos下在线安装mysql
- JavaScript数组删除重复元素(去重)的方法
- (五)Struts2 标签
- [转] 使用git自动部署简单网站
- Linux Kernel 空指针逆向引用拒绝服务漏洞
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest
- Xamarin devexpress datagrid 样式
- HTML浅识
- 自定义 cell 自适应高度
- spring Annotation 笔记2.1
- 帮助Bsny(乱搞做法)
- Delphi XE7试用记录1
- 使用Retrofit2+RxJava2+ProtoBuf实现网络请求
- IIS性能优化篇
- mysql通信协议的半双工机制理解
- Computer - 在VM7虚拟机中使用主机打印机
- libgdx学习记录8——对话框Dialog
- 路径重写,适用于laravel,yii
热门文章
- Vue组件之间的通信方式都有哪些?
- NOIP2022 总结
- 流量加密之:使用Openssl反弹加密shell
- 代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
- vue路由中pdfjs插件使用及找不到 viewer.html解决
- 重新配置 Idea Webapp 部署
- unity 音频曲线
- ubuntu20.04虚拟机无法自动获取IP地址
- bash编辑功能,在命令行里编辑快捷键
- ts(keyof,typeof)