This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C123x 程序小练 SPI驱动外部DAC



/*******************************************
开发坏境: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)) ;//等待发送完毕
}
  • 兄弟 你好  又见面了;我在用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找到里确实是有定义

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

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

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

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

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

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

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

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

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

    万分感谢

  • 这就是那5个error

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