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

救命!! uClinux下nios2 如何察看CPU寄存器?还有的中断问题

救命!! uClinux下nios2 如何察看CPU寄存器?还有的中断问题

请教NIOSII移植uclinux后如何查看寄存器 以及中断问题

交叉编译环境
参考nioswiki上uClinux的移植方法 在ep2c5上移植uClinux已经成功,并DM9000和以太网传输已经正常(都是照着别人的做而已),想做个简单的PIO中断,未果 不知该如何调试 请各位大虾们指导我!!我很郁闷

代码如下(参考的华清远见的linux并且看了linux文件夹下面一些其他的源码)裸奔时中断程序完全正常
头文件 参考了几个文件 把他们包含的头文件都整一起了
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/major.h>
#include <linux/module.h>
#include <linux/capability.h>
#include <linux/uio.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/cdev.h>
#include <linux/poll.h>
#include <linux/sched.h>
#include <linux/version.h>
#include <linux/miscdevice.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/ioport.h>
#include <linux/fcntl.h>

#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <linux/delay.h>
#include "system.h"

#define start0 0xf1//这两个控制字是为了启动外部定时发生中断的电路
#define start1 0x00


//这地方声明了 字符型设备的几个方法 其实这几个函数都没用
//应该起作用的仅仅是模块加载函数
ssize_t SCR_open(struct inode *inode ,struct file *file );
ssize_t SCR_release(struct inode *inode ,struct file *file);
ssize_t SCR_read(struct file *file ,char *buf ,size_t count ,loff_t *fops);
ssize_t SCR_write(struct file *file ,char *buf ,size_t count ,loff_t *fops);
ssize_t SCR_ioctrl(struct inode *inode ,struct file *file,unsigned int cmd ,long data);

struct file_operations SCR_ctrl_ops=
{
open: SCR_open,
read: SCR_read,
write: SCR_write,
ioctl: SCR_ioctrl,
release: SCR_release,
};
static irqreturn_t play(int irq, void* id)
//中断函数 就这么简单咯! 我只要看到零就行了 天啊
{

printk(KERN_ALERT "0");
}
static int __init hello_init(void)
{
int ret = -ENODEV;
volatile unsigned int i,j,k,frame,pos,source;
//注册设备
ret = register_chrdev(241,PIO_1_NAME,&SCR_ctrl_ops);
if(ret < 0)
{
printk("hello module init error %d\n",ret);
}
else
{
printk("hello module init success \n");
}

outw(0xffffffff,PIO_1_BASE+2);//打开PIO1的MASK
outw(0,PIO_1_BASE+3); //清除CAP

ret=request_irq(PIO_1_IRQ,&play,SA_INTERRUPT, "/dev/ctrl","241");
printk("\n-----------------------\nret=%x\n-----------------------\n",ret);
//申请中断

outb(start0,PIO_BASE);
outb(start1,PIO_BASE);//启动外部会定时发生中断的电路

return ret;


}


从request_irq返回值看 返回0中断是注册成功了 后面打印出来了

可它就是进不了中断~中断里面就个printk按道理没错的

[em06]
救命啊!!!!
返回列表