久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 948|回復: 0
打印 上一主題 下一主題
收起左側

msp432p401r單片機adc+dma 問題提問

[復制鏈接]
跳轉到指定樓層
樓主
ID:1128952 發表于 2024-7-14 14:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
提問:
近期,我在學習msp432p401r單片機時,想用msp的adc進行多通道采集,然后加上dma數據轉運。以下是代碼起初我是直接用的dma里的adc通道,發現不行。然后我就仿照官方例程里的進行數組到數組間的轉運 resultsBuffer -->adc 的轉運,結果還是失敗了
在主函數里我就是顯示了一下數組里的值,發現程序卡死。希望能得到大佬的幫助。

#include "headfile.h"
#include "adc.h"
#include "ml_oled.h"

//左到右 4.3   4.4   4.5   4.6   4.7
//                  10        9          8            7          6
uint16_t adc[5];
uint16_t resultsBuffer[5];
void ADC_config(void)
{
        /* 啟用浮點運算的FPU */
    MAP_FPU_enableModule();
    MAP_FPU_enableLazyStacking();
        
    /* Initializing ADC (MCLK/1/1) */
    MAP_ADC14_enableModule();                                                                 //使能ADC14模塊
    MAP_ADC14_initModule(ADC_CLOCKSOURCE_MCLK, ADC_PREDIVIDER_4, ADC_DIVIDER_5, ADC_NOROUTE); //初始化ADC 時鐘 分頻  通道 2.4MHz

        
    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P4, GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7| GPIO_PIN3| GPIO_PIN4, GPIO_TERTIARY_MODULE_FUNCTION);
//        MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN1 | GPIO_PIN2, GPIO_TERTIARY_MODULE_FUNCTION);                //
    MAP_ADC14_configureMultiSequenceMode(ADC_MEM6, ADC_MEM10, true);
        MAP_ADC14_configureConversionMemory(ADC_MEM6, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A6, ADC_NONDIFFERENTIAL_INPUTS);
    MAP_ADC14_configureConversionMemory(ADC_MEM7, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A7, ADC_NONDIFFERENTIAL_INPUTS);
        MAP_ADC14_configureConversionMemory(ADC_MEM8, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A8, ADC_NONDIFFERENTIAL_INPUTS);
        MAP_ADC14_configureConversionMemory(ADC_MEM9, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A9, ADC_NONDIFFERENTIAL_INPUTS);
        MAP_ADC14_configureConversionMemory(ADC_MEM10, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A10, ADC_NONDIFFERENTIAL_INPUTS);


    ADC14_enableInterrupt(ADC_INT10);

    /* Enabling Interrupts */
    MAP_Interrupt_enableInterrupt(INT_ADC14); //ADC模塊的中斷
    MAP_Interrupt_enableMaster();

    /* Setting up the sample timer to automatically step through the sequence
     * convert.
     */
    ADC14_enableSampleTimer(ADC_AUTOMATIC_ITERATION);

    /* Triggering the start of the sample */
    MAP_ADC14_enableConversion();        //使能開始轉換(觸發后 自動ADC上電)
    MAP_ADC14_toggleConversionTrigger(); //開啟第一次軟件觸發

}
////////////////////DMA配置///////////////////////////////
/* DMA Control Table  這一段是必須要有的*///
#if defined(__TI_COMPILER_VERSION__)        
#pragma DATA_ALIGN(controlTable, 1024)        
#elif defined(__IAR_SYSTEMS_ICC__)               
#pragma data_alignment = 1024        
#elif defined(__GNUC__)
__attribute__((aligned(1024)))
#elif defined(__CC_ARM)
__align(1024)
#endif
uint8_t controlTable[1024];
/**************************************/

#define DAM_SIZE 1024
uint16_t data_array1[DAM_SIZE]; // DMA數組

void DMA_config(void)
{
    MAP_WDT_A_holdTimer(); // 關閉看門狗

    memset(data_array1, 0x11, DAM_SIZE); // 目標數組初始化


    DMA_enableModule();               // 使能DMA模塊
    DMA_setControlBase(controlTable); // 設置控制表基地址

    DMA_disableChannelAttribute(DMA_CH0_RESERVED0,
                                UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
                                    UDMA_ATTR_HIGH_PRIORITY |
                                    UDMA_ATTR_REQMASK); // 禁用通道特征

    DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH0_RESERVED0, UDMA_SIZE_16 | UDMA_SRC_INC_16 | UDMA_DST_INC_16 | UDMA_ARB_1);
    // 設置通道控制參數                   ADC映射        主數據結構     16位數據大小            源地址增量        目標地址增量      仲裁大小
    DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH0_RESERVED0, UDMA_MODE_AUTO, resultsBuffer, adc, 5);
    // 設置通道傳輸參數               ADC映射        主數據結構         自動模式                        源數據            目標數據    傳輸數量



    MAP_Interrupt_disableSleepOnIsrExit();



    DMA_requestChannel(0);            
//    DMA_assignChannel(DMA_CH0_RESERVED0); // 指定外設映射

    DMA_assignInterrupt(DMA_INT0, 0);
    Interrupt_enableInterrupt(INT_DMA_INT0);
    DMA_clearInterruptFlag(0);
    Interrupt_enableMaster();

    DMA_enableChannel(0);
    ADC14_enableConversion();
    DMA_requestSoftwareTransfer(0); //
}
void DMA_INT1_IRQHandler(void)
{

    DMA_requestChannel(0);           
    DMA_assignChannel(DMA_CH0_RESERVED0); // 指定外設映射

    DMA_assignInterrupt(DMA_INT0, 0);
    Interrupt_enableInterrupt(INT_DMA_INT0);
    DMA_clearInterruptFlag(0);

    DMA_enableChannel(0);
    ADC14_enableConversion();

    /* Switch between primary and alternate bufferes with DMA's PingPong mode */

        DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH0_RESERVED0,
                              UDMA_SIZE_16 | UDMA_SRC_INC_16 | UDMA_DST_INC_16 | UDMA_ARB_1);
        DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH0_RESERVED0,
                               UDMA_MODE_AUTO, resultsBuffer,
                               adc, 5);
    DMA_requestSoftwareTransfer(0);
}
void ADC14_IRQHandler(void)
{
    uint_fast64_t status = MAP_ADC14_getEnabledInterruptStatus();
    MAP_ADC14_clearInterruptFlag(status);
        
    if (ADC_INT10 & status)
    {
        MAP_ADC14_getMultiSequenceResult(resultsBuffer);
    }
        
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | www.狠狠操| 日韩在线一区二区 | 男女羞羞免费视频 | 久久久夜夜夜 | 女人牲交视频一级毛片 | 久久夜色精品国产 | 欧美日韩亚洲国产 | 国产精品久久久久久久久免费桃花 | 亚洲免费在线 | 一区二区国产精品 | 日韩免费一区二区 | 97精品视频在线 | 国产在线一区观看 | 九九久久这里只有精品 | 国产视频中文字幕 | 亚洲成人三区 | 精品国产精品国产偷麻豆 | 久久久精品一区二区三区 | 国产69精品久久久久777 | 在线一级片 | 免费毛片在线 | 爱爱爱av| 久久99国产精一区二区三区 | 亚洲国产精品一区在线观看 | 日本精品一区二区三区视频 | 91亚洲一区| 91精品欧美久久久久久久 | 欧美在线国产精品 | 日韩欧美在线视频 | 99re热这里只有精品视频 | 福利视频网站 | 国产精品久久久久一区二区三区 | 精品一区二区久久久久久久网站 | av色站 | 成人精品鲁一区一区二区 | 午夜天堂精品久久久久 | 精品久久九 | 精品视频在线观看 | 91精品国产乱码久久久 | 国产欧美一区二区三区久久人妖 |