Mcuzone_TKN 发表于 2020-5-13 14:43:00

SAM4E-EK开发板代码解读05——DAC

本帖最后由 Mcuzone_TKN 于 2020-5-15 09:13 编辑

关键词:Microchip AtmelSAM4E SAM4E-EKSAM4E16E 芯片 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);
}
}




页: [1]
查看完整版本: SAM4E-EK开发板代码解读05——DAC