您好
我目前正在使用 TM4C123GH6PM 进行一个项目。
AM 使用 TIMER1A_Handler 在连接到电位计的 GPIOB 端口5触发 ADC 转换。触发转换时,AM 将 ADC1->SSFIFO3的结果存储 在 ADC_RESULTS 中。 如果 ADC_RESULTS 值大于2048 ,绿色 LED 将亮起。 该代码编译时没有错误,但绿色 LED 指示灯未亮起 ,因此我的 ADC 转换似乎不成功。
如果你有任何想法,可能是什么问题与我的代码,请帮助我.
此致、
认真。
下面是我的代码:
#include "TM4C123.h"//设备标题
void ADC_init (void);
void timer_init (void);
void LED_init (void);
void TIMER1A_Handler (void);
Volatile int ADC_RESULTS;
int main (空)
{
LED_INIT ();//
adc_init ();//调用 ADC 初始化函数
timer_init ();//调用计时器初始化函数
//启用计时器中断
__enable_IRQ ();
while (1)
{
while ((ADC1->RIS & 0x08)== 0){}// ss 上的原始中断//等待中断
如果(ADC_RESULTS > 2048)
{
GPIOF->data |= 0x08;//led on
}
否则{
GPIOF->DATA &=~0x08;//led off
}
ADC1->ISC = 0x08;//清除中断
}
}
//用于初始化 ADC 的函数
void ADC_init (void)
{
SYSCTL->RCGCGPIO |= 0x02;// PB 时钟
SYSCTL->RCGCADC |= 0x02;// ADC 1时钟
GPIOB->AFSEL = 0x20;//PB5
GPIOB->DEN &=~0x20;//数字禁用
GPIOB->AMSEL |= 0x20;
//ss 配置
ADC1->ACTSS &=~0x08;//禁用 SS3
ADC1->EMUX = 0x5000;//计时器事件触发器
ADC1->SSMUX3 = 11;//AIN 11作为输入源
ADC1->SSCTL3 = 0x06;//结束位,中断使能
ADC1->ACTSS |= 0x08 ;//启用 SS3
}
void timer_init (void)
{
SYSCTL->RCGCTIMER |= 0x02;//计时器1时钟
Timer1->CTL &=~0x01;//禁用定时器
Timer1->CFG = 0x04;//16位配置
Timer1->TAMR = 0x02;//1周期模式
Timer1->TAPR = 4;//预分频器
Timer1->TAILR = 16000000;//加载值
Timer1->IMR = 0x01;//中断屏蔽已启用
Timer1->CTL |= 0x01;//启用计时器
Timer1->ICR |= 0x01;//清除先前的中断
NVIC->ISER[0]=(1U<<21);//启用 IRQ
}
void LED_init (void)
{
SYSCTL->RCGCGPIO |= 0x20;// pF 时钟
GPIOF->DIR = 0x0E;
GPIOF->DEN = 0x0E;
}
//计时器处理程序
//它将触发 ADC 转换
void TIMER1A_Handler (void)
{
if (Timer1->MIS & 0x01)
{
while ((ADC1->RIS & 0x08)== 0){}//等待 ADC 转换完成
ADC_RESULTS = ADC1->SSFIFO3;
Timer1->ICR |= 0x01;
GPIOF->data |= 0x04;//用于去抖
}
}