完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
利用SAM4L-EK内部的DAC硬件,可以产生频率和幅度可调的方波、正弦波等常用波形;
利用这些波形可以进行一些测试或者驱动外部的硬件如蜂鸣器等…… 设置频率为500的方波 限于手头没有可用的示波器,因此用逻辑分析仪来测量DAC输出信号的频率, 可以看到信号的周期为约2个毫秒,换算为频率为497Hz, 注意DAC的输出在MCU的30PIN,也即PA06 利用超级终端交互界面,再次设置频率为200 同样可以用逻辑分析仪来测量,周期约5个毫秒 换算为频率为199Hz,(见下图) DAC部分的初始化代码如下: /* Enable clock for DACC */ #if SAM4L sysclk_enable_peripheral_clock(DACC_BASE); #else sysclk_enable_peripheral_clock(DACC_ID); #endif /* Reset DACC registers */ dacc_reset(DACC_BASE); /* Half word transfer mode */ dacc_set_transfer_mode(DACC_BASE, 0); /* Initialize timing, amplitude and frequency */ #if (SAM3N) || (SAM4L) || (SAM4N) /* Timing: * startup - 0x10 (17 clocks) * internal trigger clock - 0x60 (96 clocks) */ dacc_set_timing(DACC_BASE, 0x10, 0x60); /* Enable DAC */ dacc_enable(DACC_BASE); #else #if (SAM3S) || (SAM3XA) /* Power save: * sleep mode - 0 (disabled) * fast wakeup - 0 (disabled) */ dacc_set_power_save(DACC_BASE, 0, 0); #endif /* Timing: * refresh - 0x08 (1024*8 dacc clocks) * max speed mode - 0 (disabled) * startup time - 0x10 (1024 dacc clocks) */ #if !(SAMV70 || SAMV71 || SAME70 || SAMS70) #if (SAM4E) dacc_set_timing(DACC_BASE,0, 0x10); #else dacc_set_timing(DACC_BASE, 0x08, 0, 0x10); #endif /* Disable TAG and select output channel DACC_CHANNEL */ dacc_set_channel_selection(DACC_BASE, DACC_CHANNEL); #endif /* Enable output channel DACC_CHANNEL */ dacc_enable_channel(DACC_BASE, DACC_CHANNEL); 同时在SystemTick_Handler中断函数中, 将从串口接收到的设置值,写入内部DAC模块, 这部分的代码如下 void SysTick_Handler(void) { uint32_t status; uint32_t dac_val; status = dacc_get_interrupt_status(DACC_BASE); /* If ready for new data */ #if (SAMV70 || SAMV71 || SAME70 || SAMS70) # if (DACC_CHANNEL == 0) if ((status & DACC_ISR_TXRDY0) == DACC_ISR_TXRDY0) { #elif (DACC_CHANNEL == 1) if ((status & DACC_ISR_TXRDY1) == DACC_ISR_TXRDY1) { #endif #else if ((status & DACC_ISR_TXRDY) == DACC_ISR_TXRDY) { #endif g_ul_index_sample++; if (g_ul_index_sample >= SAMPLES) { g_ul_index_sample = 0; } dac_val = g_uc_wave_sel ? ((g_ul_index_sample > SAMPLES / 2) ? 0 : MAX_AMPLITUDE) : wave_to_dacc(gc_us_sine_data[g_ul_index_sample], g_l_amplitude, MAX_DIGITAL * 2, MAX_AMPLITUDE); #if !(SAMV70 || SAMV71 || SAME70 || SAMS70) dacc_write_conversion_data(DACC_BASE, dac_val); #else dacc_write_conversion_data(DACC_BASE, dac_val, DACC_CHANNEL); #endif } } |
|
相关推荐
|
|
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12012 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:36 , Processed in 0.553574 second(s), Total 62, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号