Help us improve the Power & Sensing Selection Guide. Share feedback

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Level 1
Level 1
First like received First question asked First reply posted

Hello Champs, We have integrated the IOM driver provided as iLLD from but we are facing some issues. We made necessary changes in the code after integration. But the IOM module is not working and we are having hard time in debugging.

Let me brief the test scenario, we would like to monitor the WDI serve (150ms) from the MCU which is routed from P_34_3. And we modified the #define DUTY_THRESHOLD 0.05 and Fspb = Fgtm = 100Mhz. we have only integrated init_Iom() into our code and smu_init() is from our MCAL. we checked the P_34_3 using oscilloscope , WDI serve is perfect. We double checked the Port configurations too. since our duty cycle is 50% and we kept the DUTY_THRESHOLD 0.05(~ 50ms) so the global event should get generated. but it isn't. We also checked in the ECU any 22k pull down resistor as mentioned  but there is no pull down resistor.

We have observed the following: 1. IOM_LAMEWC0.CNTO shows Overflow after the initialization of IOM 2. No IOM_ECMETH0.ETA0 & IOM_ECMETH0.ETB0 is being triggered 3. No SMU ALM8.25 is being reported from SMU let me add the snippets from iLLD for reference.


Let me add the init_Iom() from the iLLD IOM_PWM_Monitor.c, void init_Iom(void) {

/* Initialization of the port pin used in this example */ //

//Port_SetPinMode(PortConf_PortContainer_22_PORT_22_PIN_0, IfxPort_Mode_outputPushPullGeneral); /* PWM output */

Port_SetPinMode(PortConf_PortContainer_34_PORT_34_PIN_3, IfxPort_Mode_inputPullDown); /* IOM monitor input */

/* Disable interrupts */


IfxIom_Driver driver;

IfxIom_Driver_Lam lam;

IfxIom_Driver_Config configDriver;

IfxIom_Driver_LamConfig configLam;

IfxIom_enableModule(); /* Initialization of the IOM module */

IfxIom_Driver_initConfig(&configDriver, &MODULE_IOM); /* Creation of default configuration */

IfxIom_Driver_init(&driver, &configDriver); /* Applying of the configuration */

IfxIom_Driver_initLamConfig(&configLam, &driver); /* Creation of a default LAM configuration */ = IfxIom_LamId_0; /* Selection of LAM #0 */

/* Configuration of the Monitor signal */

configLam.mon.input = IfxIom_MonInput_p34_3; /* IOM - Monitor signal input */

configLam.mon.filter.mode = IfxIom_LamFilterMode_noFilter; /* No filter applied on the signal */

configLam.mon.inverted = FALSE; /* Input signal NOT inverted */

/* Configuration of the Event Window */

configLam.eventWindow.controlSource = IfxIom_LamEventWindowControlSource_mon; /* Event window generation determined from the monitor signal */ = IfxIom_LamEventWindowRunControl_freeRunning; /* Even generation window is not gated */

configLam.eventWindow.clearEvent = IfxIom_LamEventWindowClearEvent_risingEdge; /* Window cleared on the rising edge */

configLam.eventWindow.threshold = DUTY_THRESHOLD; /* Setting a threshold of 1,85ms (37% of PWM_PERIOD) */ configLam.eventWindow.inverted = TRUE; /* Window INVERTED: events are BEFORE the threshold */

/* Configuration of the IOM event */

configLam.event.source = IfxIom_LamEventSource_mon; /* Monitor signal is routed directly */

configLam.event.trigger = IfxIom_LamEventTrigger_fallingEdge; /* Falling edge used to gate event generation */ configLam.systemEventTriggerThreshold = 1; /* Alarm generated after 1 event */

IfxIom_Driver_initLam(&lam, &configLam); /* Apply the custom configuration */

lam.accumulatedCounterIndex = 1; /* Accumulated counter used */

IfxIom_Driver_enableLamEvent(&lam); /* Enable LAM events */




from Ifxlom_cfg.h, brief LAM mon inputs , here modified to select LAM0.

typedef enum

{ IfxIom_MonInput_p34_3 = (IfxIom_MonInputSignal_p << EIGHT| 0x0,

IfxIom_MonInput_p33_1 = (IfxIom_MonInputSignal_p << EIGHT| 0x1,

IfxIom_MonInput_p33_2 = (IfxIom_MonInputSignal_p << EIGHT | 0x2,

IfxIom_MonInput_p33_3 = (IfxIom_MonInputSignal_p << EIGHT | 0x3,

IfxIom_MonInput_p33_4 = (IfxIom_MonInputSignal_p << EIGHT | 0x4,

IfxIom_MonInput_p33_5 = (IfxIom_MonInputSignal_p << EIGHT| 0x5,

IfxIom_MonInput_p33_6 = (IfxIom_MonInputSignal_p << EIGHT | 0x6,

IfxIom_MonInput_p33_7 = (IfxIom_MonInputSignal_p << EIGHT| 0x7,

.................................... }


Please help me to understand the issue. Thanks in advance.

2 Replies
100 replies posted 10 likes received 100 sign-ins

Hi @ShailiJhaNew,

Could share how the SMU is being initialized with the Interrupt router?

Just to be sure about this part.

Best regards,



Hello @Erick_G ,

We have configured the SMU ALM 8 [25 ] for interrupt action IGSC0. 
Smu initialization is done prior to the IOM initialization.
The configuration sequence of the IOM is same as mentioned in the Technical reference manual of TC39xx IOM chapter.