Part Number: TMS320F28379D Tool/software: TI-RTOS Dear Sir, I am working on SYS/BIOS with F28379D. I took the Minimal project Example for SYS/BIOS. I have done Task, Swi, and semaphore successfully. Now I want to try to insert a Hwi, the main CPU timer interrupt has done successfully but I am not able to make Hwi for other peripherals like PWM, ADC. I tried to make a Hwi, taking the simple example in driverlib named adc_ex2_soc_epwm. It is not invoking the interrupt function that I created in app.cfg interface. I also shared the app.cfg code and the main program code . Please guide me where I am going wrong. Ashutosh Bhatt //===========================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 = new 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(); /* does not return */ return(0); } //============================================================================= void initADC(void) { // // Set ADCCLK divider to /4 // ADC_setPrescaler(ADCA_BASE, ADC_CLK_DIV_4_0); // // Set resolution and signal mode (see #defines above) and load // corresponding trims. // #if(EX_ADC_RESOLUTION == 12) ADC_setMode(ADCA_BASE, ADC_RESOLUTION_12BIT, ADC_MODE_SINGLE_ENDED); #elif(EX_ADC_RESOLUTION == 16) ADC_setMode(ADCA_BASE, ADC_RESOLUTION_16BIT, ADC_MODE_DIFFERENTIAL); #endif // // Set pulse positions to late // ADC_setInterruptPulseMode(ADCA_BASE, ADC_PULSE_END_OF_CONV); // // Power up the ADC and then delay for 1 ms // ADC_enableConverter(ADCA_BASE); DEVICE_DELAY_US(1000); } // // Function to configure ePWM1 to generate the SOC. // void initEPWM(void) { // // Disable SOCA // EPWM_disableADCTrigger(EPWM1_BASE, EPWM_SOC_A); // // Configure the SOC to occur on the first up-count event // EPWM_setADCTriggerSource(EPWM1_BASE, EPWM_SOC_A, EPWM_SOC_TBCTR_U_CMPA); EPWM_setADCTriggerEventPrescale(EPWM1_BASE, EPWM_SOC_A, 1); // // Set the compare A value to 2048 and the period to 4096 // EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 0x0800); EPWM_setTimeBasePeriod(EPWM1_BASE, 0x1000); // // Freeze the counter // EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_STOP_FREEZE); } // // Function to configure ADCA's SOC0 to be triggered by ePWM1. // void initADCSOC(void) { // // Configure SOC0 of ADCA to convert pin A0. The EPWM1SOCA signal will be // the trigger. // // For 12-bit resolution, a sampling window of 15 (75 ns at a 200MHz // SYSCLK rate) will be used. For 16-bit resolution, a sampling window of // 64 (320 ns at a 200MHz SYSCLK rate) will be used. // ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM1_SOCA,ADC_CH_ADCIN0, 15); // // Set SOC0 to set the interrupt 1 flag. Enable the interrupt and make // sure its flag is cleared. // ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0); ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER1); ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1); }
↧