dm642,edma搬运测试失败。。。。求助

2019-07-15 19:29发布

复制代码最近刚刚开始学习dm642,使用edma中遇到一个问题,下面是描述:
      一个edma搬运数据的程序段,放在一个工程A中,可以用。但是转到工程B中,edma搬运用不了了。。。然后我将两个程序的build option 以及bios设置,头文件都写成一样的了,但是edma在工程B中还是用不了,,,我贴下代码,求大神帮忙!!(两个工程都用了bios)
1.包含edma初始化及cpu触发函数等的一个c文件。。
  1. #include <assert.h>
  2. #include <csl_edma.h>

  3. unsigned int TESTSRC[32]=
  4. {
  5. 0x12345678,0x87654321,0x12345678,0x87654321,
  6. 0x12345678,0x87654321,0x12345678,0x87654321,
  7. 0x12345678,0x87654321,0x12345678,0x87654321,
  8. 0x12345678,0x87654321,0x12345678,0x87654321,
  9. 0x12345678,0x87654321,0x12345678,0x87654321,
  10. 0x12345678,0x87654321,0x12345678,0x87654321,
  11. 0x12345678,0x87654321,0x12345678,0x87654321,
  12. 0x12345678,0x87654321,0x12345678,0x87654321,
  13. };
  14. unsigned int TESTDST[32]=
  15. {
  16. 0x00000000,0x00000000,0x00000000,0x00000000,
  17. 0x00000000,0x00000000,0x00000000,0x00000000,
  18. 0x00000000,0x00000000,0x00000000,0x00000000,
  19. 0x00000000,0x00000000,0x00000000,0x00000000,
  20. 0x00000000,0x00000000,0x00000000,0x00000000,
  21. 0x00000000,0x00000000,0x00000000,0x00000000,
  22. 0x00000000,0x00000000,0x00000000,0x00000000,
  23. 0x00000000,0x00000000,0x00000000,0x00000000,
  24. };

  25. static EDMA_Handle hEdmaNewApply;

  26. void TEST_One_Edma()
  27. {
  28.         unsigned int i;
  29.         Uint32 disi=0;
  30.         Uint32 tcc,src;
  31.         EDMA_Handle hEdma;
  32.         EDMA_Config cfgEdma;  


  33.         tcc=EDMA_intAlloc(-1);
  34.         assert(tcc != -1);
  35.         hEdma = EDMA_open(tcc,EDMA_OPEN_RESET);
  36.         assert(hEdma != EDMA_HINV);
  37.     hEdmaNewApply=hEdma;
  38.         /** Make EDMA parameters OPT **/
  39.         cfgEdma.opt=EDMA_OPT_RMK(
  40.                                 EDMA_OPT_PRI_LOW, //MEDIUM
  41.                                 EDMA_OPT_ESIZE_32BIT,
  42.                                 EDMA_OPT_2DS_YES,
  43.                                 EDMA_OPT_SUM_INC,
  44.                                 EDMA_OPT_2DD_YES,
  45.                                 EDMA_OPT_DUM_INC,
  46.                                 EDMA_OPT_TCINT_NO,//(i== EVT_Y ? EDMA_OPT_TCINT_YES:EDMA_OPT_TCINT_NO),//only event Y generate interrupt
  47.                                 EDMA_OPT_TCC_OF(8),
  48.                                 EDMA_OPT_TCCM_OF(0),
  49.                                 EDMA_OPT_ATCINT_NO,
  50.                                 EDMA_OPT_ATCC_OF(0),
  51.                                 EDMA_OPT_PDTS_DISABLE,
  52.                                 EDMA_OPT_PDTD_DISABLE,
  53.                                 EDMA_OPT_LINK_NO,//NOTE!!!
  54.                                 EDMA_OPT_FS_YES );//array sync
  55.         cfgEdma.src = (Uint32) TESTSRC;                                                                       
  56.         cfgEdma.cnt = EDMA_CNT_RMK(1,4);//dchan->numLines-1               
  57.         cfgEdma.dst = (Uint32) TESTDST;
  58.         cfgEdma.idx = EDMA_IDX_RMK(0,0);//pitch               
  59.         cfgEdma.rld = EDMA_RLD_RMK(0,0);               
  60.         /** Configure EDMA parameters **/
  61.         EDMA_config(hEdma,&cfgEdma);

  62.         EDMA_disableChannel(hEdma);       
  63.         EDMA_clearChannel(hEdma);         
  64.         EDMA_enableChannel(hEdma);

  65.    

  66. }


  67. void Trigger_the_testEDMA()
  68. {
  69.         Uint32 src,dst;
  70.         Uint32 *P,*P1;       
  71.         static Uint8 ii=0;


  72.     P=TESTSRC;
  73.         P1=TESTDST;

  74.         ii++;
  75.         if(ii>=4)
  76.         ii=0;
  77.         for(src=0;src<32;src++)
  78.             TESTSRC[src]-=1;
  79.         src=(Uint32)(P)+ii*4*8;
  80.         dst=(Uint32)(P1)+ii*4*8;
  81.         EDMA_RSETH(hEdmaNewApply,SRC,src);;
  82.         EDMA_RSETH(hEdmaNewApply,CNT,EDMA_CNT_RMK(1,4));
  83.         EDMA_RSETH(hEdmaNewApply,DST,dst);
  84.         EDMA_RSETH(hEdmaNewApply,IDX,0);
  85.         EDMA_RSETH(hEdmaNewApply,RLD,0);

  86.         EDMA_setChannel(hEdmaNewApply);

  87. }
复制代码这个是main.c
  1. #include <std.h>
  2. #include <csl.h>
  3. #include <csl_edma.h>
  4. #include <csl_emif.h>
  5. #include <assert.h>
  6. #include "dm642param.h"


  7. void main()
  8. {
  9.         CSL_init();
  10. TEST_One_Edma();
  11. }
复制代码然后会在一个task中一直调用Trigger_the_testEDMA()这个函数。


各位大神,小弟已经纠结了5天了,谁来帮帮忙!!非常感谢!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。