首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | 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;
}

而且下载的时候在command window中有以下的警告,说有俩个文件不纯在,不知道是不是问题所在。昨天版主指导说中断地址的问题,不晓得map文件在什么地方。希望能进一步的指正,小弟拜谢。

IO registers loaded for MC9S12XDT256 from C:\Program Files\Freescale\CW for HC12 V4.5\prog\REG\MCU03F0.REG
Reset command file does not exist.
Postload command file does not exist.
STARTED
RUNNING
Startup command file does not exist.
Target Ready

in>

我把工程文件打包上来,希望高手或者版主能不吝指导。再次拜谢。

你如果用WIZARD引导来创建一个PROJECT,应该就不会有这个问题了。
海纳百川  有容乃大
用错了很多东西啊,中断标志位是写1清0的,中断号也错了,寄存器赋值顺序估计也会出问题,我今天下午刚配置的程序,给你参考下:
//===========================================
// 设置PIT函数
//总线时钟为40MHZ,定时器溢出频率f =  (9+1)*(99+1)/ 40M = 40Khz
//===========================================
void Set_PIT(void)
{
  PITCE = 0X01;   // PIT0通道使能
  PITMUX = 0X00;  // 所有都接micro time base 0
  PITINTE = 0X01; // PIT0通道中断使能
  
  PITMTLD0 = 9;    //
  PITLD0 = 9;
  
  PITCFLMT |= 0X80;     // 使能PIT
}

// ===========================
// PIT中断程序
// ===========================
#pragma CODE_SEG NON_BANKED     // 中断程序需写在非分页区
void interrupt 66 PIT_INT(void)
{

  PITTF_PTF0 = 1;     // 清零PIT0中断标志
  // 其余代码
  }
看错了,最主要的是中断号给用错了。。。
返回列表