?? main.c
字號(hào):
#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轉(zhuǎn)換結(jié)束的標(biāo)志
// ADC初始化
void adcInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_ADC); // 使能ADC模塊
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 設(shè)置ADC采樣率
ADCSequDisable(ADC_BASE, 0); // 配置前先禁止采樣序列
// 采樣序列配置:ADC基址,采樣序列編號(hào),觸發(fā)事件,采樣優(yōu)先級(jí)
ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
// ADC采樣序列步進(jìn)配置: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 | // 結(jié)束,并
ADC_CTL_IE); // 申請(qǐng)中斷
ADCIntEnable(ADC_BASE, 0); // 使能ADC中斷
IntEnable(INT_ADC0); // 使能ADC采樣序列中斷
IntMasterEnable(); // 使能處理器中斷
ADCSequEnable(ADC_BASE, 0); // 使能采樣序列
}
// ADC采樣:*pulVal保存采樣結(jié)果
void adcSample(unsigned long *pulVal)
{
ADCProcessorTrigger(ADC_BASE, 0); // 處理器觸發(fā)采樣序列
while (!ADC_EndFlag); // 等待采樣結(jié)束
ADC_EndFlag = false; // 清除ADC采樣結(jié)束標(biāo)志
ADCSequDataGet(ADC_BASE, 0, pulVal); // 自動(dòng)讀取全部ADC結(jié)果
}
int main(void)
{
unsigned long ulVal[8];
char s[40];
unsigned long i, v;
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 時(shí)鐘初始化:PLL,20MHz
uartInit(); // UART初始化
adcInit(); // ADC初始化
for (;;)
{
adcSample(ulVal); // ADC采樣
for (i = 0; i < 8; i++)
{
v = (ulVal[i] * 3000) / 1024; // 轉(zhuǎn)換成電壓值
sprintf(s, "ADC%d = %d(mV)\r\n", i, v); // 采樣值格式化為電壓值
uartPuts(s); // 通過UART輸出電壓值
}
uartPuts("\r\n");
SysCtlDelay(1500 * (TheSysClock / 3000)); // 延時(shí)約1500ms
}
}
// ADC采樣序列0的中斷
void ADC_Sequence_0_ISR(void)
{
unsigned long ulStatus;
ulStatus = ADCIntStatus(ADC_BASE, 0, true); // 讀取中斷狀態(tài)
ADCIntClear(ADC_BASE, 0); // 清除中斷狀態(tài),重要
if (ulStatus != 0) // 如果中斷狀態(tài)有效
{
ADC_EndFlag = true; // 置位ADC采樣結(jié)束標(biāo)志
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -