Hi,
Pio´s 12-17 are set when the Task "DNS_FAL" are created.
I start the DeviceNet Task and PIO´s at runtime:
/*
************************************************************
* Configuration of the CAN_DL Task Instances
************************************************************
*/
STATIC CONST FAR CAN_DL_STARTUP_PARAM_T tCanDlPrm = {
TLR_TASK_CAN_DL, /* Task identifier */
1, /* Version of parameter data set */
#if (XC_INST_DEVICENET==0)
"FIFO_CHN0",0, // Link to used FIFO channel instance
#endif
#if (XC_INST_DEVICENET==1)
"FIFO_CHN1",0, // Link to used FIFO channel instance
#endif
#if (XC_INST_DEVICENET==2)
"FIFO_CHN2",0, // Link to used FIFO channel instance
#endif
"XPEC" ,XC_INST_DEVICENET, /* Link to used XPEC instance */
"XMACRPU",XC_INST_DEVICENET, /* Link to used XMACRPU instance */
"XMACTPU",XC_INST_DEVICENET, /* Link to used XMACTPU instance */
"COM",XC_INST_DEVICENET, /* Link to used COM Irq instance */
32, /* number of frame recv. buffer if no packets left*/
32, /* number of communication packets to allocate */
0x00000000, /* Enable individual parameter during startup */
0, /* CAN Chip Mode */
0, /* Startup baudrate in Bit/s */
0, /* Transmit abort timeout in ms */
0x00000000, /* Events enabled */
0x00000000, /* Filter 0: Acceptance Code */
0x00000000, /* Filter 0: Acceptance Mask */
0x00000000, /* Filter 1: Acceptance Code */
0x00000000, /* Filter 1: Acceptance Mask */
0x00000000, /* Enable RXID Range Start */
0x00000000, /* Enable RXID Range End */
};void *pvtCanDlPrm = &tCanDlPrm;
void *pvtDnsPrm = NULL;//======== Definition of the LED Instanzen =================
RX_LED_SET_T atMyLed1[] = {
{{"MNSGRN", RX_PERIPHERAL_TYPE_LED, 0},
{"SYSPIO", RX_PERIPHERAL_TYPE_LED, 0},
{(RX_LED_VALUE_TYPE)0, 0, 0},
{(RX_LED_VALUE_TYPE)0, 0, 0},
{RX_LED_VALUE_TYPE_OR, 0, 0x10},
{RX_LED_VALUE_TYPE_OR, 0, 0x10},
Drv_PioSetupLedOperations,
}
};
RX_LED_SET_T atMyLed2[] = {
{{"MNSRED", RX_PERIPHERAL_TYPE_LED, 0},
{"SYSPIO", RX_PERIPHERAL_TYPE_LED, 0},
{(RX_LED_VALUE_TYPE)0, 0, 0},
{(RX_LED_VALUE_TYPE)0, 0, 0},
{RX_LED_VALUE_TYPE_OR, 0, 0x20},
{RX_LED_VALUE_TYPE_OR, 0, 0x20},
Drv_PioSetupLedOperations,
}
};
//----------------------------------------------
// PIO´s für Devicenet
RX_PIO_SET_T atMyPioDN[] = {
{{"SYSPIO",RX_PERIPHERAL_TYPE_PIO,0},
{RX_PIO_VALUE_TYPE_ACTIVE_HIGH,NETX_PIO_OUT_EN,0x0001F0ff},
{RX_PIO_VALUE_TYPE_NONE,NULL,0x00000000},
{RX_PIO_VALUE_TYPE_ACTIVE_LOW,NETX_PIO_OUT},
{RX_PIO_VALUE_TYPE_ACTIVE_LOW,NETX_PIO_OUT},
{RX_PIO_VALUE_TYPE_ABSOLUTE,NETX_PIO_IN},
},
};
eRslt=rX_SysCreateTask("CAN_DL",
(void (FAR*)(void FAR*))TaskEnter_CanDl,
(void (FAR*)(void FAR*))(UINT32)&pvtCanDlPrm,
NULL,
TSK_STACK_SIZE_CANDLTASK ,
RX_TASK_AUTO_START_INIT_WAIT,
0,
TSK_PRIO_18, TSK_TOK_18,
0,//XC_INST_DEVICENET,
(void (*)(void*))NULL);
rXStartNextTask();
//====== LED Instanzen erzeugen ================
eRslt=rX_MemAllocateMemory(&hLed1,DRV_LED_SIZE);
eRslt=rX_MemAllocateMemory(&hLed2,DRV_LED_SIZE);
eRslt=Drv_LedCreateLed(hLed1,&atMyLed1[0]);
eRslt=Drv_LedCreateLed(hLed2,&atMyLed2[0]);
eRslt=rX_MemAllocateMemory(&hPio,DRV_PIO_SIZE);
eRslt=Drv_PioCreatePio(hPio, &atMyPioDN[0]);
eRslt=rX_SysCreateTask("DNS_FAL",
(void (FAR*)(void FAR*))TaskEnter_DnsFal,
(void (FAR*)(void FAR*))(UINT32)&pvtDnsPrm,
NULL,
TSK_STACK_SIZE_DNSFAL,
RX_TASK_AUTO_START_INIT_WAIT,
0,
TSK_PRIO_19, TSK_TOK_19,
0,//XC_INST_DEVICENET,
(void (*)(void*))NULL);
rXStartNextTask(); //After that call all PIO´s are set to one. Why ?
When I configure the PIO´s 12-16 later then the PIO are toogle when the devicenet connection are unplugged and plugged.
I have allready call this question for Modbus stack, but all stack are not handle the PIO same.
Br,
Rainer
Br,
Rainer