QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2222|回复: 10

请教李老师

[复制链接]
发表于 2005-7-10 20:14:27 | 显示全部楼层 |阅读模式
我用的开发环境是SDT2.51,在程序中我用了一条乘法指令,rTCMPB0 = 300 + 100*pwmcnt0;我使用的mcu是44b0,请问它支持这种乘法指令吗?另外,如果我想看这条指令最后转化成哪些汇编语句,应该打开哪个文件看啊?

我记得上回培训的时候,你曾经打开一种格式的文件,就可以看到生成的汇编语句代码。请问,这种文件格式是什么呢?

谢谢!
 楼主| 发表于 2005-7-10 21:34:14 | 显示全部楼层
顺便再问一个困扰我多时的问题。

编写了一个Timer0的中断测试程序,可是程序根本就不进行中断处理,实在觉得很纳闷。INTCON,INTMOD都设置了,定时器对应的中断也打开了,可就是进不了中断,郁闷!
   
   另外,我看44b0测试代码里有以下一段和中断相关的代码,没看明白

void Isr_Init(void)
{
    U32 i;
   
    pISR_UNDEF=(unsigned)HaltUndef;
    pISR_SWI  =(unsigned)HaltSwi;
    pISR_PABORT=(unsigned)HaltPabort;
    pISR_DABORT=(unsigned)HaltDabort;
   
     for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)
    {
    *((volatile unsigned *)i)=0xEA000000+0x1FFE;//这一段一直没弄明白!!!
    }

    //rINTCON=0x1;      // Vectored Int. IRQ enable,FIQ disable   
    rINTCON=0x5;      // Non-vectored,IRQ enable,FIQ disable   

    rINTMOD=0x0;      // All=IRQ mode
    rINTMSK|=BIT_GLOBAL|BIT_EINT3;      // All interrupt is masked.
}

在option.h文件中,将_RAM_STARTADDRESS定义为0x0c000000,不明白为什么要将0x0c000000`0x0c000020之间的字单元赋值为0xEA000000+0x1FFE,有什么含义呢?是不是将七种异常中断搬到ram空间?

李老师,多有打扰,还请见谅,有空的话就解答一下喽.谢谢!
回复

使用道具 举报

发表于 2005-7-11 09:44:29 | 显示全部楼层
*((volatile unsigned *)i)=0xEA000000+0x1FFE

i 是一个指向指针的指针吧!
回复

使用道具 举报

 楼主| 发表于 2005-7-11 11:25:06 | 显示全部楼层
谢谢回复!
i是一个地址,但是它将这些地址单元赋值为0xEA000000+0x1FFE 呢,这样赋值有什么意义呢?
回复

使用道具 举报

发表于 2005-7-11 11:54:18 | 显示全部楼层
呵呵! 这个要看下源码才知的啊! 你还是认真地去看下源码吧!

下面只是我的猜测:

可能 在0x0c000000--0x0c000020存放的是中断向量表;
回复

使用道具 举报

 楼主| 发表于 2005-7-11 12:23:48 | 显示全部楼层
pISR_UNDEF、pISR_SWI 、pISR_PABORT 、pISR_DABORT的地址正好在0x0c7fff00-0x0c7fff1c.我也估计是将七种异常处理程序映射至ram空间,而0xEA000000+0x1FFE 可能是一种跳转指令,使程序跳转至0x0c7fff00~0x0c7fff1c处取中断处理程序入口地址。
回复

使用道具 举报

发表于 2005-7-11 15:01:27 | 显示全部楼层
这些在源码中应该有答案的啦!
回复

使用道具 举报

 楼主| 发表于 2005-7-11 15:23:27 | 显示全部楼层
to jackaly:

谢谢你的回复。
用内存反汇编指令可以看出,0xEA000000+0x1FFE 的确是一条跳转指令。

现在最严重的问题是响应不了中断,timer中断和外部中断都进不了,很郁闷哪。

我在0x18处放了跳转指令,使其跳转至中断服务程序啊

可能是什么问题呢?

谢谢。
回复

使用道具 举报

发表于 2005-7-11 16:57:06 | 显示全部楼层
有很多问题都会使中断响应不了的啊!
比如,中断寄存器没有高好, 中断屏蔽寄存器中相关的位没打开,等.
先不管你的中断服务例程如何, 首先看下中断状态寄存器是否有响应相关的中断!有响应就说明你的程序有问题, 无响应就可能寄存器没有设好了!
回复

使用道具 举报

 楼主| 发表于 2005-7-11 17:57:39 | 显示全部楼层
有道理,SDT单步调试时可以看相关寄存器。
INTCON,INTMOD寄存器我都已经设置好,不应该是那里的问题。
不过,还是试一试,看看是否已响应中断。

另问:哪种格式的文件可以看到汇编代码指令?好像有一种文件,可以看到每条二进制指令所对应的汇编指令。
回复

使用道具 举报

 楼主| 发表于 2005-7-11 21:09:33 | 显示全部楼层
解决了。
是Isr_Init()这段程序的问题,它和我的链接器设置冲突。

顺便问一下:
void Isr_Init(void)
{
    U32 i;
   
    pISR_UNDEF=(unsigned)HaltUndef;
    pISR_SWI  =(unsigned)HaltSwi;
    pISR_PABORT=(unsigned)HaltPabort;
    pISR_DABORT=(unsigned)HaltDabort;
   
     for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)
    {
    *((volatile unsigned *)i)=0xEA000000+0x1FFE;//这一段一直没弄明白!!!
    }

    //rINTCON=0x1;      // Vectored Int. IRQ enable,FIQ disable   
    rINTCON=0x5;      // Non-vectored,IRQ enable,FIQ disable   

    rINTMOD=0x0;      // All=IRQ mode
    rINTMSK|=BIT_GLOBAL|BIT_EINT3;      // All interrupt is masked.
}

在option.h文件中,将_RAM_STARTADDRESS定义为0x0c000000,不明白为什么要将0x0c000000`0x0c000020之间的字单元赋值为0xEA000000+0x1FFE,有什么含义呢?是不是将七种异常中断搬到ram空间??它是不是用于矢量中断啊?

这里要特别感谢jackaly的耐心回答,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-22 00:49 , Processed in 0.042492 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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