Cours:Vhdl : Différence entre versions
(→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
Sommaire
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)
{
}
}