标题: nios 求助~! [打印本页]
作者: jsliujin 时间: 2006-1-9 18:13 标题: nios 求助~!
哪位高手知道int alt_irq_register (alt_u32 id,
void* context,
void (*handler)(void*, alt_u32)) 这个函数怎么用啊,其中第二个参数是什么?
作者: jsliujin 时间: 2006-1-10 20:53
怎么没有人帮我一下啊?!
怎么设置int alt_irq_register (alt_u32 id,
void* context,
void (*handler)(void*, alt_u32)) 的第二参数才能进中断啊??
作者: kzw 时间: 2006-1-11 01:30
第二个参数就是中断的服务程序.
作者: jsliujin 时间: 2006-1-11 12:01
不是第三个参数才是中断服务程序吗?
作者: oceanx 时间: 2006-1-11 19:34
第一个参数:IRQ编号,查system.h
第二个参数:可以传递到ISR中,当然也可以不用,直接赋0
第三个参数:ISR的名字
要看书啊要看书啊
作者: jsliujin 时间: 2006-1-11 20:46
1,3参数我知道,就不知道第二个,但是我赋0后还是不进中断,郁闷
作者: kzw 时间: 2006-1-12 09:38
看错了,以为你说的是第三个,我一般把它写0,可能是可以传递到中断服务程序的参数。
作者: oceanx 时间: 2006-1-12 20:20
程序发上来看看,NIOS2设计里面允许中断没有?程序开中断没有?
并不一定是这个函数的问题!
作者: zdwwindy 时间: 2006-1-12 20:29
oceanx 说的完全正确。
我昨天试过了的。
作者: jsliujin 时间: 2006-1-12 20:48
就是下面这段程序,为什么不能进中断服务程序呢
#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);
}
作者: oceanx 时间: 2006-1-13 09:48
好好看看alt_main()和main()函数的区别啊!
alt_main()只做了两步:
1、CPU caches的初始化
2、堆栈初始化
你要用中断,肯定要使用main()作为程序入口的!
:)
作者: jsliujin 时间: 2006-1-13 12:40
哦,谢谢楼上的~!
alt_main()中可以自己初始化中断吗?
用main()生成的代码太大了~
作者: oceanx 时间: 2006-1-13 16:13
呵呵,那就只有自己写初始化代码!
好好看看n2sw_nii5v2.pdf(路径kits\nios2\documents目录下的)
里面有讲该如何减小代码的!
你的串口程序不大,也没有乘法和浮点运算,减下来最多2-3K
作者: jsliujin 时间: 2006-1-13 17:55
太谢谢了,oceanx
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |