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?”

“因为我懒。。”

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

    关注

    6036

    文章

    44555

    浏览量

    635065
  • RTT
    RTT
    +关注

    关注

    0

    文章

    65

    浏览量

    17122
  • RT-Thread
    +关注

    关注

    31

    文章

    1288

    浏览量

    40111
  • RISC-V
    +关注

    关注

    45

    文章

    2277

    浏览量

    46149
  • ch32
    +关注

    关注

    0

    文章

    73

    浏览量

    639
收藏 人收藏

    评论

    相关推荐

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

    RTT大赛作品连载】AB32VG1评估板到货控制彩灯测试篇;接下来看看在如何AB32VG1评估板控制彩灯! 在RT-ThreadStudio新建项目到对应开发配置及下载及验证测试!
    的头像 发表于 11-07 19:39 5201次阅读
    【<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-
    的头像 发表于 11-15 08:45 8660次阅读
    【<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'>CH32V</b>103开发板资料及上电首测

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

    RTT大赛作品连载】AB32VG1评估板 音乐播放器
    的头像 发表于 11-12 21:11 6233次阅读
    【<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大赛作品
    的头像 发表于 11-13 10:01 1w次阅读
    【<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 7972次阅读

    RTT大赛作品连载】 PWM操作蜂鸣器

    使用AB32VG1的PWM来操作无源蜂鸣器,能够输出频率为1KHz到20KHz的声音。
    的头像 发表于 12-06 08:36 9653次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】 PWM操作蜂鸣器

    RTT大赛作品连载】 OLED显示中文

    使用AB32VG1操作OLED显示文字信息,包括汉字取模方式介绍,汉字显示函数编写.
    的头像 发表于 12-06 09:25 8948次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】 OLED显示中文

    【文章连载】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

    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 4.1w次阅读
    <b class='flag-5'>RTT</b>是什么?对TCP中<b class='flag-5'>RTT</b>时延的理解

    RTT_Draco的外置uart接口(TXD,RXD)怎么配置和使用呢?

    RTT_Draco的外置uart接口(TXD,RXD)怎么配置和使用呢? RT-Thread的RTT_Draco是一款高性能的MCU芯片,它提供了外置UART接口(TXD,RXD)用于与外部设备进行
    的头像 发表于 01-16 17:11 1046次阅读