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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MSP432的DMA乒乓模式怎么傳輸ADC采集的數據

[復制鏈接]
跳轉到指定樓層
樓主
ID:462718 發表于 2020-10-7 15:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
MSP432的DMA乒乓模式怎么用呢,就是能一直傳輸ADC采集的數據,能幫我說下怎么實現嘛?下面的是程序,有些不對的地方實現不了連續傳輸。

#include "u_dma.h"
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
#include "uart_calc.h"
#include "ADC.h"

#define   DAM_SIZE    8000



/* 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];



volatile int switch_data = 0;
uint32_t k=0;

uint8_t data_array1[DAM_SIZE];

extern void delay(uint16_t z);

void DMA_confing(void)
{
    MAP_WDT_A_holdTimer();       //關閉看門狗
       
          memset(data_array1, 0x11, DAM_SIZE);     //目標數組初始化
       
         // printf("123\n");
       
          GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);
          GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN1);
          GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);
       
          DMA_enableModule();              //使能DMA模塊
          DMA_setControlBase(controlTable);      //設置控制表基地址
       
          DMA_disableChannelAttribute(DMA_CH7_ADC14,
                                 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
                                 UDMA_ATTR_HIGH_PRIORITY |
                                 UDMA_ATTR_REQMASK);         //禁用通道特征
       
          DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH7_ADC14,UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1);
            //設置通道控制參數   ADC映射          主數據結構       8位數據大小    源地址增量        目標地址增量      傳輸數量
          DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH7_ADC14,UDMA_MODE_PINGPONG, (void*) &ADC14->MEM[0],data_array1, DAM_SIZE);       
      //設置通道傳輸參數             ADC映射        主數據結構         乒乓模式        源數據                  目標數據    傳輸數量       
          
          DMA_setChannelControl(UDMA_ALT_SELECT | DMA_CH7_ADC14,UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1);
            //設置通道控制參數   ADC映射          主數據結構       8位數據大小    源地址增量        目標地址增量      傳輸數量  
    DMA_setChannelTransfer(UDMA_ALT_SELECT | DMA_CH7_ADC14,UDMA_MODE_PINGPONG, (void*) &ADC14->MEM[0],data_array1, DAM_SIZE);
            //設置通道傳輸參數             ADC映射        主數據結構         乒乓模式        源數據                  目標數據    傳輸數量
               
               
                DMA_requestChannel(7);      //通道7請求傳輸
                DMA_assignChannel(DMA_CH7_ADC14);    //指定外設映射
               
                DMA_assignInterrupt(DMA_INT1, 7);
    Interrupt_enableInterrupt(INT_DMA_INT1);
    DMA_clearInterruptFlag(7);
    Interrupt_enableMaster();
               
                DMA_enableChannel(7);
    ADC14_enableConversion();
               

}


/***DMA傳輸完成中斷*****/
void DMA_INT1_IRQHandler(void)
{
          GPIO_setOutputHighOnPin(GPIO_PORT_P2,GPIO_PIN1);
       
            //GPIO_toggleOutputOnPin(GPIO_PORT_P2,GPIO_PIN1);
            //delay(100);
            //GPIO_toggleOutputOnPin(GPIO_PORT_P2,GPIO_PIN1);
       
          DMA_requestChannel(7);      //通道7請求傳輸
                DMA_assignChannel(DMA_CH7_ADC14);    //指定外設映射
               
                DMA_assignInterrupt(DMA_INT1, 7);
    Interrupt_enableInterrupt(INT_DMA_INT1);
    DMA_clearInterruptFlag(7);
    Interrupt_enableMaster();
               
                DMA_enableChannel(7);
    ADC14_enableConversion();

          printf("%d,%d,%d\n",data_array1[k++],data_array1[k++],data_array1[k++]);
            //GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN1);
    /* Switch between primary and alternate bufferes with DMA's PingPong mode */
       
    if (DMA_getChannelAttribute(7) & UDMA_ATTR_ALTSELECT)
    {
        DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH7_ADC14,
            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1);
        DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH7_ADC14,
            UDMA_MODE_PINGPONG, (void*) &ADC14->MEM[0],
            data_array1, DAM_SIZE);
        switch_data = 1;
                                                printf("%d,%d,%d\n",data_array1[k++],data_array1[k++],data_array1[k++]);
                                                DMA_requestSoftwareTransfer(0);
    }
    else
    {
        DMA_setChannelControl(UDMA_ALT_SELECT | DMA_CH7_ADC14,
            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1);
        DMA_setChannelTransfer(UDMA_ALT_SELECT | DMA_CH7_ADC14,
            UDMA_MODE_PINGPONG, (void*) &ADC14->MEM[0],
            data_array1, DAM_SIZE);
        switch_data = 0;
                                                printf("%d,%d,%d\n",data_array1[k++],data_array1[k++],data_array1[k++]);
                                                DMA_requestSoftwareTransfer(0);
    }
       
}


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

使用道具 舉報

沙發
ID:621707 發表于 2020-10-9 21:01 | 只看該作者
想請教一下樓主msp432的延時函數怎么編寫比較好
回復

使用道具 舉報

板凳
ID:1088516 發表于 2023-7-14 20:14 | 只看該作者
可以在while(1)中加入“DMA_requestSoftwareTransfer(7);”讓其一直被開啟運行轉化;
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲一区在线 | 国产一二三区在线 | 国产精品久久久久影院色老大 | 亚洲国产精品99久久久久久久久 | 亚洲欧美视频一区 | h视频在线看 | www.久久久久久久久久久久 | 淫片专区| 久久国产日韩 | 国产激情91久久精品导航 | 91精品国产乱码久久久久久久久 | 国产日韩精品在线 | 亚洲欧美国产精品久久 | 免费的黄色片子 | 欧美一极视频 | 久久99这里只有精品 | 成人av鲁丝片一区二区小说 | 亚洲精品中文字幕在线观看 | 9色网站 | 久久久久久九九九九 | 欧美二级 | 成人毛片一区二区三区 | 欧美日韩国产一区二区三区 | 伊人伊成久久人综合网站 | 在线黄 | 日本三级在线视频 | 黄色在线免费观看视频 | av高清毛片 | 国产一区二区三区 | 日韩高清黄色 | 一区二区三区四区免费观看 | 亚洲成人动漫在线观看 | 欧美理论| av影音在线 | 欧美色综合 | 天堂资源最新在线 | 伊人手机在线视频 | 国产ts人妖系列高潮 | 亚洲a网 | 成人深夜福利 | 日本黄色激情视频 |