帮同学发帖问: 关于DP256 RTI中断的,谢谢!
- UID
- 809660
|
帮同学发帖问: 关于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写数据,代码这样写对么?
谢谢各位!祝天天好心情 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
这样应该是可以产生中断的。但RTI中断的周期是固定的,和主程序中的delay延时并不能相加。 |
|
|
|
|
|
- UID
- 809660
|
这样应该是可以产生中断的。但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 呢?
谢谢斑竹 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
IRQE在正常模式下只能写入一次,而IRQEN可以多次写入。所以只要先对IRQE操作即可。但最好还是采用IRQCR = 0xC0这种方式,不要用位操作或逻辑运算。 |
|
|
|
|
|