参考这个程序:
硬件SPI通信(速度比GPIO模拟快很多)
/*******************************************
开发坏境:CCSv5.4
开发板:TIVA C Launchpad(TM4C123GH6PM)
程序功能:TLV5618 SPI通信(TI模式)
程序说明:1.DIN——PF1 2.SCLK——PF2 3.CS——PF3
DAC采样速率:95KHZ
编程者:Linchpin
********************************************/
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/hw_gpio.h"
#include "inc/hw_ssi.h"
#include "grlib/grlib.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/ssi.h"
#include "driverlib/rom.h"
#include "driverlib/pin_map.h"
#define uchar unsigned char
#define uint unsigned int
void DAC_Write_A(float out_volt);
void main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |SYSCTL_XTAL_10MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//SysCtlGPIOAHBEnable(GPIO_PORTF_BASE);//挂在AHB高性能总线上
GPIOPinConfigure(GPIO_PF2_SSI1CLK);
GPIOPinConfigure(GPIO_PF3_SSI1FSS);
GPIOPinConfigure(GPIO_PF1_SSI1TX);
GPIOPinTypeSSI(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_2);
//SSI1_BASE/时钟频率/时钟协议,moto代表SPI协议/工作模式:主机模式/位速率4M/数据帧位数16
//SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0 , SSI_MODE_MASTER, 25000000, 16);
SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_TI , SSI_MODE_MASTER, 25000000, 16);
SSIEnable(SSI1_BASE);
while(1)
{
DAC_Write_A(1);
//SysCtlDelay(SysCtlClockGet()/3000);
DAC_Write_A(2);
//SysCtlDelay(SysCtlClockGet()/3000);
}
}
void DAC_Write_A(float out_volt)
{
//(uint)(out_volt*4095)/(2*3.281) 先将电压值转化为0~4095的整数
//0x0fff& 转化成16位二进制数,后12位为数据位
//0xc000| 前面加上4位为1100(命令位):快速模式,正常功耗,写数据到A通道
SSIDataPut(SSI1_BASE, 0xc000|(0x0fff&((uint)((out_volt*4095)/(2*3.281)))));
while(SSIBusy(SSI1_BASE)) ;//等待发送完毕
}
|