主题中讨论的其他器件:C2000WARE
工具/软件:Code Composer Studio
您好! 我`m 第一次使用您的 INSTASPIN 库。 我`ve 进行更改、以便我可以调整我的硬件。 因此、我将 ADC 解决方案更改为:
void HAL_setupADC (HAL_Handle handle) { HAL_Obj * obj =(HAL_Obj *) handle; SYSCTL_DELAY (100U); ADC_setVREF (obj->adcHandle[2]、ADC_reference_internal、ADC_reference_3_3V); adc_setVREF (obj->adcHandle[1]、adc_reference_internal、adc_reference_3_3V); adc_setVREF (obj->adcHandle[0]、adc_reference_internal、 ADC_reference_3_3V); SYSCTL_DELAY (100U); // 将内部基准配置为1.65*2 = 3.3 ASysCtl_setAnalogReference1P65 (ASHSCTL_VREFHIA | ASHSCTL_VREFHIB | ASHSCTL_VREFHIC); //启用内部电压基准 ASysCtl_setAnalogReferenceInternal (ASHSCTL_VREFHIA | ASHSCTL_VREFHIB | ASHSCTL_VREFHIC); */ //设置主时钟比例因子(ADC 模块的最大时钟为50MHz) ADC_setPrescaler (obj->adcHandle[0]、ADC_CLK_DIV_2_0); ADC_setPrescaler (obj->adcHandle[1]、ADC_CLK_DIV_2);ADC_setHandler (obj_2) ADC_CLK_DIV_2_0); //将 ADC 中断脉冲生成设置为转换结束 ADC_setInterruptPulseMode (obj->adcHandle[0]、ADC_PULSE_END_TO_CONV); ADC_setInterruptPulseMode (obj->adcHandle[1]、ADC_PULSE_END_TO_CONV);ADC_setInterruptPulseMode (obj->adcHandle[1]、AdcHandle_InterruptHandle_2_InterruptMode_[ADC_AdcHandle_2); adc_pulate_end_for_CONV); //启用 ADC adc_enableConverter (obj->adcHandle[0]); adc_enableConverter (obj->adcHandle[1]); adc_enableConverter (obj->adcHandle[2]); //设置 SOC 的优先级 adc_setHandle[1] ;adc_setrality-[adcHandle]、adcpr-[adc_setrality]、adcHandle[2];adcpr_adc_enp_ench_enp_enp_all_ad_adrity]、adc_enp_enp_enp_enp_enp_enp_enp_enp_enp_enp_enp_enp_enp_ench_enp_enp_enp ADC_PRI_ALL_HIPRI); //允许 ADC 加电 SYSCTL_DELAY (1000U)的延迟; //配置中断源 //通过向 ADCSOCxCTL 寄存器的 ACQPS 分配14 //将充足窗口配置为15个系统时钟周期。 // RC2/C1 //为 hvkit_rev1p1配置 SOC // IA-FB - B3->RB0 /* ADC_TRIGGER_EPWM1_SOCA*/ ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、 ADC_CH_ADCIN7、HAL_ADC_SAMPLE_WINDOW); // IB-FB - C0->RC0 ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、 ADC_CH_ADCIN12、HAL_ADC_SAMPLE_WINDOW); // IC-FB - A3->RA0 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、 ADC_CH_ADCIN10、HAL_ADC_SAMPLE_WINDOW); // ADC-Vhb1 - C2->RC1 ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、 ADC_CH_ADCIN9、HAL_ADC_SAMPLE_WINDOW); // ADC-Vhb2 - C1->RC2 ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、 ADC_CH_ADCIN14、HAL_ADC_SAMPLE_WINDOW); // ADC-Vhb3 - B4->RB1 ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_number2、ADC_TRIGGER_SW_ONLY、 ADC_CH_ADCIN15、HAL_ADC_SAMPLE_WINDOW); // VDCBUS - A9->RA1。 hvkit 板的 Vbus 反馈上具有电容器、因此 //采样不需要很长的时间即可获得准确值 ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、 ADC_CH_ADCIN11、HAL_ADC_SAMPLE_WINDOW); ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_Number3、ADC_TRIGGER_SW_ONLY、 ADC_CH_ADCIN10、HAL_ADC_SAMPLE_WINDOW); ADC_setInterruptSource (obj->adcHandle[2]、ADC_INT_NUMBER1、ADC_SOC_NUMBER0); //adc_enableInterrupt (obj->adcHandle[0]、adc_int_number1); // adc_clearInterruptStatus (obj->adcHandle[0]、adc_int_number1); return; } // HAL_setupADCs()函数结束 HAL_enableADCInts (HAL_Handle handle) { HAL_Obj * obj =(HAL_Obj *)句柄; //启用与 ADC 中断相关的 PIE 中断 INTERRUPT_ENABLE (INT_ADCC1); //C1. //启用 ADC 中断 adc_enableInterrupt (obj->adcHandle[2]、adc_int_number1); adc_clearInterruptStatus (obj->adcHandle[2]、adc_int_number1); //为 ADC 中断启用 CPU 中断 INTERRUPT_enableInCPU (INTERRUPT_CPU_INT1); #ifdef _VSF_EN_ //为 FAST 估算器启用 CPU 定时器0中断 INTERRUPT_ENABLE (INT_TIMER0); #endif //_VSF_EN_ return; }// HAL_enableADCInts()函数结束
]
n`t 问题是 mainISR 不会触发。 我的 ADC 通道正在工作。 我`ve 进行了手动分层检查(adc_forceSOC (hal.adcHandle[0]、adc_SOC_NUMBER0);)。 ADC 计数器正在计数。 在寄存器中启用 INT1。 该标志被清除。 在 ADCINTSEL 寄存器中启用 ADC 中断。 已将 mainISR 分配给 INT_ADCC1。 我`ve 了代码中不必要的内容。
有什么建议吗?
谢谢!