5493|2

305

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

NXP LPC1768宝马开发板第11章DAC(直接输出和DMA方式传输) [复制链接]

本帖最后由 旺宝电子 于 2015-1-30 10:17 编辑

第十一章  宝马1768——DAC(直接输出和DMA方式传输)

开发环境:集成开发环境μVision4 IDE版本4.60.0.0
主机系统:Microsoft Windows XP
开发平台:旺宝NXP LPC1768开发板


11.1 DAC
11.2 程序说明
11.3 实验现象
1DAC
     LPC1768内部集成了一个10位的DACP0.26输出,采用的是电阻串联式结构,并且带有缓冲输出,最大输出频率为1MHz,支持DMA控制输出,其结构如下:
相关寄存器:
DACR数据寄存器:包含输出值和输出能力。
根据计算可以得出输出电压为Vo=Vref*Value/1024)。因此将数据传入到DACR寄存器时需要左移6位。
DACCTRL控制寄存器:使能DMA操作并控制DMA定时器
DACCNTVAL重装计数值寄存器,当使能DAC DMA转换和计数操作后,计数器开始递减,递减到0后重新装入DACCNTVAL计数器值,并且执行DMA一次转换,因此当使用DMA输出时,改变DACCNTVAL值可以改变输出频率大小。
2、程序说明:
    本次程序将分两种方式介绍,直接输出和DMA方式输出
DAC直接输出
本例程只使用DAC的普通输出,并未用到DMA,因此只需将P0.26配置成为DAC输出模式,将要输出的值写入到DACR寄存器即可,其代码如下:
void DACInit( void )
{
LPC_PINCON->PINSEL1 = 0x00200000;          //设置P0.26DAC输出
}
int main(void)
{
uint8_t i;
SystemInit();                        //初始化目标板                                                          
DACInit();                        //初始化DAC引脚
#if USE_LCD                 //如果使用LCD显示
LCD_Init();          //LCD初始化
LCD_Clear(Black);        //清屏
LCD_SetTextColor(Red);        //设置字体颜色
LCD_SetBackColor(Black);         //设置背景颜色
LCD_DisplayString(50, 50, "*** DAC Test ***");
#endif
while (1)
{
for (i = 0; i < 45; i++)
{
LPC_DAC->DACR = (GusSinTable << 6);  //更新输出
}
}
}
DAC DMA输出
int main(void)
{
int i;
SystemInit();                         //初始化目标板
    for(i=0; i < WAVE_SAMPLE_NUM; i++)        //转换成正弦表
        sinusoide = 512*sin(2*PI*i/WAVE_SAMPLE_NUM);
    for(i=0; i < WAVE_SAMPLE_NUM; i++)
        sinusoide = ((sinusoide + 512) << 6) | 1 << 16;
//偏移量512 左移16位 最大输出电流350uA 最大时间2.5us
    LLI0.source      = (uint32_t) &sinusoide[0];
            LLI0.destination = (uint32_t) &(LPC_DAC->DACR);
            LLI0.next        = (uint32_t) &LLI0;
    LLI0.control     = 1<<26 | 2<<21 | 2<<18 | WAVE_SAMPLE_NUM;
DACInit();                  //初始化DAC
DMA_Init();        //初始化DMA
#if USE_LCD
LCD_Init();        //LCD初始化
LCD_Clear(Black);        //清屏
LCD_SetTextColor(Red);        //设置字体颜色
LCD_SetBackColor(Black);         //设置背景色
LCD_DisplayString(50, 50, "*** DAC Test ***");
#endif
while (1)
{
}
}
void DACInit( void )
{
LPC_PINCON->PINSEL1 = 0x00200000;                  //设置P0.26DAC输出
LPC_DAC->DACCTRL=1<<3 | 1<<2 | 1<<1;         //使能双缓冲 超时计数器DMA
LPC_DAC->DACCNTVAL = 250;        //定时时间,可改变输出频率
}
void DMA_Init (void)
{  
LPC_SC->PCONP  |= (1 << 29);           //使能DMA时钟
    LPC_GPDMA->DMACConfig = 1;         //使能DMA控制器
                                   
    LPC_GPDMACH0->DMACCSrcAddr= (uint32_t) &sinusoide[0];//设置源地址
    LPC_GPDMACH0->DMACCDestAddr   = (uint32_t) &(LPC_DAC->DACR);                               //设置目标地址                                                                
    LPC_GPDMACH0->DMACCLLI=(uint32_t)&LLI0;    //下一个链表项
                                                                    
LPC_GPDMACH0->DMACCControl =  WAVE_SAMPLE_NUM
| (2 << 18)           //源地址数据宽度32
| (2 << 21)           //目标地址数据宽度32
| (1 << 26) ;          //源地址自动增加        
LPC_GPDMACH0->DMACCConfig= 1           //使能通道0
                                    | (0 << 1)         //源存储器
                                    | (7 << 6)         //目标地址为外设DAC -7
                                    | (1 << 11);        //存储器到外设                                                                                  
}
3、实验现象:
将示波器探头连接到P0.26引脚,测试输出波形,可以观察到正弦波输出,改变正弦表的值可以修改输出波形,在for循环中添加延时函数可以改变输出波形的频率。也可在DAC DMA输出例程中修改DACCNTVAL 寄存器值可以改变输出频率。
查看本帖全部内容,请登录或者注册
此帖出自NXP MCU论坛

最新回复

今天没事,实测了一下,最大频率远大于1M,3M毫无压力  详情 回复 发表于 2016-7-11 15:50

赞赏

1

查看全部赞赏

点赞 关注
个人签名http://openmcu.taobao.com]77[/url]
 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
感谢分享。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
今天没事,实测了一下,最大频率远大于1M,3M毫无压力
此帖出自NXP MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 2/10 下一条
TI 处理器AM62L深度讲解,报名直播赢【双肩包、充电器、胶囊伞】
【直播要点】• 如何实现安全节能设计;• 开箱体验和demo;• 软件和硬件
【直播时间】3月21日(周五)上午10:00

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表