那曲檬骨新材料有限公司

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

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

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

DMA不產(chǎn)生傳輸完成中斷

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

1、前言

某客戶發(fā)現(xiàn)修改代碼后,STM32U59 SPI DMA 發(fā)送未產(chǎn)生傳輸完成中斷,但修改的代碼跟 SPI 以及 DMA 毫無關(guān)聯(lián)。

2、調(diào)研

回退代碼修改后問題消失,可以確認(rèn)硬件正常。檢查 SPI 發(fā)送對(duì)應(yīng)的 DMA 句柄的

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

為屏蔽 RTOS 及應(yīng)用代碼可能帶來的影響,調(diào)整客戶 SPI 和 DMA 初始化代碼位置到緊跟 MCU 復(fù)位后配置時(shí)鐘,初始化全局變量,并在初始化完成后立即發(fā)送一包數(shù)據(jù),測(cè)試下來問題仍存在,說明問題和后續(xù) RTOS 及應(yīng)用代碼代碼無關(guān)。

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

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

3、分析

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

跟蹤代碼執(zhí)行,在 DMA 使能前,查看參數(shù)緩沖區(qū)(地址:0x2001 FFF0)。確認(rèn)

DMA 參數(shù)緩沖區(qū)中源地址寄存器參數(shù) 0x200 e0618、目標(biāo)地址寄存器參數(shù) 0x4001 3020都是正確的;使能 DMA 后,發(fā)現(xiàn) DMA CxDAR 寄存器數(shù)據(jù)異常 0x1382 932e。

wKgZomUD3n2AA8jVAACmM_ZjdoI923.png

wKgZomUD3n6ARAAwAADs0dY7D2o512.png

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

wKgaomUD3oKABUnsAAHWBCIVSzE190.png

4、處理

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

5、小結(jié)

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

來源:STM32單片機(jī)
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)聯(lián)系小編進(jìn)行處理

審核編輯 黃宇

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

    關(guān)注

    8

    文章

    5382

    瀏覽量

    127076
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1722

    瀏覽量

    92139
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    566

    瀏覽量

    100967
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AT32F407在USART2 DMA發(fā)送數(shù)據(jù)時(shí),接包接到了要發(fā)送的數(shù)據(jù),程序還是處于等待傳輸完成的標(biāo)識(shí)判斷中,為什么?

    型號(hào)AT32F407,在USART2DMA發(fā)送數(shù)據(jù)時(shí),接包已經(jīng)接到了要發(fā)送的數(shù)據(jù),但是程序還是處于等待傳輸完成的標(biāo)識(shí)判斷中,卡死了。請(qǐng)教一下是什么造成的?
    發(fā)表于 12-19 06:48

    求助,關(guān)于STM32G473 TIM8 DMA burst模式問題求解

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

    CAN發(fā)送中斷工作是怎么回事?

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

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

    743 單工只接收SPI做從接收AD7768非標(biāo)準(zhǔn)SPI口數(shù)據(jù)時(shí)發(fā)現(xiàn),DMA接收固定長度數(shù)據(jù)后,并未立即進(jìn)入DMA傳輸完成中斷,而是在SPI的CS拉高后才進(jìn)入了
    發(fā)表于 05-30 08:21

    TC364如何在觸發(fā)CPU中斷的情況下實(shí)現(xiàn)QSPI+DMA發(fā)送信息?

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

    DMA產(chǎn)生FIFO error interrupt錯(cuò)誤的原因?

    DMA接收到50個(gè)數(shù)據(jù)后,會(huì)自動(dòng)停止接收數(shù)據(jù)的,并產(chǎn)生完成中斷標(biāo)志,卻產(chǎn)生了FIFO錯(cuò)誤;當(dāng)外部中斷
    發(fā)表于 05-15 06:34

    stm8L ADC+DMADMA產(chǎn)生中斷的原因?

    如題,stm8L051單片機(jī),多通道采樣DMA傳輸DMA產(chǎn)生中斷,沒有采樣到數(shù)據(jù)。初始化函數(shù)如下: volatileu16 ADC_Co
    發(fā)表于 05-07 07:21

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

    DMA傳輸 30個(gè)數(shù)據(jù)后,觸發(fā)DMA傳輸完成中斷,通過DMA_CCR_EN 暫時(shí)關(guān)閉
    發(fā)表于 04-26 07:25

    調(diào)試STM32的adc單通道DMA傳輸時(shí),DMA傳輸后就出現(xiàn)值變了的原因?

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

    使用dma的方式來傳輸定時(shí)器輸入捕獲的數(shù)據(jù),是不是每隔100ms會(huì)觸發(fā)dma傳輸完成中斷?

    目前使用dma的方式來傳輸定時(shí)器輸入捕獲的數(shù)據(jù),內(nèi)存數(shù)據(jù)大小為2,使用normal模式,100ms打開dma模式,請(qǐng)問,這種情況下,是不是每隔100ms會(huì)觸發(fā)dma
    發(fā)表于 04-18 07:47

    Linux DMA子系統(tǒng)驅(qū)動(dòng)開發(fā)

    Streaming DMA在訪問內(nèi)存地址時(shí)經(jīng)過cache,是non-coherence設(shè)備,通常采用streaming mapping的API進(jìn)行內(nèi)存申請(qǐng),在單次DMA傳輸時(shí)進(jìn)行map,在傳輸
    發(fā)表于 04-07 14:38 ?967次閱讀
    Linux <b class='flag-5'>DMA</b>子系統(tǒng)驅(qū)動(dòng)開發(fā)

    STM32L412KB DMA1與DMA2數(shù)據(jù)在傳輸時(shí)會(huì)存在串口數(shù)據(jù)不正確的情況,為什么?

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

    HAL_ADC_Start_DMA函數(shù)為什么無法進(jìn)行第二次觸發(fā)?

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

    Stm32G474 DMA傳輸全部完畢后,需要產(chǎn)生中斷并調(diào)運(yùn)回調(diào)函數(shù)完成相關(guān)操作,如何處理?

    Stm32G474,DMA傳輸全部完畢后,需要產(chǎn)生中斷并調(diào)運(yùn)回調(diào)函數(shù)完成相關(guān)操作。請(qǐng)問我如何處理?沒有看到常規(guī)的回調(diào)函數(shù)(例如這樣的HAL_TIM_PeriodElapsedHalfC
    發(fā)表于 03-15 08:26

    pwm如何產(chǎn)生指定個(gè)數(shù)脈沖,而不占用cpu?

    的周期過長或者過短。2.使用dma來實(shí)現(xiàn)計(jì)數(shù)和周期調(diào)整。這個(gè)辦法可以解決部分計(jì)數(shù)問題,但當(dāng)一個(gè)周期需要多個(gè)脈沖時(shí),會(huì)導(dǎo)致內(nèi)存不足。同時(shí),dma傳輸完成后,也是會(huì)產(chǎn)生中斷,同樣會(huì)導(dǎo)致脈沖
    發(fā)表于 03-14 06:34
    澳门百家乐官网看路博客| 网上足球投注| 百家乐官网骰盅规则| 大发888娱乐场c17| 百家乐全自动分析软件| 新澳博百家乐官网娱乐城| 免费百家乐追号软件| 百家乐玩家技巧分享| 百家乐官网赌场技巧论坛| 博雅德州扑克| 澳门百家乐娱乐网| 百家乐四式正反路| 百家乐官网双筹码怎么出千| 百家乐官网连黑记录| 德州扑克软件| 大发888娱乐场官方| 百家乐赌博博彩赌博网| 百家乐网络公式| 百家乐官网官网网站| 精英百家乐官网现金网| 太阳城亚洲开户| 娱乐城送18元体验金| 赌球记| 威尼斯人娱乐城代理申请| 澳门百家乐路子分析| 百家乐可以算牌么| 吕百家乐官网赢钱律| 大丰收百家乐官网的玩法技巧和规则 | 真钱娱乐游戏| 博乐娱乐城| 一起pk棋牌游戏| 沈阳盛京棋牌官网| 876棋牌游戏中心| 大发888官网e世博官方网站| 专业百家乐官网筹码| 百家乐官网庄闲符号记| 最新百家乐官网双面数字筹码| 百家乐官网群boaicai| 澳门百家乐官网要注意啥| 网络百家乐官网真人游戏| 明溪百家乐官网的玩法技巧和规则 |