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.

TMS320F28379D: GPIO83 is not

Part Number: TMS320F28379D

Hello,

I am working on customized TMS320F28379D board. We succeeded basic programming like led blinking and relay testing using GPIO's. However, We couldn't actuate/toggle the GPIO83 pin and we dont see any change in the GpioData registers on CCS during the debugging.

Kindly do the needful.

Regards,

Rajesh BN.

  • Hello Rajesh,

    Can you show me the code you use to configure this pin? Also, what type of F28379D board are you using, is it a LaunchPAD, ControlCARD, or something custom?

    Best regards,

    Omer Amir

  • Hello Amir,

    The board is a customized one and it has got bunch of relays, LEDs and external ADC etc.. COming to the problem, one of the GPIOs i.e 83 is connected to a relay through a relay driverand we don't see any change in the GPIO83 data registers on CCS and also at the GPIO physical pin too.

    Here is the code

    #include "F28x_Project.h"
    
    interrupt void timer_ovf_isr(void);
    void TimerInit();
    void PwmInit();
    
    
    int i=0;
    void main(void)
    {
    
        InitSysCtrl();
        InitGpio();
        TimerInit();
        PwmInit();
    
        EALLOW;
        GpioCtrlRegs.GPAMUX1.all = 0;
        GpioCtrlRegs.GPAMUX2.all = 0;
        GpioCtrlRegs.GPBMUX1.all = 0;
        GpioCtrlRegs.GPBMUX2.all = 0;
        GpioCtrlRegs.GPCMUX1.all = 0;
        GpioCtrlRegs.GPCMUX2.all = 0;
        GpioCtrlRegs.GPDMUX1.all = 0;
        GpioCtrlRegs.GPDMUX2.all = 0;
        GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 1;
        GpioCtrlRegs.GPAGMUX1.bit.GPIO1 = 1;
    
        GpioCtrlRegs.GPADIR.bit.GPIO24 = 1; //led
        GpioCtrlRegs.GPCDIR.bit.GPIO73 = 1; //led
        GpioCtrlRegs.GPCDIR.bit.GPIO74 = 1; //led
        GpioCtrlRegs.GPCDIR.bit.GPIO92 = 1; //led
        GpioCtrlRegs.GPCDIR.bit.GPIO93 = 1; //led
        GpioCtrlRegs.GPCDIR.bit.GPIO79 = 1; //relay1
        GpioCtrlRegs.GPCDIR.bit.GPIO80 = 1; //relay2
        GpioCtrlRegs.GPCDIR.bit.GPIO81 = 1; //relay3
        GpioCtrlRegs.GPCDIR.bit.GPIO82 = 1; //relay4
        GpioCtrlRegs.GPCDIR.bit.GPIO83 = 1; //relay5
        EDIS;
    
        DINT;
        InitPieCtrl();
        InitPieVectTable();
        EALLOW;
        PieVectTable.TIMER0_INT = &timer_ovf_isr;
    
        EDIS;
    
        PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //enable timer interrupt
    
        IER |= 0x0001;
        EINT;          // Enable Global interrupt INTM
        ERTM;          // Enable Global realtime interrupt DBGM
    
        CpuTimer0Regs.TCR.bit.TSS = 0;
        while(1)
        {
    
        }
    
    }
    
    void TimerInit(void)
    {
    	CpuTimer0Regs.PRD.bit.LSW = 0x002F;
    	CpuTimer0Regs.PRD.bit.MSW = 0x002F;
    	CpuTimer0Regs.TPR.bit.TDDR = 0x001F;
    	CpuTimer0Regs.TCR.bit.TIE = 1;
    	CpuTimer0Regs.TCR.bit.TRB = 0;
    	CpuTimer0Regs.TCR.bit.TSS = 1;
    	CpuTimer0Regs.TCR.bit.FREE = 0;
    }
    
    
    
    void timer_ovf_isr(void)
    
    {
    
    if (i>5)
     i = 0;
    
    if(i==0)
            GpioDataRegs.GPCTOGGLE.bit.GPIO79 = 1; //realy 4
    if(i==1)
         GpioDataRegs.GPCTOGGLE.bit.GPIO80 = 1; //relay 5
        if(i==2)
         GpioDataRegs.GPCTOGGLE.bit.GPIO81 = 1; //relay 6
            if(i==3)
       GpioDataRegs.GPCTOGGLE.bit.GPIO82 = 1; //relay 2
                if(i==4)
    
          GpioDataRegs.GPCTOGGLE.bit.GPIO83 = 1;
    
    
        
        i = i+1;
    
    
    	CpuTimer0Regs.TCR.bit.TIF = 1;
    	PieCtrlRegs.PIEACK.all = 0x0001;
    }
    
    
    
    void PwmInit(void)
    {/*
    	EPwm1Regs.TBCTL.all = 0;
    	EPwm1Regs.TBPRD = 2000;
    	EPwm1Regs.TBPHS.all = 0;
    
    	EPwm1Regs.TBCTL.bit.PHSDIR = 1;
    	EPwm1Regs.TBCTL.bit.CLKDIV = 0;
    	EPwm1Regs.TBCTL.bit.HSPCLKDIV =1;
    	EPwm1Regs.TBCTL.bit.PRDLD = 0;
    	EPwm1Regs.TBCTL.bit.PHSEN = 0;
    	EPwm1Regs.TBCTL.bit.CTRMODE = 2;
    	EPwm1Regs.TBCTL2.bit.PRDLDSYNC = 0;
    	EPwm1Regs.TBCTL2.bit.SYNCOSELX = 1;
    	EPwm1Regs.AQCTLA.bit.CAD = 2;
    	EPwm1Regs.AQCTLA.bit.CAU = 1;
    	EPwm1Regs.AQCTLB.bit.CAD = 1;
    	EPwm1Regs.AQCTLB.bit.CAU = 2;
    	EPwm1Regs.CMPA.all = 1000;
    */
    
            EALLOW;
            EPwm1Regs.TBCTL.all = 0;
            EPwm1Regs.TBCTL.bit.CTRMODE = 2; //updown count
            EPwm1Regs.TBCTL.bit.PHSEN = 0; //master
            EPwm1Regs.TBCTL.bit.PRDLD = 0;
            EPwm1Regs.TBCTL.bit.SYNCOSEL = 1; //master
            EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1;
            EPwm1Regs.TBCTL.bit.CLKDIV = 0;  // clock to pwm = 200MHz/HSPCLK x CLKDIV = 100MHz
    
            EPwm1Regs.TBPRD = 2500; //20KHz
            //CMPCTL1 and 2 initializaton
    
            //AQCTL
    
            EPwm1Regs.AQCTLA.bit.CAU = 2;
            EPwm1Regs.AQCTLA.bit.CAD = 1;
            EPwm1Regs.CMPA.bit.CMPA = 1750;
            //event selection
            EPwm1Regs.ETSEL.bit.INTSEL = 1; //ADC start @CTR = 0
            EPwm1Regs.ETSEL.bit.INTEN = 1; //enable epwm1 interrupt
            EDIS;
    }
    
    
    

    Regards,

    Rajesh BN.

  • Hello Rajesh,

    Your configuration seems fine (there is no initialization of the GPCGMUX2 for GPIO83, but the default value should be 0 if you want to double-check). Have you verified that when your program runs, it reaches the line of code where GPIO83 is toggled? Can you confirm that the GPIO configuration is what is expected at this line (GPCMUX2, GPCGMUX2, and GPCDIR registers)? It's better to test this with GPIO83 not connected to anything except a scope to see the signal.

    Best regards,

    Omer Amir