查看: 1815|回复: 1

[其他] 帮忙看看下面的代码,为什么DAC无法使能DMA传输数据!!

[复制链接]

该用户从未签到

3

主题

5

帖子

0

新手上路

Rank: 1

积分
43
最后登录
2015-3-21
发表于 2014-9-25 11:08:27 | 显示全部楼层 |阅读模式
代码在下面,不知道DAC的中断到底该怎么设,才能使能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. }
复制代码

我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

16

主题

705

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1745
最后登录
1970-1-1
发表于 2014-9-29 13:20:22 | 显示全部楼层
楼主你用的是神马芯片啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-25 08:43 , Processed in 0.084745 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表