搜索
bottom↓
回复: 46

难得小清闲之2 :MDK+2440裸奔外部中断,启动代码自己写!

  [复制链接]

出0入22汤圆

发表于 2012-7-11 19:42:46 | 显示全部楼层 |阅读模式
本帖最后由 jiaowoxiaolu 于 2012-7-11 19:44 编辑

一直断断续续的学习2440,对linux和uboot还不了解,也不习惯他们的开发方式,所以一直再裸奔 ,熟悉之后自己写个bootloader。

刚开始一直用keil的启动代码,可是就是感觉不爽(异步总线模式一设置就死机),代码不运行也不知道怎么回事。然后网上翻阅大量高手的学习笔记后自己也尝试写了(具体来说应该是借鉴并修改简化)一份启动代码,
启动代码汇编和c语言都有,堆栈和中断向量部分用汇编,其余配置全部用C编写,启动代码有大量注释,简洁明了,一切尽在自己掌握之中,自我感觉比起网上流行的2440init.s爽了不少,合适裸奔

说明:这个程序完全运行在内部4k ram中,没有使用外部RAM,运行后GPF5~7上接LED会闪烁,串口0一秒发送一个A字符(115200波特率),按键接在外部中断0上,按一次发送一个B字符。

上工程文件和设置说明,欢迎跟我一样学习2440的菜鸟下载学习 ,按照下面设置,直接点debug按钮即可运行,程序自动下载到内部4k RAM







问题:学习中断过程中刚开始按键能进入中断,放开后就死机了,检查了好久没头绪,怀疑是中断时没保存PC值等导致中断返回后找不到门,后来查看很多资料发现了MDK下写中断程序有 __irq 这个关键字,于是在中断函数后面加上这个关键字就ok了,void IRQ_Handler(void) __irq,一直用stm32都没加这个都使用正常,为什么到了2440就必须加这个呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-7-11 20:24:46 | 显示全部楼层
顶,顶,,,,最近一直研究.还真不习惯linux下开发,最让人烦的是要学GCC  MAKEFILE.

出0入0汤圆

发表于 2012-7-11 23:07:02 | 显示全部楼层
想请教楼主,我写的裸奔程序为什么用jlink仿真器仿真点击运行没现象,烧写后可以运行

出0入22汤圆

 楼主| 发表于 2012-7-12 08:03:24 | 显示全部楼层
多哈达 发表于 2012-7-11 23:07
想请教楼主,我写的裸奔程序为什么用jlink仿真器仿真点击运行没现象,烧写后可以运行 ...

仿真要先下载一个extram.ini,我的的截图里面有设置

出0入0汤圆

发表于 2012-7-12 11:33:57 | 显示全部楼层
楼主注释的非常详细。but,,,编译有错误。如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入22汤圆

 楼主| 发表于 2012-7-12 13:59:36 | 显示全部楼层
Adrian 发表于 2012-7-12 11:33
楼主注释的非常详细。but,,,编译有错误。如图:

那个是hex转bin的编译命令你按照你的编译生成的hex路径设置一下就行了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-7-12 14:12:05 | 显示全部楼层
学习了

出0入0汤圆

发表于 2012-7-12 14:44:04 | 显示全部楼层
jiaowoxiaolu 发表于 2012-7-12 13:59
那个是hex转bin的编译命令你按照你的编译生成的hex路径设置一下就行了

谢谢。我的keil在D盘,改过来就OK了。还有软件仿真跑不起来,有办法吗?

出0入22汤圆

 楼主| 发表于 2012-7-12 14:52:45 | 显示全部楼层
Adrian 发表于 2012-7-12 14:44
谢谢。我的keil在D盘,改过来就OK了。还有软件仿真跑不起来,有办法吗?

EXT_RAM.ini里面还有一个路径也要跟你的工程文件路径一致

出0入0汤圆

发表于 2012-7-15 11:36:43 | 显示全部楼层
谢楼主·打算从裸奔开始学起·

出0入0汤圆

发表于 2012-7-17 12:46:00 | 显示全部楼层
我没裸过,怎么开始

出0入0汤圆

发表于 2012-7-17 22:53:58 | 显示全部楼层
我觉得还是跟着楼主学裸奔吧,楼主收我不》?

出0入22汤圆

 楼主| 发表于 2012-7-18 08:05:27 | 显示全部楼层
gracialee 发表于 2012-7-17 22:53
我觉得还是跟着楼主学裸奔吧,楼主收我不》?

现在已经不裸了

出0入0汤圆

发表于 2012-7-18 08:58:22 | 显示全部楼层
jiaowoxiaolu 发表于 2012-7-18 08:05
现在已经不裸了

那我诚心跟楼主穿裤子呗?收了我吧?

出0入22汤圆

 楼主| 发表于 2012-7-18 09:38:59 | 显示全部楼层
gracialee 发表于 2012-7-18 08:58
那我诚心跟楼主穿裤子呗?收了我吧?

我刚又把ucgui移植上去了,等下去下载吧,稍后上传

出0入0汤圆

发表于 2012-10-26 10:42:02 | 显示全部楼层
顶楼主,没穿裤子的经过

出0入0汤圆

发表于 2013-3-18 10:14:46 | 显示全部楼层
你好,看了你的2440自动代码的分析,觉得很受益,感觉底层还有很多知识需要了解,不像以前根本就没有钻进去,学的很浅显,谢谢!怎么访问你的其他的博文,我的qq 345132215 可以加你的qq吗

出0入22汤圆

 楼主| 发表于 2013-3-18 11:51:50 | 显示全部楼层
water1987 发表于 2013-3-18 10:14
你好,看了你的2440自动代码的分析,觉得很受益,感觉底层还有很多知识需要了解,不像以前根本就没有钻进去 ...

点我的ID就行了

出0入0汤圆

发表于 2013-3-20 10:08:28 | 显示全部楼层
本帖最后由 济南电子爱好者 于 2013-3-20 10:10 编辑

我裸奔 arm9 有两个月了,用自带代码实现 了串口,IIC ,按键,led  等等,唯独  中断不能实现,郁闷啊. 一直想用MDK自带的启动代码实现中断 ,但又不知道如何修改原代码实现中断 !!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入22汤圆

 楼主| 发表于 2013-3-20 11:19:46 | 显示全部楼层
济南电子爱好者 发表于 2013-3-20 10:08
我裸奔 arm9 有两个月了,用自带代码实现 了串口,IIC ,按键,led  等等,唯独  中断不能实现,郁闷啊. 一直想用 ...

参考我的启动代码,原理是一样的,中断有个总入口,然后再按中断标志判断是哪个外设来了中断

出0入0汤圆

发表于 2013-3-20 12:47:52 | 显示全部楼层
楼主生成BIN的路径为什么是反斜杠的呢                                 

出0入22汤圆

 楼主| 发表于 2013-3-20 13:52:39 | 显示全部楼层
charlieholy 发表于 2013-3-20 12:47
楼主生成BIN的路径为什么是反斜杠的呢

这个命令百度来的,具体为什么我没研究

出0入18汤圆

发表于 2013-3-21 13:03:33 | 显示全部楼层
mark   mark

出0入0汤圆

发表于 2013-3-21 23:29:40 | 显示全部楼层
楼主,你当初是不是也出现了调试时,寄存器的值不改变?这难道是启动代码的问题?

出0入22汤圆

 楼主| 发表于 2013-3-22 08:17:27 | 显示全部楼层
顺哥 发表于 2013-3-21 23:29
楼主,你当初是不是也出现了调试时,寄存器的值不改变?这难道是启动代码的问题? ...

暂时没发现你说的问题,你可以先禁止优化看看

出0入0汤圆

发表于 2013-3-22 20:58:12 | 显示全部楼层
楼主的代码是不是在RAM中运行就进不了中断了?请教下。

出0入22汤圆

 楼主| 发表于 2013-3-22 22:30:40 | 显示全部楼层
tjCFeng 发表于 2013-3-22 20:58
楼主的代码是不是在RAM中运行就进不了中断了?请教下。

可以 正常中断

出0入0汤圆

发表于 2013-3-22 23:12:41 | 显示全部楼层
jiaowoxiaolu 发表于 2013-3-22 22:30
可以 正常中断

我下载工程打开后什么都不改动,在TQ2440上进不了中断。
哪里需要修改呢?

出0入0汤圆

发表于 2013-3-24 21:52:52 | 显示全部楼层
下载学习了楼主的代码 ,发现 用MDK 在线调试时 PC指针是从0 开始 执行 .我的真正的地址是从0x30000000 开始的  请问这个应该如何做修改??不知道楼主有没有在原MDK  s3c2440.s文件下实现中断,忘楼主给以指点.

出0入0汤圆

发表于 2013-3-25 21:31:45 | 显示全部楼层
我已经实现了用自带启动代码实现中断,其实是相当的简单,只是我们不太会使用MDK导致的!,详情见我的博客  2440 中断过程分析 (MDK 自带启动代码实现中断)   ,大家共同学习共同进步.

出0入0汤圆

发表于 2013-8-14 11:01:38 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-10-6 22:02:04 | 显示全部楼层
楼主,我的GT2440用的MDK 的启动代码,但是主频始终只有12MHz。看了很多资料,还是没找到原因。可不可以帮下我。。。

出0入22汤圆

 楼主| 发表于 2013-10-6 22:58:29 | 显示全部楼层
对妮说 发表于 2013-10-6 22:02
楼主,我的GT2440用的MDK 的启动代码,但是主频始终只有12MHz。看了很多资料,还是没找到原因。可不可以帮 ...

时钟可以在启动完后再设置

出0入0汤圆

发表于 2014-3-14 16:21:02 | 显示全部楼层
本帖最后由 steven8 于 2014-3-14 17:04 编辑

在Micro2440上可以运行,在RAM内调试。

出0入0汤圆

发表于 2014-3-19 16:39:09 | 显示全部楼层
济南电子爱好者 发表于 2013-3-25 21:31
我已经实现了用自带启动代码实现中断,其实是相当的简单,只是我们不太会使用MDK导致的!,详情见我的博客  244 ...

你好,我最近正在用MDK写2440的裸机程序,能不能麻烦你给发一份中断的工程文件,谢谢邮箱870437505@qq.com

出0入0汤圆

发表于 2014-3-20 06:04:59 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2014-3-20 08:02:17 | 显示全部楼层
心得不错,有参考价值。

出0入0汤圆

发表于 2014-3-22 23:50:57 | 显示全部楼层
不错,学习中

出0入0汤圆

发表于 2014-9-29 17:32:54 | 显示全部楼层
楼主,你好,启动代码里哪里允许了IRQ中断,默认是禁止的吧?还有,假如我要在c应用程序里使能和禁止IRQ中断,该怎么做?

出0入0汤圆

发表于 2014-10-16 17:10:29 | 显示全部楼层
初始化中不是禁止了所有中断吗?怎么还能进入外部中断?

出0入0汤圆

发表于 2014-10-16 17:50:01 | 显示全部楼层
看错了 ,在汇编中 有初始化。
对了,为什么不可以单步调试呢?一单步,程序就飞了

出0入0汤圆

发表于 2014-10-19 13:25:42 | 显示全部楼层
关于楼主最后提出的问题:2440是基于ARM9的,他的中断机制与一般的函数调用不一样(返回),所以在写中断服务程序的时候要加上关键字,让编译器特殊处理;楼主用的stm32应该是cortex-m系列的内核,cortex系列的处理器采用了新的中断模型,往往可以去掉“ __irq”关键字。具体可以看看《cortex-m3权威指南》。

出0入0汤圆

发表于 2014-10-19 14:10:06 | 显示全部楼层
谁有smdk6410的资料吗,,,,需要一份,谢谢咯

出0入0汤圆

发表于 2014-10-19 14:58:41 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2014-10-19 17:14:33 | 显示全部楼层
看起来很厉害。

出0入0汤圆

发表于 2014-10-19 18:58:00 | 显示全部楼层
学习了.........

出0入0汤圆

发表于 2014-10-19 20:15:24 | 显示全部楼层
过不了多久我也学习这个,现在还没有赶上这个节奏
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 09:30

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

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