一个很简单的用nios写的中断方式接受的串口例子
2007-04-26 17:33
281 查看
#include<stdio.h>
#include<string.h>
#include<fcntl.h>
#include"system.h"
#include"unistd.h"
#include "alt_types.h"
#include <unistd.h>
#include "altera_avalon_uart_regs.h"
#include "altera_avalon_pio_regs.h"
#include "sys/alt_irq.h"
#define quelen 2048
char queue[quelen];
int indexc = 0;
int temp_index=0;
char ch;
static void init_uart_receiver();
static void handle_uart_interrups(void* context, alt_u32 id);
int main(void)
{
init_uart_receiver();
printf("successful");
int f=0;
while (f<1)
{
if (temp_index!=indexc)
{
printf("%c", queue[temp_index]);
temp_index++;
}
}
return 0;
}
static void init_uart_receiver()
{
void* status_ptr;
IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80);
IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0x0);
IOWR_ALTERA_AVALON_UART_RXDATA(UART_BASE, 0x0);
alt_irq_register(UART_IRQ,status_ptr,handle_uart_interrups);
}
static void handle_uart_interrups(void* context, alt_u32 id)
{
volatile char* status_ptr =(volatile char*)context;
*status_ptr =IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
if((IORD_ALTERA_AVALON_UART_STATUS(UART_BASE)&(0x80)) ==0x80)
{
ch =IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
queue[indexc] =ch;
indexc++;
}
IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0x0);
}
#include<string.h>
#include<fcntl.h>
#include"system.h"
#include"unistd.h"
#include "alt_types.h"
#include <unistd.h>
#include "altera_avalon_uart_regs.h"
#include "altera_avalon_pio_regs.h"
#include "sys/alt_irq.h"
#define quelen 2048
char queue[quelen];
int indexc = 0;
int temp_index=0;
char ch;
static void init_uart_receiver();
static void handle_uart_interrups(void* context, alt_u32 id);
int main(void)
{
init_uart_receiver();
printf("successful");
int f=0;
while (f<1)
{
if (temp_index!=indexc)
{
printf("%c", queue[temp_index]);
temp_index++;
}
}
return 0;
}
static void init_uart_receiver()
{
void* status_ptr;
IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80);
IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0x0);
IOWR_ALTERA_AVALON_UART_RXDATA(UART_BASE, 0x0);
alt_irq_register(UART_IRQ,status_ptr,handle_uart_interrups);
}
static void handle_uart_interrups(void* context, alt_u32 id)
{
volatile char* status_ptr =(volatile char*)context;
*status_ptr =IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
if((IORD_ALTERA_AVALON_UART_STATUS(UART_BASE)&(0x80)) ==0x80)
{
ch =IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
queue[indexc] =ch;
indexc++;
}
IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0x0);
}
相关文章推荐
- STM32串口中断接收方式详细比较
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- 用C语言中断方式实现串口的读写
- 非阻塞方式下Socket读取数据的一个例子
- 串口中断方式实现FIFO
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。 .
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- 一个小例子介绍Obj-C的函数命名方式
- JMS P2P方式的消息发送/接收的一个简单例子
- 一个linux UDP网络通讯的例子源代码(server、client方式)
- 一个linux UDP网络通讯的例子源代码(server、client方式)
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- 一个小例子把map放到list里面,数组套JSONObject的方式
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- cc2530在ZSTACK中如何开启双串口模式(UART1中断方式)
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
- 一个linux UDP网络通讯的例子源代码(server、client方式)
- C# 串口操作入门篇,一个标准的,简陋的串口例子。