📄 main.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 + -