Gast
#2024455
hallo Leute!
Arbeite momentan mit dem Nios II Embedded Evaluation Kit von Altera.
Ich bin dabei die RS232 Schnittstelle zu benutzen.
Daten senden und empfangen funktioniert bestens, jedoch wenn ich Daten
per Interrupt empfangen möchten kommen noch Probleme auf.
Hier mal einige Abschnitte meines Programms:
Das steht in der "system.h"
/*
* uart_rs232 configuration
*
*/
#define UART_RS232_NAME "/dev/uart_rs232"
#define UART_RS232_TYPE "altera_avalon_uart"
#define UART_RS232_BASE 0x0a201280
#define UART_RS232_SPAN 32
#define UART_RS232_IRQ 18 //wird gebraucht
#define UART_RS232_IRQ_INTERRUPT_CONTROLLER_ID 0
#define UART_RS232_BAUD 9600
#define UART_RS232_DATA_BITS 8
#define UART_RS232_FIXED_BAUD 0
#define UART_RS232_PARITY 'N'
#define UART_RS232_STOP_BITS 1
#define UART_RS232_SYNC_REG_DEPTH 2
#define UART_RS232_USE_CTS_RTS 0
#define UART_RS232_USE_EOP_REGISTER 0
#define UART_RS232_SIM_TRUE_BAUD 0
#define UART_RS232_SIM_CHAR_STREAM ""
#define UART_RS232_RELATIVEPATH 0
#define UART_RS232_FREQ 100000000
#define ALT_MODULE_CLASS_uart_rs232 altera_avalon_uart
//Das steht in einer Bibliothek
extern int alt_irq_register (alt_u32 id,
void* context,
alt_isr_func handler);
//Das ist mein Context
typedef struct
{
int number;
}my_context;
//Das ist meine ISR
void rs232_isr (void* context, alt_u32 interrupt_number)
{
printf("Daten stehen an");
}
//So sieht ungefähr die main aus
void main(){
char msg[4]="test";
int result;
result=alt_irq_register (UART_RS232_IRQ,(void*)my_contex,rs232_isr);
alt_irq_enable(UART_RS232_IRQ);
do{
fp = fopen("/dev/uart_rs232", "w+");
if(fp)
{
//printf("Connected\n");
fwrite(msg, strlen(msg), 1, fp);
fclose(fp);
}
else
{
printf("Error/dev/ttyS0\n");
}
}while(1);
}
Die ISR wird nach dem Start zich mal aufgerufen. Meiner Meinung nach
löst das Senden auch einen Interrupt aus und die ISR wird dadurch
aufgerufen. Gibt es eine Möglichkeit mein Problem zu lösen?