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.

TMS320F28388S: Reseting the round-robin pointer (RRPOINTER)

Part Number: TMS320F28388S

Hello,

I read the following from section 20.5 ADC Conversion Priorty, pg. 2581 from the "TMS320F2838x Real-Time Microcontrollers With Connectivity Manager" Technical Referance Manual (TRM) Literature Number: SPRUII0F

 

image.png

 

My goal is to convert two SOC's in burst mode and then reset the RRPOINTER. I do not need any high priority SOC's. I'm also not sure if it is necersarry to reset the RRPOINTER either.

 

For example if I wanted to convert SOC0 and SOC1 on ADC A in burst mode using a software trigger I would expect to do the following:

 

AdcaRegs.BURSTCTL.BURSTEN = 1; // Enable ADC Bust Mode for ADC A
AdcaRegs.BURSTCTL.BURSTTRIG = 0; // SW Triggers burst of conversions
AdcaRegs.BURSTCTL.BURSTSIZE = 1; //conversion bursts are 1 + 1 = 2 conversions long
// SOC Configurations...

EALLOW;
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1; // Interrupt Pulse Generation occurs at the the end of conversion
AdcaRegs.BURSTCTL.bit.BURSTEN = 1; // Enable ADC Bust Mode for ADC A
AdcaRegs.BURSTCTL.bit.BURSTTRIG = 0; // SW Triggers burst of conversions
AdcaRegs.BURSTCTL.bit.BURSTSIZE = 1; //conversion bursts are 1 + 1 = 2 conversions long
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 1; // EOC1 is trigger for ADCINT1
// SOC Configurations...
EDIS;

// Trigger the SOCs as follows
AdcaRegs.ADCSOCFRC1.all = 0x0003; //set SOC flags for SOC0 to SOC1
while(!AdcaRegs.ADCINTFLG.bit.ADCINT1); // Wait for conversion to finish
EALLOW;
// Reset Priority register to clear the RRPOINTER?
AdcaRegs.ADCSOCPRICTL.all = 0x00;

EDIS;
  • Hello,

    For this use case, you typically do not need to reset the RRPOINTER after each burst. The RRPOINTER is only used by the round-robin arbitration logic when multiple SOCs are pending at the same time. If you are only using SOC0 and SOC1 on ADCA, and these are the only SOCs participating in the burst, then the conversion sequence is usually straightforward and there is no need to manually reset the pointer after every software trigger.

    To be clear, this mechanism is intended more for reinitialization of the ADC priority logic, not as a normal step after each burst. So in your example, routinely writing ADCSOCPRICTL.all = 0 after every conversion burst is not recommended unless you specifically want to reinitialize the priority configuration.

    One additional note is that when burst mode is enabled, the usual intent is to use the selected burst trigger source and let the burst controller sequence the SOCs automatically. Because of that, manually forcing both SOC flags with:

    AdcaRegs.ADCSOCFRC1.all = 0x0003;

    is typically not necessary. In many cases, a single burst trigger event is sufficient.

    Best Regards,

    Masoud