Mcuzone 野芯科技

标题: SAM4E-EK开发板代码解读05——DAC [打印本页]

作者: Mcuzone_TKN    时间: 2020-5-13 14:43
标题: SAM4E-EK开发板代码解读05——DAC
本帖最后由 Mcuzone_TKN 于 2020-5-15 09:13 编辑

关键词Microchip Atmel  SAM4E SAM4E-EK  SAM4E16E 芯片 DAC 数模转换器


概述:演示如何在自由运行模式下使用DAC


该例子允许配置输出“正弦波”的频率和振幅,频率可设置成200HZ~3KHZ,峰值振幅可设置为100~1023/4095,分辨率为18/12位。


打开产品光盘SAM4E16E-EK/SAM4E16E-EK中文资料/softpack软件包/Atmel Studio 7,打开05_DACC_EXAMPLE例子。



int main(void)
{
static uint8_t i;
uint8_t uc_key;
uint32_t ul_freq, ul_amp;


sysclk_init();
board_init();


configure_console();


puts(STRING_HEADER);

//使能DAC的时钟
#if SAM4L
sysclk_enable_peripheral_clock(DACC_BASE);
#else
sysclk_enable_peripheral_clock(DACC_ID);
#endif

//重置DAC寄存器
dacc_reset(DACC_BASE);

//半字节传输模式
dacc_set_transfer_mode(DACC_BASE, 0);

//初始化定时、振幅和频率
#if (SAM3N) || (SAM4L) || (SAM4N)
//使能0x10(17个时钟)  内部触发时钟 0x60 (96个时钟)
dacc_set_timing(DACC_BASE, 0x10, 0x60);

//使能DAC
dacc_enable(DACC_BASE);
#else
//省电  睡眠模式 0 禁用;快速唤醒 0禁用。
dacc_set_power_save(DACC_BASE, 0, 0);
//时间   刷新   0x08 (1024*8 dacc时钟)      最高速度模式- 0(禁用)        启动时间- 0x10 (1024 dacc时钟)
dacc_set_timing(DACC_BASE, 0x08, 0, 0x10);

//禁用标签并选择输出通道DACC_CHANNEL   
dacc_set_channel_selection(DACC_BASE, DACC_CHANNEL);
   
//使能输出通道DAC通道
dacc_enable_channel(DACC_BASE, DACC_CHANNEL);
   
//设置模拟电流
dacc_set_analog_control(DACC_BASE, DACC_ANALOG_CONTROL);
#endif


while (1) {
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(384);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(384);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(342);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(342);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(308);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(308);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(289);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(289);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(256);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(256);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(231);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(231);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(205);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(205);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(192);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(192);
  }
  delay_s(2);
}
}









欢迎光临 Mcuzone 野芯科技 (http://bbs.mcuzone.com/) Powered by Discuz! X3.1