搜索
bottom↓
回复: 16

请教avic一个问题!

[复制链接]

出0入0汤圆

发表于 2010-7-16 10:52:58 | 显示全部楼层 |阅读模式
这是我建的sopc.h文件
#ifndef SOPC_H_
#define SOPC_H_
#include "system.h"
#define _LED
typedef struct
{
    unsigned long int DATA;
    unsigned long int DIRECTION;
    unsigned long int INTERRUPT_MASK;
    unsigned long int EDGE_CAPTURE;
} PIO_STR;

#ifdef _LED
#define LED ((PIO_STR *)LED_GREEN_BASE)
#endif

#endif /*SOPC_H_*/

这是我建的main.c文件
#include "unistd.h"
#include "stdio.h"
#include "../inc/sopc.h"
int main()
{
    while(1)
    {
        LED->DATA=0xf0;
    }
}
程序编译没任何问题,下载到目标板灯始终不亮!请问是什么原因?
(注:如果直接使用系统API的话可以正常点亮,即ptf文件的配置没任何问题;另外我的是8个灯,不是四个)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-7-16 10:58:03 | 显示全部楼层
这完全是按照NIOS II的那些事上面写的!

出0入0汤圆

发表于 2010-7-16 11:28:44 | 显示全部楼层
你去他博客看看 有篇文章解释过了

出0入0汤圆

发表于 2010-7-16 11:37:59 | 显示全部楼层
回复【楼主位】number007cool  
-----------------------------------------------------------------------

看这里。
[笔记].浅析在Nios II中的两种寄存器映射方法的异同.[Nios II]
http://www.cnblogs.com/yuphone/archive/2010/04/22/1717779.html

出0入0汤圆

发表于 2010-7-16 13:36:10 | 显示全部楼层

(原文件名:122.jpg)

你IO口基地址是这样定义的吗?

出0入0汤圆

发表于 2010-7-16 14:00:48 | 显示全部楼层
楼主看看avic的这篇博客就明白了!我也遇到过同样的问题!
http://www.cnblogs.com/kingst/archive/2010/05/15/1735886.html

出0入0汤圆

 楼主| 发表于 2010-7-16 14:36:02 | 显示全部楼层
回复 【4楼】 281229961 小朱
你IO口基地址是这样定义的吗?
---------------------------------------------------------
我是这样定义的!

出0入0汤圆

 楼主| 发表于 2010-7-16 15:25:18 | 显示全部楼层
回复 【5楼】 wcabcd
楼主看看avic的这篇博客就明白了!我也遇到过同样的问题!
http://www.cnblogs.com/kingst/archive/2010/05/15/1735886.html
-----------------------------------------------------------------------------------

我把高速缓存改成none以后,重新generate.
然后在NIOS II 上跑那个程序,依然不亮

出0入0汤圆

发表于 2010-7-16 15:41:34 | 显示全部楼层
回复【7楼】number007cool  
-----------------------------------------------------------------------

按照我的方法做就行了。详情见我引用的手册内容。

出0入0汤圆

 楼主| 发表于 2010-7-16 16:24:47 | 显示全部楼层
#include "system.h"
#define _LED
typedef struct
{
    unsigned long int DATA;
    unsigned long int DIRECTION;
    unsigned long int INTERRUPT_MASK;
    unsigned long int EDGE_CAPTURE;
} PIO_STR;
回复  【8楼】 tear086 .COM 缺氧
按照我的方法做就行了。详情见我引用的手册内容。
------------------------------------------------------------------------
我的程序是这样写的:
#ifdef _LED
#define LED ((PIO_STR *)LED_GREEN_BASE|(1<<31))
#endif

#include "unistd.h"
#include "stdio.h"
//#include "../inc/sopc.h"
int main()
{
    while(1)
    {
        LED->DATA=1<<3;
    }
}
编译时提示出错信息如下:
**** Build of configuration Debug for project abc ****

make -s all includes
Compiling hello_world.c...
../hello_world.c: In function `main':
../hello_world.c:22: error: invalid operands to binary |
../hello_world.c:24:2: warning: no newline at end of file
make: *** [obj/hello_world.o] Error 1
Build completed in 1.687 seconds
不知问题在哪,请指教!
谢谢!

出0入0汤圆

发表于 2010-7-16 16:36:51 | 显示全部楼层
回复【9楼】number007cool
-----------------------------------------------------------------------

//#include "../inc/sopc.h" ?????????????????

为什么把结构体的定义丢下呢?

出0入0汤圆

 楼主| 发表于 2010-7-16 17:05:25 | 显示全部楼层
回复  【10楼】 tear086 .COM 缺氧
----------------------------------------------------------
我没有丢下结构体的定义啊,请仔细看:
----------------------------------------------------------
#include "system.h"
#define _LED
typedef struct  
{
    unsigned long int DATA;
    unsigned long int DIRECTION;
    unsigned long int INTERRUPT_MASK;
    unsigned long int EDGE_CAPTURE;
} PIO_STR;  
#ifdef _LED
#define LED ((PIO_STR *)LED_GREEN_BASE|(1<<31))
#endif

#include "unistd.h"
#include "stdio.h"
//#include "../inc/sopc.h"
int main()
{
    while(1)
    {
        LED->DATA=1<<3;
    }
}

出0入0汤圆

发表于 2010-7-16 21:08:11 | 显示全部楼层
还没研究明白呢啊

出0入0汤圆

 楼主| 发表于 2010-7-16 21:46:55 | 显示全部楼层
恩,行不通!

出0入0汤圆

发表于 2010-7-17 13:43:23 | 显示全部楼层
#define LED          ((PIO_STR *) (PIO_LED_BASE  | 1 <<31))  这样定义看看!
高速缓存部分不改

出0入0汤圆

 楼主| 发表于 2010-7-17 14:42:02 | 显示全部楼层
回复  【5楼】 wcabcd
------------------------------------------------------------
已经成功了!!!!!!!!!!!!!!

多谢大家的发言,非常感谢!终于搞哪个不用API的程序了!

出0入0汤圆

 楼主| 发表于 2010-7-17 15:54:55 | 显示全部楼层
新问题出现了:
这是我的按键的程序,也是没有使用API,按照”那些事“的套路写的:
#include "system.h"
#include <unistd.h>
#include <stdio.h>
#include "sys/alt_irq.h"
#include "altera_avalon_pio_regs.h"
#define uint  unsigned int
#define uchar unsigned char
/*结构体的定义*/
typedef struct
{
    unsigned long int DATA;
    unsigned long int DIRECTION;
    unsigned long int INTERRUPT_MASK;
    unsigned long int EDGE_CAPTURE;
} PIO_STR;
/*绿灯的定义*/
#define LED_GREEN ((PIO_STR *)LED_GREEN_BASE)
/*红灯的定义*/
#define LED_RED   ((PIO_STR *)LED_RED_BASE)
/*按键的定义*/
#define KEY       ((PIO_STR *)BUTTON_PIO_BASE)

int key_flag=0;
void isr_key(void *context,unsigned long int id)
{
    key_flag=~key_flag;
   
}
int init_interrupt()
{
    KEY->INTERRUPT_MASK=1;
    //EDGE_CAPTUREKEY->EDGE_CAPTURE=FALLING;
    return alt_irq_register(BUTTON_PIO_IRQ,NULL,isr_key);
   
}
int main()
{
    if(!init_interrupt())
    {
        printf("successful!");
    }
    else
    {
        printf("error!");
    }
    while(1)
    {
       if(key_flag)
       {
        LED_GREEN->DATA=1<<0;
       }
       else
       {
         LED_GREEN->DATA=1<<7;
       }
    }
}
中断注册成功了,但是不管按不按键都是执行LED_GREEN->DATA=1<<7,即最高位的那个灯亮。
需要说明的是,我配置的按键管脚的时候用的是下降沿中断,在这里是不是要多加几句话?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-13 21:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表