智能车制作

标题: DAC 触发 DMA 传值的问题 [打印本页]

作者: wbb12    时间: 2014-9-25 21:15
标题: DAC 触发 DMA 传值的问题
下面是我的代码,想请教一下,为什么DMA似乎没有工作呢?

  1. void pdb_init(void);
  2. void dac_init(void);
  3. void dma_L_init(void);
  4. void dma_H_init(void);
  5. void dac_isr(void);
  6. void delay(uint16);
  7. //变量定义
  8. PIT_InitTypeDef pit0_init_struct;
  9. DAC_InitTypeDef dac_init_struct;
  10. PDB_InitTypeDef pdb_init_struct;
  11. DMA_InitTypeDef dmaL_init_struct;
  12. DMA_InitTypeDef dmaH_init_struct;
  13. uint8 UP[32];
  14. uint8 UL[16];
  15. uint8 UH[16];
  16. uint16 U[16];
  17. uint16 T[16];
  18. uint16 M[16];
  19. uint16 V[32];
  20. uint8  VP[64];

  21. int count=0;
  22. volatile uint8_t * const DL =&(DAC0->DAT[0].DATL);
  23. volatile uint8_t * const DH =&(DAC0->DAT[0].DATH);
  24.    
  25.    
  26. void main (void)
  27. {
  28.   for(int i=0;i<16;i++){
  29.   V[i]=250*i;
  30.   }  
  31.   for(int i=16;i<32;i++)
  32.   {
  33.   V[i]=250*(32-i);
  34.   }
  35.   for(int i=0;i<32;i++){
  36.   VP[i*2]=V[i]&0x0FF;
  37.   VP[i*2+1]=(V[i] & 0xF00)>>8;
  38.   }  

  39. /*

  40.   for(int i=0;i<16;i++){
  41.   
  42.   T[i]=250*i;
  43.   M[i]=250*(16-i);
  44.   }
  45.   for(int i=0;i<16;i++)
  46. {              
  47.      U[i]=(uint16)(i*250);
  48.   }
  49.   for(int i=0;i<16;i++)
  50. {              
  51.      UL[i]=U[i]&0x0FF;
  52. }
  53.   for(int i=0;i<16;i++)
  54. {              
  55.      UH[i]=(U[i] & 0xF00)>>8;
  56. }
  57.   for(int i=0;i<32;i++)
  58. {           
  59.     UP[2*i]=UL[i];
  60.     UP[2*i+1]=UH[i];
  61. } */
  62. //初始化DAC
  63.   
  64. dac_init();
  65. LPLD_DAC_SetBufferData(DAC0,V, 16);
  66. dma_L_init();

  67. pdb_init();
  68. LPLD_PDB_SoftwareTrigger() ;

  69. // LPLD_PDB_SoftwareTrigger();
  70.   
  71. }

  72. void dac_init(void)
  73. {
  74.   //仅需初始化DAC通道即可
  75. dac_init_struct.DAC_Dacx = DAC0;
  76. dac_init_struct.DAC_BufferEnable=TRUE;
  77. dac_init_struct.DAC_BufferUpperLimit=16;
  78. dac_init_struct.DAC_DmaEnable=TRUE;
  79. dac_init_struct.DAC_ReadPointerTopIntEnable = TRUE;
  80. //dac_init_struct.DAC_ReadPointerTopIsr = dac_isr;
  81.   //此处值得商榷!
  82. LPLD_DAC_Init(dac_init_struct);
  83. LPLD_DAC_EnableIrq(dac_init_struct);
  84. }

  85. void pdb_init(void)
  86. {
  87.   pdb_init_struct.PDB_CounterPeriodUs=20000;
  88.   pdb_init_struct.PDB_TriggerInputSourceSel=TRIGGER_SOFTWARE;
  89.   pdb_init_struct.PDB_ContinuousModeEnable=TRUE;
  90.   pdb_init_struct.PDB_LoadModeSel = LOADMODE_0;
  91.   LPLD_PDB_Init(pdb_init_struct);
  92.   LPLD_PDB_DacTriggerCfg(DAC0,INT_TRIG_EN,2000);
  93. }


  94. /*
  95. * 延时函数
  96. */

  97. void dma_L_init(void){
  98. dmaL_init_struct.DMA_CHx=DMA_CH0;
  99. dmaL_init_struct.DMA_Req=DAC0_DMAREQ;
  100. dmaL_init_struct.DMA_MajorLoopCnt=2;
  101. dmaL_init_struct.DMA_MinorByteCnt = 32;
  102. dmaL_init_struct.DMA_SourceAddr=(uint32)&(VP[0]);
  103. dmaL_init_struct.DMA_SourceDataSize = DMA_SRC_8BIT;
  104. dmaL_init_struct.DMA_SourceAddrOffset=32;
  105. dmaL_init_struct.DMA_LastSourceAddrAdj=-64;
  106. dmaL_init_struct.DMA_DestAddr =(uint32)&(DAC0->DAT[0].DATL);
  107. dmaL_init_struct.DMA_DestAddrOffset=0;
  108. dmaL_init_struct.DMA_LastDestAddrAdj=-16;
  109. dmaL_init_struct.DMA_DestDataSize = DMA_DST_8BIT;
  110. dmaL_init_struct.DMA_AutoDisableReq = FALSE;
  111. LPLD_DMA_Init(dmaL_init_struct);
  112. LPLD_DMA_EnableReq(DMA_CH0);
  113. }
复制代码



作者: whisker    时间: 2014-9-25 22:01

作者: wbb12    时间: 2014-9-26 18:34
whisker 发表于 2014-9-25 22:01

这是水经验的节奏么?





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2