查看: 6521|回复: 5

如何在HC08/HCS08 C语言中写中断

[复制链接]

该用户从未签到

8

主题

39

帖子

0

注册会员

Rank: 2

积分
121
最后登录
1970-1-1
发表于 2008-12-19 08:55:31 | 显示全部楼层 |阅读模式
1.手册上给出了使用中断号写中断服务程序的方法。中断号可以在header文件中找到。如下面的代码:IRQ中断的中断号为”2”。
注意:中断服务程序既不能有参数也不能有返回值。如果在中断中改变变量的值,这个变量应定义为”volatile”。
 
#define VectorNumber_Virq               2

void interrupt VectorNumber_Virq ISR_myIRQ (void) {
  IRQSC_IRQIE = 0;   /* Disable IRQ Interrupt */
  IRQSC_IRQACK = 1;  /* IRQ ACK */
  IRQFlag = 1;
}
 
2.还看到一种写中断向量的方法,不用中断号。
void interrupt isr_TIMOV(void)
{
  TSC;
  TSC_TOF=0;  /* clear interupt flag */
  freecnt++;
}
void interrupt UNASSIGNED_ISR(void){
}
void (* const _vect[])() @0xFFDE = {   // Interrupt vector table
        UNASSIGNED_ISR,                /* Int.no.  0 INT_ADC (at FFDE)               Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  1 INT_KBI (at FFE0)               Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  2 Reserved2 (at FFE2)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  3 Reserved3 (at FFE4)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  4 Reserved4 (at FFE6)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  5 Reserved5 (at FFE8)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  6 Reserved6 (at FFEA)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  7 Reserved7 (at FFEC)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  8 Reserved8 (at FFEE)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  9 Reserved9 (at FFF0)             Unassigned */
        isr_TIMOV,                     /* Int.no. 10 INT_TIMOvr (at FFF2)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 11 INT_TIMCH1 (at FFF4)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 12 INT_TIMCH0 (at FFF6)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 13 Reserved13 (at FFF8)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 14 INT_IRQ (at FFFA)               Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 15 INT_SWI (at FFFC)               Unassigned */
        /* Int.no. 16 INT_RESET (at FFFE)             Reset vector */
};
回复

使用道具 举报

该用户从未签到

0

主题

10

帖子

0

新手上路

Rank: 1

积分
33
最后登录
1970-1-1
发表于 2008-12-19 18:31:25 | 显示全部楼层

RE:如何在HC08/HCS08 C语言中写中断

如果使用codewarrior C语言编写的话,还可以使用第三种方法:
1,在右侧项目管理器Files->Includes->MC9S08xxx.H文件中找到对应的中断向量, 如VectorNumber_Virq
2,在右侧项目管理器Files-&gtroject Settings->Linker Files-&gtroject.prm文件的最后面,写入对应中断向量和中断子程序名,如VECTOR VectorNumber_Virq  ISR_myIRQ /* IRQ vector: IRQ interrupt subroutine entry */
在主程序中如下:
void interrupt ISR_myIRQ (void) {
  IRQSC_IRQIE = 0;   /* Disable IRQ Interrupt */
  IRQSC_IRQACK = 1;  /* IRQ ACK */
  IRQFlag = 1;
}

该用户从未签到

0

主题

41

帖子

0

注册会员

Rank: 2

积分
118
最后登录
2020-7-9
发表于 2013-10-18 15:41:10 | 显示全部楼层

回复:如何在HC08/HCS08 C语言中写中断

void (* const _vect[])() @0xFFDE = {   // Interrupt vector table
        UNASSIGNED_ISR,                /* Int.no.  0 INT_ADC (at FFDE)               Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  1 INT_KBI (at FFE0)               Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  2 Reserved2 (at FFE2)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  3 Reserved3 (at FFE4)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  4 Reserved4 (at FFE6)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  5 Reserved5 (at FFE8)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  6 Reserved6 (at FFEA)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  7 Reserved7 (at FFEC)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  8 Reserved8 (at FFEE)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  9 Reserved9 (at FFF0)             Unassigned */
        isr_TIMOV,                     /* Int.no. 10 INT_TIMOvr (at FFF2)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 11 INT_TIMCH1 (at FFF4)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 12 INT_TIMCH0 (at FFF6)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 13 Reserved13 (at FFF8)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 14 INT_IRQ (at FFFA)               Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 15 INT_SWI (at FFFC)               Unassigned */
        /* Int.no. 16 INT_RESET (at FFFE)             Reset vector */
};

@0xFFDE  请注意 比如同一型号 flash 有16K  32K ,这数是不同的
https://www.eefocus.com/images/bbs/smilies/004.gif
https://www.eefocus.com/images/bbs/smilies/004.gif
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

41

帖子

0

注册会员

Rank: 2

积分
118
最后登录
2020-7-9
发表于 2013-10-18 15:42:47 | 显示全部楼层

回复:如何在HC08/HCS08 C语言中写中断

@0xFFDE 请注意 比如同一型号 flash 有16K 32K ,这数是不同的 https://www.eefocus.com/images/bbs/smilies/004.gif
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

41

帖子

0

注册会员

Rank: 2

积分
118
最后登录
2020-7-9
发表于 2013-10-18 15:47:02 | 显示全部楼层

回复:如何在HC08/HCS08 C语言中写中断

请注意 比如同一型号 flash 有16K 32K ,
isr_TIMOV, /* Int.no. 10 INT_TIMOvr (at FFF2) Unassigned */
中断的顺序 也不同(编写位置也不同)https://www.eefocus.com/images/bbs/smilies/009.gif
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

41

帖子

0

注册会员

Rank: 2

积分
118
最后登录
2020-7-9
发表于 2013-10-18 15:48:01 | 显示全部楼层

回复:如何在HC08/HCS08 C语言中写中断

https://www.eefocus.com/images/bbs/smilies/004.gif
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-21 17:12 , Processed in 0.159910 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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