我是一个新手,调试完了基本的LED.中断。定时器。最近在调ADC。可是有些地方就是想不明白。在看别人的例程时,根本就没有看到定义哪个端口是AD采集端口。看了《LM3S系列模-数转换器(ADC).pdf》也没有看明白,还请高人指点下。
程序里 “”“
采样步进设置:ADC基址,采样序列编号,步值,通道设置 ”“”中选的是“
ADC_CTL_CH0”输入通道0,对应是的“
ADC0”,我找到我所用的芯片的原理图“
ADC0”就是“
PE7”.我把外部电压引到
PE7引脚上。可是采到的值是
“0”我不知道是哪里错了。
此帖出自
小平头技术问答
检查是否调用了触发 ADC 采样的 API.
int main(void)
{
unsigned long ulValue;
//jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:16M外部晶振
adcInit(); // ADC初始化
for (;;)
{
ADCProcessorTrigger(ADC_BASE, 0); // 处理器触发采样序列
while (!ADC_EndFlag); // 等待采样结束
ADC_EndFlag = false; // 清除ADC采样结束标志
ADCSequDataGet(ADC_BASE, 0, &ulValue);
ulValue = (ulValue * 3000) / 1024;
//SysCtlDelay(1500 * (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采样结束标志
}
}
//系统时钟
void clockInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_50V); // 设置LDO输出电压
SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置
SYSCTL_OSC_MAIN | // 采用主振荡器
SYSCTL_XTAL_16MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_1); // 不分频
}
我是这么写的。难道不行吗?
一周热门 更多>