Board logo

标题: 帮同学发帖问: 关于DP256 RTI中断的,谢谢! [打印本页]

作者: jasontf    时间: 2010-5-21 16:30     标题: 帮同学发帖问: 关于DP256 RTI中断的,谢谢!

本帖最后由 jasontf 于 2010-5-22 11:30 编辑

#include <hidef.h>      /* common defines and macros */
#include <mc9s12dp256.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"

void delay(unsigned long int m)
{
  while(m--);
}

void InitRTI(void)
{
    CRGINT_RTIE = 1;    //使能实时中断,当CRGFLG_RITF=1时,产生中断
    RTICTL = 0x74;   
  //中断周期=1/16 x 10E-6 x (4+1)x 2E(7+9)=0.02s=20ms
}


void main()
{
  while(1)
{


/* 全局中断开 */
InitRTI();

EnableInterrupts;

delay(25000000);
                                                                                       
}
}

#pragma CODE_SEG NON_BANKED   //  下面代码放在NON_BANKED区
         
interrupt 7 void RTI_ISR(void)
{
  
  CRGFLG_RTIF=1;    //写1清除中断标志位
}



他用的是dp256的板子,在codewarrior 4.6 里面写的,用BDM烧代码进板子然后对外接的FLASH存储器写数据的,然后想自身RTI 实时中断周期写数据的。这里就单单挖出其中RTI的代码来请教,现在手头没有设备,所以没有办法试。 然后发问2个问题:

1.这样写的代码可以进入RTI中断么?(prm里头的文件也没有修改过的)
2.如果可以RTI中断,代码中的delay(25000000); 的用意是想程序可能每1秒多(加上RTI自身的20ms)进入一次中断,然后对外设flash写数据,代码这样写对么?

谢谢各位!祝天天好心情
作者: strongchen    时间: 2010-5-25 10:31

这样应该是可以产生中断的。但RTI中断的周期是固定的,和主程序中的delay延时并不能相加。
作者: jasontf    时间: 2010-5-25 10:43

这样应该是可以产生中断的。但RTI中断的周期是固定的,和主程序中的delay延时并不能相加。
strongchen 发表于 2010-5-25 10:31
谢谢斑竹,现在不用RTI了,外接了一个PCF 8583的 RTC时钟芯片,上电后中断引脚int就自动产生1HZ的方波,然后我想用DP256捕捉这个1S中断,是不是应该这样的顺序写呢?

main()
{
Disableinterrupts;
。。。省略
InitIIC();
InitPCF85853();// 初始化,中断引脚产生一个1HZ的方波

INTCR_IRQE = 1;          //IRQ 下降沿触发
INTCR_IRQEN = 1;           //IRQ 使能

ENableinterrupts;

省略。。
for(;;){}
}
#pragma CODE_SEG NON_BANKED   //  下面代码放在NON_BANKED区
         

   void interrupt 6  IRQ_INT(void)
{
省略。。。
}

INTCR的IRQE 和IRQEN是应该先后顺序写还是同时写INTCR |= 0XC0 呢?

谢谢斑竹
作者: strongchen    时间: 2010-5-26 09:50

IRQE在正常模式下只能写入一次,而IRQEN可以多次写入。所以只要先对IRQE操作即可。但最好还是采用IRQCR = 0xC0这种方式,不要用位操作或逻辑运算。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0