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.

清华大学TM4C123微处理器原理与实践例程-SSI与DAC实验程序解析



// SSI与DAC实验程序解析
//头文件
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "utils/uartstdio.h"
#include "driverlib/ssi.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include <string.h>

int main(void)
{
    //使能FPU
    FPUEnable();
    FPULazyStackingEnable();

    //设置系统时钟为50MHz
   ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                       SYSCTL_XTAL_16MHZ);

    //使能用到的外设
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);

    // 设置PD0/1/2为SSI引脚,设置PG3为输出引脚,控制DAC芯片的CLR
ROM_GPIOPinTypeSSI(GPIO_PORTD_BASE, (GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3));
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTG_BASE,GPIO_PIN_3);

    // 配置SSI接口
    ROM_SSIDisable(SSI1_BASE);
    ROM_SysCtlDelay(1000);
    ROM_SSIConfigSetExpClk(SSI1_BASE, ROM_SysCtlClockGet(),
                           SSI_FRF_MOTO_MODE_1, SSI_MODE_MASTER,
                           4000000, 16);
    ROM_SSIEnable(SSI1_BASE);
    ROM_SysCtlDelay(1000);

    // 拉高CLR,CLR为低时清除DAC寄存器
    ROM_GPIOPinWrite(GPIO_PORTG_BASE,GPIO_PIN_3, GPIO_PIN_3);
    ROM_SysCtlDelay(1000);
    // SSI不忙时写入数据
    while(ROM_SSIBusy(SSI1_BASE)) ;
 	ROM_SSIDataPut(SSI1_BASE, 0xc800);

    while(1)
    {
    }
}