@@ -556,79 +556,85 @@ bool IRQManager::addPeripheral(Peripheral_t p, void *cfg) {
556
556
#endif
557
557
558
558
#if WIRE_HOWMANY > 0
559
+ /* I2C true NOT SCI */
559
560
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 ;
564
564
mcfg->ipl = I2C_MASTER_PRIORITY;
565
+
565
566
if (mcfg->txi_irq == FSP_INVALID_VECTOR) {
566
567
/* TX interrupt */
567
568
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 );
570
571
R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
571
572
last_interrupt_index++;
572
573
573
574
/* RX interrupt */
574
575
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 );
577
578
R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
578
579
last_interrupt_index++;
579
580
580
581
/* TX ERROR interrupt */
581
582
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 );
584
585
R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
585
586
last_interrupt_index++;
586
587
587
588
/* RX ERROR interrupt */
588
589
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 );
591
592
R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
592
593
last_interrupt_index++;
593
594
}
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
+
594
601
R_BSP_IrqEnable (mcfg->txi_irq );
595
602
R_BSP_IrqEnable (mcfg->rxi_irq );
596
603
R_BSP_IrqEnable (mcfg->tei_irq );
597
604
R_BSP_IrqEnable (mcfg->eri_irq );
598
605
}
606
+ /* I2C SCI MASTER (only) */
599
607
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 ;
604
610
mcfg->ipl = I2C_MASTER_PRIORITY;
605
611
if (mcfg->txi_irq == FSP_INVALID_VECTOR) {
606
612
/* TX interrupt */
607
613
mcfg->txi_irq = (IRQn_Type)last_interrupt_index;
608
614
*(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 );
610
616
R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
611
617
last_interrupt_index++;
612
618
613
619
/* RX interrupt */
614
620
mcfg->rxi_irq = (IRQn_Type)last_interrupt_index;
615
621
*(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 );
617
623
R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
618
624
last_interrupt_index++;
619
625
620
626
/* TX ERROR interrupt */
621
627
mcfg->tei_irq = (IRQn_Type)last_interrupt_index;
622
628
*(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 );
624
630
R_BSP_IrqCfg ((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
625
631
last_interrupt_index++;
626
632
627
633
/* RX ERROR interrupt */
628
634
#if 0
629
635
mcfg->eri_irq = (IRQn_Type)last_interrupt_index;
630
636
*(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 );
632
638
R_BSP_IrqCfg((IRQn_Type)last_interrupt_index, I2C_MASTER_PRIORITY, mcfg);
633
639
last_interrupt_index++;
634
640
#endif
@@ -641,38 +647,45 @@ bool IRQManager::addPeripheral(Peripheral_t p, void *cfg) {
641
647
#endif
642
648
}
643
649
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) {
648
657
/* 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 );
652
661
last_interrupt_index++;
653
662
654
663
/* 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 );
658
667
last_interrupt_index++;
659
668
660
669
/* 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 );
664
673
last_interrupt_index++;
665
674
666
675
/* 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 );
670
679
last_interrupt_index++;
671
680
}
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 );
676
689
677
690
}
678
691
#endif
0 commit comments