Cours:Vhdl : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(interface pour le bus avalon)
Ligne 24 : Ligne 24 :
 
<source lang=cpp>
 
<source lang=cpp>
 
IOWR(CUSTOM_0_BASE,regNumber,value);
 
IOWR(CUSTOM_0_BASE,regNumber,value);
 +
</source>
 +
 +
==PIO==
 +
 +
===interruptions===
 +
<source lang=cpp>
 +
static void myISR(void * context,alt_u32 id)
 +
{
 +
        // terminer par l'acquittement de l'interruption
 +
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, 0);
 +
IORD_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE);
 +
}
 +
 +
int main()
 +
{
 +
  // choix des PIO déclenchant l'interruption
 +
  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_0_BASE, 0xff);
 +
  // initialisation des fronts
 +
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, 0);
 +
  alt_ic_isr_register(PIO_0_IRQ_INTERRUPT_CONTROLLER_ID, PIO_0_IRQ ,(void *) myISR,NULL,NULL);
 +
  while (1)
 +
  {
 +
  }
 +
}
 +
 
</source>
 
</source>

Version du 5 novembre 2025 à 11:48

Nios 2

interface pour le bus avalon

hardware

entity customPeriph is
    port (
        clk         : in  std_logic;
        reset_n     : in  std_logic;
        address     : in  std_logic_vector(1 downto 0);
        write       : in  std_logic;
        read        : in  std_logic;
        chipselect  : in  std_logic;
        writedata   : in  std_logic_vector(31 downto 0);
        readdata    : out std_logic_vector(31 downto 0)
    );
end entity customPeriph;

software

IOWR(CUSTOM_0_BASE,regNumber,value);

PIO

interruptions

static void myISR(void * context,alt_u32 id)
{
        // terminer par l'acquittement de l'interruption
	IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, 0);
	IORD_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE);
}

int main()
{ 
  // choix des PIO déclenchant l'interruption
  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_0_BASE, 0xff);
  // initialisation des fronts
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, 0);
  alt_ic_isr_register(PIO_0_IRQ_INTERRUPT_CONTROLLER_ID, PIO_0_IRQ ,(void *) myISR,NULL,NULL);
  while (1)
  {
  }
}