主题 : 终于实现了6410的按键中断 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 39689
精华: 0
发帖: 69
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 138 分
注册时间: 2011-03-11
最后登录: 2012-04-22
10楼  发表于: 2011-05-19 10:06

 回 5楼(venkee.com) 的帖子

设置时钟那块我没搞定,楼主给我发一份PWM和WDT的程序吧,我的邮箱yx1.1@163.com,谢谢了~~~
级别: 新手上路
UID: 45694
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2011-05-06
最后登录: 2011-09-13
11楼  发表于: 2011-05-19 14:30

 回 8楼(venkee.com) 的帖子

楼主,INTC_SetIntISR()这个是什么函数啊,
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
贡献值: 2 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
12楼  发表于: 2011-05-19 19:48

 回 11楼(wujie12341) 的帖子

应论坛某些好友的需要,我把代码都发出来吧,你们慢慢研究!其实真的光盘里面都有,别浪费资源呀!
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
贡献值: 2 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
13楼  发表于: 2011-05-19 19:54

 回 11楼(wujie12341) 的帖子

qq:1633206255 密码:arm9net , 邮箱文件中转站里面,bin文件都有了,编译运行不了先试下我的bin文件,你们去下载吧!
级别: 侠客
UID: 39689
精华: 0
发帖: 69
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 138 分
注册时间: 2011-03-11
最后登录: 2012-04-22
14楼  发表于: 2011-05-20 17:31
谢谢楼主,共享精神
菜鸟在路上
级别: 圣骑士
UID: 42749
精华: 6
发帖: 241
金钱: 1530 两
威望: 306 点
贡献值: 6 点
综合积分: 602 分
注册时间: 2011-04-11
最后登录: 2016-07-19
15楼  发表于: 2011-05-26 15:08
楼主给力,怎么下到FLASH中运行?
菜鸟在路上
级别: 圣骑士
UID: 42749
精华: 6
发帖: 241
金钱: 1530 两
威望: 306 点
贡献值: 6 点
综合积分: 602 分
注册时间: 2011-04-11
最后登录: 2016-07-19
16楼  发表于: 2011-05-26 15:21

 Re:回 11楼(wujie12341) 的帖子

引用第13楼venkee.com于2011-05-19 19:54发表的 回 11楼(wujie12341) 的帖子 :
qq:1633206255 密码:arm9net , 邮箱文件中转站里面,bin文件都有了,编译运行不了先试下我的bin文件,你们去下载吧!

谢了,还有就发上来共享下
级别: 新手上路
UID: 46975
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2011-05-18
最后登录: 2017-09-13
17楼  发表于: 2011-05-31 15:28

 回 8楼(venkee.com) 的帖子

我这边用ads的 地址啊 startup.o都设置了的,可是还是按键没有反应 为什么中断还是产生不了呢
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
贡献值: 2 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
18楼  发表于: 2011-05-31 19:38

 回 17楼(alanzn) 的帖子

还差个section,设为Init
级别: 新手上路
UID: 48486
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2011-06-01
最后登录: 2017-09-13
19楼  发表于: 2011-06-01 10:07

 回 楼主(venkee.com) 的帖子

我试过了 没有成功 ……
下面是我的代码   只针对EINT0的调试
1.  main.c
#include "utils.h"
#include "s3c6410_addr.h"
#include "interrupt.h"

void delay(void)
{
int i = 0;
for(i = 0; i <500000; i++);
}

void beep_init(void)
{
rGPFCON |= 1<<28;
rGPFCON &= ~(1<<29);
}
void beep_on(void)
{
rGPFDAT |= 1<<14;
}
void beep_off(void)
{
rGPFDAT &= ~(1<<14);
}
void beep(void)
{
beep_on();
delay();
beep_off();
delay();
}


void key_init(void)
{
/*    rGPNCON = rGPNCON & ~(0xff << 0) | (0xaa << 0);//eint
    rEINT0CON0 = rEINT0CON0 | (0x22 << 0);//both edge
    rEINT0MASK = rEINT0MASK & ~(0xf);*/
    
    
    
     rGPNCON |= 1<<1;
     rGPNCON &= ~(1<<0);


     rEINT0CON0 &= ~(1<<2);
    rEINT0CON0 |= 1<<1;


     rEINT0MASK &= ~(1<<0);
     rVIC0INTENABLE |= 1<<0;
}

void key_isr(void) __irq
{  
    if(rEINT0PEND & 0x1)
        Uart_Printf("EINT0 is occurred\n");
    else if(rEINT0PEND & 0x2)
        Uart_Printf("EINT1 is occurred\n");
    else if(rEINT0PEND & 0x4)
        Uart_Printf("EINT2 is occurred\n");
    else if(rEINT0PEND & 0x8)
        Uart_Printf("EINT3 is occurred\n");
    else
        Uart_Printf("no EINT\r\n");
    
    //Uart_Printf("key interrupt occurred\n");
    rEINT0PEND &= ~(16);
    INTC_ClearVectAddr();
}

void _main(void)
{
    beep_init();
    Uart_Init();      
    Port_Init();
    key_init();
    INTC_Init();
    INTC_SetIntISR(0,key_isr);
    INTC_Enable(0);

    while(1)
    {
        if(rVIC0IRQSTATUS  &(1<<0))
          {
               beep();
          }
          rEINT0PEND &= 0x1;
        //INTC_ClearVectAddr();    
    }
}

2.   startup.s

  INCLUDE     s3c6410.inc
    INCLUDE     image_cfg.inc
    INCLUDE     MemParam_mDDR.inc

    IMPORT      _main                    ; C entrypoint for Steppingstone loader.
      
;------------------------------------------------------------------------------
;
;    Memory Start Entry
;
;    内存里直接启动时入口
;
;------------------------------------------------------------------------------
;    PRESERVE8 //因为我用的是rvds4,这句必不可少
    AREA Init, CODE, READONLY
    global        MemStart
    ENTRY

MemStart
    mrc p15,0,r0,c1,c0,0
    orr r0,r0,#(1<<24)
    mcr p15,0,r0,c1,c0,0
                        
    b  _main
    end
-----------------------------------------------------------------
RO_BASE  0x50000000

Place at begining of image
Symbol:   startup.o            section:   Init

-info totals -entry MemStart -ro-base 0x50000000 -first startup.o(Init)
--------------------------------------------------------------------------------------------------
vankee的代码 始终没有出来效果,然后我想知道EINT是否发生了,就修改了while里面的语句。
main函数里面的while循环 通过按键可以让beep()被执行,也就是蜂鸣会响,也就是说中断是触发了吧?
但是isr函数却始终没有跳跃过去啊……就是Uart打印没有出现啊。
各位高手能否帮忙看看,到底是不是    
INTC_Init();
INTC_SetIntISR(0,key_isr);
INTC_Enable(0);
这三个函数以后,isr程序就就绪了,只等中断来,然后硬件通过VIC就执行isr了呢?没有其他地方应该修改调整的么?