完善资料让更多小伙伴认识你,还能领取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 } } |
|
|
相关推荐
|
|
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16903 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 17:26 , Processed in 0.529256 second(s), Total 64, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖