您好!
我尝试将 TivaC 配置为在中断模式下与 ADC 配合使用、但它不起作用
ADCIM 中 ADC0的位3被置位、ADC0 ADCSSCTL3中的位2被置位、EN0中的位17被置位。
此外、所有需要的寄存器都被设置为使 ADC0正常工作、然后我通过基于轮询的工作进行了测试、我工作正常。
我还应该做些什么来使它发挥作用?
谢谢。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我尝试将 TivaC 配置为在中断模式下与 ADC 配合使用、但它不起作用
ADCIM 中 ADC0的位3被置位、ADC0 ADCSSCTL3中的位2被置位、EN0中的位17被置位。
此外、所有需要的寄存器都被设置为使 ADC0正常工作、然后我通过基于轮询的工作进行了测试、我工作正常。
我还应该做些什么来使它发挥作用?
谢谢。
这些头文件是 TivaWare 的一部分。 最新版本的 TivaWare 的默认安装位置为:
C:\ti\TivaWare_C_Series-2.1.4.178
我下载并安装了 TivaWare、并从互联网上使用了此代码
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/tm4c123ghp6.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/simple.h"
#include "driverlib/driver1.000";包含"driverlib_dive.t/driver32.utrl"#include "driverlib_dive.t/driveript"#include "driver1.t.idt.idt.idt.ultr.ultr.ultr.ultrintry"#include "driver32.t.ultrintru.id.ultru.id.ultrintru.id.id.id.id.id.id.id.id.id.ultru.id.id.id.id.id.id.id.
//***时钟
ROM_SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);
//***外设启用
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
//*** ADC0
ROM_ADCHardwareOversampleConfigure (ADC0_BASE、4);
ROM_ADCReferenceSet (ADC0_BASE、ADC_REF_INT);
ROM_ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_TIMER、0);
ROM_ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH7|ADC_CTL_IE|ADC_CTL_END);
ROM_ADCSequenceEnable (ADC0_BASE、3);
//***时间器0
ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
SamplePeriod = ROM_SysCtlClockGet ()/sampleFreq;
ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、SamplePeriod - 1);
ROM_TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
//*** GPIO
ROM_GPIOPinTypeADC (GPIO_PORTD_base、GPIO_PIN_0);
//***中断
ROM_IntEnable (INT_TIMER0A);
ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
ROM_IntEnable (INT_ADC0SS3);
ROM_ADCIntEnable (ADC0_BASE、3);
ROM_IntMasterEnable();
ROM_TimerEnable (TIMER0_BASE、TIMER_A);
}
int main (void)
{
systemsetup();
while (1)
{
}
返回0;
}
void Timer0IntHandler (void){
ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
}
void ADC0SS3IntHandler (void){
X++;
ROM_ADCIntClear (ADC0_BASE、3);
ROM_ADCSequenceDataGet (ADC0_BASE、3、ADC0Value);//从 ADC 获取数据并将其存储在 ADC0Value
中}
我在运行代码 x 时期望随着时间的推移而增加、但为什么它保持为0?
我在计时器0子计时器 A 上添加了 Timer0IntHandler、在 ADC 序列3上添加了 ADC0SS3IntHandler
您好 Mohamed、
您需要将变量"x"声明为易失性、以便在 ISR 中更新它。 可通过以下方式完成此操作:
volatile uint8_t x = 0;
请参阅此 E2E 博文了解背景信息、了解在 ISR 中使用全局变量时为什么这很重要: e2e.ti.com/.../2550611