TI论坛
直播中

崔丹

7年用户 178经验值
私信 关注
[问答]

28069 ADC无法触发中断

在Lab5b的基础上更改了部分代码,期望实现双路驱动。用的是28069Launchpad+2 * 8301 RevB。
现在发现更改设置ADC中断后,就完全无法触发中断了。不知道是哪里有问题。
void HAL_setupAdcs(HAL_Handle handle)[....  // configure the interrupt sources  ADC_disableInt(obj->adcHandle,ADC_IntNumber_1);  ADC_setintMode(obj->adcHandle,ADC_IntNumber_1,ADC_IntMode_ClearFlag);  ADC_setIntSrc(obj->adcHandle,ADC_IntNumber_1,ADC_IntSrc_EOC7);这里将 EOC7改为 E0C14,因为实际上是希望两路同时在跑。所以就把触发放到第二路最后一个SOC14完成。
结果在就无法触发中断了,因为观测变量可以看到,Ctrl State卡在 Offline,那个计数counter一直停留在0. 其余代码不变,改回7就可以正常驱动J1那一路。
整体代码更改了很多,但是基本上就是把原版区分J1 J5的地方,重新更改为两部分都DEFINE,ADC的setting里面,J5的SOC为7~14。总感觉是漏过了某处的设置导致的。

回帖(6)

崔丹

2018-12-5 11:26:28
附上我的SetupADC的Function,基本上没有做太多更改,主要是现在把J1 J5用到的A
void HAL_setupAdcs(HAL_Handle handle)[  HAL_Obj *obj = (HAL_Obj *)handle;  // disable the ADCs  ADC_disable(obj->adcHandle);  // power up the bandgap circuit  ADC_enableBandGap(obj->adcHandle);  // set the ADC voltage reference source to internal   ADC_setVoltRefSrc(obj->adcHandle,ADC_VoltageRefSrc_Int);  // enable the ADC reference buffers  ADC_enableRefBuffers(obj->adcHandle);  // Set main clock scaling factor (max45MHz clock for the ADC module)  ADC_setDivideSelect(obj->adcHandle,ADC_DivideSelect_ClkIn_by_2);  // power up the ADCs  ADC_powerUp(obj->adcHandle);  // enable the ADCs  ADC_enable(obj->adcHandle);  // set the ADC interrupt pulse generation to prior  ADC_setIntPulseGenMode(obj->adcHandle,ADC_IntPulseGenMode_Prior);  // set the temperature sensor source to external  ADC_setTempSensorSrc(obj->adcHandle,ADC_TempSensorSrc_Ext);  // configure the interrupt sources  ADC_disableInt(obj->adcHandle,ADC_IntNumber_1);  ADC_disableInt(obj->adcHandle,ADC_IntNumber_2);  ADC_setIntMode(obj->adcHandle,ADC_IntNumber_1,ADC_IntMode_ClearFlag);#ifdef DUO  ADC_setIntSrc(obj->adcHandle,ADC_IntNumber_1,ADC_IntSrc_EOC14);#else  ADC_setIntSrc(obj->adcHandle,ADC_IntNumber_1,ADC_IntSrc_EOC7);#endif#ifdef J5  //configure the SOCs for boostxldrv8301_revB on J5 Connection  // EXT IA-FB  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_0,ADC_SocChanNumber_A3);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM4_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_cycles);  // EXT IA-FB  // Duplicate conversion due to ADC Initial Conversion bug (SPRZ342)  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_1,ADC_SocChanNumber_A3);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM4_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_cycles);  // EXT IB-FB  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_2,ADC_SocChanNumber_B3);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM4_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_cycles);  // EXT IC-FB  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_3,ADC_SocChanNumber_A4);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM4_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_cycles);  // ADC-Vhb1  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_4,ADC_SocChanNumber_B4);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM4_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_cycles);  // ADC-Vhb2  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_5,ADC_SocChanNumber_A5);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM4_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_cycles);  // ADC-Vhb3  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_6,ADC_SocChanNumber_B5);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM4_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_cycles);  // VDCBUS  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_7,ADC_SocChanNumber_B7);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_7,ADC_SocTrigSrc_EPWM4_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_7,ADC_SocSampleDelay_9_cycles);#endif#ifdef J1  //configure the SOCs for boostxldrv8301_revB on J1 Connection  // EXT IA-FB  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_0,ADC_SocChanNumber_A0);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM1_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_cycles);  // EXT IA-FB  // Duplicate conversion due to ADC Initial Conversion bug (SPRZ342)  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_1,ADC_SocChanNumber_A0);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM1_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_cycles);  // EXT IB-FB  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_2,ADC_SocChanNumber_B0);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM1_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_cycles);  // EXT IC-FB  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_3,ADC_SocChanNumber_A1);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM1_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_cycles);  // ADC-Vhb1  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_4,ADC_SocChanNumber_B1);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM1_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_cycles);  // ADC-Vhb2  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_5,ADC_SocChanNumber_A2);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM1_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_cycles);  // ADC-Vhb3  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_6,ADC_SocChanNumber_B2);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM1_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_cycles);  // VDCBUS  ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_7,ADC_SocChanNumber_A7);  ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_7,ADC_SocTrigSrc_EPWM1_ADCSOCA);  ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_7,ADC_SocSampleDelay_9_cycles);#endif#ifdef DUO  //configure the SOCs for boostxldrv8301_revB on J1 Connection    // EXT IA-FB    ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_0,ADC_SocChanNumber_A0);    ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM1_ADCSOCA);    ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_cycles);    // EXT IA-FB    // Duplicate conversion due to ADC Initial Conversion bug (SPRZ342)    ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_1,ADC_SocChanNumber_A0);    ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM1_ADCSOCA);    ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_cycles);    // EXT IB-FB    ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_2,ADC_SocChanNumber_B0);    ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM1_ADCSOCA);    ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_cycles);    // EXT IC-FB    ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_3,ADC_SocChanNumber_A1);    ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM1_ADCSOCA);    ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_cycles);    // ADC-Vhb1    ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_4,ADC_SocChanNumber_B1);    ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM1_ADCSOCA);    ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_cycles);    // ADC-Vhb2    ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_5,ADC_SocChanNumber_A2);    ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM1_ADCSOCA);    ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_cycles);    // ADC-Vhb3    ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_6,ADC_SocChanNumber_B2);    ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM1_ADCSOCA);    ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_cycles);    // VDCBUS    ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_7,ADC_SocChanNumber_A7);    ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_7,ADC_SocTrigSrc_EPWM1_ADCSOCA);    ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_7,ADC_SocSampleDelay_9_cycles);    //J5    // EXT IA-FB     ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_8,ADC_SocChanNumber_A3);     ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_8,ADC_SocTrigSrc_EPWM4_ADCSOCA);     ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_8,ADC_SocSampleDelay_9_cycles);     // EXT IB-FB     ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_9,ADC_SocChanNumber_B3);     ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_9,ADC_SocTrigSrc_EPWM4_ADCSOCA);     ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_9,ADC_SocSampleDelay_9_cycles);     // EXT IC-FB     ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_10,ADC_SocChanNumber_A4);     ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_10,ADC_SocTrigSrc_EPWM4_ADCSOCA);     ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_10,ADC_SocSampleDelay_9_cycles);     // ADC-Vhb1     ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_11,ADC_SocChanNumber_B4);     ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_11,ADC_SocTrigSrc_EPWM4_ADCSOCA);     ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_11,ADC_SocSampleDelay_9_cycles);     // ADC-Vhb2     ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_12,ADC_SocChanNumber_A5);     ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_12,ADC_SocTrigSrc_EPWM4_ADCSOCA);     ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_12,ADC_SocSampleDelay_9_cycles);     // ADC-Vhb3     ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_13,ADC_SocChanNumber_B5);     ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_13,ADC_SocTrigSrc_EPWM4_ADCSOCA);     ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_13,ADC_SocSampleDelay_9_cycles);     // VDCBUS     ADC_setSocChanNumber(obj->adcHandle,ADC_SocNumber_14,ADC_SocChanNumber_B7);     ADC_setSocTrigSrc(obj->adcHandle,ADC_SocNumber_14,ADC_SocTrigSrc_EPWM4_ADCSOCA);     ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_14,ADC_SocSampleDelay_9_cycles);#endif  return;] // end of HAL_setupAdcs() function
DC channel都激活了。
举报

冯敬宇

2018-12-5 11:43:31
引用: 60user168 发表于 2018-12-5 12:44
附上我的SetupADC的Function,基本上没有做太多更改,主要是现在把J1 J5用到的A
void HAL_setupAdcs(HAL_Handle handle)[  HAL_Obj *obj = (HAL_Obj *)handle;  // disable the ADCs  ADC_disable(obj->adcHandle);  // power up the bandgap circuit  ADC_enableBandGap(obj->adcHandle);  // set the ADC voltage referen ...

你配置了不同的ADC触发源,检查一下PWM初始化部分有没有设置EPWM4 SOCA。
ERIC
                                                                         - ERIC
举报

温洁

2018-12-5 11:53:49
引用: 60user168 发表于 2018-12-5 12:44
附上我的SetupADC的Function,基本上没有做太多更改,主要是现在把J1 J5用到的A
void HAL_setupAdcs(HAL_Handle handle)[  HAL_Obj *obj = (HAL_Obj *)handle;  // disable the ADCs  ADC_disable(obj->adcHandle);  // power up the bandgap circuit  ADC_enableBandGap(obj->adcHandle);  // set the ADC voltage referen ...

楼上说的对估计是PWM4 ADCSOCA的信号没有发出来。
举报

崔丹

2018-12-5 12:03:49
引用: guigui_7044 发表于 2018-12-5 13:01
你配置了不同的ADC触发源,检查一下PWM初始化部分有没有设置EPWM4 SOCA。
ERIC
                                                                         - ERIC

后来修改了触发源,的确正常驱动了。谢谢。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分