//模数转换器实验程序解析
//头文件
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/fpu.h"
#include "driverlib/sysctl.h"
#include "driverlib/rom.h"
#include "driverlib/pin_map.h"
#include "grlib/grlib.h"
#include "drivers/cfal96x64x16.h"
#include "driverlib/gpio.h"
#include "driverlib/adc.h"
#include "inc/hw_gpio.h"
int main(void)
{
tContext sContext;
tRectangle sRect;
ui32 ulADC0_Value;
ui8 ulADC0_v[8];
ui32 i,j;
const char chars[16]={"0123456789ABCDEF"};
//使能FPU
FPUEnable();
FPULazyStackingEnable();
//设置系统时钟为50MHz (400/2/4=50)
ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL |
SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
//初始化ADC0/PE3
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3);
//设置ADC参考电压为外部3V
ROM_ADCReferenceSet(ADC0_BASE, ADC_REF_EXT_3V);
//配置ADC采集序列
ROM_ADCSequenceConfigure(ADC0_BASE, 0,
ADC_TRIGGER_PROCESSOR, 0);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0 |
ADC_CTL_END | ADC_CTL_IE);
//使能ADC采集序列
ROM_ADCSequenceEnable(ADC0_BASE, 0);
ROM_ADCIntClear(ADC0_BASE, 0);
ROM_ADCIntEnable(ADC0_BASE, 0);
//初始化显示模块
CFAL96x64x16Init();
GrContextInit(&sContext, &g_sCFAL96x64x16);
while(1)
{
//触发采集
ADCProcessorTrigger(ADC0_BASE, 0);
//等待采集结束
while(!ADCIntStatus(ADC0_BASE, 0, false)) ;
//获取采集结果
ADCSequenceDataGet(ADC0_BASE, 0, &ulADC0_Value);
//将采集结果从32位无符号数转化为char
i=28;
for(j=0;j<8;j++)
{
ulADC0_v[j]=chars[(ulADC0_Value>>i)&0xf];
i-=4;
}
//延时
SysCtlDelay(SysCtlClockGet() / 12);
//屏幕的上面24行填充蓝色覆盖上次的显示结果
sRect.i16XMin = 0;
sRect.i16YMin = 0;
sRect.i16XMax = GrContextDpyWidthGet(&sContext) - 1;
sRect.i16YMax = 23;
GrContextForegroundSet(&sContext, ClrDarkKhaki);
GrRectFill(&sContext, &sRect);
//在颜色块的边缘放置白框
GrContextForegroundSet(&sContext, ClrWhite);
GrRectDraw(&sContext, &sRect);
//显示工程名称和采集结果
GrContextFontSet(&sContext, g_psFontCm12);
GrStringDrawCentered(&sContext, ulADC0_v, 8,
GrContextDpyWidthGet(&sContext) / 2, 10, 0);
GrStringDrawCentered(&sContext, "ADC Results", -1,
GrContextDpyWidthGet(&sContext) / 2,
((GrContextDpyHeightGet(&sContext) - 24) / 2) + 24, 0);
//更新显示
GrFlush(&sContext);
}
}