打印

dsp执行RET指令后程序指针跳转到空白段

[复制链接]
2968|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
淡然如水|  楼主 | 2012-2-24 20:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了个控制GPIO的代码,就是控制灯闪烁,可是调用子程序后就回不来了,PC指针跳到空白段去了,PC指针的当前值显示为0,各位大虾帮忙看看,小弟感激不尽,我用的是5509的片子
             .title  "gpio.asm"
             .mmregs   
             .def  CodeStart
.stack    .usect  ".stack",100h
IODIR    .set  3400h                ;IODIR的地址为0x3400
IODATA .set  3401h                ;IODATA的地址为0x3401
   
            .text
CodeStart:

             MOV    #0ffh,port(#IODIR)        ;将gpio配置为输出
LOOP0:  MOV    #000h,port(#IODATA)    ;gpio输出全0,灯亮
             CALL   DELAY1                         ;延时
             MOV    #0FFh,port(#IODATA)    ;gpio输出全1,灯灭
             CALL   DELAY1                         ;延时
             B        LOOP0                           ;跳转到LOOP0
DELAY1:
             MOV    #999,AR0                     
             MOV    #499,AR1
LOOP1:  BANZ   LOOP1,*AR1-                 ;如果AR1不等于0,跳转到LOOP1
LOOP2:  BANZ   LOOP2,*AR0-                 ;如果AR0不等于0,跳转到LOOP2
             RET                                         ;执行完这条后就跳转到空白段了
             .end

相关帖子

沙发
五谷道场| | 2012-2-25 12:32 | 只看该作者
看这段程序,好像没问题啊,是不是还有其他的配置没有配,导致程序跑飞了呢

使用特权

评论回复
板凳
淡然如水|  楼主 | 2012-2-26 09:27 | 只看该作者
这是.cmd文件里的,不知道有没有问题
MEMORY
{
    PAGE 0:

        MMR        : origin = 0000000h, length = 00000c0h
        SPRAM     : origin = 00000c0h, length = 0000040h
        VECS       : origin = 0000100h, length = 0000100h
        DARAM0  : origin = 0000200h, length = 0003E00h
        DARAM1  : origin = 0004000h, length = 0004000h
        DARAM2  : origin = 0008000h, length = 0004000h
        DARAM3  : origin = 000c000h, length = 0004000h

        SARAM0  : origin = 0010000h, length = 0004000h
        SARAM1  : origin = 0014000h, length = 0005000h
        SARAM2  : origin = 0019000h, length = 0003000h
        SARAM3  : origin = 001c000h, length = 0004000h
        SARAM4  : origin = 0020000h, length = 0004000h
        SARAM5  : origin = 0024000h, length = 0004000h
        SARAM6  : origin = 0028000h, length = 0004000h
        SARAM7  : origin = 002c000h, length = 0004000h
        SARAM8  : origin = 0030000h, length = 0004000h
        SARAM9  : origin = 0034000h, length = 0004000h
        SARAM10 : origin = 0038000h, length = 0004000h
        SARAM11 : origin = 003c000h, length = 0004000h
        SARAM12 : origin = 0040000h, length = 0004000h
        SARAM13 : origin = 0044000h, length = 0004000h
        SARAM14 : origin = 0048000h, length = 0004000h
        SARAM15 : origin = 004c000h, length = 0004000h

        CE0     : origin = 0050000h, length = 03b0000h
        CE1     : origin = 0400000h, length = 0400000h
        CE2     : origin = 0800000h, length = 0400000h
        CE3     : origin = 0c00000h, length = 03f8000h

        PDROM   : origin = 0ff8000h, length = 07f00h
   /*   VECS    : origin = 0ffff00h, length = 00100h */ /* reset vector */
}      


SECTIONS
{
        vectors  : {} > VECS   PAGE 0         /* interrupt vector table */
        .cinit      : {} > SARAM0 PAGE 0
        .text      : {} > SARAM1 PAGE 0
        isrs        : {} > SARAM2 PAGE 0

        .stack       : {} > DARAM0 PAGE 0
        .sysstack  : {} > DARAM0 PAGE 0
        .sysmem   : {} > DARAM1 PAGE 0
        .data        : {} > DARAM1 PAGE 0
        .bss          : {} > DARAM1 PAGE 0
        .const       : {} > DARAM1 PAGE 0

        .cio     : {} > DARAM1 PAGE 0
        .csldata:  {} > DARAM0 PAGE 0
  

}

使用特权

评论回复
地板
淡然如水|  楼主 | 2012-2-27 12:56 | 只看该作者
检查说是CMD文件的问题,越界了,不知道怎么改

使用特权

评论回复
5
淡然如水|  楼主 | 2012-7-7 16:18 | 只看该作者
找到问题了,开始处吧堆栈设置好就行了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

28

帖子

1

粉丝