【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置高
}
|