關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > STM32中采用DMA實現方波的產生和捕獲

        STM32中采用DMA實現方波的產生和捕獲

        作者: 時間:2011-11-05 來源:網絡 收藏

        4 +TIMx多路
        假設有一個需要記錄并分析。一種方案是設置CPU引腳在上升沿和下降沿中斷,然后在中斷中記錄該時刻。這種處理方式的實時性和效率會差一些,因為進出中斷本身就需要一定的指令周期(Cortex-M3為12+12或6+12個系統周期),而且需要考慮多個中斷同時發生的最壞情況,對可檢測的最大頻率有一定的限制。另一種方案是輪詢的方式不斷查詢該引腳的狀態并記錄上升沿和下降沿的時刻,這種方式下系統幾乎不能處理其他的任務了。
        +TIMx的方式來上升沿和下降沿時刻,有利于提高系統的實時性和執行效率。通過TIMx的功能將方波的電平跳變時刻記錄在比較/捕獲寄存器中,然后將該值自動傳輸到內存,只有當DMA觸發半滿或全滿事件時CPU才需要進入中斷處理數據。通過記錄方波的上升沿和下降沿時刻,然后將兩個時刻相減,進而就能得到所有低沿和高沿的寬度,最后進行后續的分析處理。這種方式下中斷頻率僅為方波頻率的4/N(N為緩沖區大小)。
        圖1為TIMx工作在捕獲模式下一個通道的示意圖。

        本文引用地址:http://www.104case.com/article/161424.htm

        d.jpg


        其中TI1為CPU引腳的輸入,經過濾波(新的電平必須保持一定時間才認為有效,以防止高頻噪聲的干擾)后進入后繼的邊沿極性選擇,最后經過分頻作為捕獲信號的輸入。這里TI2F為相鄰通道經過濾波后的信號,也就是說一個引腳的信號可作為TIMx兩個通道的輸入捕獲信號,這樣信號只需要接一個CPU引腳就可以觸發兩個時鐘通道了。
        將輸入方波接到CPU一個引腳上,假設該引腳對應于圖上的TI1,設定其在下降沿觸發通道1的捕獲事件,而其在上升沿觸發通道2的捕獲事件,事件發生后申請DMA將捕獲的比較/捕獲寄存器的值保存起來。示例代碼如下:
        c.jpg
        其他部分與第3節中比較輸出的代碼基本一致。

        5 總結
        測試中系列微控制器工作在36 MHz,可出1路最高1.5 MHz的方波,可捕獲1 MHz的方波,而此時CPU的執行幾乎不受影響。這里采用DMA來方波的和捕獲,極大地提高了系統的實時性和執行效率,減少了中斷次數,節省了寶貴的資源。這種方案也可以用來高效的模擬串口。
        DMA的傳輸需要多個系統周期的,例如采用DMA實現內存到內存的搬移,每次傳輸需要5個系統周期,而內存到外圍的一次傳輸需要2個APB周期+5個AHB周期。這樣用上述方法的方波最小沿(低沿或高沿)為14個周期(包括比較/捕獲寄存器到內部影子寄存器的傳輸等)。若有更高的需求,應考慮其他的實現方案。另外,若有多個DMA同時工作,應考慮最壞情況下DMA的響應時間,以避免錯誤發生。

        塵埃粒子計數器相關文章:塵埃粒子計數器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 隆化县| 九寨沟县| 石狮市| 曲松县| 建瓯市| 高清| 郸城县| 吉木乃县| 大方县| 拜泉县| 西平县| 永泰县| 察隅县| 沾益县| 砚山县| 儋州市| 民权县| 延寿县| 金坛市| 肥乡县| 赞皇县| 花莲县| 洛阳市| 黄浦区| 酒泉市| 武宁县| 阳泉市| 榕江县| 扎兰屯市| 襄汾县| 灵川县| 太仆寺旗| 当阳市| 桃园市| 黑水县| 共和县| 洮南市| 肥城市| 德保县| 石门县| 奉节县|