这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请教一下代码的问题,实在有点汗颜

共6条 1/1 1 跳转至

请教一下代码的问题,实在有点汗颜

助工
2008-04-27 16:55:05     打赏

如下是我给客户写的参考代码,可在运行程序时不能连续中断,除非复位后再执行,想请教一下各位大虾帮我指点一下。
void main(void)    
{ asm("FCLR I");   // Interrupt disable 
   prc0 = 1;    // Protect off .configure main clock
 cm13 = 1;    // X-in X-out
 cm15 = 1;    // XCIN-XCOUT drive capacity select bit : HIGH
 cm05 = 0;    // X-in on
 cm16 = 0;    // Main clock = No division mode
 cm17 = 0;
 cm06 = 0;    // CM16 and CM17 enable 
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 ocd2 = 0;    // Main clock change
 prc0 = 0;     //Protect on
 pd3_3=0;   //use for inputting as IRQ2(INT3 Interrupt input)
 tcc00=0;    //only when tcc00=0,can change tcc07,tcc06,tcc03,tcc04
 tcc07=0;
 tcc06=1;
 tcc03=0;
 tcc04=1;  //cc04 tcc03=01 ,falling can interrupt
 tcout3=1;
 ssisel=0;
 tcc10=1;
 tcc11=1;
 ilvl0_int3ic=1; //the highest interrupt level
 ilvl1_int3ic=1;
 ilvl2_int3ic=1;
 ir_int3ic=0;  //clear int3 interrupt
 asm("FSET I");    //Interrupt disable
 while(1)
 {; }
}        

void int3(void)     //interrupt program
{  unsigned int count=2;
  while(count>0)
 {
  count--;     //在此设置询问是想监视ir_int3ic位是否自动清0
  ir_int3ic=0;
  }
}
如下是sect30.inc文件的部分内容
.lword dummy_int  ; vector 25
 .glb    _int3   ; vector 26
 .lword _int3   
 .lword dummy_int  ; vector 27




关键词: 请教     一下     代码     问题     实在     有点     汗颜    

助工
2008-04-27 22:24:58     打赏
2楼

我用新建工程向导完成,除了没有选择使用标准的IO定义文件,
如下部分是有关堆栈和向量等方面的配置:
__STANDARD_IO__    .equ 0 ; STANDARD I/O flag definition
__HEAPSIZE__       .equ 050H ; HEEP SIZE definition
__STACKSIZE__      .equ 080H ; STACK SIZE definition
__ISTACKSIZE__     .equ 080H ; INTERRUPT STACK SIZE definition
__VECTOR_ADR__     .equ 0fedcH ; INTERRUPT VECTOR ADDRESS definition
__ROM_TOPADR__     .equ 0C000H ; ROM TOP ADDRESS definition
还有我发现,sect30.inc文件里面,如果要中断必须要做如下设置:

  .org  __VECTOR_ADR__
;.if 0                       这里要么屏蔽,要么改成   if 1 才能进入中断。
  .lword dummy_int  ; vector  0
  .lword dummy_int  ; vector  1
......
 .glb        _int3_inter;     ;vector 26
 .lword   _int3_inter;    
 .lowrd dummy_int;      ;vector  27


助工
2008-04-28 08:53:07     打赏
3楼
中断返回后就在while(1){}里面一直循环不再响应中断。我看过我所设置的寄存器,没有变化,因此就太奇怪了。

助工
2008-04-28 09:02:36     打赏
4楼
 .org  __VECTOR_ADR__
;.if 0                       这里要么屏蔽,要么改成   if 1 才能进入中断。
  .lword dummy_int  ; vector  0
  .lword dummy_int  ; vector  1
......
 .glb        _int3;     ;vector 26
 .lword   _int3;                                 这里已经指明了中断入口地址了呀
 .lowrd dummy_int;      ;vector  27

哎,用了这条语句后就好了。。

助工
2008-04-28 10:49:45     打赏
5楼

郁闷的不行,我用的是5。43。01的。
现在这里跟一个韩国人搞R8C的程序,搞的好痛苦。他不懂英文,只能说一点点汉语。


助工
2008-04-29 17:47:35     打赏
6楼
 
#pragma interrupt int3
在中断程序前面加了此语句后就好了。
可是瑞萨提供的R8C1B的DEMO程序里面没有如此的定义语句哦。。。

呜~~~~~

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]