Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
8 years ago

DE10-Nano Handling FPGA interrupts

Hello,

I'm trying to find info on how to handle an IRQ from FPGA to HPS via f2h_irq0 Interrupt Receiver.

For now I don't have a clue. I just found info on how to handle GPIO like KEY0 or KEY1 but they are mapped to the HPS region.

I hope to capture edge interrupts from SW[4..0]. Maybe I can find somebody with experience with this here.

Regards!

8 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Hello,

    I'm trying to find info on how to handle an IRQ from FPGA to HPS via f2h_irq0 Interrupt Receiver.

    For now I don't have a clue. I just found info on how to handle GPIO like KEY0 or KEY1 but they are mapped to the HPS region.

    I hope to capture edge interrupts from SW[4..0]. Maybe I can find somebody with experience with this here.

    Regards!

    --- Quote End ---

    Hello.

    For baremetal application use hardware libs routines for interrupt control and ISR handler registration.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hey thanks !

    I'm trying to catch interrupts under linux. I was reading the altera documentation for HWLIB and SoCAL APIs without success.

    This is a simple starting program with a strange error:

    #include <stdio.h>
    # include "hwlib.h"
    # include "alt_interrupt.h"
    int main() {
      ALT_STATUS_CODE status;
      status = alt_int_global_init();
      if(status == ALT_E_SUCCESS) printf("exito...");
      return 0;
    }

    I got this error:

    $ make build
    arm-linux-gnueabihf-gcc -g -Wall -Werror -ID:/intelFPGA/17.0/embedded/ip/altera/
    hps/altera_hps/hwlib/include -ID:/intelFPGA/17.0/embedded/ip/altera/hps/altera_h
    ps/hwlib/include/soc_cv_av -Dsoc_cv_av -c main.c -o main.o
    arm-linux-gnueabihf-gcc -g -Wall -Werror   main.o -o ledtest
    main.o: In function `main':
    C:\Users\nhasbun\Desktop\C/main.c:7: undefined reference to `alt_int_global_init
    '
    collect2.exe: error: ld returned 1 exit status
    make: ***  Error 1

    And I'm using this makefile (https://pastebin.com/zxwzybqf) that I got from Altera examples for this board. Not sure what the problem is, since the header is being read.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    It's very simple from a hardware standpoint. f2h_irq0 is a 32-bit input. Connect SW[4:0] to f2h_irq0[4:0] (or whichever 5 bits you want to use) and tie the remaining f2h_irq0 bits to logic 0 if you're not using them for other interrupt sources.

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hey thanks!

    I should stated that I was working under linux!. I was reading the altera documentation for HWLIB and SoCAL APIs without success.

    This is a simple starting program with a strange error:

    #include <stdio.h>
    # include "hwlib.h"
    # include "alt_interrupt.h"
    int main() {
      ALT_STATUS_CODE status;
      status = alt_int_global_init();
      if(status == ALT_E_SUCCESS) printf("exito...");
      return 0;
    }

    I got this error:

    main.o: In function `main':
    C:\Users\nhasbun\Desktop\C/main.c:7: undefined reference to `alt_int_global_init

    I guess it's a linker problem on my makefile ?
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Ok, so I solved that error by copying the alt_interrupt.c file to folder and improving a little my makefile.

    But now I got this error:

    C:\Users\nhasbun\AppData\Local\Temp\ccJaPb6S.s: Assembler messages:
    C:\Users\nhasbun\AppData\Local\Temp\ccJaPb6S.s:91: Error: Thumb encoding does no
    t support an immediate here -- `msr CPSR_c,#(0x12|0x80|0x40)'
    make: ***  Error 1

    This is my makefile:

    --- Quote Start ---

    #

    TARGET = main

    #

    ALT_DEVICE_FAMILY ?= soc_cv_av

    HWLIBS_ROOT = $(SOCEDS_DEST_ROOT)/ip/altera/hps/altera_hps/hwlib

    #

    SRCS=$(wildcard *.c) $(wildcard */*.c)

    OBJECTS=$(SRCS:.c=.o)

    CFLAGS = -g -Wall -Werror

    -I$(HWLIBS_ROOT)/include

    -I$(HWLIBS_ROOT)/include/$(ALT_DEVICE_FAMILY)

    -D$(ALT_DEVICE_FAMILY)

    LDFLAGS = -g -Wall -Werror

    -pthread -lpthread -lm

    CROSS_COMPILE = arm-linux-gnueabihf-

    CC = $(CROSS_COMPILE)gcc

    LD = $(CROSS_COMPILE)gcc

    ARCH = arm

    .PHONY: build

    build: $(TARGET)

    $(TARGET): $(OBJECTS)

    $(LD) $(LDFLAGS) $^ -o $@

    %.o : %.c $(HEADERS)

    $(CC) $(CFLAGS) -c $< -o $@

    .PHONY: clean

    clean:

    rm -f $(TARGET) *.a *.o *~

    rm -f $(UART_CORE_LIB_ROOT)/*.o

    --- Quote End ---

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Ok, so I solved that error by copying the alt_interrupt.c file to folder and improving a little my makefile.

    But now I got this error:

    C:\Users\nhasbun\AppData\Local\Temp\ccJaPb6S.s: Assembler messages:
    C:\Users\nhasbun\AppData\Local\Temp\ccJaPb6S.s:91: Error: Thumb encoding does no
    t support an immediate here -- `msr CPSR_c,#(0x12|0x80|0x40)'
    make: ***  Error 1
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi!

    Are you solve the problem now? I happend to have the same problem, I copy the alt_interrupt.c file to my project folder and add command lines to my nmake, but it still dosen't work.The error like

    Thumb encoding does not support an immediate here -- `msr CPSR_c,#(0x12|0x80|0x40)'
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    I just gave up. It seems like we had the libraries to use the FPGA interrupts under Linux but there is simply not enough info out there on how to make it work.