TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C123x 程序小练 SPI驱动外部DAC

/*******************************************
开发坏境:CCSv5.4
开发板:TIVA C Launchpad(TM4C123GH6PM)
程序功能:TLV5618 SPI通信(TI模式)
程序说明:1.DIN——PF1 2.SCLK——PF2 3.CS——PF3DAC采样速率: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)) ;//等待发送完毕
}
lin li13:

兄弟 你好  又见面了;我在用DAC的时候  写GPIO_PD0_SSI1CLK和GPIO_PD3_SSI1TX的时候通不过   我用的KEIL5    CCSV6真心蛋疼

下面是我的程序   您能帮我一下吗   谢谢你了

#include <stdint.h>#include <stdbool.h>#include <stdio.h>#include <stdarg.h>#include <string.h>

#include "inc/hw_memmap.h"#include "inc/hw_types.h"#include "inc/hw_ssi.h"#include "driverlib/sysctl.h"#include "driverlib/gpio.h"#include "driverlib/pin_map.h"#include "driverlib/ssi.h"#include "driverlib/interrupt.h"

#define DAC_PIN_SPI_PORT SSI1_BASE#define DAC_PERIPH_SPI_CS SYSCTL_PERIPH_GPIOF#define DAC_GPIO_SPI_CS GPIO_PORTF_BASE#define DAC_PIN_SPI_CS GPIO_PIN_1

int main(){ SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); //ÉèʱÖÓ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1); //ʹÄÜÍâÉèssi SysCtlPeripheralEnable(DAC_PERIPH_SPI_CS); //ʹÄÜF¿Ú //DACƬѡλÓÚPF1// SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,1<<1); GPIOPinConfigure(GPIO_PD3_SSI1TX); GPIOPinTypeSSI(GPIO_PORTD_BASE,GPIO_PIN_3); GPIOPinConfigure(GPIO_PD0_SSI1CLK); GPIOPinTypeSSI(GPIO_PORTD_BASE,GPIO_PIN_0); GPIOPinTypeGPIOOutput(DAC_PERIPH_SPI_CS, DAC_PIN_SPI_CS); SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_1, SSI_MODE_MASTER, 1000000, 16); SSIEnable(SSI1_BASE);

我买的北航出版的书也是这么写的   就是上面两句通不过  报错原因:

main.c(45): error: #20: identifier "GPIO_PD3_SSI1TX" is undefined GPIOPinConfigure(GPIO_PD3_SSI1TX);

main.c(47): error: #20: identifier "GPIO_PD0_SSI1CLK" is undefined GPIOPinConfigure(GPIO_PD0_SSI1CLK);

说是没有定义  但是我在Pin_map.h找到里确实是有定义

兄弟  就这个通不过  你看看我有什么错误

xyz549040622:

回复 lin li13:

估计是你没有宏定义所使用的芯片,所以找不到这个SSI的定义。你上传你MDK下宏定义的配置看看。

lin li13:

回复 xyz549040622:

我竟无语凝噎啊    工程老是建不对  配置老是弄不好!!!!

那个问题解决了  是下面这个图的   Preprocessor  Symbols   下的   Define  没填   

因为  我有例程  对照它的改过来了   但是  编译还是通不过      真心蛋疼  又有其他不知名的5个error

例程的主程序在我的工程里也出现5个error  

又是工程配置的问题      真心烦   用CCS也是工程建不好  蠢死了我    有毒啊   

兄弟  能不能带带我   建个好工程出来 

能加qq聊吗  这个不怎么方便

万分感谢

lin li13:

回复 lin li13:

这就是那5个error

xyz549040622:

回复 lin li13:

你这个一看就是工程没有配置好。去21ic搜索下我的帖子,工程的配置。最近太忙了,哪有时间qq,不过有空我会看邮件提醒的。有问题发帖我就会看到了。

lin li13:

回复 xyz549040622:

非常感谢

赞(0)
未经允许不得转载:TI中文支持网 » TM4C123x 程序小练 SPI驱动外部DAC
分享到: 更多 (0)