首页| 新闻|市场|专题|产品|日经电子|访谈|技术文章|解决方案|技术热点|新手园地|黄页|下载|展会|人才|博客
    
  首页 >> 论坛 » DSP技术专区 » BLACKFIn BF533 MDMA的困惑
版主: dsplover , deweiwang , CharllyT
 发表新贴 
 发表回复 
 BLACKFIn BF533 MDMA的困惑  发表于 2008-09-22 21:18:47 [您是本帖的第 86 位阅读者]     [1楼] 
呢称:hzy831225
新手

积 分 116
注册2008-09-22
加我为好友
发 短 消 息

各位大哥遇到个问题,真是想不通啊!

使用VDSP,用仿真器仿真。

很简单的程序就是一个MDMA传输,可是程序仿真到Init_Interrupts中断初始化好后

就ivg13就一直运行中断报务程序N次(停不下来)。

本以为会是Ivg13中的定时看门狗在做怪,可以在VDSP的寄存器查看器没有发现,定时看门狗中断状态,定时看门狗是关闭的

让人郁闷的是发现中断来源是MDMA_S0和MDMA_D0。问题是我在中断初始化之前都没有配置过MDMA,更离谱的是我在Init_Interrupts中断初始化程序还对*pMDMA_S0_CONFIG,MDMA_D0_CONFIG,做了清0;

Init_Interrupts中断初始化程序中每一句的CONFIG如下,


   运行语句                                                     MDMA_S0_CONFIG         MDMA_D0_CONFIG

   进入Init_Interrupts前                                         0X81                                 0x83

*pMDMA_S0_CONFIG=0;                                   0X00                                 0X83   

*pMDMA_D0_CONFIG=0;                                   0X00                                 0X00 

*pMDMA_S0_IRQ_STATUS = 0x1;                    0X00                                 0X00

*pMDMA_D0_IRQ_STATUS = 0x1;                    0X00                                  0X00

register_handler(ik_ivg13, MDMA_PPI_ISR);   0X81                                0x83

*pSIC_IMASK|=(1<<21);                                       0X81                             0x83

    运行完后,CPU进入中断程序,一直不停运行中断程序 ,看了下的MDMA_S0_IRQ_STATUS和

MDMA_D0_IRQ_STATUS的状态,其中的DMA传输完全完成中断位为1。

本人在中断服务程序,2个中断源的清0工作。


我基本想了一下,会不会是我的仿真器问题的啊,仿真时,在使用DMA资源,

想想也不太可能,这样的仿真器也是太垃圾了吧。本人使用的仿真器为英培特的BLACKFIN dsp 仿真器,

想想人家英培特好逮也是国内有名的ARM开发案的供应商,不可能这么垃圾吧。

不过其他也不太可能,我在仿真过程自己的程序没有动过MDMA任何东西。可它偏偏会自己置会。想不懂啊


程序如下:

main(VOID)

{

Init_PLL();

Init_EBIU();

Init_SDRAM();

Init_Interrupts(); 

Init_DMA_To_DMA2();

WHILE(1);

}


void Init_Interrupts(void)



 *pMDMA_S0_CONFIG=0;

 *pMDMA_D0_CONFIG=0;

 *pMDMA_S0_IRQ_STATUS = 0x1;

 *pMDMA_D0_IRQ_STATUS = 0x1;

 register_handler(ik_ivg13, MDMA_PPI_ISR);

 *pSIC_IMASK|=(1<<21);

}


EX_INTERRUPT_HANDLER(MDMA_PPI_ISR) // <--|declaration in  exception.h -->

{         //    |declaration


with _pragma(interrupt) the ISR Startaddress

 *pMDMA_S0_IRQ_STATUS = 0x1;

 *pMDMA_D0_IRQ_STATUS = 0x1;

 printf( "\nThe MDMA PPI Interrupt has been entered!\n" );


}//end DMA0_PPI_ISR

void Init_DMA_To_DMA2(void)

{ *pMDMA_D0_START_ADDR = 0x140000; 

 *pMDMA_D0_X_COUNT = 720/2;

 *pMDMA_D0_X_MODIFY = 4;

 *pMDMA_D0_Y_COUNT = 288;

 *pMDMA_D0_Y_MODIFY = 720*2+4;

 *pMDMA_S0_START_ADDR = 0x00000; 

 *pMDMA_S0_X_COUNT = 720/2;

 *pMDMA_S0_X_MODIFY = 4;

 *pMDMA_S0_Y_COUNT = 288;

 *pMDMA_S0_Y_MODIFY = 4;

 *pMDMA_S0_CONFIG = DMAEN | WDSIZE_32| DMA2D | RESTART;// | DI_EN;

 *pMDMA_D0_CONFIG = DMAEN | DI_EN | WNR | WDSIZE_32 | DMA2D | RESTART | DI_EN; 

}//end Init_DMA


 
共1条 1/1 1   
   快速回复主题
  用户名: 匿名不能发帖!请先 [ 登陆 ]
  标 题:
  内 容:
 
  Copyright(C)2008 Electronic Design & Application World All rights reserved.  《电子设计应用》杂志社 版权所有
联系电话:(86)10-66421136 66421836 66423836   传真:(86)10-66423936   京ICP备05012822号