Other Parts Discussed in Thread: TMS320F28335
Hi everyone
I work with the dsp TMS320F28335, my program samples a signal and for that i use the ADC. My program works when i load in ram but when i wish to load in flash, there is a bug. I use differents features in my program such as SPI, UART, GPIO ... and these features work when i load it in flash but when i add the adc block my program doesn't work. Have you an idea to resolve my problem ? I use on chip flash programmer to load in flash and i think that my parameters are good because the SPI, UART and GPIO work.
EALLOW;
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
#endif
#if (CPU_FRQ_100MHZ)
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
#endif
EDIS;
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK;
EDIS;
InitAdc();
// Enable ADCINT in PIE
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1; // Enable CPU Interrupt 1
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
This is my code to initialize the ADC block:
// Configure ADC
AdcRegs.ADCREFSEL.bit.REF_SEL=0x0; // valeur de référence par défaut
AdcRegs.ADCTRL1.bit.ACQ_PS = 0x0;
AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x0;
AdcRegs.ADCTRL1.bit.CPS=0;
AdcRegs.ADCMAXCONV.all = 0x0000; // Setup 1 conv's on SEQ1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0000; // Setup ADCINA0 as 1st SEQ1 conv.
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm1Regs.CMPA.half.CMPA = (Ttbclk/Fe) - 1;
EPwm1Regs.TBPRD = (Ttbclk/Fe) - 1;
//EPwm1Regs.TBPRD = (1/Fe) / 75000000 - 1; // Set period for ePWM1
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start
EPwm1Regs.TBCTL.bit.CLKDIV=0x000; // TBCLK = SYSCLKOUT / ( 1 * 1 ) = 150Mhz
EPwm1Regs.TBCTL.bit.HSPCLKDIV=0x000;