Chinaunix首页 | 论坛 | 博客
  • 博客访问: 614705
  • 博文数量: 120
  • 博客积分: 2284
  • 博客等级: 大尉
  • 技术积分: 1330
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-25 10:49
个人简介

http://guliqun1983.blog.163.com/blog/static/501116852011730535314/

文章分类
文章存档

2013年(23)

2012年(23)

2011年(74)

分类: 嵌入式

2012-08-15 17:16:12

中断控制器提供如下功能:
● 硬件中断的管理
─   所有I/O 引脚都具有外部中断能力,每一个端口都有独立的中断向量以及独立的标志。
─   外设中断能力
● 软件中断的管理(TRAP)
● 具有灵活的优先级和中断等级管理,支持可嵌套的或同级中断管理:
–  多达4个软件可编程的嵌套等级
–  最多有32个中断向量,其入口地址由硬件固定
–   2 不可屏蔽的事件: RESET, TRAP
–   1 个不可屏蔽的最高优先级的硬件中断 (TLI)
       基于如下资源的中断管理:
● 位I1 和I0 位于CPU的条件代码寄存器(CCR)
● 软件优先级寄存器 (ITC_SPRx)
● 复位向量地址0x00 8000 位于程序空间的起始部分。对于具有启动ROM的型号,ST公司把复位初始化程序固化在ROM区中。
● 固定的中断向量地址位于程序空间映像的高位地址段(0x00 8004 to 0x00 807C) ,其地址顺序即为硬件的优先顺序。

中断屏蔽和处理流程
       中断屏蔽是通过CC寄存器的位I1 和位I0 以及设置每个中断向量( 表13) 的软件优先级的ITC_SPRx来管理的。处理流程如图所示:
当一个中断请求必须被响应时:
1. 在当前正在执行指令结束之后,正常的操作被悬起;
2. PC,X,Y,A和CC寄存器被自动压栈;
3. 根据ITC_SPRx 寄存器中的值对应的中断服务向量,CC寄存器中的位I1 和I0 被相应设置;
4. 通过中断向量载入中断服务子程序的入口地址,接着对中断服务子程序的第一条指令取址( 参考表中断映射表  来了解向量地址的更详细情况)。
       中断服务子程序必须以IRET指令结束,该指令会把堆栈中的保存的寄存器内容出栈,同时由于运行IRET 指令,位I1 和位I0 被重新恢复,程序也恢复运行。

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

 

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

 

  处理等待(排队)的中断
     同一时间可以有几个中断排队等待处理。中断响应是根据如下两步来决定的:
1、最高软件优先级的中断被响应;
2、如果几个排队的中断具有相同的软件优先级,那么最高硬件优先级的中断先响应。
     当中断请求没有立即得到响应时,该中断请求被锁存;当其软件优先级及硬件优先级均为最高的时候,该中断被处理。
注意:

1、与软件优先级不同,每个中断的硬件优先级是唯一且互不相同的,这样就可保证一个时刻只有一个中断被唯一确定地处理。
2、RESET, TLI 和 TRAP 这个几个中断被认为是拥有最高的软件优先级来处理。
3、一个TLI中断可中断除TRAP 及RESET之外的3级中断。
    见图了解更加详细的排队等待处理的中断服务过程。 
 

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

中断源
STM8 中断控制器处理2种类型的中断源:
● 不可屏蔽的中断: RESET ,TLI  和 TRAP
● 可屏蔽中断:  外部中断或者内嵌的外设中断
不可屏蔽中断源
      不可屏蔽中断不会考虑CC寄存器的I1 和I0 的状态(参见图) 。仅仅当TRAP 中断发生时候将PC, X, Y, A 和 CC  寄存器的内容压栈。相应的向量载入到PC寄存器中同时置位I1 和I0 位禁止中断(3级优先级)。
● TRAP (不可屏蔽的软件中断)
当执行TRAP 指令时就响应软件中断。它响应过程如图所示的流程图。
TRAP 中断不能使处理器从停机(Halt) 模式下退出。
● RESET 复位
复位中断是STM8 的软件和硬件中断的最高优先级,这也就是说在复位程序的开始所有的中断被禁止。必须通过RIM 指令来使能它们(见表)。
复位中断可以使处理器从停机(Halt) 模式退出。
更详细的复位中断管理见复位章节。
● TLI最高等级的硬件中断
当在特定的 I/O 边沿检测到在相应的TLI输入时将产生硬件中断。
注意:    在TLI中断服务子程序中禁止使用TRAP 指令。

可屏蔽的中断源
       对于可屏蔽中断,如果相应的中断被使能,而且如果在ITC_SPRx 寄存器的中断优先级比当前正在执行的中断(根据CC寄存器的I1 和I0 位)的优先级高的话那么就可以被响应。如果上面2个条件中  的任何一个不满足那么该中断会被锁存并保持在等待状态。
● 外部中断
外部中断可以用来把MCU从停机(Halt) 模式唤醒。外部中断触发方式的选择可以通过软件写控制外部中断控制寄存器(EXTI_CRx) 来实现。
       当多个连接到同一个中断向量的外部引脚中断被同时选定时候,那么他们是‘逻辑或’的关系。
       当外部的电平触发中断被锁存后,如果该给定的电平一直保持到中断子程序结束,那么该电平信号将再次触发中断,除非在中断子程序中禁用该中断。
● 外设中断
大部分的外设中断会导致MCU从停机(Halt) 模式下唤醒。见表。
当对应外设状态寄存器的中断标志位被置位,同时相应的外设控制寄存器的使能位被置位时将产生一个外设中断。
清除一个外设中断的标准顺序是在对状态寄存器的访问后再对相关寄存器进行读或者写操作。
当一个清除过程被执行之后相应的悬起中断(一个将被执行的中断)会丢失。

中断和低功耗模式
       所有的中断都可以使处理器从待机模式(Wait) 退出。
      仅有外部中断和另外一些特定中断使才能使处理器从停机(Halt) 模式退出(请参考表16)。
       当MCU从挂起模式唤醒时候, 如果有多个排队中断存在,那么第一个被响应的中断一定具有从挂起模式退出的能力。该选择是通过如图18所示的判断过程实现的。如果最高优先级的待相应的中断不能把设备从挂起模式唤醒的话,那么它将在后续被响应。
       如果在执行HALT指令时,有一个内部或外部中断( 例如时钟中断)发生,HALT指令会继续执行完毕,但这个中断会立刻调用唤醒进程。
这种情况下MCU实际上是从停机(Halt) 模式被唤醒到运行模式,模式切换的延时为tWUH,详见数据手册。

活动等级/低功耗模式的控制
        MCU的活动等级的配置是通过编程CFG_GCR 寄存器的AL位来实现。( 见1.3全局配置寄存器(CFG_GCR) )。
        该位是用来控制MCU的低功耗模式。在超低功耗的应用中,MCU大部分时间是运行在WFI/Halt模式中,仅在为执行特别任务的时候被唤醒( 通过中断) 。一些重复的任务可以直接在一个ISR( 中断服务子程序) 执行完成而不需要返回到主程序。为了处理这样情况,用户可以在进入低功耗模式( 通过执行WFI/HALT指令) 之前置位AL位,之后中断子程序返回之后就直接回到低功耗模式。由于相关寄存器保存只是在第一次中断会进行所以减少了中断服务程序运行的时间。
        在一些非常简单的应用中所有的操作都可以只在ISR 中执行。对于一些更复杂的任务,中断子程序要判断是否要启动主程序,可以通过重设AL的简单方式来实现。
        例如:一个应用需要通过自动唤醒功能来每隔50ms唤醒一次来检测一些引脚/ 传感器/ 按键的状态。如果这些引脚大部分时间是不工作的,那么MCU可以直接回到低功耗模式而不需要运行主程序的。如果其中之一的引脚处于工作状态,那么ISR 将要进行相应判断,通过重设AL位来启动主程序。

同时的和嵌套的中断管理
STM8S提供2种中断管理模式:
● 同时发生模式
● 嵌套模式

 同时发生中断管理模式
       在该模式下,所有的中断的中断优先级都是3 级,因此它们都是不可以被中断的( 除了被TLI,RESET或TRAP 中断之外)。
       硬件的中断优先级按如下顺序排列,从低到高的优先级是:MAIN, IT4, IT3, IT2, IT1, IT0, TRAP/TLI( 同等优先级)以及RESET。
       图 所示是一个同时发生中断管理模式的例子

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

嵌套中断管理模式
       在该模式下,允许在中断子程序中响应中断。一旦一个中断的优先级被设置低于3 级时该模式就立即有效。
       硬件优先级从低到高按如下顺序给定,即MAIN, IT4,IT3,IT2,IT1,IT0 和TRAP 。
       通过设定ITC_SPRx 寄存器的相应的I1_x 和I0_x 位来配置每一个中断向量的软件优先级。I1_x 和I0_x 位具有和CC寄存器的I1 和I0 位相同的意思(见表)。
       不可以将中断优先级设为级别0(I1_x=1, I0_x=0),在这种情况下,该中断的优先级将保持为先前的值。例如:如果先前的值是CFh ,然后编程的值是64h ,那么结果是44h 。
       RESET 和 TRAP  向量是没有软件优先级的。当两者的任何一个被响应时,CC寄存器的位I1 和I0 两位都被置位。
注意:

       在中断被响应时如果位 I1  和 I0  被修改,那么设备将作如下处理:  如果一个中断 X 仍然处在悬起状态(新的中断或者中断标志没有被清除)同时该新的优先级又比先前的优先级高的话,那么该中断 X 会被重新响应。否则该中断的软件优先级在下一个中断请求( X中断的IRET之后)来之前保持不变。
      在中断子程序的执行过程中,执行 HALT, POP CC, RIM , SIM  和 WFI指令会改变当前的软件优先级直到下一条IRET 指令被执行或者先前提到的指令之一被执行。 。
图 所示嵌套中断管理的例子。 

 

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

1. ITC_SPRx  寄存器对应于TLI的位可以被读写,但是它们对中断处理的管理是没有作用的。

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

   外部中断
STM8S为外部中断事件专门分配了五个中断向量:
● Port A 口的5个引脚:PA[6:2]
● Port B 口的8个引脚:PB[7:0]
● Port C 口的8个引脚:PC[7:0]
● Port D 口的7个引脚:PD[6:0]
● Port E 口的8个引脚:PE[7:0]
PD7 是最高优先级的中断源 (TLI) 。
为了产生中断,相应的GPIO端口必须被配置为中断使能的输入口,详细内容请参考GPIO章节的
寄存器描述部分。
中断的触发方式由外部中断控制寄存器1(EXTI_CR1) 和外部中断控制寄存器2(EXTI_CR2) 所配置

 中断指令

 

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

 中断映射

STM8 中断控制器ITC - Wornyong - 智能物联,嵌入您我!

 

阅读(6640) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~