请教李老师
我用的开发环境是SDT2.51,在程序中我用了一条乘法指令,rTCMPB0 = 300 + 100*pwmcnt0;我使用的mcu是44b0,请问它支持这种乘法指令吗?另外,如果我想看这条指令最后转化成哪些汇编语句,应该打开哪个文件看啊?我记得上回培训的时候,你曾经打开一种格式的文件,就可以看到生成的汇编语句代码。请问,这种文件格式是什么呢?
谢谢! 顺便再问一个困扰我多时的问题。
编写了一个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空间?
李老师,多有打扰,还请见谅,有空的话就解答一下喽.谢谢! *((volatile unsigned *)i)=0xEA000000+0x1FFE
i 是一个指向指针的指针吧! 谢谢回复!
i是一个地址,但是它将这些地址单元赋值为0xEA000000+0x1FFE 呢,这样赋值有什么意义呢? 呵呵! 这个要看下源码才知的啊! 你还是认真地去看下源码吧!
下面只是我的猜测:
可能 在0x0c000000--0x0c000020存放的是中断向量表; pISR_UNDEF、pISR_SWI 、pISR_PABORT 、pISR_DABORT的地址正好在0x0c7fff00-0x0c7fff1c.我也估计是将七种异常处理程序映射至ram空间,而0xEA000000+0x1FFE 可能是一种跳转指令,使程序跳转至0x0c7fff00~0x0c7fff1c处取中断处理程序入口地址。 这些在源码中应该有答案的啦! :-D to jackaly:
谢谢你的回复。
用内存反汇编指令可以看出,0xEA000000+0x1FFE 的确是一条跳转指令。
现在最严重的问题是响应不了中断,timer中断和外部中断都进不了,很郁闷哪。
我在0x18处放了跳转指令,使其跳转至中断服务程序啊
可能是什么问题呢?
谢谢。 有很多问题都会使中断响应不了的啊!
比如,中断寄存器没有高好, 中断屏蔽寄存器中相关的位没打开,等.
先不管你的中断服务例程如何, 首先看下中断状态寄存器是否有响应相关的中断!有响应就说明你的程序有问题, 无响应就可能寄存器没有设好了! 有道理,SDT单步调试时可以看相关寄存器。
INTCON,INTMOD寄存器我都已经设置好,不应该是那里的问题。
不过,还是试一试,看看是否已响应中断。
另问:哪种格式的文件可以看到汇编代码指令?好像有一种文件,可以看到每条二进制指令所对应的汇编指令。 解决了。
是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]