Part Number: TMS320F280041C
Other Parts Discussed in Thread: C2000WARE
Tool/software: Code Composer Studio
Greetings! I`m using your INSTASpin library for a very first time. I`ve started to make change so I can adjust my hardware. So I changed the ADC senction to this:
void HAL_setupADCs(HAL_Handle handle)
{
HAL_Obj *obj = (HAL_Obj *)handle;
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);
/*
// Configure internal reference as 1.65*2 = 3.3
ASysCtl_setAnalogReference1P65(ASYSCTL_VREFHIA |
ASYSCTL_VREFHIB |
ASYSCTL_VREFHIC);
// Enable internal voltage reference
ASysCtl_setAnalogReferenceInternal(ASYSCTL_VREFHIA |
ASYSCTL_VREFHIB |
ASYSCTL_VREFHIC);
*/
// Set main clock scaling factor (50MHz max clock for the ADC module)
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);
// set the ADC interrupt pulse generation to end of conversion
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);
// enable the ADCs
ADC_enableConverter(obj->adcHandle[0]);
ADC_enableConverter(obj->adcHandle[1]);
ADC_enableConverter(obj->adcHandle[2]);
// set priority of SOCs
ADC_setSOCPriority(obj->adcHandle[0], ADC_PRI_ALL_HIPRI);
ADC_setSOCPriority(obj->adcHandle[1], ADC_PRI_ALL_HIPRI);
ADC_setSOCPriority(obj->adcHandle[2], ADC_PRI_ALL_HIPRI);
// delay to allow ADCs to power up
SysCtl_delay(1000U);
// configure the interrupt sources
// configure the ample window to 15 system clock cycle wide by assigning 14
// to the ACQPS of ADCSOCxCTL Register.
// RC2/C1
// configure the SOCs for hvkit_rev1p1
// IA-FB - B3->RB0
/*ADC_TRIGGER_EPWM1_SOCA*/
ADC_setupSOC(obj->adcHandle[1], ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN7, HAL_ADC_SAMPLE_WINDOW);
// IB-FB - C0->RC0
ADC_setupSOC(obj->adcHandle[0], ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN12, HAL_ADC_SAMPLE_WINDOW);
// IC-FB - A3->RA0
ADC_setupSOC(obj->adcHandle[1], ADC_SOC_NUMBER1, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN10, HAL_ADC_SAMPLE_WINDOW);
// ADC-Vhb1 - C2->RC1
ADC_setupSOC(obj->adcHandle[2], ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN9, HAL_ADC_SAMPLE_WINDOW);
// ADC-Vhb2 - C1->RC2
ADC_setupSOC(obj->adcHandle[0], ADC_SOC_NUMBER1, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN14, HAL_ADC_SAMPLE_WINDOW);
// ADC-Vhb3 - B4->RB1
ADC_setupSOC(obj->adcHandle[0], ADC_SOC_NUMBER2, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN15, HAL_ADC_SAMPLE_WINDOW);
// VDCBUS - A9->RA1. hvkit board has capacitor on Vbus feedback, so
// the sampling doesn't need to be very long to get an accurate value
ADC_setupSOC(obj->adcHandle[2], ADC_SOC_NUMBER1, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN11, HAL_ADC_SAMPLE_WINDOW);
ADC_setupSOC(obj->adcHandle[0], ADC_SOC_NUMBER3, ADC_TRIGGER_SW_ONLY,
ADC_CH_ADCIN10, HAL_ADC_SAMPLE_WINDOW);
ADC_setInterruptSource(obj->adcHandle[2], ADC_INT_NUMBER1, ADC_SOC_NUMBER0);
//ADC_enableInterrupt(obj->adcHandle[0], ADC_INT_NUMBER1);
// ADC_clearInterruptStatus(obj->adcHandle[0], ADC_INT_NUMBER1);
return;
} // end of HAL_setupADCs() function
void HAL_enableADCInts(HAL_Handle handle)
{
HAL_Obj *obj = (HAL_Obj *)handle;
// enable the PIE interrupts associated with the ADC interrupts
Interrupt_enable(INT_ADCC1); //C1
// enable the ADC interrupts
ADC_enableInterrupt(obj->adcHandle[2], ADC_INT_NUMBER1);
ADC_clearInterruptStatus(obj->adcHandle[2], ADC_INT_NUMBER1);
// enable the cpu interrupt for ADC interrupts
Interrupt_enableInCPU(INTERRUPT_CPU_INT1);
#ifdef _VSF_EN_
// enable the cpu timer 0 interrupt for FAST estimator
Interrupt_enable(INT_TIMER0);
#endif // _VSF_EN_
return;
} // end of HAL_enableADCInts() function
]
The problem is the mainISR doesn`t trigger. My ADC channels are working. I`ve checked with manually trigering(ADC_forceSOC(hal.adcHandle[0], ADC_SOC_NUMBER0);). The ADC counter is counting. The INT1 is enabled in the registers. The flag is cleared. The ADC interrupt is enabled in the ADCINTSEL register. The mainISR has been assigned to the INT_ADCC1. I`ve removed anything unnecessary from the code.
Any suggestions?
THanks!