首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

nios 求助~!

nios 求助~!

哪位高手知道int alt_irq_register (alt_u32 id,
                      void* context,
                      void (*handler)(void*, alt_u32)) 这个函数怎么用啊,其中第二个参数是什么?


 

怎么没有人帮我一下啊?!
怎么设置int alt_irq_register (alt_u32 id,
void* context,
void (*handler)(void*, alt_u32)) 的第二参数才能进中断啊??
第二个参数就是中断的服务程序.
在交流中前进,共同实现nios的应用。
不是第三个参数才是中断服务程序吗?
第一个参数:IRQ编号,查system.h
第二个参数:可以传递到ISR中,当然也可以不用,直接赋0
第三个参数:ISR的名字
要看书啊要看书啊
1,3参数我知道,就不知道第二个,但是我赋0后还是不进中断,郁闷
看错了,以为你说的是第三个,我一般把它写0,可能是可以传递到中断服务程序的参数。
在交流中前进,共同实现nios的应用。
程序发上来看看,NIOS2设计里面允许中断没有?程序开中断没有?
并不一定是这个函数的问题!
oceanx 说的完全正确。
我昨天试过了的。
就是下面这段程序,为什么不能进中断服务程序呢

#include "alt_types.h"
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include "sys/alt_irq.h"
#include "altera_avalon_uart_regs.h"
#include "altera_avalon_uart.h"

static alt_u8 dat[3] = {0x85,0x89,0x91};
static alt_u8 recv[3] = {0};
alt_u16 uart0control;
alt_u16 uart0state;
alt_u8 num;

void HANDLE_UART0_interrupts(void * context,alt_u32 id)
{

uart0state = IORD_ALTERA_AVALON_UART_STATUS(UART0_BASE);
IOWR_ALTERA_AVALON_UART_STATUS(UART0_BASE, 0);
if (uart0state & ALTERA_AVALON_UART_STATUS_RRDY_MSK)
{
recv[num++] = IORD_ALTERA_AVALON_UART_RXDATA(UART0_BASE);
}
if (uart0state & ALTERA_AVALON_UART_STATUS_TRDY_MSK)
{
IOWR_ALTERA_AVALON_UART_TXDATA(UART0_BASE, 0x64);
}
}

int main (void) __attribute__ ((weak, alias ("alt_main")));
int alt_main()
{
alt_u8 counter ;

num = 0;
uart0control = 0x00c0;
IOWR_ALTERA_AVALON_UART_CONTROL(UART0_BASE, uart0control);
alt_irq_register(UART0_IRQ,0,HANDLE_UART0_interrupts);


for (counter = 0; counter < 3; counter ++)
{
IOWR_ALTERA_AVALON_UART_TXDATA(UART0_BASE, dat[counter]);
while(!((IORD_ALTERA_AVALON_UART_STATUS(UART0_BASE))&ALTERA_AVALON_UART_STATUS_TRDY_MSK));
}
IOWR_ALTERA_AVALON_UART_TXDATA(UART0_BASE, 0xa5);

while (1);
return (0);
}
好好看看alt_main()和main()函数的区别啊!
alt_main()只做了两步:
1、CPU caches的初始化
2、堆栈初始化
你要用中断,肯定要使用main()作为程序入口的!
:)
哦,谢谢楼上的~!
alt_main()中可以自己初始化中断吗?
用main()生成的代码太大了~
呵呵,那就只有自己写初始化代码!
好好看看n2sw_nii5v2.pdf(路径kits\nios2\documents目录下的)
里面有讲该如何减小代码的!
你的串口程序不大,也没有乘法和浮点运算,减下来最多2-3K
太谢谢了,oceanx
返回列表