3089|0

164

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【TIVA C Launchpad 学习笔记五】DAC7611驱动程序 [复制链接]

/*******************************************
开发坏境:CCSv5.4
开发板:TIVA C Launchpad(TM4C123GH6PM)
程序功能:DAC7611
程序说明:
编程者:Linchpin
********************************************/
#include
#include
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/fpu.h"
#include "driverlib/sysctl.h"
#include "driverlib/rom.h"
#include "driverlib/timer.h"
#include "driverlib/interrupt.h"
#include "grlib/grlib.h"
#include "driverlib/gpio.h"
#include "inc/hw_gpio.h"
#define uchar unsigned char
#define uint unsigned int

uint  sinx[]={0,89,177,265,352,437,521,602,681,758,831,901,968,1031,1090,1144,1194,1239,1279,1315,
1345,1370,1389,1403,1411,1414,1411,1403,1389,1370,1345,1315,1279,1239,1194,1144,1090,1031,968,901,
831,758,681,602,521,437,352,265,177,89,0};//正弦波最大值1.414V
int num=0;
void CS(uchar i);
void CLK(uchar i);
void SDI(uchar i);
void LD(uchar i);
void init_DAC(void);
void DAC_7611(uint vol);
void clock(void);

void main(void)
{
        //uint32_t ui32Period;
        //使能FPU
        FPUEnable();
        FPULazyStackingEnable();
        SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
    //2.5分频,使用PLL,外部晶振16M,system时钟源选择 main osc。系统时钟80MHZ
    //SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
                   //使能TIMER0
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);//使能GPIO外设
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);//使能GPIO外设
    GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);
    GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6);

    init_DAC();
    while(1)
    {
            DAC_7611(1234);
       // if(num==50) num=0;
    }


}

//片选信号端,低电平有效,PC0
void CS(uchar i)
{
         if(i) GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4,GPIO_PIN_4);
         else  GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4,~GPIO_PIN_4);
}
//同步串行时钟输入,PC1
void CLK(uchar i)
{
          if(i)  GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,GPIO_PIN_5 );
          else   GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,~GPIO_PIN_5);
}
//串行数据输入端,串行时钟上升沿输入,PC2
void SDI(uchar i)
{
        if(i)  GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6,GPIO_PIN_6 );
    else   GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6,~GPIO_PIN_6);
}
//数据装载控制信号,低电平有效,PD6
void LD(uchar i)
{
        if(i)  GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6,GPIO_PIN_6 );
        else   GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6,~GPIO_PIN_6);
}

/*****时钟脉冲子函数***********/
void clock(void)
{
  CLK(0);
  ;
  CLK(1);   //产生一个时钟脉冲
  ;
/*SysCtlDelay(1);*/
}
/******初始化DAC***************/
void init_DAC(void)
{
        LD(0);
        CS(1);
        CLK(1);
        SDI(0);
}
/******DAC7611转换***************/
void DAC_7611(uint vol)
{
  uint i;
  vol<<=4;
  LD(1);             //装载引脚置高
  ;
  CS(0);             //片选拉低,准备转换
  for(i=0;i<12;i++)
   {
     if( (vol & 0x8000) ==0) SDI(0);
         else SDI(1);
     clock();
     vol<<=1;
   }
  CLK(1);                 // 输出时钟置高
  ;
  CS(1);                    //DAC7611片选引脚CS置高
  ;
  LD(0);                    //装载引脚LD置低以启动数模转换
  ;    //延时一会,使输出模拟电压达到稳定
  LD(1);    //LD置高
}

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
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
快速回复 返回顶部 返回列表