主题 : 终于实现了6410的按键中断 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
贡献值: 2 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
楼主  发表于: 2011-05-14 14:09

 终于实现了6410的按键中断

管理提醒: 本帖被 xoom 执行加亮操作(2011-05-14)
复制代码
  1. 6410的向量中断模式给我们带来很多方便,我们可以不再使用软件来安排我的中断向量表
  2. 这次试验完全试验了在内存中跑的中断程序
  3. 1、初始化代码可以很简短:
  4.   INCLUDE     s3c6410.inc
  5.     INCLUDE     image_cfg.inc
  6.     INCLUDE     MemParam_mDDR.inc
  7.     IMPORT      _main                    ; C entrypoint for Steppingstone loader.
  8.       
  9. ;------------------------------------------------------------------------------
  10. ;
  11. ;    Memory Start Entry
  12. ;
  13. ;    内存里直接启动时入口
  14. ;
  15. ;------------------------------------------------------------------------------
  16.     PRESERVE8 //因为我用的是rvds4,这句必不可少
  17.     AREA Init, CODE, READONLY
  18.     global        MemStart
  19.     ENTRY
  20. MemStart
  21.                      mrc p15,0,r0,c1,c0,0
  22.                      orr r0,r0,#(1<<24)
  23.     mcr p15,0,r0,c1,c0,0
  24.                         
  25.                      b        _main
  26.                      end
  27. 2、main.C:
  28. #include "utils.h"
  29. #include "s3c6410_addr.h"
  30. #include "interrupt.h"
  31. void key_init(void)
  32. {
  33.     rGPNCON = rGPNCON & ~(0xff << 0) | (0xaa << 0);//eint
  34.     rEINT0CON0 = rEINT0CON0 | (0x22 << 0);//both edge
  35.     rEINT0MASK = rEINT0MASK & ~(0xf);
  36. }
  37. void key_isr(void) __irq
  38. {
  39.     
  40.     if(rEINT0PEND & 0x1)
  41.         Uart_Printf("EINT0 is occurred\n");
  42.     else if(rEINT0PEND & 0x2)
  43.         Uart_Printf("EINT1 is occurred\n");
  44.     else if(rEINT0PEND & 0x4)
  45.         Uart_Printf("EINT2 is occurred\n");
  46.     else if(rEINT0PEND & 0x8)
  47.         Uart_Printf("EINT3 is occurred\n");
  48.     
  49.     //Uart_Printf("key interrupt occurred\n");
  50.     rEINT0PEND &= ~(16);//以下两句我不是很明白,但毕竟它工作了
  51.     INTC_ClearVectAddr();
  52. }
  53. void _main(void)
  54. {
  55.     Uart_Init();      
  56.     Port_Init();
  57.     key_init();
  58.     INTC_Init();
  59.     INTC_SetIntISR(0, key_isr);
  60.     INTC_Enable(0);
  61.                      while(1);
  62. }
  63. 我用的tiny6410,光盘里面用说到用jlink来调试的开发文档附带了源代码,把头文件加上去就可以了
  64. ro_base:0x50000000 //代码基址
  65. fisrt =startup.o(Init) //程序入口
  66. 继续研究用key来控制等的亮暗,童鞋们也给点力吧,我很多不明白,需要大家的指点
[ 此帖被venkee.com在2011-06-21 23:11重新编辑 ]
级别: 新手上路
UID: 40189
精华: 0
发帖: 27
金钱: 105 两
威望: 27 点
贡献值: 0 点
综合积分: 54 分
注册时间: 2011-03-16
最后登录: 2012-07-30
1楼  发表于: 2011-05-15 21:50
mark!!!
级别: 新手上路
UID: 28365
精华: 0
发帖: 37
金钱: 185 两
威望: 37 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2010-09-09
最后登录: 2018-06-27
2楼  发表于: 2011-05-16 22:02
求楼主把这个几个
INCLUDE     s3c6410.inc
    INCLUDE     image_cfg.inc
    INCLUDE     MemParam_mDDR.inc
文件也放上来。。
  最好打个包。下载  小菜鸟谢过了
It's time....
级别: 侠客
UID: 20328
精华: 0
发帖: 80
金钱: 410 两
威望: 82 点
贡献值: 0 点
综合积分: 160 分
注册时间: 2010-04-29
最后登录: 2015-05-22
3楼  发表于: 2011-05-17 14:56
mark       
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
贡献值: 2 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
4楼  发表于: 2011-05-18 11:55

 回 2楼(flyer) 的帖子

你只要有光盘就有这三个文件!在开发文档里有个叫做《使用J-Link在ADS下调试Mini6410裸机程序的详细步骤》的那个源码包,叫leds_arm
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
贡献值: 2 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
5楼  发表于: 2011-05-18 11:58

 回 2楼(flyer) 的帖子

小弟也开始实习了,我在公司首先用6410做裸机代码的,到时研究到更多的代码我都会发上来,现在我做了的有key,led,key+led,pwm,rtc,wdt的,全部都用过中断模式,不过这些太简单,以后想到了iic,lcd的,我会尽量打包发上来
级别: 新手上路
UID: 44362
精华: 0
发帖: 31
金钱: 160 两
威望: 32 点
贡献值: 0 点
综合积分: 62 分
注册时间: 2011-04-24
最后登录: 2012-10-09
6楼  发表于: 2011-05-18 17:10
我现在在写中断的程序 是不是还要改启动代码里面中断矢量的说 楼主指点下啊 跟你发了邮件了
我自己用裸机实现了spi口跟fpga的通信
级别: 新手上路
UID: 44362
精华: 0
发帖: 31
金钱: 160 两
威望: 32 点
贡献值: 0 点
综合积分: 62 分
注册时间: 2011-04-24
最后登录: 2012-10-09
7楼  发表于: 2011-05-18 17:11
直接用楼主的程序 按键没的反应呀 楼主解答下呗
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
贡献值: 2 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
8楼  发表于: 2011-05-18 20:58

 回 7楼(melodyooo) 的帖子

主要是我和你们的开发环境设置上的差异,你要看清楚我写的注意的问题,ro_base是0x50000000,下载到内存的地址也应该是这个,还有最重要的是,first参数是startup.o,section参数是Init,这好像是ads的设置,但我用的rvds,first和section参数一起设置成了startup.o(Init),我试过的我所有的小实验,都可以的,pwm的中断,rtc的中断,无一不可!
级别: 骑士
UID: 42149
精华: 2
发帖: 201
金钱: 1115 两
威望: 223 点
贡献值: 2 点
综合积分: 442 分
注册时间: 2011-04-05
最后登录: 2013-03-29
9楼  发表于: 2011-05-19 09:19
Mark一下,有空研究。