标题: [求助]奇怪,为啥中断都不好使??? [打印本页]
作者: fan7973 时间: 2006-10-10 11:19 标题: [求助]奇怪,为啥中断都不好使???
我的mc9s12dp256b进不了中断,软件仿真时正常,下载到片子里后就不好使了,很多中断,例如定时器溢出、实时溢出、输入捕获等等,都进不去
会是哪里出了问题呢???各位有遇到这种类似情况吗?请帮帮忙,多谢啊~~~
作者: planety 时间: 2006-10-10 19:57
要在工程的project.prm文件中添加VECTOR信息,如在该文件末尾添加
VECTOR ADDRESS 中断向量地址 中断函数名
应该就可以了。建议看看软件自带的帮助pdf.
作者: fan7973 时间: 2006-10-10 20:08
中断向量已经加了,而且在软件仿真中是好使的,不是这里的问题
[此贴子已经被作者于2006-10-10 20:08:07编辑过]
作者: dreamcatcher 时间: 2006-10-11 09:38
用到的变量是不是在ram区呢?
我曾经遇到这个问题,最后发现自己把变量地址放在eeprom里了
作者: strongchen 时间: 2006-10-11 10:03
只是中断不正常,其他功能正确吗?
作者: fan7973 时间: 2006-10-11 15:09
TO:strongchen老大
恩,其他功能正常
TO:dreamcatcher
默认的变量地址是在哪里啊?我没有设置过,应该在哪里设置呢???
作者: strongchen 时间: 2006-10-11 15:52
定时器时钟选择的问题?
作者: fan7973 时间: 2006-10-12 16:11
TO strongchen:应该不是,有个定时器溢出中断的程序我还给你发过,你说在你的板子上能跑起来,那时我以为只有这个中断不行,后来又编了几个其他中断的程序,发现下载后没有进去中断。所以我现在觉得是硬件的原因,但不知道什么原因会使中断不好使~~~~~
作者: strongchen 时间: 2006-10-12 16:44
把你的project发给我看看吧。
作者: dreamcatcher 时间: 2006-10-13 09:33
我不知道你是用什么调试工具?
默认的是0000h-03ffh 是寄存器
0000h-1fffh 是ram
0000h-07fffh 是eeprom
由于优先级问题,eeprom被覆盖
ram实际区域是0400h-1fffh
不过,如果用监控程序的话,可能映射到
0000-03ffh 是寄存器
2000h-3fffh 是ram
0800-fffh 是eepeom
作者: strongchen 时间: 2006-10-13 09:38
我就是用USBMULTILINKBDM和DP256的EVB板。
作者: fan7973 时间: 2006-10-13 16:33
TO strongchen:老大,把你的邮箱再告诉我一遍,我给你发过去~~~
作者: fan7973 时间: 2006-10-13 16:36
TO dreamcatcher:感谢!!!我好好看看~~~~~
不过为了应付答辩,我只好先用查询方式做了,郁闷~~~~
作者: strongchen 时间: 2006-10-13 17:25
strongchen_free@yahoo.com.cn
作者: fan7973 时间: 2006-10-16 10:39
这两天论坛怎么上不去?
作者: strongchen 时间: 2006-10-16 10:44
好像有时候连不上,有时又好了。
作者: fan7973 时间: 2006-10-17 09:09
老大,我的Projet在你那里怎么样?能正常运行吗???中断好使吗?
作者: strongchen 时间: 2006-10-17 09:33
你发给我之后要发个帖子说一声,我不是一直去看那个信箱的。我试试看,然后再告诉你结果。
作者: fan7973 时间: 2006-10-17 13:32
这样啊~~~明白了,呵呵
:D
作者: strongchen 时间: 2006-10-17 13:42
我看过了你的程序。主要问题是对TOF清零应该是对TFLG2_TOF写1,而不是写0;另外,对TCNT的写操作是无效的。我把改过的程序下载到DP256的EVB上,可以看到程序可以正确运行,LED在闪烁。由于电路板的原因,我将LED口改为了PORTB_BIT0。下面是我修改过的程序:
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void Int_TimerOverFlow(void){
TFLG2_TOF = 1; //clear timer overflow flag
time_count++;
if (time_count>2) {time_count=0;flag=~flag;}
}
#pragma CODE_SEG DEFAULT
void PORT_Init(void){
DDRB=0x01;
PORTB_BIT0=0; //µÆÁÁ
}
void ECT_Init(void)
{
COPCTL_CR=0;//¹Ø±Õ¿´ÃŹ·.COP(×ÔÓÉÔËÐп´ÃŹ·¶¨Ê±Æ÷)¿ØÖƼĴæÆ÷
TSCR1_TEN=0; //Í£Ö¹¶¨Ê±Æ÷
// TSCR2_TCRE=1;//¶¨Ê±Æ÷¸´Î»
TSCR2_PR = 4; //prescale factor is 16, bus clock/128=8Mhz/8
TSCR2_TOI = 1; //timer overflow interrupt enable
//TCNT = 0x0040;
TSCR1_TEN = 1; //timer enable
}
void main(void) {
PORT_Init();
ECT_Init();
EnableInterrupts;
while(1){
if(flag==0){
DDRB=0x01;
PORTB_BIT0=0;//µÆÁÁ
}
else{
DDRB=0x01;
PORTB_BIT0=1;//µÆÃð
}
}
}
作者: fan7973 时间: 2006-10-23 11:40
还是不行,我上传了我下载程序后调试窗口的截图,显示表明:下载程序并运行程序之后,汇编代码窗口中,总是从程序开始段(C01E),突然跑到起始处(0000),而且Data1窗口中的变量以及寄存器也没有了,一片空白,这是什么原因呢???
这个界面的程序不是我给您传的Project中的程序,不过截图的现象都是一样的。
只有采用了中断的程序是这个情况,不用中断时正常(软件仿真时所有程序都正常)。
运行前:
[upload=image/pjpeg]uploadImages/运行前.jpg[/upload]
运行后:
[upload=image/pjpeg]uploadImages/运行后.jpg[/upload]
[此贴子已经被作者于2006-10-23 11:34:22编辑过]
[此贴子已经被作者于2006-10-23 11:40:27编辑过]
作者: strongchen 时间: 2006-10-24 10:24
检查一下外部中断的引脚。也可以写一个外部中断的中断服务程序,看看程序是否跳入了外部中断。
作者: fan7973 时间: 2006-10-25 09:09
回斑竹,测过了,没有进入中断
现在只要有中断程序,下载运行后就都是一个现象(就是我贴图中的现象)
软件仿真中都好用。
会不会是硬件的毛病???
作者: strongchen 时间: 2006-10-25 09:32
你只有一块板子吗?有没有把我的程序下载到你的板子上试过?
作者: fan7973 时间: 2006-10-25 13:56
恩,只做了一块板子,我下载的就是斑竹您给我修改的程序。
多谢您了,我再好好查查原因吧
已经卡在这里很长时间了......
另外,斑竹,DP256中,MSCAN发送CAN消息的命令是在哪个寄存器中???
我看过Freescale的例子,是不是缓冲区一满就自动发送???
作者: fan7973 时间: 2006-10-27 09:18
DP256中,MSCAN发送CAN消息的命令是在哪个寄存器中???
我看过Freescale的例子,是不是缓冲区一满就自动发送???
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |