⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用于SSI通信
💻 C
字号:
#include  "systemInit.h"
#include  "uartGetPut.h"

#include  <stdio.h>
#include  <ssi.h>
#define  PART_LM3S1138
#include  <pin_map.h>

#define  ADCSequEnable          ADCSequenceEnable
#define  ADCSequDisable         ADCSequenceDisable
#define  ADCSequConfig          ADCSequenceConfigure
#define  ADCSequStepConfig      ADCSequenceStepConfigure
#define  ADCSequDataGet         ADCSequenceDataGet


//tBoolean ADC_EndFlag = false;                               //  定义ADC转换结束的标志

//  SSI初始化
void ssiInit(void)
{
    unsigned long ulBitRate = TheSysClock / 3;

    SysCtlPeriEnable(SYSCTL_PERIPH_SSI0);                   //  使能SSI模块

    SysCtlPeriEnable(SSI0CLK_PERIPH);                       //  使能SSI0接口所在的GPIO端口
    SysCtlPeriEnable(SSI0FSS_PERIPH);
    SysCtlPeriEnable(SSI0RX_PERIPH);
    SysCtlPeriEnable(SSI0TX_PERIPH);

    GPIOPinTypeSSI(SSI0CLK_PORT, SSI0CLK_PIN);              //  将相关GPIO设置为SSI功能
    GPIOPinTypeSSI(SSI0FSS_PORT, SSI0FSS_PIN);
    GPIOPinTypeSSI(SSI0RX_PORT, SSI0RX_PIN);
    GPIOPinTypeSSI(SSI0TX_PORT, SSI0TX_PIN);

    //  SSI配置:基址,协议格式,主/从模式,位速率,数据宽度
    SSIConfig(SSI0_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, ulBitRate, 16);

    SSIEnable(SSI0_BASE);                                   //  使能SSI收发
}

//  将控制字输出
void dataDisplay(unsigned char ucData)
{
    const unsigned char ucTable[8]  =                      //  定义8个通道的控制字
    {
        0x0c, 0x1c, 0x2c, 0x3c, 0x4c, 0x5c, 0x6c, 0x7c
    };

    unsigned char t = ucTable[ucData];              //  

    SSIDataPut(SSI0_BASE,t);                               //  通过SSI输出数据到tlc2543
}

//  ADC初始化
/*****************************************************************
void adcInit(void)
{
    SysCtlPeriEnable(SYSCTL_PERIPH_ADC);                    //  使能ADC模块
    SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);             //  设置ADC采样速率
    ADCSequDisable(ADC_BASE, 0);                            //  配置前先禁止采样序列

    //  采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
    ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);

    //  采样步进设置:ADC基址,采样序列编号,步值,通道设置
    ADCSequStepConfig(ADC_BASE, 0, 0, ADC_CTL_CH0 |
                                      ADC_CTL_END |
                                      ADC_CTL_IE);

    ADCIntEnable(ADC_BASE, 0);                              //  使能ADC中断
    IntEnable(INT_ADC0);                                    //  使能ADC采样序列中断
    IntMasterEnable();                                      //  使能处理器中断

    ADCSequEnable(ADC_BASE, 0);                             //  使能采样序列
}
******************************************/

//  ADC采样
/************************************
unsigned long adcSample(void)
{
    unsigned long ulValue;

    ADCProcessorTrigger(ADC_BASE, 0);                       //  处理器触发采样序列
    while (!ADC_EndFlag);                                   //  等待采样结束
    ADC_EndFlag = false;                                    //  清除ADC采样结束标志
    ADCSequDataGet(ADC_BASE, 0, &ulValue);                  //  读取ADC转换结果

    return(ulValue);
}

*********************************************************/
//  主函数(程序入口)
int main(void)
{
    unsigned long ulVal;
    char cBuf[30];

    jtagWait();                                             //  防止JTAG失效,重要!
    clockInit();                                            //  时钟初始化:PLL,20MHz
    ssiInit();                                                 //  SSI初始化
    uartInit();                                             //  UART初始化
   // adcInit();                                              //  ADC初始化

    for (;;)
    {
      int i;
      //  ulVal = adcSample();                                //  ADC采样
       // ulVal = (ulVal * 3000) / 0xffff;                    //  转换成电压值
      
      for(i=0;i<8;i++)
        {
          dataDisplay(i);                                  //输出控制字
          
          SSIDataGet(SSI_BASE, &ulVal);
          ulVal = (ulVal * 5000) / 65535;
        sprintf(cBuf, "ADC0 = %ld(mV)\r\n", ulVal);         //  输出格式化
        uartPuts(cBuf);                                     //  通过UART显示结果
        SysCtlDelay(1500 * (TheSysClock / 3000));    //  延时约1500ms

        }
      }
}

/********************
//  ADC采样序列0的中断
void ADC_Sequence_0_ISR(void)
{
    unsigned long ulStatus;

    ulStatus = ADCIntStatus(ADC_BASE, 0, true);             //  读取中断状态
    ADCIntClear(ADC_BASE, 0);                               //  清除中断状态,重要

    if (ulStatus != 0)                                      //  如果中断状态有效
    {
        ADC_EndFlag = true;                                 //  置位ADC采样结束标志
    }
}

**************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -