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
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
Hilscher Gesellschaft fuer Systemautomation mbH
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.
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
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
Hilscher Gesellschaft fuer Systemautomation mbH
Good news.
Andreas Jacob
Hilscher Gesellschaft fuer Systemautomation mbH
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.