0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【RTT大赛作品连载】CH32V RTT微秒延时的实现

煲仔卤煮的炼钢 来源:煲仔卤煮的炼钢 作者:煲仔卤煮的炼钢 2021-11-29 08:30 次阅读

CH32V103是沁恒出的一款基于RiscV核心的单片机,在官网有该芯片资料、库函数和例程,另外沁恒还开发了一款IDE:MounRiver Studio。里面也提供了不少的例程可以参考,其中就有带rt-thread操作系统的例程,虽然只有一个LED的,但聊胜于无,毕竟rt-thread的bsp中还没有支持到这个芯片。

所以我就基于led功能进行了新功能的开发,但发现其中bsp这块确实匮乏,只有gpio和uart的drv实现,其他的都还没做移植,也罢,那我就!!

先不用其他了。。iic spi之类的直接用库函数来操作了。什么?你说移植下不就好了?

对啊,但是打工人没时间啊。。哎

会到本帖主题,在调试IIC的时候我发现总是卡在busy,初始化之后就开始总线繁忙,怎么也越不过去了。。。虽然我知道这不一定是像STM32那样的硬件故障导致的,但是卡的我还是选择了软件仿真iic,结果直接就能读到数据了。。。

嗯,本帖也不是讲IIC的,是在过程中我发现没有微妙延时啊,drv_common也没有移植过来。。。所以rt_hw_us_delay()这个光有声明没有实现。。

于是我参考drv_common中的实现方法,实现了个

void rt_hw_us_delay(rt_uint32_t us)
{
    rt_uint32_t start, now, delta, reload, us_tick;
    start = SysTick->VAL;
    reload = SysTick->LOAD;
    us_tick = SystemCoreClock / 1000000UL;
    do {
        now = SysTick->VAL;
        delta = start > now ? start - now : reload + start - now;
    } while(delta < us_tick * us);
}

因为CH32V103的systick寄存器定义和st的有些差异,因此这里我就直接取值定义了两个宏,在CH32V103的手册中有描述,系统计数器低位/高位寄存器可以通过8位/16位/32位来读取,但只能8位来写入。

poYBAGGjWSmATYs7AAFbSXibDH4796.png

反正也只是读取数据,就无所谓了。

#define SysTick_VAL          ((UINT32 *) 0xE000F004)
#define SysTick_LOAD         ((UINT32 *) 0xE000F00C)
void rt_hw_us_delay(rt_uint32_t us)
{
    rt_uint32_t start, now, delta, reload, us_tick;
    start = *SysTick_VAL;
    reload = *SysTick_LOAD;
    us_tick = SystemCoreClock / 1000000UL;
    do {
        now = *SysTick_VAL;
        delta = start > now ? start - now : reload + start - now;
    } while(delta < us_tick * us);
}

这段函数定义在board.c中,这样就不用声明,直接可以用了。

这样我的模拟iic速度就起来了。

“为啥不移植下drv_common.c?”

“因为我懒。。”

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5998

    文章

    43963

    浏览量

    620688
  • RTT
    RTT
    +关注

    关注

    0

    文章

    63

    浏览量

    16879
  • RT-Thread
    +关注

    关注

    31

    文章

    1148

    浏览量

    38861
  • RISC-V
    +关注

    关注

    41

    文章

    1895

    浏览量

    45041
  • ch32
    +关注

    关注

    0

    文章

    73

    浏览量

    508
收藏 人收藏

    评论

    相关推荐

    RTT大赛作品连载】AB32VG1评估板到货控制彩灯测试

    RTT大赛作品连载】AB32VG1评估板到货控制彩灯测试篇;接下来看看在如何AB32VG1评估板控制彩灯! 在RT-ThreadStudio新建项目到对应开发配置及下载及验证测试!
    的头像 发表于 11-07 19:39 4844次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】AB32VG1评估板到货控制彩灯测试

    RTT大赛作品连载CH32V103开发板资料及上电首测

    简介   参加论坛举办的rtt大赛也有几天了,我选用的是CH32V103的板子,第一步就是收集板卡的相关资料了。 CH32V103是 沁恒微电子设计的一款RSIC-V的单片机,使用了R
    的头像 发表于 11-15 08:45 7603次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】<b class='flag-5'>CH</b>32V103开发板资料及上电首测

    RTT大赛作品连载】AB32VG1评估板 音乐播放器

    RTT大赛作品连载】AB32VG1评估板 音乐播放器
    的头像 发表于 11-12 21:11 5878次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】AB32VG1评估板 音乐播放器

    RTT大赛作品连载】中科蓝讯AB32VG1开发板开箱篇

    介绍电路原理图分析接口说明,AB32VG1开发板是以中科蓝讯(Bluetrum)公司推出的基于RISC-V架构的高配置芯片AB5301A为核心所组成的。【RTT大赛作品连载】中科蓝讯A
    的头像 发表于 11-13 10:01 9695次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】中科蓝讯AB32VG1开发板开箱篇

    RTT大赛作品连载CH32V103 USBHID键盘鼠标

    基于CH32V103实现了USB HID的键盘鼠标功能,提供写好的代码文件,欢迎fork。
    的头像 发表于 11-29 08:49 7310次阅读

    【英飞凌PSoC 6】新建RTT工程

    介绍英飞凌PSoC 6 RTT开发板环境创建
    的头像 发表于 04-24 15:29 1449次阅读
    【英飞凌PSoC 6】新建<b class='flag-5'>RTT</b>工程

    【文章连载】RT-Thread创新应用大赛文章汇总

    连载】中科蓝讯AB32VG1开发板开箱篇专栏作者:煲仔卤煮的炼钢【RTT大赛作品连载CH32V
    发表于 10-11 15:13

    【有奖活动】RT-Thread创新应用大赛作品连载征文

    礼品:https://jifen.elecfans.com/index.html▷文章标题格式:【RTT大赛作品连载】+自拟内容▷文章作品
    发表于 10-21 18:49

    【二等奖】RT-Thread创新应用设计大赛作品1

    ,于是研究了下并写了【RTT大赛作品连载CH32V RTT
    发表于 01-25 11:49

    为什么要使用RTTRTT怎么用?

    RTT是什么?为什么要使用RTTRTT怎么用?
    发表于 02-16 06:17

    请问CH32V307V-R1运行RTT网络例程时以太网网口灯不亮如何处理?

    开发板:CH32V307V-R1系统:官方RTT例程:官方内置10MPHY以太网例程问题描述:在运行官方提供的例程时发现以太网网口灯不亮,但是裸机的以太网例程却能点亮,用的是C0、C1两个io口
    发表于 05-10 16:06

    RTT Studio ch32v307的堆内存最大化

    看看ch32v的各个段是怎么分配的,不熟悉链接脚本的盆友可以先看这个,这个文章讲的挺好,RISC-V MCU CH32V307 ld链接脚本说明点开Link.ld(RTT Studio
    发表于 02-07 11:55

    华大单片机HC32L136+RTT踩坑(官方延时函数)

    问题:移植完RTT后运行正常,加入ADC测量后卡死在空闲线程。原因:华大单片机官方库中含有延时函数,延时函数使用滴答定时器实现。在ADC使用中必需开启BGR模块(功能没看懂),开启过程
    发表于 11-23 17:21 13次下载
    华大单片机HC32L136+<b class='flag-5'>RTT</b>踩坑(官方<b class='flag-5'>延时</b>函数)

    MM32F013x——RTT使用技巧

    SEGGER的实时传输(Real Time Transfer, RTT)是嵌入式应用中用户I/O交互的一种新技术。J-Link RTT Viewer是在调试主机上使用RTT功能的Win...
    发表于 01-25 18:34 4次下载
    MM32F013x——<b class='flag-5'>RTT</b>使用技巧

    RTT是什么?对TCP中RTT时延的理解

    最近服务器环境部署了**tcprtt**网络时延监控,发现不同服务器不同节点之间的RTT时延表象非常奇怪,无法准确的判断服务器的网络情况。
    的头像 发表于 10-09 16:24 1.8w次阅读
    <b class='flag-5'>RTT</b>是什么?对TCP中<b class='flag-5'>RTT</b>时延的理解