[Atmel] SAML21走起13:ADC DMA DAC

[复制链接]
1207|0
 楼主| ddllxxrr 发表于 2015-8-10 15:50 | 显示全部楼层 |阅读模式
这个例子是通过ADC AIN4输入信号,不通过CPU尔直接通过DMA传给,DAC然后通过PA2输出。

打开上次的工和根据快速指导,建立相应的程序。



形文件后一定要注意在编译之前,一定要加入DAC和DMAC两个模块,并且点应用。否则编译器找不到文件:




程序如下:
  1. #include <asf.h>

  2. /* AC module software instance (must not go out of scope while in use) */
  3. struct dac_module dac_instance;
  4. struct adc_module adc_instance;
  5. struct dma_resource example_resource;
  6. COMPILER_ALIGNED(16)
  7. DmacDescriptor example_descriptor SECTION_DMAC_DESCRIPTOR;

  8. void configure_adc(void);
  9. void configure_dac(void);
  10. void configure_dac_channel(void);
  11. void configure_dma_resource(struct dma_resource *resource);
  12. void setup_transfer_descriptor(DmacDescriptor *descriptor);




  13. void configure_adc(void)
  14. {
  15.         struct adc_config config_adc;
  16.         adc_get_config_defaults(&config_adc);
  17.         #if !(SAML21)
  18.         config_adc.gain_factor     = ADC_GAIN_FACTOR_DIV2;
  19.         config_adc.resolution      = ADC_RESOLUTION_10BIT;
  20.         #endif
  21.         config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV16;
  22.         config_adc.reference       = ADC_REFERENCE_INTVCC1;
  23.         config_adc.positive_input  = ADC_POSITIVE_INPUT_PIN4;
  24.         config_adc.freerunning     = true;
  25.         config_adc.left_adjust     = false;
  26.         adc_init(&adc_instance, ADC, &config_adc);
  27.         adc_enable(&adc_instance);
  28. }
  29. void configure_dac(void)
  30. {
  31.         struct dac_config config_dac;
  32.         dac_get_config_defaults(&config_dac);
  33.         #if (SAML21)
  34.         config_dac.reference = DAC_REFERENCE_INTREF;
  35.         #else
  36.         config_dac.reference = DAC_REFERENCE_AVCC;
  37.         #endif
  38.         dac_init(&dac_instance, DAC, &config_dac);
  39. }
  40. void configure_dac_channel(void)
  41. {
  42.         struct dac_chan_config config_dac_chan;
  43.         dac_chan_get_config_defaults(&config_dac_chan);
  44.         dac_chan_set_config(&dac_instance, DAC_CHANNEL_0, &config_dac_chan);
  45.         dac_chan_enable(&dac_instance, DAC_CHANNEL_0);
  46. }
  47. void configure_dma_resource(struct dma_resource *resource)
  48. {
  49.         struct dma_resource_config config;
  50.         dma_get_config_defaults(&config);
  51.         config.peripheral_trigger = ADC_DMAC_ID_RESRDY;
  52.         config.trigger_action = DMA_TRIGGER_ACTON_BEAT;
  53.         dma_allocate(resource, &config);
  54. }
  55. void setup_transfer_descriptor(DmacDescriptor *descriptor)
  56. {
  57.         struct dma_descriptor_config descriptor_config;
  58.         dma_descriptor_get_config_defaults(&descriptor_config);
  59.         descriptor_config.beat_size = DMA_BEAT_SIZE_HWORD;
  60.         descriptor_config.dst_increment_enable = false;
  61.         descriptor_config.src_increment_enable = false;
  62.         descriptor_config.block_transfer_count = 1000;
  63.         descriptor_config.source_address = (uint32_t)(&adc_instance.hw->RESULT.reg);
  64.         #if (SAML21)
  65.         descriptor_config.destination_address = (uint32_t)(&dac_instance.hw->DATA[DAC_CHANNEL_0].reg);
  66.         #else
  67.         descriptor_config.destination_address = (uint32_t)(&dac_instance.hw->DATA.reg);
  68.         #endif
  69.         descriptor_config.next_descriptor_address = (uint32_t)descriptor;
  70.         dma_descriptor_create(descriptor, &descriptor_config);
  71. }




  72. int main (void)
  73. {
  74.         system_init();
  75.          configure_adc();
  76.          configure_dac();
  77.          configure_dac_channel();
  78.          dac_enable(&dac_instance);
  79.          configure_dma_resource(&example_resource);
  80.          setup_transfer_descriptor(&example_descriptor);
  81.          dma_add_descriptor(&example_resource, &example_descriptor);
  82.        
  83.          adc_start_conversion(&adc_instance);
  84.          dma_start_transfer_job(&example_resource);
  85.          while (true) {
  86.          }
  87.        
  88. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7004

帖子

68

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