首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

初学者求助关于PIT 中断的小问题

初学者求助关于PIT 中断的小问题

我使用PIT中断,控制M口输出点灯,单步调试的时候发现没有进入中断,我是初学者,刚刚接触freescale,用的XDP512,

希望有人能指点一下,再初学的路上点亮一盏灯,帮我过了这道坎,感激不尽。

我的代码:#include <hidef.h> /* common defines and macros */
#include <mc9s12xdp512.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xdp512"


void SetupPITimer (void)
{

/* time-out period = (PITMTLD0 + 1) * (PITLD0 + 1) / Fbus */
PITCFLMT = 0x81; /* PFLMT0=1 (reload MT0) */
PITFLT = 0x01; /* force reload of PIT channel 0 */
PITMUX = 0x00;
PITCE = 0x01;
PITINTE = 0x01; /* enable PIT channel 0 interrupt */
PITTF = 0x01; /* clear PIT interrupt */
PITMTLD0 = 0x02; /* MT0 load value (divides bus clock) */
PITLD0 = 0X0001; /* T0 load value (5 ms) */
PITCFLMT |= 0x80;
}

/********************************************************/

/*********************** main *********************************/

void main(void)
{
DDRM=0XFF;
PTM=0x00;


SetupPITimer();


EnableInterrupts;

for(;;)
{
}
}

/********************************************************/

/* interrupt handler for PIT 0 */
#pragma CODE_SEG __NEAR_SEG NON_BANKED

void interrupt 73 ISR_PIT0(void)
{
PITINTE &= 0xfe;
PITTF |= 0x01;
PTM=~PTM;
}

检查一下中断号73产生的中断地址是否正确。可以在MAP文件中查看。
海纳百川  有容乃大

我还是没有明白map中的PIT中断标志的地址问题,希望斑竹进一步指正一下,十分感谢。

工程文件传上来了。。。。

6N5qEVjc.rar (324.65 KB)

关于中断号的问题,我是在datasheet中查到的,就是中断向量表中的从零开始,把Reserved得都算在内,Periodic interrupt timer channel 0中断是第 73个

我还有一个疑问,这里的中断向量表中是这么写的Vector base + $7A $3D Periodic interrupt timer channel 0 I bit PITINTE (PINTE0),而中断标志位为PITTF,会不会两个指的不是同一个中断呢。不知道是不是这个原因呢。 有点困惑,实在是初学,真的是没招了,希望高手一定指点一下。万分感谢

我在论坛里说过很多次了,尽量不要用中断号的形式,因为这样容易出错。最好是在PRM文件中用中断地址的形式定义。可以在PRM文件的后面加上这样一句:

VECTOR ADDRESS 0xFF7A ISR_PIT0

[此贴子已经被作者于2009-6-29 14:58:49编辑过]

海纳百川  有容乃大
/* time-out period = (PITMTLD0 + 1) * (PITLD0 + 1) / Fbus */
小哥,算一下这个时间是多少?就算灯亮了灭了,你能看的到吗?  把这个值调个秒级的吧,中断进没进再另说
学习了..谢谢楼主
返回列表