Thread 中讨论的其他器件:SysConfig
我正在使用"SysConfig"为 Pinmux 等生成设置代码
我尝试使 PWM1在 DAC 上触发 SOC 事件。 ADC 的中断处理程序设置正确、因为我可以将数据传递到寄存器并强制使用 SOC。 我在中断中设置的断点表明中断已执行。 但是、SOC do4s 不会由 PWM 触发。
下面是设置例程的代码片段...
ADC:
void adc_init(){
//myADC0初始化
// ADC 初始化:写入 ADC 配置并为 ADC 加电
//配置 ADC 模块的偏移调整
ADC_setOffsetTrimAll (ADC_reference_internal、ADC_reference_2_5V);
//配置模数转换器模块预分频器。
ADC_setPrescaler (myADC0_BASE、ADC_CLK_DIV_1_0);
//设置转换结束脉冲的时序
ADC_setInterruptPulseMode (myADC0_BASE、ADC_PULSE_END_TO_CONV);
//为模数转换器内核加电。
ADC_enableConverter (myADC0_BASE);
//延迟1ms 以允许 ADC 加电时间
DEVICE_DELAY_US (5000);
// SOC 配置:设置 ADC ePWM 通道和触发器设置
//禁用 SOC 突发模式。
ADC_DisableBurstMode (myADC0_BASE);
//设置 SOC 的优先级模式。
ADC_setSOCPPriority (myADC0_BASE、ADC_PRI_All_ROUND);
//转换0配置开始
//在 ADC 及其中断 SOC 触发器中配置转换开始(SOC)。
// SOC 编号:0
//触发:ADC_TRIGGER_EPWM1_SOCB
//通道:ADC_CH_ADCIN10
//示例窗口:50个 SYSCLK 周期
//中断触发:ADC_INT_SOC_TRIGGER_NONE
ADC_setupSOC (myADC0_BASE、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCB、ADC_CH_ADCIN10、50U);
ADC_setInterruptSOCtrigger (myADC0_BASE、ADC_SOC_NUMBER0、ADC_INT_SOC_TRIGGER_NONE);
//转换1配置开始
//在 ADC 及其中断 SOC 触发器中配置转换开始(SOC)。
// SOC 编号:1.
//触发:ADC_TRIGGER_EPWM1_SOCB
//通道:ADC_CH_ADCIN15
//示例窗口:50个 SYSCLK 周期
//中断触发:ADC_INT_SOC_TRIGGER_NONE
ADC_setupSOC (myADC0_BASE、ADC_SOC_numer1、ADC_TRIGGER_EPWM1_SOCB、ADC_CH_ADCIN15、50U);
ADC_setInterruptSOCtrigger (myADC0_BASE、ADC_SOC_number1、ADC_INT_SOC_TRIGGER_NONE);
}
PWM:
void ePWM_init(){
ePWM_setClockPrescaler (EPWM1_RefA_base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
ePWM_setTimeBasePeriod (EPWM1_RefA_base、2500);
ePWM_setTimeBaseCounter (EPWM1_RefA_base、0);
ePWM_setTimeBaseCounterMode (EPWM1_RefA_base、ePWM_COUNTER_MODE_UP);
ePWM_DisablePhaseShiftLoad (EPWM1_RefA_base);
ePWM_setPhaseShift (EPWM1_RefA_base、0);
ePWM_setCounterCompareValue (EPWM1_RefA_base、ePWM_COUNTER_COMPARE_A、1250);
ePWM_setCounterCompareShadowImage LoadMode (EPWM1_RefA_base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_ZERO);
ePWM_setCounterCompareValue (EPWM1_RefA_base、ePWM_COUNTER_COMPARE_B、1250);
ePWM_setCounterCompareShadowImage LoadMode (EPWM1_RefA_base、ePWM_COUNTER_COMPARE_B、ePWM_COMP_LOAD_ON_CNTR_ZERO);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_period);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_cmPA);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_CMPA);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_up_CMPB);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_CMPB);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_period);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_up_CMPA);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_CMPA);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_up_CMPB);
ePWM_setActionQualifierAction (EPWM1_RefA_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_CMPB);
ePWM_enableADCtrigger (EPWM1_RefA_base、ePWM_SOC_A);
ePWM_setADCTriggerSource (EPWM1_RefA_base、ePWM_SOC_A、ePWM_SOC_TBCTR_U_CMPB);
中断:
void interrupt_init(){
// INT_myADC0_1的中断设置
interrupt_register (INT_myADC0_1、&INT_myADC0_1_ISR);
INTERRUPT_ENABLE (INT_myADC0_1);
}
这是令人发指的...:<(