查看: 5257|回复: 8

[其他] 中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数

[复制链接]
  • TA的每日心情
    开心
    2018-10-26 08:41
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    149

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    385
    最后登录
    2019-3-13
    发表于 2014-5-8 14:14:14 | 显示全部楼层 |阅读模式
    中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数 
    IVBR已经指定为0xEF,
    以下是我的程序,问题进不了这个中断啊?大神指导下为什么呢?
    #pragma MESSAGE DISABLE C12004
    #pragma CODE_SEG __NEAR_SEG NON_BANKED    
    interrupt VectorNumber_Vrti void  OSTimerISR(void)
    //interrupt void ISR_Rti(void)
    {    
        CRGFLG = OSB7;   
        OSTimer();
    }
    #pragma MESSAGE DISABLE C12004
    #pragma CODE_SEG DEFAULT
    我知道答案 目前已有8人回答
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
    发表于 2014-5-12 15:50:16 | 显示全部楼层

    回复:中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数

     中断向量定义地方需要修改
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
    发表于 2014-5-12 15:58:51 | 显示全部楼层

    回复:中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数

    头文件是这样
    /**************** interrupt vector numbers ****************/
    #define VectorNumber_VReserved63        63
    #define VectorNumber_VReserved62        62
    #define VectorNumber_VReserved61        61
    #define VectorNumber_VReserved60        60


    /**************** interrupt vector table ****************/
    #define VReserved63                     0x0000FF80
    #define VReserved62                     0x0000FF82
    #define VReserved61                     0x0000FF84
     
    自己定义
    #pragma CODE_SEG __NEAR_SEG NON_BANKED 
    __interrupt void software_trap64 (void) {for(;;);}
    __interrupt void software_trap63 (void) {for(;;);}
    __interrupt void software_trap62 (void) {for(;;);}
    .
    .
    .
    typedef void (*near tIsrFunc)(void);
    const tIsrFunc _vect[] @0xFF80 = {     /* Interrupt table                           */
            software_trap63,               /* 63 RESERVED                               */
            software_trap62,               /* 62 RESERVED                               */
            software_trap61,               /* 61 RESERVED                               */
            software_trap60,               /* 60 RESERVED                               */
            software_trap59,               /* 59 RESERVED                               */
            software_trap58,               /* 58 RESERVED                               */
            ISR_Rti,               /* 57 PWM Emergency Shutdown   
    例如把ISR_Rti放到57号中断如上



     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-10-26 08:41
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    149

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    385
    最后登录
    2019-3-13
     楼主| 发表于 2014-5-12 20:17:28 | 显示全部楼层

    RE:中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数

    楼上,我知道你说的这种方法,
    我是想用原来那种调用中断向量号来写中断函数,
    interrupt VectorNumber_Vrti void  OSTimerISR(void)
    不知楼上明白我的意思了吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
    发表于 2014-5-13 08:46:11 | 显示全部楼层

    回复:中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数

    回复第 4 楼 于2014-05-12 20:17:28发表:
    楼上,我知道你说的这种方法,
    我是想用原来那种调用中断向量号来写中断函数,
    interrupt VectorNumber_Vrti void  OSTimerISR(void)
    不知楼上明白我的意思了吗?
    按照3 修改完全你可以用 中断向量号 写中断啊,ucos官网有个例程中断就是这么搞得
    关键你用什么方法吧 中断向量地址改到0xEF10~0xEFFF
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-10-26 08:41
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    149

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    385
    最后登录
    2019-3-13
     楼主| 发表于 2014-5-13 09:20:38 | 显示全部楼层

    RE:中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数

    “IVBR已经指定为0xEF,”,就是把中断向量基址寄存器写0xEF的方式把中断向量地址改到0xEF10~0xEFFF
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    802

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1763
    最后登录
    1970-1-1
    发表于 2014-5-13 11:28:48 | 显示全部楼层

    RE:中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数

    你可以再去看看中断的资料, 定点设置
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
    发表于 2014-5-13 14:24:35 | 显示全部楼层

    回复:中断向量地址改到0xEF10~0xEFFF时,如何通过中断向量号来编写中断函数

    prm文件 末尾要修改下,不知道修改了没。
    我写的程序把 VECTOR 0 _Startup 删除了可以使用,
    也有资料显示需要增加你的中断向量号 
    VECTOR 中断向量号  中断函数名称
     
    回复第 6 楼 于2014-05-13 09:20:38发表:
    “IVBR已经指定为0xEF,”,就是把中断向量基址寄存器写0xEF的方式把中断向量地址改到0xEF10~0xEFFF
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    16

    帖子

    0

    注册会员

    Rank: 2

    积分
    77
    最后登录
    2018-1-14
    发表于 2017-12-6 18:29:34 | 显示全部楼层
    楼主,我现在使用的是MC9S12XET256芯片,现在遇到了IVBR寄存器的使用和中断向量表地址修改的问题,但程序始终无法进入中断,并且在S19文件里也看到中断向量表地址没有变化。更据网上的资料,我在我的程序中进行了如下变化:
    //main.c中加入的代码
    #pragma CODE_SEG __NEAR_SEG NON_BANKED
    // 声明外部中断函数
    //extern void  Timer0_C0(void);
    extern void  PIT0(void);  
    extern void  _Startup(void); //Startup routine */

    #pragma CODE_SEG NON_BANKED
    /* Interrupt section for this module. Placement will be in NON_BANKED area. */
    __interrupt void UnimplementedISR(void)  //定义在NON_BANKED区
    {
       asm BGND; //空的中断函数
    }
    typedef void (*near tIsrFunc)(void); //定义了函数指针类型

    const tIsrFunc _vect[] @0xEF00 =
    {   
        UnimplementedISR,                 /* vector 119 */
        UnimplementedISR,                 /* vector 118 */
                .
                .
                .
        UnimplementedISR,                 /* vector 67 */
        PIT0,                         /* vector 66 ,PIT0中断*/
        UnimplementedISR,                 /* vector 65 */
                .
                .
                .
           _Startup                           /* Reset vector */
    };

    #pragma CODE_SEG DEFAULT

    然后在main函数里对IVBR寄存机进行了赋值
    IVBR=0xEF;

    接下来是中断处理函数
    #pragma CODE_SEG NON_BANKED
    #pragma TRAP_PROC
    void PIT0(){
    PITTF_PTF0=1;//清除定时器0的中断标志位
    timeflag++;
    if(timeflag==100){
        timeflag=0;
        PORTB=~PORTB;//每过1s灯翻转一次
    }
    }

    最后再prm文件里中断向量表的设置里加了点东西:
    VECTOR 66 PIT0
    VECTOR 0 _Startup /* reset vector: this is the default entry point for a C/C++ application. */

    有哪些错误?希望能得到您的指点,我的QQ:377473944
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 21:32 , Processed in 0.213929 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表