[MCU] TMS320F28335的PERINTFRC如何启动DMA?

[复制链接]
 楼主| wuhany 发表于 2020-9-10 19:54 | 显示全部楼层 |阅读模式
TMS320F28335的PERINTFRC如何启动DMA?
 楼主| wuhany 发表于 2020-9-10 19:57 | 显示全部楼层
#pragma DATA_SECTION(DMABuf1,"DMARAML4");
#pragma DATA_SECTION(DMABuf2,"DMARAML5");

volatile Uint16 DMABuf1[1024];
volatile Uint16 DMABuf2[1024];

volatile Uint16 *DMADest;
volatile Uint16 *DMASource;
Uint16 i,j;
//interrupt void local_DINTCH1_ISR(void);


void main(void)
{
   Uint16 i;
        InitSysCtrl();
   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;

        DMAInitialize();

        // Initialize Tables
   for (i=0; i<BUF_SIZE; i++)
   {
     DMABuf1[i] = 0;
         DMABuf2[i] = i;
   }

        
// Configure DMA Channel
    DMADest   = &DMABuf1[0];
        DMASource = &DMABuf2[0];
           DMACH1AddrConfig(DMADest,DMASource);
        DMACH1BurstConfig(31,2,2);         //Will set up to use 32-bit datasize, pointers are based on 16-bit words
        DMACH1TransferConfig(31,2,2);      //so need to increment by 2 to grab the correct location
        DMACH1WrapConfig(0xFFFF,0,0xFFFF,0);
        
   // DMACH1ModeConfig(0,PERINT_ENABLE,ONESHOT_ENABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,THIRTYTWO_BIT,CHINT_END,0);

    DmaRegs.CH1.MODE.bit.ONESHOT=1;
        DmaRegs.CH1.MODE.bit.DATASIZE=1;
        

    DmaRegs.CH1.MODE.bit.PERINTSEL=0;
    DmaRegs.CH1.CONTROL.bit.PERINTFRC=1;
        DmaRegs.CH1.MODE.bit.PERINTE=1;
    // Clear any spurious flags:
        DmaRegs.CH1.CONTROL.bit.PERINTCLR = 1;                  // Clear any spurious interrupt flags
        DmaRegs.CH1.CONTROL.bit.SYNCCLR = 1;                    // Clear any spurious sync flags
        DmaRegs.CH1.CONTROL.bit.ERRCLR = 1;

        StartDMACH1();   
  

   while(1)
         {
                  
                    DmaRegs.CH1.CONTROL.bit.PERINTFRC = 1;
                        j = 0;
                  if(DmaRegs.CH1.CONTROL.bit.PERINT标志寄存器==1)
                        j = 1;
                  
                        for(i=0;i<1000;i++);
                        i=0;
                        
         }
   
}

我设置了PERINTFRC = 1,但是始终也没检测到PERINT标志寄存器=1的情况。
zhenykun 发表于 2020-9-10 20:02 | 显示全部楼层
楼主详细说说
 楼主| wuhany 发表于 2020-9-10 20:06 | 显示全部楼层
就是说虽然给定了PERINTFRC =1,但是PERINTFRC =1事件并没有让PERINT标志寄存器=1,从而没有启动DMA.
wyjie 发表于 2020-9-10 20:10 | 显示全部楼层
感觉你的初始化程序是哪儿没设置好
huangchui 发表于 2020-9-10 20:13 | 显示全部楼层
这个对我这个菜鸟来说有点高难度,帮你顶上去吧。
jiaxw 发表于 2020-9-10 20:20 | 显示全部楼层
我也不太懂,不过PERINTFRC是受保护的--
你这样试试,或许能行:
EALLOW;
DmaRegs.CH1.CONTROL.bit.PERINTFRC=1;
EDIS;
huangchui 发表于 2020-9-10 20:23 | 显示全部楼层
试一下楼上说的
heweibig 发表于 2020-9-10 20:26 | 显示全部楼层
应该是初始化没配置好吧
 楼主| wuhany 发表于 2020-9-10 20:29 | 显示全部楼层
好的,结贴了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

879

主题

10435

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部