MC9S的中断编程主要有两种方式:
  1.使用符号“TRA_PROC” ,TRAP_PROC 提示编译器下面的函数是中断服务例程。编译器会用一个特殊的中断返回指令来结束这个函数(对大多数处理器来说,一般是RTI指令).
  2.使用“interrupt”关键字,“interrupt”关键字是一个非标准ANSI-C的关键字,因此,它不能被所有ANSI-C编译器厂商所支持。同样,对不同的编译器,“interrupt”关键字的用法可能会改变。“interrupt”关键字同样会提示编译器下面的函数是一个中断服务例程。
  一旦中断服务函数写好了,必须把中断服务例程和中断向量表联系起来,这通过初始化中断向量表来实现,可以通过下面两种方法来初始化中断向量表:
  1.在PRM文件中,使用“VECTOR ADDRESS”或“VECTOR”命令。连接器提供两个命令来初始化中断向量表:VECTOR ADDRESS 或 VECTOR,你使用VECTOR ADDRESS 命令中断服务例程的地址写到中断向量表里。
  2.使用“interrupt”关键字,在写中断服务例程的时候,可以在ANSI-C源文件里直接把中断服务例程和特殊的中断号联系起来。


下面是MC9SDG128B的16位自由定时器溢出中断处理程序,已调试通过:
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"int intcount = 0;
void timer_init(void)
{ TSCR2_PR0 = 1; //prescale factor is 128 TSCR2_PR1 = 1; TSCR2_PR2 = 1; TSCR2_TOI = 1; //overflow enable TFLG2_TOF = 1; TSCR1_TEN = 1; //timer enable
}#pragma CODE_SEG NON_BANKED
interrupt 16 void timer_interrupt_handle(void)
{ intcount++; TFLG2_TOF = 1; //clear interrupt flag
}
#pragma CODE_SEG DEFAULT void main(void)
{ EnableInterrupts; timer_init(); for(;;) {}
}

  以下是采用TRAP_PROC符号编写的中断服务程序:

#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
int intcount = 0;
void timer_init(void)
{ TSCR2_PR0 = 1; //prescale factor is 128 TSCR2_PR1 = 1; TSCR2_PR2 = 1; TSCR2_TOI = 1; //overflow enable TFLG2_TOF = 1; TSCR1_TEN = 1; //timer enable
}#pragma CODE_SEG NON_BANKED
#pragma TRAP_PROC
void timer_interrupt_handle(void)
{intcount++; TFLG2_TOF = 1;
};
#pragma CODE_SEG DEFAULTvoid main(void)
{ EnableInterrupts; timer_init(); for(;;) {}
}

  中断服务程序编写完后你需要在.prm文件里添加如下一句:

VECTOR 16 timer_interrupt_handle

  这样中断服务程序才和相应的中断号联系起来。

  中断服务例程必须被定位于non-banked 区域,通过使用“#pragma CODE_SEG NON_BANKED”可以把中断例程定位于non-banked 区域。同时你必须确保“sectionNON_BANKED”不能出现在.prm文件中。在中断服务例程的末尾你需要添加“#pragma CODE_SEG DEFAULT”,否则的话,后面的函数也会被定位在“non-banked”区域。
  所以说我们的中断服务例程必须被“#pragma CODE_SEG NON_BANKED”和“#pragma CODE_SEG DEFAULT”包围起来。

MC9S中断函数编写相关推荐

  1. 基于野火stm32指南者的中断函数编写过程总结

    本文编写了一个按键中断,当按键按下时触发中断GPIO灯翻转. 1.创建文档 创建一个exti文件并在下属目录中创建bsp_exti.h和bsp_exti.c的头文件并添加到工程中.用于存放于中断有关的 ...

  2. STM32是如何进入中断函数的

    中断相信很多人都知道是什么意思,不同的任务有不同的优先级,高任务优先级会比低优先级先执行.在嵌入式系统中, 任务的调度和切换都是根据优先级来判断的. 中断可以分为软中断和硬中断.一开始接触到的一般都是 ...

  3. c语言t0中断方式编程,PIC C语言编程_PICC中断函数的实现

    PICC可以实现C语言的中断服务程序.中断服务程序有一个特殊的定义方法: voidinterruptISR(void); 其中的函数名"ISR"可以改成任意合法的字母或数字组合,但 ...

  4. C51 基本函数、中断函数和库函数的详解

    函数的定义和调用 此外,C51编译器本身还提供了丰富的库函数,用户可以根据需要随时调用,从而大大提高编程效率. 1. 函数的定义 函数定义的一般形式为: 函数类型 函数名(形参列表) { 局部变量定义 ...

  5. 新唐单片机移植RT-Thread,Finsh组件的接口函数编写

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.RTT的移植 二.具体函数代码 1.rt_hw_console_output的编写 2.rt_hw_console ...

  6. 利用STM32的定时器中断功能编写线阵CCD(ILX554B)的驱动时序

    利用STM32的定时器中断功能编写线阵CCD(ILX554B)的驱动时序 1.利用定时器完成线阵CCDILX554B的驱动时序,采用两个管脚1个用于产生ROG信号,一个用于产生CLK信号 2.使用一个 ...

  7. STM32共用中断和共用中断函数的判断

    STM32外部中断查询: 15-10线的外部中断共用一个中断函数,怎么在该函数里查询是哪个中断线产生了中断呢? 使用 EXTI_GetITStatus()来查询哪根线产生了中断. 比如EXTI_Get ...

  8. [转载]函数编写规范

    一.可重入函数 1)什么是可重入性? 可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误.相 反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非 ...

  9. 关于中断处理程序中的关中断函数disable_irq和disable_irq_nosync

    2010年7月20日19:18:30 关于中断处理程序中的关中断函数disable_irq和disable_irq_nosync disable_irq关闭中断并等待中断处理完后返回, 而disabl ...

  10. UDF、UDAF、UDTF函数编写

    一.UDF函数编写 1.步骤 1.继承UDF类 2.重写evalute方法 1.继承GenericUDF 2.实现initialize.evaluate.getDisplayString方法 2.案例 ...

最新文章

  1. yii2-basic后台管理功能开发之四:图片上传FileInput
  2. Vue中生成二维码的一种方式—vue-qr
  3. 不会配置HTTPS?给我5分钟,手把手教你
  4. mysql 单表查询
  5. 装完金蝶电脑无限重启_金蝶财务软件快捷键大全,提高工作效率!
  6. Java方法重载解析
  7. 服务器版本虚拟打印机,虚拟打印机(ImagePrinter)
  8. layer 日期laydate年月日切换渲染
  9. 2022最新RTMP+HTTP直播地址汇总(亲测可用)
  10. C#中Panel控件和GroupBox控件(未完成)
  11. 81章 老子1章到_老子81章
  12. excel如何设置单元格的下拉选项框并着色
  13. ubuntu 安装idea,创建快捷方式
  14. 苹果快捷键怎么调出来_iPad常用快捷键
  15. PHP webshell、暴力破解
  16. React类式组件基础内容补充
  17. 复旦大学《数学分析》教学大纲,读后有感
  18. 专业术语-外文首字母组词的原词组
  19. 一眼“看穿破绽”,3D视觉成锂电池“智造”降本增效利器
  20. 2017面向对象程序设计(Java)第十一周学习总结

热门文章

  1. 行业研究方法与框架合集
  2. One-shot Face Reenactment(BMVC19)
  3. 2020-12-29
  4. java freemarker导出word时添加或勾选复选框
  5. 计算机网卡和交换机网卡以及交换机数据转发
  6. 用Python手撕一个批量填充数据到excel表格的工具,解放双手!
  7. java对象的哈希值_对象的哈希值
  8. 探索未来|一文看懂小米年度技术峰会 · 软件技术专场
  9. 【Uly】微软产品开发中的“战争与和平”
  10. 【Linux系统开发】Study210开发板刷安卓系统