珊瑚虫 发表于 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空间?

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

jackaly 发表于 2005-7-11 09:44:29

*((volatile unsigned *)i)=0xEA000000+0x1FFE

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

珊瑚虫 发表于 2005-7-11 11:25:06

谢谢回复!
i是一个地址,但是它将这些地址单元赋值为0xEA000000+0x1FFE 呢,这样赋值有什么意义呢?

jackaly 发表于 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处取中断处理程序入口地址。

jackaly 发表于 2005-7-11 15:01:27

这些在源码中应该有答案的啦! :-D

珊瑚虫 发表于 2005-7-11 15:23:27

to jackaly:

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

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

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

可能是什么问题呢?

谢谢。

jackaly 发表于 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的耐心回答,谢谢
页: [1]
查看完整版本: 请教李老师