6004|8

928

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

LM3s8962体验之八……异常与中断 [复制链接]

一、简介

异常:也就是意外突发事件,该请求来自外面,来自片上外设秒外扩的外设。

   可是说是异步的。

中断:是因内核活动产生的,如在执行命令和访问存储器时产生。应是同步。

Corter-M3的异常响应系统,支持众多的系统异常和外部中断。编号115的对应异常,》15的是外部中断。如下所示:

异常:

通过上表可以看出,编号46111214157个异常的优先级可调整。有3个系统异常:复位,NMI和硬fault是固定优化级。可能是负优化级的原因。

中断:

从图中可知编号靠前的中断指定到片上外设,其它编号分给外部中断引脚。

优化级的数值越小则越优化。

 

最新回复

可以写本书  详情 回复 发表于 2012-11-24 19:24
 
点赞 关注
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709

回复
举报

928

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

二、概念

1、优先级分组 PRIGROUP

CM3把优先级分高低两组:抢占优先级和子优化级。组优先级又称抢占优化级或主优先级。子优化级至少是1个位。允许所有位都是子优先级。如果优先级相同的多个异常悬起,则先响应编号最小的。

2、向量表

发生异常响应时,异常处理函数入口的一块连续内存。CM3要定位服务入口地址,所谓地址就存储在向量表中。

为支持动态分发中断,CM3允许向量重新定位起始地址。使用向量表偏移量寄存器VTOR改变。

3NVIC

又称向量中断控制器。NVIC的中断控制、状态寄存器只能在特权级下访问。

4、中断的使能与除能

1到对应SETENA的位中,使能一个中断。想除能一个中断,只要写1CLRENA位中。它们写0没用。

 

 

 

5、中断的悬起与解悬:

当发中断时被高优化级抢占,此时只能悬起。设置悬起寄存器STEPEND,解悬CLRPEND

 

 

 

 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

6、优先级:

 

7、优先级分段

8、活动状态

当执行了中断后,活动位就被置1.直到中断返回清零。

9、向量表偏移量

 

软中断,用于手动产生中断。使用软件触发中断寄存器STIR触发。系统异常NMIFAULTS,PENDSV等不用软触发。

10、中断控制及状态

 

 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

4
 

 

三、例程解析

1、实验目的

例用评估板上的硬件资源KEY LEFT 做为中断输入,并设置为下降沿触发方式中断。LED作为中断输出显示。每次中断触发,LED的状态改变一次。

   2、实验原理

      利用API函数做实验。使用SysCtlPeripheralEnable函数使能KEYLED所在的GPIO模块。通过GPIOPadConfigSetGPIODirModeSet函数配置KEYLED的模式。再利用IntMasterEnable使能总的中断。IntEnable函数打开KEY的中断。再通过GPIOIntTypeSet函数设置中断为下降沿类型。由GPIOPinIntEnable获取KEY的中断状态,再由GPIOPinIntClear清除中断状态。通过设置startup.s文件中的中断向量表设置中断入口。

DCD  GPIO_Port_E_ISR  ;GPIO Port E KEY的入口为GPIO_Port_E_ISR

再由GPIOPinWrite指示当前状态。

   3、仿真调试

本程序已在Keil uVision4中测试通过。启动仿真。打开

Peripherals----Core Peripherals----Nested Vectored Interrupt Controller 如下介面:

 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

5
 

上图所示:

1、中断向量表。中断编号、中断源、中断名、使能、悬起、活动状态和优先级。

2、中断控制及状态寄存器。

VECTACTIVE 当前活动的ISR编号。

PETTOBASE 中断返回基级 1

VECTPENDING 悬起的本次中断优先级最高的ISR编号。

ISRPPPEEMPT  1时,一个悬起的中断下一步进入活动状态

ISPPENDING  1时,当前正有外部中断被悬起

3 

   PRIGROUP  优先级分组

VECTRESET  复位M3内核,不影响内核以外的电路

SYSRESETPEQ  产生一次软复位

VECTCLRACTIVE 清除所有异常的活动状态信息

ENDIANESS 端设置,1为大端,0是小端。

4、向量表偏移量寄存器

   TBLOFF   向量表的起始地址

   TBLBASE 向量表是在CODE区,为1时,向量表在RAM区。

5、软件触发中断寄存器

  INTID  影响编号为INTID的外部中断,其悬起位被置位。

 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

6
 

4、部分程序 /* 调用库函数的头文件   */ #include "hw_memmap.h" #include "hw_ints.h" #include "hw_nvic.h" #include "hw_types.h" #include "interrupt.h" #include "sysctl.h" #include "gpio.h" #define LED GPIO_PIN_0 /* 定义LED的引脚PF0 */ #define KEY GPIO_PIN_2 /* 定义KEY的引脚PE2 */ /********************************************************************************************************* ** Function name: main ** ** Descriptions: 中断初始化 ** ** input parameters: NONE ** output parameters: NONE ** ** Returned value: NONE ** ** Created by: ** Created Date: **-------------------------------------------------------------------------------------------------------- ** Modified by: ** Modified date: **-------------------------------------------------------------------------------------------------------- *********************************************************************************************************/ int main (void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); /* 使能GPIOF模块 */ /* 设置PF0为2MA,推挽输出 */ GPIOPadConfigSet(GPIO_PORTF_BASE, LED, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); GPIODirModeSet(GPIO_PORTF_BASE, LED, GPIO_DIR_MODE_OUT); /* 配置LED为输出 */ /* 设置PE2为2MA,上拉输入 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); GPIOPadConfigSet(GPIO_PORTE_BASE, KEY, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); GPIODirModeSet(GPIO_PORTE_BASE, KEY, GPIO_DIR_MODE_IN); /* 配置KEY为输入 */ IntMasterEnable(); /* 使能总中断 */ IntEnable(INT_GPIOE); /* 使用GPIOE中断 */ GPIOIntTypeSet(GPIO_PORTE_BASE,KEY,GPIO_FALLING_EDGE); /* 下降沿触发中断 */ GPIOPinIntEnable(GPIO_PORTE_BASE, KEY); /* 使能KEY3中断 */ while (1) { ; /* 等待中断 */ } } /********************************************************************************************************* ** Function name: GPIO_Port_E_ISR ** ** Descriptions: 中断服务程序 ** ** input parameters: NONE ** output parameters: NONE ** ** Returned value: NONE ** ** Created by: ** Created Date: **-------------------------------------------------------------------------------------------------------- ** Modified by: ** Modified date: **-------------------------------------------------------------------------------------------------------- *********************************************************************************************************/ void GPIO_Port_E_ISR (void) { long IntStatus; IntStatus = GPIOPinIntStatus(GPIO_PORTE_BASE, true); /* 获取中断状态 */ GPIOPinIntClear(GPIO_PORTE_BASE, IntStatus); /* 清GPIO中断 */ if ( IntStatus & KEY ) { /* 判断按键是否按下 */ /* 使LED状态改变 */ GPIOPinWrite(GPIO_PORTF_BASE, LED, LED^GPIOPinRead(GPIO_PORTF_BASE,LED)); } } /********************************************************************************************************* END FILE

InterruptDome.rar (66.6 KB, 下载次数: 55)

[ 本帖最后由 sdjntl 于 2010-12-20 13:29 编辑 ]
 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

回复

1412

帖子

15

TA的资源

版主

7
 
支持一下,辛苦了。。。
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 
 

回复

1万

帖子

16

TA的资源

版主

8
 

学习了

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

9
 
可以写本书
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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