大家好、这是 Namha。
我在实现多通道 ADC 中断功能时遇到问题。
我想使用 timer0和1的两个 ADC 中断处理程序。
(ADC 采样频率:1MHz)
但 ADC0SS3IntHandler 只能工作、ADC1SS3IntHandler 不能工作。
下面附上了 ADC 初始化和处理程序代码。 是设置问题还是另一个问题?
///-------------------------------- ADC 初始化------------------------------------------------------- //
空 ADCInit (空)
{
//初始化 ADC
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);//ADC 外设
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);//ADC 外设
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
用于 ADC 通道的//引脚
ROM_GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);
//*** ADC
ROM_ADCReferenceSet (ADC0_BASE、ADC_REF_INT);
ROM_ADCReferenceSet (ADC1_base、ADC_REF_INT);
ROM_ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_TIMER、0);
ROM_ADCSequenceConfigure (ADC1_base、3、ADC_TRIGGER_TIMER、3);
ROM_ADCSequenceStepConfigure (ADC0_BASE、ADC_SEQUENCE_NUMBER、0、ADC_CTL_D | ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
ROM_ADCSequenceStepConfigure (ADC1_base、ADC_Sequence_Number、0、ADC_CTL_D | ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END);
ROM_ADCSequenceEnable (ADC0_BASE、ADC_SEQUENCE_NUMBER);
ROM_ADCSequenceEnable (ADC1_base、ADC_SEQUENSE_NUMBER);
//rom_ADCHardwareOversampleConfigure (ADC0_BASE、txLeakageOversamplingNumber);
//rom_ADCHardwareOversampleConfigure (ADC1_base、txLeakageOversamplingNumber);
//***时间器0
ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
SamplePeriod = ROM_SysCtlClockGet ()/(1000*ADC_MAX_SAMPLING_RATE);
ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、SamplePeriod - 1);//采样频率1MHz
ROM_TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
//***时间器1
ROM_TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
ROM_TimerLoadSet (Timer1_base、timer_A、SamplePeriod - 1);//采样频率1MHz
ROM_TimerControlTrigger (Timer1_base、timer_A、true);
//***中断
ROM_IntEnable (INT_TIMER0A);
ROM_IntEnable (INT_TIMER1A);
ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
ROM_TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);
ROM_IntEnable (INT_ADC0SS3);
ROM_IntEnable (INT_ADC1SS3);
ROM_ADCIntEnable (ADC0_BASE、ADC_SEQUENCE_NUMBER);
ROM_ADCIntEnable (ADC1_base、ADC_SEQUENCE_NUMBER);
ROM_IntMasterEnable();
ROM_TimerEnable (TIMER0_BASE、TIMER_A);
ROM_TimerEnable (Timer1_base、timer_A);
}
//------------------------------------------ 处理程序------------------------------------------------------- //
空 Timer0IntHandler (空)
{
ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
}
空 Timer1 IntHandler (空)
{
ROM_TimerIntClear (Timer1_base、timer_TINA_TIMEOUT);
}
空 ADC0SS3IntHandler (空)
{
ROM_ADCIntClear (ADC0_BASE、3);
ADC0Value[0]= 0;
ROM_ADCSequenceDataGet (ADC0_BASE、3、ADC0Value);//从 ADC 获取数据并将其存储在 ADC1Value 中
adcRawData_0[ADCCurrentIndex_0]=* ADC0Value;
ADCCurrentIndex_0++;
if (ADCCurrentIndex_0 >= 2048)
{
ADCCurrentIndex_0 = 0;
}
}
空 ADC1SS3IntHandler (空)
{
ROM_ADCIntClear (ADC1_BASE、3);
ADC1Value[0]= 0;
ROM_ADCSequenceDataGet (ADC1_base、3、ADC1Value);//从 ADC 获取数据并将其存储在 ADC1Value 中
adcRawData_1_[ADCCurrentIndex_1]=* ADC1Value;
ADCCurrentIndex_1++;
if (ADCCurrentIndex_1 >=2048)
{
ADCCurrentIndex_1 = 0;
}
}
谢谢你。