Ignore:
Timestamp:
Dec 9, 2013, 6:51:12 PM (11 years ago)
Author:
bouyer
Message:

Sync with VHDL, make IRQ work for DMA.

Location:
trunk/modules/vci_spi/caba/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_spi/caba/source/include/vci_spi.h

    r594 r595  
    122122    M_READ_CMD          = 2,
    123123    M_READ_RSP          = 3,
    124     M_READ_END          = 4,
     124    M_INTR              = 4,
    125125    M_WRITE_WAIT        = 5,
    126126    M_WRITE_CMD         = 6,
  • trunk/modules/vci_spi/caba/source/src/vci_spi.cpp

    r594 r595  
    5959        r_spi_bsy         = false;
    6060        r_dma_count       = 0;
     61        r_dma_error       = false;
    6162        r_spi_clk_counter = 0xffff;
    6263        r_spi_clk         = 0;
     
    178179#endif
    179180                    } else {
    180                         r_irq = r_irq & r_spi_bsy;
     181                        r_irq = false;
    181182                    }
    182183                    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
     
    417418                r_dma_count = 0;
    418419                r_dma_error = true;
    419                 r_initiator_fsm = M_READ_END;
     420                r_initiator_fsm = M_INTR;
    420421#ifdef SOCLIB_MODULE_DEBUG
    421422                std::cout << "vci_bd M_READ_ERROR" << std::endl;
     
    425426            {
    426427                r_dma_count = 0;
    427                 r_initiator_fsm = M_READ_END;
     428                r_initiator_fsm = M_INTR;
    428429                r_dma_error = false;
    429430#ifdef SOCLIB_MODULE_DEBUG
     
    440441    }
    441442    ///////////////////
    442     case M_READ_END:
    443         // wait one cycle because VHDL can't update r_dma_count
    444         // in the same cycle as going back IDLE
     443    case M_INTR:
    445444        r_initiator_fsm = M_IDLE;
     445        r_irq = true;
    446446        break;
    447447    ///////////////////
     
    502502    {
    503503        if (r_spi_fsm == S_IDLE) { // write complete
    504             r_initiator_fsm  = M_IDLE;
     504            r_initiator_fsm  = M_INTR;
    505505        }
    506506        break;
     
    739739                "M_READ_CMD",
    740740                "M_READ_RSP",
    741                 "M_READ_END",
     741                "M_INTR",
    742742
    743743                "M_WRITE_WAIT",
Note: See TracChangeset for help on using the changeset viewer.