5256|13

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

简单C程序进不了中断,请教高手 [复制链接]

在学习中断过程中,使用最简单的程序如下,我使用的是开发板,直接load进去的。请教高手,程序为什么进不了中断?先谢谢了!
#include \"lf2407.h\"


void  inline disable()
{
    asm(\"  setc INTM \";
}

void  inline enable()
{
    asm(\"  clrc INTM \";
}

void sysinit()
{
    asm(\"  clrc SXM \";
    asm(\"  clrc OVM \");
    asm(\"  clrc CNF \");
    *IMR=0x0002;
    *IFR=0x0ffff;
    *SCSR1=0x83fe;  
    *WDCR=0x0e8;
    WSGR=0x00;     
}

void evbinit()
{
    *EVAIFRA=0x0ffff;
    *EVAIFRB=0x0ffff;
    *EVAIFRC=0x0ffff;
    *EVAIMRA=0x0080;
    *EVAIMRB=*EVAIMRB & 0x0;
    *EVAIFRC=*EVAIFRC & 0x0;
  
    *MCRC=*MCRC & 0x0fffd;
    *PEDATDIR=*PEDATDIR | 0x0202;        
    *T1CNT=0x00;
    *T1PER=0x0177;
    *T1CON=0x160C;
   
}

void interrupt T1INT()
{
  int flag;
  flag=*EVAIFRA & 0x0080;
  
  if(flag!=0x0080)
  {  
  enable();
  return;
  }
  *PEDATDIR=*PEDATDIR & 0x0fffd;
  T1CNT=0x00;
  *EVAIFRA=*EVAIFRA & 0x0080;
  enable();
  return;
}

void interrupt nothing()
{
     enable();
     return;
}


main()
{   
     disable();
     sysinit();
     evbinit();
     enable();
     *T1CON = *T1CON | 0x0040;
      while(1)
        {        
        ;
        }     
}

最新回复

哈哈,终于调好了,可以进中断了!! 把CMD中断配置地址改下就好了,把地址8000改到0000就好了。  详情 回复 发表于 2007-12-30 08:31
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你的中断向量表是如何初始化的?
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
.ref                 _nothing,_T1INT
.ref                          _c_int0
.sect                 \".vectors\"

reset:                      B          _c_int0
int1:                B          _nothing       
int2:                       B           _T1INT
int3:                B          _nothing
int4:                B          _nothing
int5:                B            _nothing
int6:                B          _nothing
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
你看有什么问题吗?调试的时候程序总是跑飞了。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
你的堆栈空间给了多大?会不会是堆栈空间太小了?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
刚开始堆栈设置40,看你回帖后改成256,试过了也不行。在反汇编里面看到程序和原来一样,进入_abort:
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

7
 
你程序里有几个错误的地方:
*EVAIFRC=*EVAIFRC & 0x0;
应为*EVAIMRC=*EVAIMRC & 0x0;
*EVAIFRA=*EVAIFRA & 0x0080;
应为*EVAIFRA=*EVAIFRA | 0x0080;
还有,你的CMD文件是怎么分配的?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
试过了,也还不行。下面是CMD文件:

MEMORY
{
    PAGE 0 :   VECS   : origin =    0h , length =   040h   /* VECTORS */
                 PROG   : origin =  08000h , length = 08000h   /* PROGRAM */

    PAGE 1 :   MMRS   : origin =    0h , length =   060h   /* MMRS    */
               B2     : origin = 0060h , length =   020h   /* DARAM   */
               B0     : origin = 0200h , length =  0100h   /* DARAM   */
               B1     : origin = 0300h , length =  0100h   /* DARAM   */
               DATA   : origin = 8000h , length =  8000h   /* XDM     */
}

/*--------------------------------------------------------------------*/
/* SECTIONS ALLOCATION                                                */
/*--------------------------------------------------------------------*/
SECTIONS
{
    .vectors : { } > VECS      PAGE 0   /* Interrupt vector table     */            
    .text    : { } > PROG      PAGE 0   /* Code                       */
    .data    : { } > PROG      PAGE 0   /* Initialization data tables */
    .bss     : { } > DATA      PAGE 1   /* Block B2                   */
    .cinit   : { } > PROG      PAGE 0    /*Block B0                   */
    .stack   : { } > B1        PAGE 1   /* Block B1                   */
    .const   : { } > B2        PAGE 1   /* Block B2                   */
}
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

9
 
我也快没辙了,是不是你硬件有问题?
*PEDATDIR=*PEDATDIR & 0x0fffd;
是不是让一个指示灯亮?
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

10
 
是啊,我是用示波器看IOPE1的波形啊!不管怎么样都得谢谢你这么热心的帮我查找问题!
我看资料好像与中断向量起始地址有关,不知道是不是,我不是很懂?
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

11
 
你可以把.bss分配到200H或者800H,我很少
看到分配到8000H以后的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(中级)

12
 
好,我试试。前面我用这个CMD文件调试成功了SVPWM程序。应当没有什么问题,最多就是影响程序的运行速度吧?
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

13
 

同意

我也在调试这个程序,<LF2407x C语言应用开发>这本书太差了,我这个中断也进不了,前面都正常,跑到while就死循环了,好象定时器1根本就没开一样。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

14
 
哈哈,终于调好了,可以进中断了!!
把CMD中断配置地址改下就好了,把地址8000改到0000就好了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表