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

📄 main.c

📁 这是有关LM3S1138在ucos下的多路数据采集例程
💻 C
字号:
#include  "systemInit.h"
#include  "uartGetPut.h"
#include  <adc.h>
#include  <stdio.h>


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


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


//  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采样序列步进配置:ADC基址,采样序列0,步值,采样通道
    ADCSequStepConfig(ADC_BASE, 0, 0, ADC_CTL_CH0);         //  第0步:采样ADC0
    ADCSequStepConfig(ADC_BASE, 0, 1, ADC_CTL_CH1);         //  第1步:采样ADC1
    ADCSequStepConfig(ADC_BASE, 0, 2, ADC_CTL_CH2);         //  第2步:采样ADC2
    ADCSequStepConfig(ADC_BASE, 0, 3, ADC_CTL_CH3);         //  第3步:采样ADC3
    ADCSequStepConfig(ADC_BASE, 0, 4, ADC_CTL_CH4);         //  第4步:采样ADC4
    ADCSequStepConfig(ADC_BASE, 0, 5, ADC_CTL_CH5);         //  第5步:采样ADC5
    ADCSequStepConfig(ADC_BASE, 0, 6, ADC_CTL_CH6);         //  第6步:采样ADC6

    ADCSequStepConfig(ADC_BASE, 0, 7, ADC_CTL_CH7 |         //  第7步:采样ADC7后
                                      ADC_CTL_END |         //         结束,并
                                      ADC_CTL_IE);          //         申请中断

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

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


//  ADC采样:*pulVal保存采样结果
void adcSample(unsigned long *pulVal)
{
    ADCProcessorTrigger(ADC_BASE, 0);                       //  处理器触发采样序列
    while (!ADC_EndFlag);                                   //  等待采样结束
    ADC_EndFlag = false;                                    //  清除ADC采样结束标志
    ADCSequDataGet(ADC_BASE, 0, pulVal);                    //  自动读取全部ADC结果
}


int main(void)
{
    unsigned long ulVal[8];
    char s[40];
    unsigned long i,j, v1[20][8],v2[8],v;

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

    for (;;)
    {
     adcSample(ulVal);
        for (i = 0;  i < 8;  i++)
      {
              
       v = ((ulVal[i] * 3000) / 1024);   //  转换成电压值
           
       sprintf(s, "ADC%d = %d(mV)\r\n", i, v);         //  采样值格式化为电压值
        uartPuts(s); }                                   //  通过UART输出电压值
        

        uartPuts("\r\n");
        SysCtlDelay(1000 * (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 + -