在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2679|回复: 0

[讨论] 自定义ARM9的处理器架构的第一步,去除软核的中断和各种模式

[复制链接]
发表于 2012-5-31 11:17:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
最近很想约做嵌入式软件的朋友为兼容arm9的软核处理器写一些很炫的应用。可是该朋友只对基于cortex-m3的STM32熟悉,对于ARM9不是很了解。在交谈的过程中忽然想到,有没有可能指令集用ARM9的,但中断处理完全按照cortex-m3。大家都知道Cortex-M3在中断处理上做了很大的创新,它通过压栈的方式保存寄存器,而ARM9是通过banked register来保存部分寄存器。使用banked register可以节省压栈的时间,但缺点在于banked register会让处理器内核占用面积较大。两相结合起来,就是一套新的处理器架构。欢迎众多设计者参与这个新处理器架构的讨论过程。

  话说这种掐头去尾、张冠李戴的结合方式要拜马克思所赐。我们让政治课都学过“辩证唯物主义”。最开始,唯物主义有,不过那是机械的;辩证也有,不过那是辩证唯心主义。马克思两相取其长处,这就成了我们学到的“辩证唯物主义”。ARM推行了很久的ARM9处理器架构,又针对最新的软件设计流程,搞了很不错的cortex-m3的中断方式,不过这一套方式没有用在流行很久的ARM9的处理器架构上。现在,我们在有了兼容ARM9的软核处理器后,完全可以这个非常棒的中断处理移植到这个软核处理器上面了。

  可能很多人担心,这样做会不会影响到使用ARM的生态系统。这个完全不用担心,做嵌入式软件的朋友说了,他在某处放一个中断handler,只要你硬件按照这种方式做,软件按照这种方式搞,编译器只会按照你编写的软件为你服务,绝对不会怀疑你搞张冠李戴,就拒绝罢工。唯一一个不同的是不能使用keil自带的debug工具仿真调试了——因为这种架构keil根本就无从得知。他这样说,让我增加这样修改的信心了。也就是是说只要软件支持,硬件也支持,那么编译器就只是达成两方面合作的工具而已。这让我们自定义处理器架构成为可能。

  很多人需要一个又小又灵活的软核处理器。最近发布的两个软核处理器已经比较精简了,但囿于ARM公司规定的固有架构,还是不够精简,阅读有困难。下一步,我会去掉它固有的各种模式以及各种中断,精简成更小的软核。那么我们在使用时,只要我们不使用这种模式和中断,那他就能很好的为我们服务。如果大家需要中断,如果是简单的中断,可以是51式的,就给出一个handler,软件来保存寄存器;也可以是高效复杂的cortex-m3式的,硬件来保存寄存器。这样,丰俭由人,让硬件设计工程师和软件工程师达到完美的配合。

  在做之前,要确保keil支持。因此,根据http://code.google.com/p/risclite里面的hello工程,修改了启动的startup.s这个汇编启动程序。在这个程序里面,对MCU做了初始化,为各个模式的堆栈设置有效指针。但如果我们去掉了中断和模式,那么在startup.s中,就没有必要设置每个模式的堆栈了,原因很简单,既然都没有模式了,也就不用初始化了。

  下面是我修改的新的startup.s文件。很短,只有寥寥数行。这个startup.s的目的很简单,如果我们修改后,只支持一种模式,那么它就必须很快的把系统引导到main函数上去,让我们编写的c程序迅速发挥效果。



  1.                 AREA    STACK, NOINIT, READWRITE, ALIGN=3

  2. Stack_Mem       SPACE   0x400
  3. __initial_sp    SPACE   0x000

  4. Stack_Top

  5.                 EXPORT __initial_sp

  6.                 AREA    RESET, CODE, READONLY
  7.                 ARM

  8.                 LDR     SP, =Stack_Top
  9. ; Enter the C code

  10.                 IMPORT  __main
  11.                 LDR     R0, =__main
  12.                 BX      R0

  13.                 END


复制代码
这段代码的主要意思是定义堆栈的大小,为sp设置堆栈指针,然后跳转到main函数中。

  现在软件已经支持,下面我会精简软核处理器,把这些模式和中断去掉,让它直接支持Keil编写的代码。请大家拭目以待,看看这个更加精简的软核处理器的表现效果吧。看看它和8051编程相比,会有更好的优点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 20:30 , Processed in 0.024303 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表