Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
尊敬的先生:
我正在使用 F28379D 处理 SYS/BIOS。 我采用了 SYS/BIOS 的最小项目示例。 我已成功完成任务、Swi 和信标。
现在我想尝试插入一个 Hwi、主 CPU 定时器中断已经成功完成、但我无法为 PWM、ADC 等其他外设生成 Hwi。
我尝试创建一个 Hwi、采用名为 ADC_ex2_SoC_ePWM 的 driverlib 中的简单示例。 它 不调用我在 app.cfg 接口中创建的中断函数。
我还共享了 app.cfg 代码和主程序代码。
请指引我出错的地方。
Amosh Bhshutatt
//================================================ app.cfg ======================================================================== //
var ti_sysbios_hal_hwi = xdc.useModule('ti.sysbios.hal.Hwi');
Hwi.nonDispatchedInterrupts["ti_sysbios_family_c28_Hwi0"].intNum = 0;
var ti_sysbios_hal_hwi0Params =新 ti_sysbios_hal_hwi.Params ();
ti_sysbios_hal_Hwi0Params.instance.name ="ti_sysbios_hal_hwi0";
program.global.ti_sysbios_hal_hwi0 = ti_sysbios_hal_hwi.create (32、"&adcdpwmhwi"、ti_sysbios_hal_hwi0Params);
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ //
//================================================ ISR...Hwi================================================================ //
void adcdpwmhwi (void){
GPIO_togglePin (DEVICE_GPIO_PIN_LED1);
ADC_clearInterruptStatus (ADCD_BASE、ADC_INT_NUMBER1);
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_Group1);
}
//==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
//================================================ main.c ============= //
int main()
{
system_printf ("enter main()\n");
DEVICE_initGPIO();
//Interrupt_initModule();
// Interrupt_initVectorTable();
GPIO_setPadConfig (DEVICE_GPIO_PIN_LED1、GPIO_PIN_TYPE_STD);
GPIO_setDirectionMode (DEVICE_GPIO_PIN_LED1、GPIO_DIR_MODE_OUT);
initadC();
initEPwm();
initADCSOC();
// Interrupt_register (INT_ADCD1、&adcdpwmhwi);
ePWM_enableADCtrigger (EPWM1_base、ePWM_SOC_A);
INTERRUPT_ENABLE (INT_ADCA1);
ePWM_enableADCtrigger (EPWM1_base、ePWM_SOC_A);
ePWM_setTimeBaseCounterMode (EPWM1_base、ePWM_COUNTER_MODE_UP);
EINT;
ERTM;
BIOS_start();/*不返回*/
返回(0);
}
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
void initadc (void)
{
//
//将 ADCCLK 分频器设置为/4
//
ADC_setPrescaler (ADCA_BASE、ADC_CLK_DIV_4_0);
//
//设置分辨率和信号模式(请参阅上面的#defines)和负载
//相应的剪裁。
//
#if (EX_ADC_Resolution = 12)
ADC_setMode (ADCA_BASE、ADC_RESolution_12位、ADC_MODE_SINGLE_ENDLE);
#Elif (EX_ADC_Resolution = 16)
ADC_setMode (ADCA_BASE、ADC_RESolution_16BIT、ADC_MODE_differential);
#endif
//
//将脉冲位置设置为晚期
//
ADC_setInterruptPulseMode (ADCA_BASE、ADC_PULSE_END_of _CONV);
//
//为 ADC 加电、然后延迟1ms
//
ADC_enableConverter (ADCA_BASE);
DEVICE_DELAY_US (1000);
}
//
//函数配置 ePWM1以生成 SOC。
//
空 initEPWM (空)
{
//
//禁用 SOCA
//
ePWM_DisableADCtrigger (EPWM1_base、ePWM_SOC_A);
//
//将 SOC 配置为在首次递增计数事件发生时发生
//
ePWM_setADCTriggerSource (EPWM1_base、ePWM_SOC_A、ePWM_SOC_TBCTR_U_CMPA);
ePWM_setADCTriggerEventPrescale (EPWM1_base、ePWM_SOC_A、1);
//
//将比较 A 值设置为2048,将周期设置为4096
//
ePWM_setCounterCompareValue (EPWM1_base、ePWM_COUNTER_COMPARE_A、0x0800);
ePWM_setTimeBasePeriod (EPWM1_base、0x1000);
//
//冻结计数器
//
ePWM_setTimeBaseCounterMode (EPWM1_base、ePWM_COUNTER_MODE_STOP_FREEZE);
}
//
//将 ADCA 的 SOC0配置为由 ePWM1触发的函数。
//
空 initADCSOC (空)
{
//
//配置 ADCA 的 SOC0以转换引脚 A0。 EPWM1SOCA 信号将是
//触发器。
//
//对于12位分辨率、采样窗口为15 (200MHz 时为75ns
// SYSCLK 速率)。 对于16位分辨率、采样窗口为
//将使用64 (200MHz SYSCLK 速率下为320ns)。
//
ADC_setupSOC (ADCA_BASE、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、ADC_CH_ADCIN0、15);
//
//设置 SOC0以设置中断1标志。 启用中断并使其变为
//确保其标志被清除。
//
ADC_setInterruptSource (ADCA_BASE、ADC_INT_NUMBER1、ADC_SOC_NUMBER0);
ADC_enableInterrupt (ADCA_BASE、ADC_INT_NUMBER1);
ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_NUMBER1);
}