📄 main.c
字号:
#include "systemInit.h"
#include "uartGetPut.h"
#include <systick.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转换结束的标志
// 系统节拍定时器初始化(参考外设驱动库systick)
void SysTickInit(void)
{
SysTickPeriodSet(TheSysClock); // 设置SysTick计数器的周期值(1-16777216)
SysTickIntEnable(); // 使能SysTick中断
IntMasterEnable(); // 使能处理器中断(参考外设驱动库Interrupt)
SysTickEnable(); // 使能SysTick计数器(开始倒计数)
}
// ADC初始化
void adcInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_ADC); // 使能ADC模块(参考外设驱动库sysctl)
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 设置ADC采样速率(Stellaris外设驱动库用户指南)
ADCSequDisable(ADC_BASE, 3); // 配置前先禁止采样序列
// 采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
ADCSequConfig(ADC_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
// 采样步进设置:ADC基址,采样序列编号,步值,通道设置(温度传感器选择|列队结束选择|中断使能)
ADCSequStepConfig(ADC_BASE, 3, 0, ADC_CTL_TS |
ADC_CTL_END |
ADC_CTL_IE);
ADCIntEnable(ADC_BASE, 3); // 使能ADC中断
IntEnable(INT_ADC3); // 使能ADC采样序列中断
IntMasterEnable(); // 使能处理器中断
ADCSequEnable(ADC_BASE, 3); // 使能采样序列
}
// ADC采样
unsigned long adcSample(void)
{
unsigned long ulValue; //定义无符号长型变量
ADCProcessorTrigger(ADC_BASE, 3); // 处理器触发采样序列(引发一次采样序列的处理器出发)
while (!ADC_EndFlag); // 等待采样结束(ADC转换结束的标志)
ADC_EndFlag = false; // 清除ADC采样结束标志
ADCSequDataGet(ADC_BASE, 3, &ulValue); // 读取ADC转换结果
return(ulValue); //返回值ulValue
}
// 显示芯片温度值
void tmpDisplay(unsigned long ulValue)
{
unsigned long ulTmp;
char cBuf[40];
ulTmp = 151040UL - 225 * ulValue;
sprintf(cBuf, "%ld.", ulTmp / 1024); // cBuf温度值
uartPuts(cBuf);
sprintf(cBuf, "%ld", (ulTmp % 1024) / 102);
uartPuts(cBuf);
uartPuts("℃\r\n");
}
int main(void) //主函数
{
unsigned long ulValue; //定义无符号长型变量
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:PLL,12.5MHz
uartInit(); // UART初始化
adcInit(); // ADC初始化
SysTickInit(); // 系统节拍定时器初始化
for (;;)
{
SysCtlSleep(); // 睡眠,减少耗电以降低温度
ulValue = adcSample(); // 唤醒后ADC温度采样
tmpDisplay(ulValue); // 通过UART显示芯片温度值
}
}
// SysTick计数器的中断服务函数
void SysTick_ISR(void)
{
// 仅用于唤醒CPU,而不需要做其他事情
}
// ADC采样序列3的中断
void ADC_Sequence_3_ISR(void)
{
unsigned long ulStatus; //定义无符号长型变量ulStatus
ulStatus = ADCIntStatus(ADC_BASE, 3, true); // 读取中断状态(获取屏蔽的中断状态)
ADCIntClear(ADC_BASE, 3); // 清除中断状态,重要
if (ulStatus != 0) // 如果中断状态有效(ulStatus为1)
{
ADC_EndFlag = true; // 置位ADC采样结束标志
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -