0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【RTT大賽作品連載】CH32V RTT微秒延時的實現(xiàn)

煲仔鹵煮的煉鋼 ? 來源:煲仔鹵煮的煉鋼 ? 作者:煲仔鹵煮的煉鋼 ? 2021-11-29 08:30 ? 次閱讀

CH32V103是沁恒出的一款基于RiscV核心的單片機,在官網(wǎng)有該芯片資料、庫函數(shù)和例程,另外沁恒還開發(fā)了一款I(lǐng)DE:MounRiver Studio。里面也提供了不少的例程可以參考,其中就有帶rt-thread操作系統(tǒng)的例程,雖然只有一個LED的,但聊勝于無,畢竟rt-thread的bsp中還沒有支持到這個芯片。

所以我就基于led功能進行了新功能的開發(fā),但發(fā)現(xiàn)其中bsp這塊確實匱乏,只有g(shù)pio和uart的drv實現(xiàn),其他的都還沒做移植,也罷,那我就??!

先不用其他了。。iic spi之類的直接用庫函數(shù)來操作了。什么?你說移植下不就好了?

對啊,但是打工人沒時間啊。。哎

會到本帖主題,在調(diào)試IIC的時候我發(fā)現(xiàn)總是卡在busy,初始化之后就開始總線繁忙,怎么也越不過去了。。。雖然我知道這不一定是像STM32那樣的硬件故障導致的,但是卡的我還是選擇了軟件仿真iic,結(jié)果直接就能讀到數(shù)據(jù)了。。。

嗯,本帖也不是講IIC的,是在過程中我發(fā)現(xiàn)沒有微妙延時啊,drv_common也沒有移植過來。。。所以rt_hw_us_delay()這個光有聲明沒有實現(xiàn)。。

于是我參考drv_common中的實現(xiàn)方法,實現(xiàn)了個

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的手冊中有描述,系統(tǒng)計數(shù)器低位/高位寄存器可以通過8位/16位/32位來讀取,但只能8位來寫入。

poYBAGGjWSmATYs7AAFbSXibDH4796.png

反正也只是讀取數(shù)據(jù),就無所謂了。

#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);
}

這段函數(shù)定義在board.c中,這樣就不用聲明,直接可以用了。

這樣我的模擬iic速度就起來了。

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

“因為我懶。?!?/span>

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6023

    文章

    44380

    瀏覽量

    628653
  • RTT
    RTT
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    16992
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39453
  • RISC-V
    +關(guān)注

    關(guān)注

    44

    文章

    2144

    瀏覽量

    45716
  • ch32
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    589
收藏 人收藏

    評論

    相關(guān)推薦

    RTT大賽作品連載】AB32VG1評估板到貨控制彩燈測試

    RTT大賽作品連載】AB32VG1評估板到貨控制彩燈測試篇;接下來看看在如何AB32VG1評估板控制彩燈! 在RT-ThreadStudio新建項目到對應開發(fā)配置及下載及驗證測試!
    的頭像 發(fā)表于 11-07 19:39 ?5069次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】AB32VG1評估板到貨控制彩燈測試

    RTT大賽作品連載CH32V103開發(fā)板資料及上電首測

    簡介 ? 參加論壇舉辦的rtt大賽也有幾天了,我選用的是CH32V103的板子,第一步就是收集板卡的相關(guān)資料了。 CH32V103是 沁恒微電子設(shè)計的一款RSIC-
    的頭像 發(fā)表于 11-15 08:45 ?8379次閱讀
    【<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開發(fā)板資料及上電首測

    RTT大賽作品連載】AB32VG1評估板 音樂播放器

    RTT大賽作品連載】AB32VG1評估板 音樂播放器
    的頭像 發(fā)表于 11-12 21:11 ?6109次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】AB32VG1評估板 音樂播放器

    RTT大賽作品連載】中科藍訊AB32VG1開發(fā)板開箱篇

    介紹電路原理圖分析接口說明,AB32VG1開發(fā)板是以中科藍訊(Bluetrum)公司推出的基于RISC-V架構(gòu)的高配置芯片AB5301A為核心所組成的。【RTT大賽作品
    的頭像 發(fā)表于 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開發(fā)板開箱篇

    RTT大賽作品連載CH32V103 USBHID鍵盤鼠標

    基于CH32V103實現(xiàn)了USB HID的鍵盤鼠標功能,提供寫好的代碼文件,歡迎fork。
    的頭像 發(fā)表于 11-29 08:49 ?7698次閱讀

    RTT大賽作品連載】 PWM操作蜂鳴器

    使用AB32VG1的PWM來操作無源蜂鳴器,能夠輸出頻率為1KHz到20KHz的聲音。
    的頭像 發(fā)表于 12-06 08:36 ?9382次閱讀
    【<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顯示文字信息,包括漢字取模方式介紹,漢字顯示函數(shù)編寫.
    的頭像 發(fā)表于 12-06 09:25 ?8622次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】 OLED顯示中文

    【文章連載】RT-Thread創(chuàng)新應用大賽文章匯總

    連載】中科藍訊AB32VG1開發(fā)板開箱篇專欄作者:煲仔鹵煮的煉鋼【RTT大賽作品連載CH32V
    發(fā)表于 10-11 15:13

    【有獎活動】RT-Thread創(chuàng)新應用大賽作品連載征文

    禮品:https://jifen.elecfans.com/index.html?文章標題格式:【RTT大賽作品連載】+自擬內(nèi)容?文章作品
    發(fā)表于 10-21 18:49

    【二等獎】RT-Thread創(chuàng)新應用設(shè)計大賽作品1

    ,于是研究了下并寫了【RTT大賽作品連載CH32V RTT
    發(fā)表于 01-25 11:49

    RTT Studio ch32v307的堆內(nèi)存最大化

    看看ch32v的各個段是怎么分配的,不熟悉鏈接腳本的盆友可以先看這個,這個文章講的挺好,RISC-V MCU CH32V307 ld鏈接腳本說明點開Link.ld(RTT Studio
    發(fā)表于 02-07 11:55

    華大單片機HC32L136+RTT踩坑(官方延時函數(shù))

    問題:移植完RTT后運行正常,加入ADC測量后卡死在空閑線程。原因:華大單片機官方庫中含有延時函數(shù),延時函數(shù)使用滴答定時器實現(xiàn)。在ADC使用中必需開啟BGR模塊(功能沒看懂),開啟過程
    發(fā)表于 11-23 17:21 ?13次下載
    華大單片機HC32L136+<b class='flag-5'>RTT</b>踩坑(官方<b class='flag-5'>延時</b>函數(shù))

    MM32F013x——RTT使用技巧

    SEGGER的實時傳輸(Real Time Transfer, RTT)是嵌入式應用中用戶I/O交互的一種新技術(shù)。J-Link RTT Viewer是在調(diào)試主機上使用RTT功能的Win...
    發(fā)表于 01-25 18:34 ?4次下載
    MM32F013x——<b class='flag-5'>RTT</b>使用技巧

    RTT是什么?對TCP中RTT時延的理解

    最近服務(wù)器環(huán)境部署了**tcprtt**網(wǎng)絡(luò)時延監(jiān)控,發(fā)現(xiàn)不同服務(wù)器不同節(jié)點之間的RTT時延表象非常奇怪,無法準確的判斷服務(wù)器的網(wǎng)絡(luò)情況。
    的頭像 發(fā)表于 10-09 16:24 ?3.7w次閱讀
    <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)用于與外部設(shè)備進行
    的頭像 發(fā)表于 01-16 17:11 ?747次閱讀