Skip to main content
aurelien23
Associate III
September 3, 2015
Question

SPC564B74 - eMIOS ICU limited to 10ch?

  • September 3, 2015
  • 2 replies
  • 727 views
Posted on September 03, 2015 at 10:49

Hello,

On SPC5Studio V3.6 and SPC564B74. I would like to use ICU eMIOS_0 ch. 9 (PA[9], E0UC[9]) but eMIOS ICU config in HAL layers is only listing ch. 0 to 7 and ch.24. It should lists ch.1 to 7 and 9 to 15 on eMIOS_0 and ch.9 to 15 on eMIOS_1 according to reference manual, right?

If you confirm the issue, can you please advise on which files should be modified?

Please see screenshots below.

Thanks,

Aurélien

0690X00000604tfQAA.png

0690X00000604wrQAA.png
    This topic has been closed for replies.

    2 replies

    Erwan YVIN
    ST Employee
    September 3, 2015
    Posted on September 03, 2015 at 17:25 Hello Aurelien , for ICU , eMIOS HAL point of view has been limited from Channel 0 to Channel 7 and Channel from the RM, you can use ICU from channel 0 to Channel 31 by SAIC (Single Action Input Capture) for PWM , eMIOS HAL point of view from Channel 8 to Channel if you want to use eMIOS ICU , i advice you to update icu_lld.c. (cf below)

    #if SPC5_ICU_USE_EMIOS0_CH8
    /* Driver initialization.*/
    icuObjectInit(&ICUD9);
    ICUD9.emiosp = &EMIOS_0;
    ICUD9.ch_number = 9U;
    ICUD8.clock = SPC5_EMIOS0_CLK;
    #endif /* SPC5_ICU_USE_EMIOS0_CH7 */

    #if SPC5_ICU_USE_EMIOS0_CH0
    if

    (&ICUD1 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH0 */
    #if SPC5_ICU_USE_EMIOS0_CH1
    if

    (&ICUD2 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH1 */
    #if SPC5_ICU_USE_EMIOS0_CH2
    if

    (&ICUD3 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH2 */
    #if SPC5_ICU_USE_EMIOS0_CH3
    if

    (&ICUD4 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH3 */
    #if SPC5_ICU_USE_EMIOS0_CH4
    if

    (&ICUD5 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH4 */
    #if SPC5_ICU_USE_EMIOS0_CH5
    if

    (&ICUD6 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH5 */
    #if SPC5_ICU_USE_EMIOS0_CH6
    if

    (&ICUD7 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH6 */
    #if SPC5_ICU_USE_EMIOS0_CH7
    if

    (&ICUD8 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH7 */
    #if SPC5_ICU_USE_EMIOS0_CH24
    if

    (&ICUD9 == icup)
    increase_emios0_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS0_CH24 */
    #if SPC5_ICU_USE_EMIOS1_CH24
    if

    (&ICUD10 == icup)
    increase_emios1_active_channels();
    #endif /* SPC5_ICU_USE_EMIOS1_CH24 */

    and add the matching handler for channel 8 and channel 9

    /**
    * @brief eMIOS0 Channels 6 and 7 interrupt handler.
    * @note It is assumed that the various sources are only activated if the
    * associated callback pointer is not equal to @p NULL in order to not
    * perform an extra check in a potentially critical interrupt handler.
    *
    * @isr
    */
    OSAL_IRQ_HANDLER(SPC5_EMIOS0_GFR_F6F7_HANDLER) {
    OSAL_IRQ_PROLOGUE();
    #if SPC5_ICU_USE_EMIOS0_CH6
    icu_lld_serve_interrupt(&ICUD7);
    #endif
    #if SPC5_ICU_USE_EMIOS0_CH7
    icu_lld_serve_interrupt(&ICUD8);
    #endif
    OSAL_IRQ_EPILOGUE();
    }
    #endif /* SPC5_ICU_USE_EMIOS0_CH6 || SPC5_ICU_USE_EMIOS0_CH7 */

    Best regards Erwan
    aurelien23
    Associate III
    September 7, 2015
    Posted on September 07, 2015 at 17:34

    Ok, but I will still have to modify mcuconf.h to declare:

    #define SPC5_ICU_USE_EMIOS0_CH9             TRUE

    and this files is overwritten at each code generation.