在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

DMA不產生傳輸完成中斷

jf_pJlTbmA9 ? 來源:STM32單片機 ? 作者:STM32單片機 ? 2023-10-18 16:44 ? 次閱讀

1、前言

某客戶發現修改代碼后,STM32U59 SPI DMA 發送未產生傳輸完成中斷,但修改的代碼跟 SPI 以及 DMA 毫無關聯。

2、調研

回退代碼修改后問題消失,可以確認硬件正常。檢查 SPI 發送對應的 DMA 句柄的

ErrorCode,發現 HAL_DMA_ERROR_DTE(Date Transfer Error)置位。嘗試修改軟件,發現調整下某個全局變量初值,或屏蔽某些變量,都能解決問題。

為屏蔽 RTOS 及應用代碼可能帶來的影響,調整客戶 SPI 和 DMA 初始化代碼位置到緊跟 MCU 復位后配置時鐘,初始化全局變量,并在初始化完成后立即發送一包數據,測試下來問題仍存在,說明問題和后續 RTOS 及應用代碼代碼無關。

為澄清全局變量初始化對 SPI 和 DMA 的影響,在全局變量初始化完成、初始化 SPI

和 DMA 前、后,分別檢查 RCC、SPI 和 DMA 寄存器,和正常時對比無差異。

3、分析

客戶使用的是 GPDMA 的 Linked List 模式,此模式下 DMA 傳輸相關的 8 個寄存器不通過軟件直接設置,而是需要軟件把待設定的寄存器參數先放入緩沖區,再將緩沖區地址賦到 DMA 寄存器 CxLBAR(高 16 位)和 CxLLR(低 16 位),使能 DMA 時硬件自動將這些參數加載到 DMA 通道對應的寄存器中。

跟蹤代碼執行,在 DMA 使能前,查看參數緩沖區(地址:0x2001 FFF0)。確認

DMA 參數緩沖區中源地址寄存器參數 0x200 e0618、目標地址寄存器參數 0x4001 3020都是正確的;使能 DMA 后,發現 DMA CxDAR 寄存器數據異常 0x1382 932e。

wKgZomUD3n2AA8jVAACmM_ZjdoI923.png

wKgZomUD3n6ARAAwAADs0dY7D2o512.png

查閱參考手冊,找到其對對緩沖區限制的描述:必須 4 字節對齊,且不能跨 64Kbyte邊界;而用戶的緩沖區地址 0x2001 FFF0(32 字節)剛好跨了 64Kbyte 邊界。鏈接器分配的地址范圍是 0x2001 FFF0 ~ 0x2002 0010,而 GPDMA 實際訪問的數據區間是0x2001 FFF0 ~ 0x2001 FFFF 和 0x20010000 ~ 0x2001000F,把 2001 0000 對應的數據加載到了 DAR 中,隨即引發了 DTE 錯誤。

wKgaomUD3oKABUnsAAHWBCIVSzE190.png

4、處理

處由于增減全局變量、修改變量初值為零或非零,都會影響最終鏈接結果,故通過設置預編譯選項對所有 DMA 鏈表數據結構變量的地址作出限制,來滿足 4 字節對齊且不跨64K Byte 邊界這個約束條件,再次編譯鏈接后進行測試,SPI DMA 功能恢復正常。

5、小結

對這種看似怪異的問題,需要仔細觀察并記錄整個數據傳輸過程,各個關鍵操作前后相關寄存器的變化來獲取第一手資料,對比正常情況并結合參考手冊尋找具體原因。

來源:STM32單片機
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 測試
    +關注

    關注

    8

    文章

    5303

    瀏覽量

    126652
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1706

    瀏覽量

    91583
  • dma
    dma
    +關注

    關注

    3

    文章

    561

    瀏覽量

    100586
收藏 人收藏

    評論

    相關推薦

    AT32F407在USART2 DMA發送數據時,接包接到了要發送的數據,程序還是處于等待傳輸完成的標識判斷中,為什么?

    型號AT32F407,在USART2DMA發送數據時,接包已經接到了要發送的數據,但是程序還是處于等待傳輸完成的標識判斷中,卡死了。請教一下是什么造成的?
    發表于 12-19 06:48

    求助,關于STM32G473 TIM8 DMA burst模式問題求解

    我在配置外部觸發源定時觸發TIM8_CH1輸出PWM時,打算使用DMA1_Channel4在每次TIM8 UP時觸發DMA傳輸來更新ARR、RCR、CCR1寄存器,在DMA
    發表于 07-23 06:39

    CAN發送中斷工作是怎么回事?

    我正確配置了 CAN Tx 中斷。 但中斷沒有發生。 1]我為 Tx 報文傳輸配置 CANFDx_CHy_TXBTIE 寄存器。 2]我還啟用了傳輸完成寄存器。 Tx
    發表于 07-02 06:03

    STM32H743 DMA接收固定長度數據后,并未立即進入DMA傳輸完成中斷,為什么?

    743 單工只接收SPI做從接收AD7768非標準SPI口數據時發現,DMA接收固定長度數據后,并未立即進入DMA傳輸完成中斷,而是在SPI的CS拉高后才進入了
    發表于 05-30 08:21

    TC364如何在觸發CPU中斷的情況下實現QSPI+DMA發送信息?

    總是在傳輸完第二個有效載荷后停止,第三個有效載荷總是丟失,看起來 SPI 傳輸永遠不會完成。 但一旦我更改了 isrProvider,比如 通過使用軟件中斷例程,我可以在一個卷中成
    發表于 05-20 06:19

    stm8L ADC+DMADMA產生中斷的原因?

    如題,stm8L051單片機,多通道采樣DMA傳輸DMA產生中斷,沒有采樣到數據。初始化函數如下: volatileu16 ADC_Co
    發表于 05-07 07:21

    求助,STM32F030 ADC_CFGR1中DMACFG的使用問題求解

    DMA傳輸 30個數據后,觸發DMA傳輸完成中斷,通過DMA_CCR_EN 暫時關閉
    發表于 04-26 07:25

    調試STM32的adc單通道DMA傳輸時,DMA傳輸后就出現值變了的原因?

    1_Channel1,DMA_IT_TC, ENABLE);//使能傳輸完成中斷 從DR可以讀到數據中ADC是沒問題的。就是DMA傳輸到內
    發表于 04-22 06:03

    使用dma的方式來傳輸定時器輸入捕獲的數據,是不是每隔100ms會觸發dma傳輸完成中斷?

    目前使用dma的方式來傳輸定時器輸入捕獲的數據,內存數據大小為2,使用normal模式,100ms打開dma模式,請問,這種情況下,是不是每隔100ms會觸發dma
    發表于 04-18 07:47

    Linux DMA子系統驅動開發

    Streaming DMA在訪問內存地址時經過cache,是non-coherence設備,通常采用streaming mapping的API進行內存申請,在單次DMA傳輸時進行map,在傳輸
    發表于 04-07 14:38 ?888次閱讀
    Linux <b class='flag-5'>DMA</b>子系統驅動開發

    STM32L412KB DMA1與DMA2數據在傳輸時會存在串口數據不正確的情況,為什么?

    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, ADC_DUAL_LENGTH/2); //關閉半傳輸,打開
    發表于 03-28 06:34

    HAL_ADC_Start_DMA函數為什么無法進行第二次觸發?

    我使用定時器觸發adc采集 使用dma傳輸dma傳輸完成中斷中更換HAL_ADC_Start_DMA
    發表于 03-26 07:31

    Stm32G474 DMA傳輸全部完畢后,需要產生中斷并調運回調函數完成相關操作,如何處理?

    Stm32G474,DMA傳輸全部完畢后,需要產生中斷并調運回調函數完成相關操作。請問我如何處理?沒有看到常規的回調函數(例如這樣的HAL_TIM_PeriodElapsedHalfC
    發表于 03-15 08:26

    pwm如何產生指定個數脈沖,而不占用cpu?

    的周期過長或者過短。2.使用dma來實現計數和周期調整。這個辦法可以解決部分計數問題,但當一個周期需要多個脈沖時,會導致內存不足。同時,dma傳輸完成后,也是會產生中斷,同樣會導致脈沖
    發表于 03-14 06:34

    用PDMA接收串口數據時有沒有超時中斷

    我有一個疑問,在設置PDMA接收串口數據的時候,要設置傳輸數據的長度計數,只有當計數為零,產生DMA傳輸完成中斷。 但是在實際應用中,比如
    發表于 01-17 06:14
    主站蜘蛛池模板: 亚洲1卡二卡3卡四卡不卡| 亚洲综合色视频| 亚洲国产成人成上人色| 老色99久久九九精品尤物| 午夜小福利| 4438x成人全国最大| 午夜香港三级在线观看网| 黄色精品视频| 加勒比一到三区| 综合涩| 就要爱综合| 欧美成人 色 图| 超级淫小黄文大全很污的那种 | 国产美女一级视频| 女女综合网| 欧美图片小说视频| 综合色99| 国模在线视频一区二区三区| 国产综合第一页在线视频 | 免费能直接在线观看黄的视频| 天天干夜夜艹| 国产精品久久自在自2021| 久久久久久久综合色一本| 久热首页| 亚洲成a人片在线观看尤物| 成人欧美一区二区三区小说| 性欧美1819| 奇米影视7777| 扒开双腿猛进湿润18p| 黄色片网站日本| 2018天天干天天射| 日韩啪啪电影| 欧美成人免费草草影院| 亚洲天堂电影在线观看| 99日精品欧美国产| 日本不卡在线视频| 国产美女主播在线观看| 免费xxxx大片| 蕾丝视频在线播放| 性色xxx| 欧美日韩一区不卡|