/******************************************* 开发坏境: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:
非常感谢