industrialNETworXnetx

Rainer Versteeg

Rainer Versteeg

| 11.05.2009 | 14:55 | 6 replies

Start Profinet Stack at runtime

Hello,

I want to start the Profibus stack at runtime, but following error ocours:

//========  Definition XPEC & MAC Instanzen =================   
 RX_XC_SET_T atMyPNSXc1[] =    
 {{{"PNS_XPEC",RX_PERIPHERAL_TYPE_XC,0},
    RX_XC_TYPE_XPEC,
    0, 
    XC_CODE_ETH_2PORT_SWITCH_XPEC0 
   },  
 };   
 RX_XC_SET_T atMyPNSXc2[] =    
 {{{"PNS_XMACRPU",RX_PERIPHERAL_TYPE_XC,0},
    RX_XC_TYPE_XMACRPU, 
    0, 
    XC_CODE_ETH_2PORT_SWITCH_RPU0, 
   },
 };   
 RX_XC_SET_T atMyPNSXc3[] =    
 {{{"PNS_XMACTPU",RX_PERIPHERAL_TYPE_XC,0},
    RX_XC_TYPE_XMACTPU, 
    0, 
    XC_CODE_ETH_2PORT_SWITCH_TPU0, 
   },
 };   
 RX_XC_SET_T atMyPNSXc4[] =    
 {{{"PNS_XPEC",RX_PERIPHERAL_TYPE_XC,1}, 
    RX_XC_TYPE_XPEC,    
    1, 
    XC_CODE_ETH_2PORT_SWITCH_XPEC1, 
   },
 };   
 RX_XC_SET_T atMyPNSXc5[] =    
 {{{"PNS_XMACRPU",RX_PERIPHERAL_TYPE_XC,1}, 
    RX_XC_TYPE_XMACRPU, 
    1, 
    XC_CODE_ETH_2PORT_SWITCH_RPU1, 
   },
 };   
 RX_XC_SET_T atMyPNSXc6[] =    
 {{{"PNS_XMACTPU",RX_PERIPHERAL_TYPE_XC,1}, 
    RX_XC_TYPE_XMACTPU, 
    1, 
    XC_CODE_ETH_2PORT_SWITCH_TPU1, 
   }, 
 };   
 //------------------------------------------------------------ 
 
 //========  Definition of the LED Instanzen =================   
 RX_LED_SET_T atMyPNSLed1[] = 
 {{{"STA1RED", RX_PERIPHERAL_TYPE_LED, 0},
   {"SYSPIO",RX_PERIPHERAL_TYPE_PIO,0},
   {0},
   {0},
   {0, 0, 0x01},
   {0, 0, 0x01},
   Drv_PioSetupLedOperations,
  },
 }; 
 RX_LED_SET_T atMyPNSLed2[] = 
 {{{"STA2RED", RX_PERIPHERAL_TYPE_LED, 0},
   {"SYSPIO",RX_PERIPHERAL_TYPE_PIO,0},
   {0},
   {0},
   {0, 0, 0x08},
   {0, 0, 0x08},
   Drv_PioSetupLedOperations,
  }, 
 };  
 //------------------------------------------------------------ 
  
 
  
 //========  Definition XPEC Intterrupt =================
 RX_INTERRUPT_SET_T myXPEC0_Int1[] = 
 {{{"PNS_COM",RX_PERIPHERAL_TYPE_INTERRUPT,0},  /* Communication Channel, Instance 0 */
    SRT_NETX_VIC_IRQ_STAT_com0,                 /* Use external communication channel 0 Interrupt */
    27,                                         /* Priority 27 */
    RX_INTERRUPT_MODE_TASK,                     /* Allow interrupt to be a thread */
    RX_INTERRUPT_EOI_AUTO,                      /* EOI self by RX */
    RX_INTERRUPT_TRIGGER_RISING_EDGE,           /* Edge triggered */
    RX_INTERRUPT_PRIORITY_STANDARD,             /* Normal Priority */
    RX_INTERRUPT_REENTRANCY_DISABLED,           /* Interrupt itself is not reentrant */
    TSK_PRIO_3,
    TSK_TOK_3,
    2048
  },
 }; 
 RX_INTERRUPT_SET_T myXPEC0_Int2[] = 
 {{{"PNS_COM",RX_PERIPHERAL_TYPE_INTERRUPT,1},  /* Communication Channel, Instance 1 */
    SRT_NETX_VIC_IRQ_STAT_com1,                 /* Use external communication channel 1 Interrupt */
    26,                                         /* Priority 26 */
    RX_INTERRUPT_MODE_TASK,                     /* Allow interrupt to be a thread */
    RX_INTERRUPT_EOI_AUTO,                      /* EOI self by RX */
    RX_INTERRUPT_TRIGGER_RISING_EDGE,           /* Edge triggered */
    RX_INTERRUPT_PRIORITY_STANDARD,             /* Normal Priority */
    RX_INTERRUPT_REENTRANCY_DISABLED,           /* Interrupt itself is not reentrant */
    TSK_PRIO_4,
    TSK_TOK_4,
    2048
  }, 
 }; 
 //------------------------------------------------------------  
  
 //========  Definition of the PHY-Instances =================
 RX_PHY_SET_T MyPhy1[] = 
 {{{ "PHY", RX_PERIPHERAL_TYPE_PHY, 0 },
    0,                                 /* Physical port number of PHY */
    0,                                 /* OUI */
    0,                                 /* Manufacturer specific Part Number */
    0,                                 /* Manufacturer Revision Number */
    0,                                 /* Number of following Registers to write to */
    {
    { 0x00, 0x3b00 }                   /* PHY register address, value to write to register */
    },
    TLR_TRUE,                          /* power down phy on init?      */
    TLR_FALSE,                         /* use custom init?             */
                                       /* custom init parameters follow */
    6,                                 /* Set PHY to powerdown*/
    TLR_FALSE,                         /* Use auto-crossover?          */
    TLR_FALSE                          /* enable fiber optics?         */
  },
 }; 
 RX_PHY_SET_T MyPhy2[] = 
 {{{ "PHY", RX_PERIPHERAL_TYPE_PHY, 1 },
    1,                                 /* Physical port number of PHY */
    0,                                 /* OUI */
    0,                                 /* Manufacturer specific Part Number */
    0,                                 /* Manufacturer Revision Number */
    0,                                 /* Number of following Registers to write to */
    {
    { 0x00, 0x3b00 }                   /* PHY register address, value to write to register */
    },
    TLR_TRUE,                          /* power down phy on init?      */
    TLR_FALSE,                         /* use custom init?             */
                                       /* custom init parameters follow */
    6,                                 /* Set PHY to powerdown*/
    TLR_FALSE,                         /* Use auto-crossover?          */
    TLR_FALSE                          /* enable fiber optics?         */
  },
 };  
 //------------------------------------------------------------   
  
 //========  Definition of the EDD Instances ================= 
 STATIC CONST FAR RX_EDD_PARAMETERS_T MyEdd0Param[]=
 {{ RX_EDD_PARAM_XPEC_NAME,       "PNS_XPEC",      0 },
  { RX_EDD_PARAM_XMAC_RPU_NAME,   "PNS_XMACRPU",   0 },
  { RX_EDD_PARAM_XMAC_TPU_NAME,   "PNS_XMACTPU",   0 },
  { RX_EDD_PARAM_INTERRUPT_NAME,  "PNS_COM",       0 },
  { RX_EDD_PARAM_FIFO_NAME,       "FIFO_CHN0", 0 },
  { RX_EDD_PARAM_XPEC1_NAME,      "PNS_XPEC",      1 },
  { RX_EDD_PARAM_XMAC1_RPU_NAME,  "PNS_XMACRPU",   1 },
  { RX_EDD_PARAM_XMAC1_TPU_NAME,  "PNS_XMACTPU",   1 },
  { RX_EDD_PARAM_INTERRUPT1_NAME, "PNS_COM",       1 },
  { RX_EDD_PARAM_FIFO1_NAME,      "FIFO_CHN1",     0 },//PNS_FIFO_CHN1
  { RX_EDD_PARAM_AGING_TIME,      (void *)120,     0 },
  { RX_EDD_PARAM_USED_IND_BORDER, (void *)7,       0 },
  { RX_EDD_PARAM_END_OF_LIST}
 };

RX_EDD_SET_T MyXEddPNM[] =
{{{PNS_EDD_IDENTIFY_NAME,RX_PERIPHERAL_TYPE_EDD,0}, /* Ethernet Device Driver */
0, /* use Edd0 */
"Got a nice driver", /* NIC name */
RX_EDD_MODE_DEFAULT,
FALSE,
&MyEdd0Param[0],
&trXEddHalSwitch2PortNetX
}
};
//------------------------------------------------------------


TLR_RESULT eRslt;
TLR_HANDLE hXC1;
TLR_HANDLE hXC2;
TLR_HANDLE hXC3;
TLR_HANDLE hXC4;
TLR_HANDLE hXC5;
TLR_HANDLE hXC6;
TLR_HANDLE hLed1;
TLR_HANDLE hLed2;
TLR_HANDLE hEdd;
TLR_HANDLE hInt1;
TLR_HANDLE hInt2;
TLR_HANDLE hPhy1;
TLR_HANDLE hPhy2;

//====== Interrupt für XPEC0+1 erzeugen ===========
eRslt=rX_MemAllocateMemory(&hInt1,DRV_INTERRUPT_SIZE);
eRslt=rX_MemAllocateMemory(&hInt2,DRV_INTERRUPT_SIZE);
eRslt=Drv_IntCreateInterrupt(hInt1, &myXPEC0_Int1[0]);
eRslt=Drv_IntCreateInterrupt(hInt2, &myXPEC0_Int2[0]);
//-----------------------------------------------

//====== Ethernet Phy erzeugen ===========
eRslt=rX_MemAllocateMemory(&hPhy1,DRV_PHY_SIZE);
eRslt=Drv_PhyCreatePhy(hPhy1, &MyPhy1[0]);
eRslt=Drv_PhyIdentifyPhy("PHY",0,hPhy1);
eRslt=DrvPhyInit(&MyPhy1[0],1);
eRslt=rX_MemAllocateMemory(&hPhy2,DRV_PHY_SIZE);
eRslt=Drv_PhyCreatePhy(hPhy2, &MyPhy2[0]);
eRslt=Drv_PhyIdentifyPhy("PHY",1,hPhy2);
eRslt=DrvPhyInit(&MyPhy2[0],1);
//-----------------------------------------------

//====== XPEC und XMAC Instanzen erzeugen =====
eRslt=rX_MemAllocateMemory(&hXC1,DRV_XC_SIZE);
eRslt=rX_MemAllocateMemory(&hXC2,DRV_XC_SIZE);
eRslt=rX_MemAllocateMemory(&hXC3,DRV_XC_SIZE);
eRslt=rX_MemAllocateMemory(&hXC4,DRV_XC_SIZE);
eRslt=rX_MemAllocateMemory(&hXC5,DRV_XC_SIZE);
eRslt=rX_MemAllocateMemory(&hXC6,DRV_XC_SIZE);
eRslt=Drv_XcCreateXc(hXC1,&atMyPNSXc1[0]);
eRslt=Drv_XcCreateXc(hXC2,&atMyPNSXc2[0]);
eRslt=Drv_XcCreateXc(hXC3,&atMyPNSXc3[0]);
eRslt=Drv_XcCreateXc(hXC4,&atMyPNSXc4[0]);
eRslt=Drv_XcCreateXc(hXC5,&atMyPNSXc5[0]);
eRslt=Drv_XcCreateXc(hXC6,&atMyPNSXc6[0]);
//----------------------------------------------


//====== LED Instanzen erzeugen ================
eRslt=rX_MemAllocateMemory(&hLed1,DRV_LED_SIZE);
eRslt=rX_MemAllocateMemory(&hLed2,DRV_LED_SIZE);
eRslt=Drv_LedCreateLed(hLed1,&atMyPNSLed1[0]);
eRslt=Drv_LedCreateLed(hLed2,&atMyPNSLed2[0]);
//-----------------------------------------------

//====== Ethernet device driver erzeugen ===========
eRslt=rX_MemAllocateMemory(&hEdd,DRV_EDD_SIZE);
eRslt=Drv_EddCreateEdd(hEdd, &MyXEddPNM[0]);
//-----------------------------------------------

The Fifo channel is created at rX_SysEnterKernelExt().

The call "eRslt=Drv_EddCreateEdd(hEdd, &MyXEddPNM[0]);" return an error 0x00004302.

What is wrong in the creation of the Ethernet driver?

Br,

Rainer

Andreas Jacob

Andreas Jacob

Hilscher Gesellschaft fuer Systemautomation mbH

| 11.05.2009 | 15:16

Hi Rainer,

the error code say's: "DRV_PHY_UNKNOWN".

Please dpuble check your functions with the original delivered example. I assume some writing mistake.

Rainer Versteeg

Rainer Versteeg

| 11.05.2009 | 15:33

Hi Aj,

What does the error mean ?

That something in the creation of the PHY is wrong or that the creation of EDD is wrong. The results of the creation of the PHY´s are all OK

Br,
Rainer

Andreas Jacob

Andreas Jacob

Hilscher Gesellschaft fuer Systemautomation mbH

| 11.05.2009 | 16:08

The error comes from the PHY driver.
DRV_PHY_UNKNOWN means that the PHY was not found. Maybe wrong name.

In the original example includes the atrXEdd0Param just the information for one port.
Where is your g_tTcpipTcpTaskParam structure? Is it still used just in a different module?

The order in which you call the drives is ok.

Rainer Versteeg

Rainer Versteeg

| 11.05.2009 | 16:16

Yes i start the "TCP_UDP" Task later when the Profinet Aplication Task is started.

Here is my startup parameter for the TCP/IP Stack

/* startup parameter TCP/IP stack */
TCPIP_TCP_TASK_STARTUPPARAMETER_T g_tTcpipTcpTaskParam =
{
  TLR_TASK_TCPUDP,                          /* ulTaskIdentifier (TLR_TASK_PARAMETERHEADER) */
  TCPIP_STARTUPPARAMETER_VERSION,           /* ulParamVersion   (TLR_TASK_PARAMETERHEADER) */
  TCPIP_SRT_QUE_ELEM_CNT_AP_DEFAULT,        /* ulQueElemCntAp                     */
  TCPIP_SRT_POOL_ELEM_CNT_DEFAULT,          /* ulPoolElemCnt                      */
  TCPIP_SRT_FLAG_FAST_START,                /* ulStartFlags: Start flags (see TCPIP_SRT_FLAG_xx in header TcpipTcpTask_Functionlist.h) */
  TCPIP_SRT_TCP_CYCLE_EVENT_DEFAULT,        /* ulTcpCycleEvent                    */
  TCPIP_SRT_QUE_FREE_ELEM_CNT_DEFAULT,      /* ulQueFreeElemCnt                   */
  TCPIP_SRT_SOCKET_MAX_CNT_DEFAULT,         /* ulSocketMaxCnt                     */
  TCPIP_SRT_ARP_CACHE_SIZE_DEFAULT,         /* ulArpCacheSize                     */
  PNS_EDD_IDENTIFY_NAME,                    /* pszEddName: EDD name (see atrXEdd[]) */
  TCPIP_SRT_EDD_QUE_POOL_ELEM_CNT_DEFAULT,  /* ulEddQuePoolElemCnt                */
  TCPIP_SRT_EDD_OUT_BUF_MAX_CNT_DEFAULT     /* ulEddOutBufMaxCnt                  */
};

Br,
Rainer

Rainer Versteeg

Rainer Versteeg

| 12.05.2009 | 10:41

Hi AJ,

I found the error ! :lol:

When I romve the two lines then the Ethernet creation works fine !

eRslt=Drv_PhyIdentifyPhy("PHY",1,hPhy2);
eRslt=DrvPhyInit(&MyPhy2[0],1);

Br,
Rainer

Andreas Jacob

Andreas Jacob

Hilscher Gesellschaft fuer Systemautomation mbH

| 12.05.2009 | 10:45

Good news.

Login