@@ -556,79 +556,85 @@ bool IRQManager::addPeripheral(Peripheral_t p, void *cfg) {
556556#endif
557557
558558#if WIRE_HOWMANY > 0
559+ /* I2C true NOT SCI */
559560 else if (p == IRQ_I2C_MASTER && cfg != NULL ) {
560- I2CIrqMasterReq_t *p_cfg = (I2CIrqMasterReq_t *)cfg;
561- // iic_master_instance_ctrl_t *ctrl = (iic_master_instance_ctrl_t *)p_cfg->ctrl;
562- i2c_master_cfg_t *mcfg = (i2c_master_cfg_t *)p_cfg->cfg ;
563- uint8_t hw_channel = p_cfg->hw_channel ;
561+ I2CIrqReq_t *p_cfg = (I2CIrqReq_t *)cfg;
562+ i2c_master_cfg_t *mcfg = (i2c_master_cfg_t *)p_cfg->mcfg ;
563+ i2c_slave_cfg_t *scfg = (i2c_slave_cfg_t *)p_cfg->scfg ;
564564 mcfg->ipl = I2C_MASTER_PRIORITY;
565+
565566 if (mcfg->txi_irq == FSP_INVALID_VECTOR) {
566567 /* TX interrupt */
567568 mcfg->txi_irq = (IRQn_Type)last_interrupt_index;
568- *(irq_ptr + last_interrupt_index) = (uint32_t )iic_master_txi_isr ;
569- set_iic_tx_link_event (last_interrupt_index, hw_channel );
569+ scfg-> txi_irq = (IRQn_Type)last_interrupt_index ;
570+ set_iic_tx_link_event (last_interrupt_index, p_cfg-> mcfg -> channel );
570571 R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
571572 last_interrupt_index++;
572573
573574 /* RX interrupt */
574575 mcfg->rxi_irq = (IRQn_Type)last_interrupt_index;
575- *(irq_ptr + last_interrupt_index) = (uint32_t )iic_master_rxi_isr ;
576- set_iic_rx_link_event (last_interrupt_index, hw_channel );
576+ scfg-> rxi_irq = (IRQn_Type)last_interrupt_index ;
577+ set_iic_rx_link_event (last_interrupt_index, p_cfg-> mcfg -> channel );
577578 R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
578579 last_interrupt_index++;
579580
580581 /* TX ERROR interrupt */
581582 mcfg->tei_irq = (IRQn_Type)last_interrupt_index;
582- *(irq_ptr + last_interrupt_index) = (uint32_t )iic_master_tei_isr ;
583- set_iic_tei_link_event (last_interrupt_index, hw_channel );
583+ scfg-> tei_irq = (IRQn_Type)last_interrupt_index ;
584+ set_iic_tei_link_event (last_interrupt_index, p_cfg-> mcfg -> channel );
584585 R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
585586 last_interrupt_index++;
586587
587588 /* RX ERROR interrupt */
588589 mcfg->eri_irq = (IRQn_Type)last_interrupt_index;
589- *(irq_ptr + last_interrupt_index) = (uint32_t )iic_master_eri_isr ;
590- set_iic_eri_link_event (last_interrupt_index, hw_channel );
590+ scfg-> eri_irq = (IRQn_Type)last_interrupt_index ;
591+ set_iic_eri_link_event (last_interrupt_index, p_cfg-> mcfg -> channel );
591592 R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
592593 last_interrupt_index++;
593594 }
595+
596+ *(irq_ptr + mcfg->txi_irq ) = (uint32_t )iic_master_txi_isr;
597+ *(irq_ptr + mcfg->rxi_irq ) = (uint32_t )iic_master_rxi_isr;
598+ *(irq_ptr + mcfg->tei_irq ) = (uint32_t )iic_master_tei_isr;
599+ *(irq_ptr + mcfg->eri_irq ) = (uint32_t )iic_master_eri_isr;
600+
594601 R_BSP_IrqEnable (mcfg->txi_irq );
595602 R_BSP_IrqEnable (mcfg->rxi_irq );
596603 R_BSP_IrqEnable (mcfg->tei_irq );
597604 R_BSP_IrqEnable (mcfg->eri_irq );
598605 }
606+ /* I2C SCI MASTER (only) */
599607 else if (p == IRQ_SCI_I2C_MASTER && cfg != NULL ) {
600- I2CIrqMasterReq_t *p_cfg = (I2CIrqMasterReq_t *)cfg;
601- // iic_master_instance_ctrl_t *ctrl = (iic_master_instance_ctrl_t *)p_cfg->ctrl;
602- i2c_master_cfg_t *mcfg = (i2c_master_cfg_t *)p_cfg->cfg ;
603- uint8_t hw_channel = p_cfg->hw_channel ;
608+ I2CIrqReq_t *p_cfg = (I2CIrqReq_t *)cfg;
609+ i2c_master_cfg_t *mcfg = (i2c_master_cfg_t *)p_cfg->mcfg ;
604610 mcfg->ipl = I2C_MASTER_PRIORITY;
605611 if (mcfg->txi_irq == FSP_INVALID_VECTOR) {
606612 /* TX interrupt */
607613 mcfg->txi_irq = (IRQn_Type)last_interrupt_index;
608614 *(irq_ptr + last_interrupt_index) = (uint32_t )sci_i2c_txi_isr;
609- set_sci_tx_link_event (last_interrupt_index, hw_channel );
615+ set_sci_tx_link_event (last_interrupt_index, p_cfg-> mcfg -> channel );
610616 R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
611617 last_interrupt_index++;
612618
613619 /* RX interrupt */
614620 mcfg->rxi_irq = (IRQn_Type)last_interrupt_index;
615621 *(irq_ptr + last_interrupt_index) = (uint32_t )sci_i2c_rxi_isr;
616- set_sci_rx_link_event (last_interrupt_index, hw_channel );
622+ set_sci_rx_link_event (last_interrupt_index, p_cfg-> mcfg -> channel );
617623 R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
618624 last_interrupt_index++;
619625
620626 /* TX ERROR interrupt */
621627 mcfg->tei_irq = (IRQn_Type)last_interrupt_index;
622628 *(irq_ptr + last_interrupt_index) = (uint32_t )sci_i2c_tei_isr;
623- set_sci_tei_link_event (last_interrupt_index, hw_channel );
629+ set_sci_tei_link_event (last_interrupt_index, p_cfg-> mcfg -> channel );
624630 R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
625631 last_interrupt_index++;
626632
627633 /* RX ERROR interrupt */
628634 #if 0
629635 mcfg->eri_irq = (IRQn_Type)last_interrupt_index;
630636 *(irq_ptr + last_interrupt_index) = (uint32_t)sci_i2c_eri_isr;
631- set_sci_eri_link_event(last_interrupt_index, hw_channel );
637+ set_sci_eri_link_event(last_interrupt_index, p_cfg->mcfg->channel );
632638 R_BSP_IrqCfg((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
633639 last_interrupt_index++;
634640 #endif
@@ -641,38 +647,45 @@ bool IRQManager::addPeripheral(Peripheral_t p, void *cfg) {
641647 #endif
642648 }
643649 else if (p == IRQ_I2C_SLAVE && cfg != NULL ) {
644- i2c_slave_cfg_t *p_cfg = (i2c_slave_cfg_t *)cfg;
645- p_cfg->ipl = I2C_SLAVE_PRIORITY;
646- p_cfg->eri_ipl = I2C_SLAVE_PRIORITY;
647- if (p_cfg->txi_irq == FSP_INVALID_VECTOR) {
650+ I2CIrqReq_t *p_cfg = (I2CIrqReq_t *)cfg;
651+ i2c_master_cfg_t *mcfg = (i2c_master_cfg_t *)p_cfg->mcfg ;
652+ i2c_slave_cfg_t *scfg = (i2c_slave_cfg_t *)p_cfg->scfg ;
653+ scfg->ipl = I2C_SLAVE_PRIORITY;
654+ scfg->eri_ipl = I2C_SLAVE_PRIORITY;
655+
656+ if (scfg->txi_irq == FSP_INVALID_VECTOR) {
648657 /* TX interrupt */
649- p_cfg ->txi_irq = (IRQn_Type)last_interrupt_index;
650- *(irq_ptr + last_interrupt_index) = (uint32_t )iic_slave_txi_isr ;
651- set_iic_tx_link_event (last_interrupt_index, p_cfg ->channel );
658+ mcfg ->txi_irq = (IRQn_Type)last_interrupt_index;
659+ scfg-> txi_irq = (IRQn_Type)last_interrupt_index ;
660+ set_iic_tx_link_event (last_interrupt_index, scfg ->channel );
652661 last_interrupt_index++;
653662
654663 /* RX interrupt */
655- p_cfg ->rxi_irq = (IRQn_Type)last_interrupt_index;
656- *(irq_ptr + last_interrupt_index) = (uint32_t )iic_slave_rxi_isr ;
657- set_iic_rx_link_event (last_interrupt_index, p_cfg ->channel );
664+ scfg ->rxi_irq = (IRQn_Type)last_interrupt_index;
665+ mcfg-> rxi_irq = (IRQn_Type)last_interrupt_index ;
666+ set_iic_rx_link_event (last_interrupt_index, scfg ->channel );
658667 last_interrupt_index++;
659668
660669 /* TEI interrupt */
661- p_cfg ->tei_irq = (IRQn_Type)last_interrupt_index;
662- *(irq_ptr + last_interrupt_index) = (uint32_t )iic_slave_tei_isr ;
663- set_iic_tei_link_event (last_interrupt_index, p_cfg ->channel );
670+ scfg ->tei_irq = (IRQn_Type)last_interrupt_index;
671+ mcfg-> tei_irq = (IRQn_Type)last_interrupt_index ;
672+ set_iic_tei_link_event (last_interrupt_index, scfg ->channel );
664673 last_interrupt_index++;
665674
666675 /* ERI interrupt */
667- p_cfg ->eri_irq = (IRQn_Type)last_interrupt_index;
668- *(irq_ptr + last_interrupt_index) = (uint32_t )iic_slave_eri_isr ;
669- set_iic_eri_link_event (last_interrupt_index, p_cfg ->channel );
676+ scfg ->eri_irq = (IRQn_Type)last_interrupt_index;
677+ mcfg-> eri_irq = (IRQn_Type)last_interrupt_index ;
678+ set_iic_eri_link_event (last_interrupt_index, scfg ->channel );
670679 last_interrupt_index++;
671680 }
672- R_BSP_IrqEnable (p_cfg->txi_irq );
673- R_BSP_IrqEnable (p_cfg->rxi_irq );
674- R_BSP_IrqEnable (p_cfg->tei_irq );
675- R_BSP_IrqEnable (p_cfg->eri_irq );
681+ *(irq_ptr + scfg->txi_irq ) = (uint32_t )iic_slave_txi_isr;
682+ *(irq_ptr + scfg->rxi_irq ) = (uint32_t )iic_slave_rxi_isr;
683+ *(irq_ptr + scfg->tei_irq ) = (uint32_t )iic_slave_tei_isr;
684+ *(irq_ptr + scfg->eri_irq ) = (uint32_t )iic_slave_eri_isr;
685+ R_BSP_IrqEnable (scfg->txi_irq );
686+ R_BSP_IrqEnable (scfg->rxi_irq );
687+ R_BSP_IrqEnable (scfg->tei_irq );
688+ R_BSP_IrqEnable (scfg->eri_irq );
676689
677690 }
678691#endif
0 commit comments