TMS320F28P650DK: SysConfig + Ethercat_subdevice_cpu1_hal

Part Number: TMS320F28P650DK
Other Parts Discussed in Thread: SYSCONFIG,

Tool/software:

My question is regarding the use of SysConfig in conjunction with Ethercat_subdevice_cpu1_hal.
We are relying on SysConfig to initialize TMS320F28P650DK's peripherals. The project also includes EtherCAT and we will be using the Ethercat_subdevice_cpu1_hal library for ESC support. 
I would like to know how to match the use Ethercat_subdevice_cpu1_hal  library with SysConfig.
 
Ethercat_subdevice_cpu1_hal driver implements ESC_initHW(). Is it necessary to re-implement ESC_initHW()?  I'm not familiar with the Beckhoff ESC documentation and I don't know up to what extent we are allowed to re-implement ESC_initHW().
Is there any example that can be provided where SysConfig and  Ethercat_subdevice_cpu1_hal library are implemented together? 
  • Federico,

    We will answer this ASAP

  • Hi Federico,

    Sorry for the delay.

    ECAT sysconfig support is limited to pin configuration only currently. So you could remove that portion from ESC_initHW() and let Sysconfig handle it, but that's really all it will help with for now. See below for code I'm referring to.

        //
        // Configure GPIOs for ECAT
        //
    
        #ifdef _LAUNCHXL_F28P65X
    
        //
        // PHY Reset
        //
        GPIO_setPinConfig(GPIO_76_ESC_PHY_RESETN);
        GPIO_setQualificationMode(76,GPIO_QUAL_ASYNC);
    
        //
        // I2C for EEPROM
        //
        GPIO_setPinConfig(GPIO_40_ESC_I2C_SDA);
        GPIO_setQualificationMode(40,GPIO_QUAL_ASYNC);
        GPIO_setPadConfig(40,GPIO_PIN_TYPE_PULLUP);
    
        GPIO_setPinConfig(GPIO_30_ESC_I2C_SCL);
        GPIO_setQualificationMode(30,GPIO_QUAL_ASYNC);
        GPIO_setPadConfig(30,GPIO_PIN_TYPE_PULLUP);
    
        //
        // P0 TX and RX DATA
        //
        GPIO_setPinConfig(GPIO_87_ESC_TX0_DATA0);
        GPIO_setQualificationMode(87,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_88_ESC_TX0_DATA1);
        GPIO_setQualificationMode(88,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_89_ESC_TX0_DATA2);
        GPIO_setQualificationMode(89,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_90_ESC_TX0_DATA3);
        GPIO_setQualificationMode(90,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_80_ESC_RX0_DATA0);
        GPIO_setQualificationMode(80,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_28_ESC_RX0_DATA1);
        GPIO_setQualificationMode(28,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_29_ESC_RX0_DATA2);
        GPIO_setQualificationMode(29,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_83_ESC_RX0_DATA3);
        GPIO_setQualificationMode(83,GPIO_QUAL_ASYNC);
    
        //
        // P0 TX Enable, RX DV, RX ERR
        //
        GPIO_setPinConfig(GPIO_56_ESC_TX0_ENA);
        GPIO_setQualificationMode(56,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_78_ESC_RX0_DV);
        GPIO_setQualificationMode(78,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_26_ESC_RX0_ERR);
        GPIO_setPadConfig(26,GPIO_PIN_TYPE_STD);
    
        //
        // P0 TX and RX Clk
        //
        GPIO_setPinConfig(GPIO_85_ESC_TX0_CLK);
        GPIO_setQualificationMode(85,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_77_ESC_RX0_CLK);
        GPIO_setQualificationMode(77,GPIO_QUAL_ASYNC);
    
        //
        // P0 Linkstatus and Link Active LED
        //
        GPIO_setPinConfig(GPIO_86_ESC_PHY0_LINKSTATUS);
        GPIO_setPadConfig(86,GPIO_PIN_TYPE_INVERT);
        GPIO_setQualificationMode(86,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_58_ESC_LED_LINK0_ACTIVE);
        GPIO_setQualificationMode(58, GPIO_QUAL_ASYNC);
    
        //
        // P0+P1 MDIO CLK and Data
        //
        GPIO_setPinConfig(GPIO_62_ESC_MDIO_CLK);
        GPIO_setQualificationMode(62,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_27_ESC_MDIO_DATA);
        GPIO_setQualificationMode(27,GPIO_QUAL_ASYNC);
    
        //
        // P1 TX and RX DATA
        //
        GPIO_setPinConfig(GPIO_22_ESC_TX1_DATA0);
        GPIO_setQualificationMode(22,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_74_ESC_TX1_DATA1);
        GPIO_setQualificationMode(74,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_73_ESC_TX1_DATA2);
        GPIO_setQualificationMode(73,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_19_ESC_TX1_DATA3);
        GPIO_setQualificationMode(19,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_63_ESC_RX1_DATA0);
        GPIO_setQualificationMode(63,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_64_ESC_RX1_DATA1);
        GPIO_setQualificationMode(64,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_65_ESC_RX1_DATA2);
        GPIO_setQualificationMode(65,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_66_ESC_RX1_DATA3);
        GPIO_setQualificationMode(66,GPIO_QUAL_ASYNC);
    
        //
        // P1 TX Enable, RX DV, RX ERR
        //
        GPIO_setPinConfig(GPIO_45_ESC_TX1_ENA);
        GPIO_setQualificationMode(45,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_70_ESC_RX1_DV);
        GPIO_setQualificationMode(70,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_71_ESC_RX1_ERR);
        GPIO_setPadConfig(71,GPIO_PIN_TYPE_STD);
    
        //
        // P1 TX and RX Clk
        //
        GPIO_setPinConfig(GPIO_44_ESC_TX1_CLK);
        GPIO_setQualificationMode(44,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_69_ESC_RX1_CLK);
        GPIO_setQualificationMode(69,GPIO_QUAL_ASYNC);
    
        //
        // P1 Linkstatus and Link Active LED
        //
        GPIO_setPinConfig(GPIO_68_ESC_PHY1_LINKSTATUS);
        GPIO_setPadConfig(68,GPIO_PIN_TYPE_INVERT);
        GPIO_setQualificationMode(68,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_59_ESC_LED_LINK1_ACTIVE);
        GPIO_setQualificationMode(59, GPIO_QUAL_ASYNC);
    
        //
        // Sync and Latch
        //
        // Note these GPIOs aren't required for EtherCAT
        // operation and are configured here for demonstration,
        // analysis, and debug purposes
        //
        GPIO_setPinConfig(GPIO_34_ESC_SYNC0);
        GPIO_setQualificationMode(34,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_35_ESC_SYNC1);
        GPIO_setQualificationMode(35,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_60_ESC_LATCH0);
        GPIO_setQualificationMode(60,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_51_ESC_LATCH1);
        GPIO_setQualificationMode(51,GPIO_QUAL_ASYNC);
    
        //
        // Set GPIO direction for ECAT RUN/ERR LEDs
        //
    
        GPIO_setPinConfig(GPIO_33_ESC_LED_ERR);
        GPIO_setQualificationMode(33,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_61_ESC_LED_RUN);
        GPIO_setQualificationMode(61,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_0_ESC_GPI0);
        GPIO_setQualificationMode(0,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_8_ESC_GPO0);
        GPIO_setQualificationMode(8,GPIO_QUAL_ASYNC);
    
        #else 
    
        //
        // PHY Reset
        //
        GPIO_setPinConfig(GPIO_155_ESC_PHY_RESETN);
        GPIO_setQualificationMode(155,GPIO_QUAL_ASYNC);
    
        //
        // I2C for EEPROM
        //
        GPIO_setPinConfig(GPIO_150_ESC_I2C_SDA);
        GPIO_setQualificationMode(150,GPIO_QUAL_ASYNC);
        GPIO_setPadConfig(150,GPIO_PIN_TYPE_PULLUP);
    
        GPIO_setPinConfig(GPIO_151_ESC_I2C_SCL);
        GPIO_setQualificationMode(151,GPIO_QUAL_ASYNC);
        GPIO_setPadConfig(151,GPIO_PIN_TYPE_PULLUP);
    
        //
        // P0 TX and RX DATA
        //
        GPIO_setPinConfig(GPIO_158_ESC_TX0_DATA0);
        GPIO_setQualificationMode(158,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_159_ESC_TX0_DATA1);
        GPIO_setQualificationMode(159,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_160_ESC_TX0_DATA2);
        GPIO_setQualificationMode(160,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_161_ESC_TX0_DATA3);
        GPIO_setQualificationMode(161,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_165_ESC_RX0_DATA0);
        GPIO_setQualificationMode(165,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_166_ESC_RX0_DATA1);
        GPIO_setQualificationMode(166,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_167_ESC_RX0_DATA2);
        GPIO_setQualificationMode(167,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_168_ESC_RX0_DATA3);
        GPIO_setQualificationMode(168,GPIO_QUAL_ASYNC);
    
        //
        // P0 TX Enable, RX DV, RX ERR
        //
        GPIO_setPinConfig(GPIO_156_ESC_TX0_ENA);
        GPIO_setQualificationMode(156,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_162_ESC_RX0_DV);
        GPIO_setQualificationMode(162,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_164_ESC_RX0_ERR);
        GPIO_setPadConfig(164,GPIO_PIN_TYPE_STD);
    
        //
        // P0 TX and RX Clk
        //
        GPIO_setPinConfig(GPIO_157_ESC_TX0_CLK);
        GPIO_setQualificationMode(157,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_163_ESC_RX0_CLK);
        GPIO_setQualificationMode(163,GPIO_QUAL_ASYNC);
    
        //
        // P0 Linkstatus and Link Active LED
        //
        GPIO_setPinConfig(GPIO_148_ESC_PHY0_LINKSTATUS);
        GPIO_setPadConfig(148,GPIO_PIN_TYPE_INVERT);
        GPIO_setQualificationMode(146,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_58_ESC_LED_LINK0_ACTIVE);
        GPIO_setQualificationMode(58, GPIO_QUAL_ASYNC);
    
        //
        // P0+P1 MDIO CLK and Data
        //
        GPIO_setPinConfig(GPIO_152_ESC_MDIO_CLK);
        GPIO_setQualificationMode(152,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_153_ESC_MDIO_DATA);
        GPIO_setQualificationMode(153,GPIO_QUAL_ASYNC);
    
        //
        // P1 TX and RX DATA
        //
        GPIO_setPinConfig(GPIO_131_ESC_TX1_DATA0);
        GPIO_setQualificationMode(131,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_132_ESC_TX1_DATA1);
        GPIO_setQualificationMode(132,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_134_ESC_TX1_DATA2);
        GPIO_setQualificationMode(134,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_19_ESC_TX1_DATA3);
        GPIO_setQualificationMode(19,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_63_ESC_RX1_DATA0);
        GPIO_setQualificationMode(63,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_64_ESC_RX1_DATA1);
        GPIO_setQualificationMode(64,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_141_ESC_RX1_DATA2);
        GPIO_setQualificationMode(141,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_142_ESC_RX1_DATA3);
        GPIO_setQualificationMode(142,GPIO_QUAL_ASYNC);
    
        //
        // P1 TX Enable, RX DV, RX ERR
        //
        GPIO_setPinConfig(GPIO_129_ESC_TX1_ENA);
        GPIO_setQualificationMode(129,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_70_ESC_RX1_DV);
        GPIO_setQualificationMode(70,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_71_ESC_RX1_ERR);
        GPIO_setPadConfig(71,GPIO_PIN_TYPE_STD);
    
        //
        // P1 TX and RX Clk
        //
        GPIO_setPinConfig(GPIO_130_ESC_TX1_CLK);
        GPIO_setQualificationMode(130,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_69_ESC_RX1_CLK);
        GPIO_setQualificationMode(69,GPIO_QUAL_ASYNC);
    
        //
        // P1 Linkstatus and Link Active LED
        //
        GPIO_setPinConfig(GPIO_149_ESC_PHY1_LINKSTATUS);
        GPIO_setPadConfig(149,GPIO_PIN_TYPE_INVERT);
        GPIO_setQualificationMode(149,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_59_ESC_LED_LINK1_ACTIVE);
        GPIO_setQualificationMode(59, GPIO_QUAL_ASYNC);
    
        //
        // Sync and Latch
        //
        // Note these GPIOs aren't required for EtherCAT
        // operation and are configured here for demonstration,
        // analysis, and debug purposes
        //
        GPIO_setPinConfig(GPIO_127_ESC_SYNC0);
        GPIO_setQualificationMode(127,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_35_ESC_SYNC1);
        GPIO_setQualificationMode(35,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_50_ESC_LATCH0);
        GPIO_setQualificationMode(50,GPIO_QUAL_ASYNC);
        GPIO_setPinConfig(GPIO_30_ESC_LATCH1);
        GPIO_setQualificationMode(30,GPIO_QUAL_ASYNC);
    
        //
        // Set GPIO direction for ECAT RUN/ERR LEDs
        //
    
        GPIO_setPinConfig(GPIO_145_ESC_LED_ERR);
        GPIO_setQualificationMode(145,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_146_ESC_LED_RUN);
        GPIO_setQualificationMode(146,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_0_ESC_GPI0);
        GPIO_setQualificationMode(0,GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_8_ESC_GPO0);
        GPIO_setQualificationMode(8,GPIO_QUAL_ASYNC);
    
        #endif 

    ECAT clock configuration from the clock tree tool could be used as well actually.

    Best,

    Kevin

  • Hey Kevin, Thanks for the replay. 

    Besides the GPIO initialization I see a lot of other hardware initializations. Some of them will clear my previous initialization.

    For example the PIE table will be re-initialized.

        //
        // Initialize PIE and clear PIE registers. Disables CPU interrupts.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();

    and the clock tree tool clocking configuration will also be rewritten from ESC_initHW().

        //
        // Sys PLL = 200MHz and use /2 to get 100MHz for ECAT IP
        // (There is a built in /4 to get 25MHz for PHY when using
        //  internal clocking for PHY)
        //
        SysCtl_setECatClk(SYSCTL_ECATCLKOUT_DIV_2, SYSCTL_SOURCE_SYSPLL,
                          ESC_DISABLE_INT_PHY_CLK);
    
        //
        // Configure EEPROM Size for 16K bits or less
        //
        ESCSS_configureEEPROMSize(ESC_SS_CONFIG_BASE, ESCSS_LESS_THAN_16K);
    

    From your answer I'm assuming that the approach for implementing Ethercat_subdevice_cpu1_hal is to reimplement ESC_initHW() to make it compatible with our application. Is this correct?