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.

[参考译文] TMS320F280049C:TMS320F280049C

Guru**** 2455560 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/875005/tms320f280049c-tms320f280049c

器件型号:TMS320F280049C
主题中讨论的其他器件:C2000WARETMDSHVMTRINSPIN

您好!

我将"C2000Ware_MotorControl_SDK_2_01_00_00_setup"用于我的项目、在该项目中、我将使用"\ti\c2000Ware_MotorControl_SDK_2_01_00_00\solutions\tmdshsprospvmtrin/is13_fwc_MTPA"文件夹作为参考。

我创建了"TIMER0 ISR"、已经可用的"main ISR"函数已被 ADC-C1中断中断中断。

当我根据我的要求对"HAL_setupADC (HAL_Handle handle)"函数进行更改时、  不会生成"main ISR"中断、但会生成"TIMER0 ISR"。

但是、当我在  "HAL_setupADC (HAL_Handle handle)"中不做任何更改时 、我能够生成中断"主 ISR 和 TIMER0 ISR"。

如需更多信息、请参阅下面的 PFD。

============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

我的更改代码:[在此中、仅生成 TIMER0 ISR ]。

void HAL_setupADC (HAL_Handle handle)
 HAL_Obj * obj =(HAL_Obj *)句柄;
 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 (ASYSCTL_VREFHIA |
                 ASHSCTL_VREFHIB |
                 ASHSCTL_VREFHIC);
 //启用内部电压基准
 ASysCtl_setAnalogReferenceInternal (ASYSCTL_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_0);
 ADC_setPrescaler (obj->adcHandle[2]、ADC_CLK_DIV_2_0);
 //将 ADC 中断脉冲生成设置为转换结束
 ADC_setInterruptPulseMode (obj->adcHandle[0]、ADC_PULSE_END_of _CONV);
 ADC_setInterruptPulseMode (obj->adcHandle[1]、ADC_PULSE_END_of _CONV);
 ADC_setInterruptPulseMode (obj->adcHandle[2]、ADC_PULSE_END_of _CONV);
 //启用 ADC
 adc_enableConverter (obj->adcHandle[0]);
 adc_enableConverter (obj->adcHandle[1]);
 adc_enableConverter (obj->adcHandle[2]);
 //设置 SOC 的优先级
 ADC_setSOCPriality(obj->adcHandle[0]、ADC_PRI_All_HIPRI);
 ADC_setSOCPriality(obj->adcHandle[1]、ADC_PRI_All_HIPRI);
 ADC_setSOCPriality(obj->adcHandle[2]、ADC_PRI_All_HIPRI);
 //延迟以允许 ADC 加电
 SYSCTL_DELAY (1000U);
 //配置中断源
 //通过分配14将充足窗口配置为15个系统时钟周期
 //到 ADCSOCxCTL 寄存器的 ACQPS。
 // RC2/C1
 adc_setInterruptSource (obj->adcHandle[2]、adc_int_number1、adc_SOC_number2);
#ifdef MYCHANGE
 //为 hvkit_rev1p1配置 SOC
 // ISENSE1-FB - B2->RB0
 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN2、HAL_ADC_SAMPLE_WINDOW);
 // ISENSE2-FB - B3->RB1
 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_number1、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN3、HAL_ADC_SAMPLE_WINDOW);
 // ISENSE3-FB - B6->RB2
 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_number2、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN6、HAL_ADC_SAMPLE_WINDOW);
 // ada-Vhb1 - b1->RB3
 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_Number3、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN1、HAL_ADC_SAMPLE_WINDOW);
 // adC-Vhb2 - B4->RB4
 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_Number4、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN4、HAL_ADC_SAMPLE_WINDOW);
 // adc -Vhb3 - B8->RB5
 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_Number5、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN8、HAL_ADC_SAMPLE_WINDOW);
 // VDCBUS - A0->RA0。 Hvkit 板的 Vbus 反馈上有电容器、因此
 //采样不需要很长的时间即可获得准确的值
 ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN0、HAL_ADC_SAMPLE_WINDOW);
 //a1->RA1
 ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_number1、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN1、HAL_ADC_SAMPLE_WINDOW);
 // C0->RC0
 ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN0、HAL_ADC_SAMPLE_WINDOW);
 // C4->RC4
 ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_Number4、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN4、HAL_ADC_SAMPLE_WINDOW);
 //C3->RC3
 ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_Number3、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN3、HAL_ADC_SAMPLE_WINDOW);
其他
 //为 hvkit_rev1p1配置 SOC
 // IA-FB - B3->RB0
 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN3、HAL_ADC_SAMPLE_WINDOW);
 // IB-FB - C0->RC0
 ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN0、HAL_ADC_SAMPLE_WINDOW);
 // IC-FB - A3->RA0
 ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN3、HAL_ADC_SAMPLE_WINDOW);
 // adc -Vhb1 - c2->RC1
 ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_number1、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN2、HAL_ADC_SAMPLE_WINDOW);
 // adc-Vhb2 - c1->rc2
 ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_number2、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN1、HAL_ADC_SAMPLE_WINDOW);
 // adC-Vhb3 - B4->RB1
 ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_number1、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN4、HAL_ADC_SAMPLE_WINDOW);
 // VDCBUS - A9->RA1。 Hvkit 板的 Vbus 反馈上有电容器、因此
 //采样不需要很长的时间即可获得准确的值
 ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_number1、ADC_TRIGGER_EPWM1_SOCA、
        ADC_CH_ADCIN9、HAL_ADC_SAMPLE_WINDOW);
#endif
 返回;
}// HAL_setupADCs()函数结束

============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

无变化的代码:[生成两个 ISR ]。

void HAL_setupADC (HAL_Handle handle)

HAL_Obj * obj =(HAL_Obj *)句柄;

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 (ASYSCTL_VREFHIA |
ASHSCTL_VREFHIB |
ASHSCTL_VREFHIC);

//启用内部电压基准
ASysCtl_setAnalogReferenceInternal (ASYSCTL_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_0);
ADC_setPrescaler (obj->adcHandle[2]、ADC_CLK_DIV_2_0);

//将 ADC 中断脉冲生成设置为转换结束
ADC_setInterruptPulseMode (obj->adcHandle[0]、ADC_PULSE_END_of _CONV);
ADC_setInterruptPulseMode (obj->adcHandle[1]、ADC_PULSE_END_of _CONV);
ADC_setInterruptPulseMode (obj->adcHandle[2]、ADC_PULSE_END_of _CONV);

//启用 ADC
adc_enableConverter (obj->adcHandle[0]);
adc_enableConverter (obj->adcHandle[1]);
adc_enableConverter (obj->adcHandle[2]);

//设置 SOC 的优先级
ADC_setSOCPriality(obj->adcHandle[0]、ADC_PRI_All_HIPRI);
ADC_setSOCPriality(obj->adcHandle[1]、ADC_PRI_All_HIPRI);
ADC_setSOCPriality(obj->adcHandle[2]、ADC_PRI_All_HIPRI);

//延迟以允许 ADC 加电
SYSCTL_DELAY (1000U);

//配置中断源
//通过分配14将采样窗口配置为15个系统时钟周期
//到 ADCSOCxCTL 寄存器的 ACQPS。
// RC2/C1
adc_setInterruptSource (obj->adcHandle[2]、adc_int_number1、adc_SOC_number2);

//为 hvkit_rev1p1配置 SOC
// IA-FB - B3->RB0
ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
ADC_CH_ADCIN3、HAL_ADC_SAMPLE_WINDOW);

// IB-FB - C0->RC0
ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
ADC_CH_ADCIN0、HAL_ADC_SAMPLE_WINDOW);

// IC-FB - A3->RA0
ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
ADC_CH_ADCIN3、HAL_ADC_SAMPLE_WINDOW);

// adc -Vhb1 - c2->RC1
ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_number1、ADC_TRIGGER_EPWM1_SOCA、
ADC_CH_ADCIN2、HAL_ADC_SAMPLE_WINDOW);

// adc-Vhb2 - c1->rc2
ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_number2、ADC_TRIGGER_EPWM1_SOCA、
ADC_CH_ADCIN1、HAL_ADC_SAMPLE_WINDOW);

// adC-Vhb3 - B4->RB1
ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_number1、ADC_TRIGGER_EPWM1_SOCA、
ADC_CH_ADCIN4、HAL_ADC_SAMPLE_WINDOW);

// VDCBUS - A9->RA1。 Hvkit 板的 Vbus 反馈上有电容器、因此
//采样不需要很长的时间即可获得准确的值
ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_number1、ADC_TRIGGER_EPWM1_SOCA、
ADC_CH_ADCIN9、HAL_ADC_SAMPLE_WINDOW);

返回;
}// HAL_setupADCs()函数结束

============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

// cpuTimer0ISR - 1ms 中断
_interrupt void cpuTimer0ISR (void)
  CPUCount++;
  //
  //确认此中断以从组1接收更多中断
  //
  INTERRUPT_clearACKGROUP (INTERRUPT_ACK_Group1);
============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

此致、

Karthithkeyan Ramachandran

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不认为你只是更改了上面提到的鳕鱼。 请仅发布您在原始实验中所做的更改、未列出所有代码、以及您添加的 ISR 所采用的代码或 CPU 带宽的数量。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    除了 由 ADC-C1调用的"main ISR"之外、我还创建了由 Timer0调用的"cpuTimer0ISR"、如下所述。

    INTERRUPT_REGISTER (INT_TIMER0、&cpuTimer0ISR)。

    2.当我在没有对"void HAL_setupADC (HAL_Handle handle)"进行任何更改的情况下执行代码时 、会生成 ISR "cpuTimer0ISR 和 mainISR"。

    但是、当我根据  我的要求更改"HAL_setupADC"函数内的"为 hvkit_rev1p1"配置 SOC 时、在执行时 仅 生成"cpuTimer0ISR"。

    但是、当我在那时用旧更改恢复代码时、会生成两个 ISR。

    如上文"cpuTimer0ISR"线程注释中所述 、我只是递增计数。

    // cpuTimer0ISR - 1ms 中断
    _interrupt void cpuTimer0ISR (void)

    CPUCount++;
    //
    //确认此中断以从组1接收更多中断
    //
    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_Group1);

    #endif

    此致、

    Karthithkeyan Ramachandran

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    通过以下更改解决了该问题。

    现有 代码:adc_setInterruptSource (obj->adcHandle[2]、adc_int_number1、adc_SOC_number2);


    Mychange:adc_setInterruptSource (obj->adcHandle[2]、adc_int_number1、adc_SOC_NUMBER0);

    我已将 SOC 编号从2更改为0因为我使用 ADC-C 和 ADC_SOC_NUMBER0来满足我的要求

    感谢您的回答。

    请问 如何知道 CPU 带宽是由 ISR 占用的。


    此致、

    Karthithkeyan Ramachandran