中断向量表配置

合集下载

中断向量号(Interruptvectornumber)

中断向量号(Interruptvectornumber)

中断向量号(Interrupt vector number)/ * * * * * * * * * * * * * * * * interrupt vector numbers * * * * * * * * * * * * * * * * /# defines vectornumber _ VSI 119u / spurious interrupt# defines vectornumber _ vsyscall 118u / system call interrupt (sys)# defines vectornumber _ vreserved118 117u# defines vectornumber _ vreserved117 116u# defines vectornumber _ vreserved116 115u# defines vectornumber _ vreserved115 114u# defines vectornumber _ vreserved114 113u# defines vectornumber _ vreserved113 112u# defines vectornumber _ vreserved112 111u# defines vectornumber _ vreserved111 110u# defines vectornumber _ vreserved110 109u# defines vectornumber _ vreserved109 108u# defines vectornumber _ vreserved108 107u# defines vectornumber _ vreserved106 105u# defines vectornumber _ vreserved105 104u# defines vectornumber _ vreserved104 103u# defines vectornumber _ vreserved103 102u# defines vectornumber _ vreserved102 101u# defines vectornumber _ vreserved101 100u# defines vectornumber _ vreserved100 99u# defines vectornumber _ vreserved99 98u# defines vectornumber _ vreserved98 97u# defines vectornumber _ vatd0compare 96u / ATD compare interrupt# defines vectornumber _ vreserved96 95u# defines vectornumber _ vreserved95 94u# defines vectornumber _ vreserved94 93u# defines vectornumber _ vreserved93 92U# defines vectornumber _ vreserved91 90u # defines vectornumber _ vreserved90 89u # defines vectornumber _ vreserved89 88u # defines vectornumber _ vreserved88 87u # defines vectornumber _ vreserved87 86u # defines vectornumber _ vreserved86 85u # defines vectornumber _ vreserved85 84u # defines vectornumber _ vreserved84 83u # defines vectornumber _ vreserved83 82u # defines vectornumber _ vreserved82 81u # defines vectornumber _ vreserved81 80u # defines vectornumber _ vreserved79 79u # defines vectornumber _ vreserved78 78u # defines vectornumber _ vreserved77 77u # defines vectornumber _ vreserved76 76u# defines vectornumber _ vreserved75 75u# defines vectornumber _ vreserved74 74U# defines vectornumber _ vreserved73 73u# defines vectornumber _ vreserved72 72u# defines vectornumber _ vreserved71 71u# defines vectornumber _ vreserved70 70u# defines vectornumber _ vpit3 69u / periodic interrupt timer 3 (pit3)#定义vectornumber_vpit2 68u /定时器周期中断2(pit2)#定义vectornumber_vpit1 67u /定时器周期中断1(PIT1)#定义vectornumber_vpit0 66u /定时器周期中断0(pit0)#定义vectornumber_vhti 65u /高温中断(HTI)#定义vectornumber_vapi 64u /自治周期中断(API)#定义vectornumber_vlvi 63u /低压中断(LVI)#定义vectornumber_vreserved62 62u#定义vectornumber_vreserved61 61u#定义vectornumber_vreserved60 60u#定义vectornumber_vreserved59 59u#定义vectornumber_vreserved58 58u#定义vectornumber_vpwmesdn 57u / PWM急救关机(pwmesdn)#定义vectornumber_vportp 56u /端口P#定义vectornumber_vreserved55 55u#定义vectornumber_vreserved54 54u#定义vectornumber_vreserved53 53u#定义vectornumber_vreserved52 52u#定义vectornumber_vreserved51 51u#定义vectornumber_vreserved50 50u#定义vectornumber_vreserved49 49u#定义vectornumber_vreserved48 48u#定义vectornumber_vreserved47 47u#定义vectornumber_vreserved46 46u#定义vectornumber_vreserved45 45u#定义vectornumber_vreserved44 44u#定义vectornumber_vreserved43 43u#定义vectornumber_vreserved42 42u#定义vectornumber_vreserved41 41u#定义vectornumber_vreserved40 40u#定义vectornumber_vcan0tx 39u /发送中断#定义vectornumber_vcan0rx 38u /接收中断#定义vectornumber_vcan0err 37u /错误中断#定义vectornumber_vcan0wkup 36u /唤醒中断#定义vectornumber_vflash 35u /命令操作完成fcnfg(CCIE)#定义vectornumber_vflashfd 34u /命令操作检测到闪存故障检测#定义vectornumber_vreserved33 33u#定义vectornumber_vreserved32 32u#定义vectornumber_vreserved31 31u#定义vectornumber_vreserved30 30u#定义vectornumber_vcrgscm 29u /单片机中断CRG自时钟模式#定义vectornumber_vcrgplllck 28 U / /锁中断CRG PLL锁#定义vectornumber_vreserved27 27u#定义vectornumber_vreserved26 26u#定义vectornumber_vporth 25u/h /端口#定义vectornumber_vportj 24u /端口J#定义vectornumber_vreserved23 23u#定义vectornumber_vatd0 22u / ATD序列完全中断atd0ctl2(美国信息交换标准代码)#定义vectornumber_vsci1 21u /串行通信接口sci1cr2(领带,TCIE、反应离子刻蚀、伊利耶)#定义vectornumber_vsci0 20u / / / /串行通信接口sci0cr2(领带,TCIE、反应离子刻蚀、伊利耶)#定义vectornumber_vspi0 19u /串行外设接口spi0cr1(SPIE,sptie)#定义vectornumber_vtimpaie 18u /脉冲累加器输入中断#定义vectornumber_vtimpaaovf 17u /脉冲累加器的溢出中断#定义vectornumber_vtimovf 16u /定时器溢出中断#定义vectornumber_vtimch7 15u#定义vectornumber_vtimch6 14u#定义vectornumber_vtimch5 13u#定义vectornumber_vtimch4 12u#定义vectornumber_vtimch3 11u#定义vectornumber_vtimch2 10u#定义vectornumber_vtimch1 9u#定义vectornumber_vtimch0 8u /通道[7:0]中断#定义vectornumber_vrti 7u /实时中断(RTI)#定义vectornumber_virq 6u / IRQ#定义vectornumber_vxirq 5u / XIRQ#定义vectornumber_vswi 4U/ /游泳#定义vectornumber_vtrap每天3 /执行指令陷阱#定义vectornumber_vcop 2、看门狗复位/警察#定义vectornumber_vclkmon 1U / /时钟监控器复位#定义vectornumber_vreset 0u /复位/ ****************中断向量表**************** / # VSI 0xff10u定义#定义vsyscall 0xff12u#定义vreserved118 0xff14u#定义vreserved117 0xff16u#定义vreserved116 0xff18u#定义vreserved115 0xff1au#定义vreserved114 0xff1cu#定义vreserved113 0xff1eu#定义vreserved112 0xff20u#定义vreserved111 0xff22u#定义vreserved110 0xff24u#定义vreserved109 0xff26u#定义vreserved108 0xff28u#定义vreserved107 0xff2au #定义vreserved106 0xff2cu #定义vreserved105 0xff2eu #定义vreserved104 0xff30u #定义vreserved103 0xff32u #定义vreserved102 0xff34u #定义vreserved101 0xff36u #定义vreserved100 0xff38u #定义vreserved99 0xff3au #定义vreserved98 0xff3cu #定义vatd0compare 0xff3eu #定义vreserved96 0xff40u #定义vreserved95 0xff42u #定义vreserved94 0xff44u #定义vreserved93 0xff46u #定义vreserved92 0xff48u#定义vreserved91 0xff4au #定义vreserved90 0xff4cu #定义vreserved89 0xff4eu #定义vreserved88 0xff50u #定义vreserved87 0xff52u #定义vreserved86 0xff54u #定义vreserved85 0xff56u #定义vreserved84 0xff58u #定义vreserved83 0xff5au #定义vreserved82 0xff5cu #定义vreserved81 0xff5eu #定义vreserved79 0xff60u #定义vreserved78 0xff62u #定义vreserved77 0xff64u #定义vreserved76 0xff66u#定义vreserved75 0xff68u #定义vreserved74 0xff6au #定义vreserved73 0xff6cu #定义vreserved72 0xff6eu #定义vreserved71 0xff70u #定义vreserved70 0xff72u #定义vpit3 0xff74u#定义vpit2 0xff76u#定义vpit1 0xff78u#定义vpit0 0xff7au#定义vhti 0xff7cu# VAPI 0xff7eu定义#定义vlvi 0xff80u#定义vreserved62 0xff82u #定义vreserved61 0xff84u #定义vreserved60 0xff86u#定义vreserved59 0xff88u #定义vreserved58 0xff8au #定义vpwmesdn 0xff8cu#定义vportp 0xff8eu#定义vreserved55 0xff90u #定义vreserved54 0xff92u #定义vreserved53 0xff94u #定义vreserved52 0xff96u #定义vreserved51 0xff98u #定义vreserved50 0xff9au #定义vreserved49 0xff9cu #定义vreserved48 0xff9eu #定义vreserved47 0xffa0u #定义vreserved46 0xffa2u #定义vreserved45 0xffa4u#定义vreserved44 0xffa6u #定义vreserved43 0xffa8u #定义vreserved42 0xffaau #定义vreserved41 0xffacu #定义vreserved40 0xffaeu #定义vcan0tx 0xffb0u#定义vcan0rx 0xffb2u#定义vcan0err 0xffb4u#定义vcan0wkup 0xffb6u #定义vflash 0xffb8u#定义vflashfd 0xffbau#定义vreserved33 0xffbcu #定义vreserved32 0xffbeu #定义vreserved31 0xffc0u #定义vreserved30 0xffc2u #定义vcrgscm 0xffc4u#定义vcrgplllck 0xffc6u #定义vreserved27 0xffc8u #定义vreserved26 0xffcau #定义vporth 0xffccu#定义vportj 0xffceu#定义vreserved23 0xffd0u #定义vatd0 0xffd2u#定义vsci1 0xffd4u#定义vsci0 0xffd6u#定义vspi0 0xffd8u#定义vtimpaie 0xffdau#定义vtimpaaovf 0xffdcu #定义vtimovf 0xffdeu#定义vtimch7 0xffe0u#定义vtimch6 0xffe2u#定义vtimch5 0xffe4u #定义vtimch4 0xffe6u #定义vtimch3 0xffe8u #定义vtimch2 0xffeau #定义vtimch1 0xffecu #定义vtimch0 0xffeeu #定义vrti 0xfff0u#定义virq 0xfff2u#定义vxirq 0xfff4u #定义计算0xfff6u#定义vtrap 0xfff8u #定义0xfffau共同体#定义vclkmon 0xfffcu # VRESET 0xfffeu定义各个中断解释:PWMESDN:PWM模块只有一个中断是在急救关机时产生的,如果相应的使能位(pwmie)设置。

京微齐力M7 中断应用详解

京微齐力M7 中断应用详解
} /* Go to infinite loop when Memory Manage exception occurs */ while (1) { } }
void BusFault_Handler(void) {
if (CoreDebug->DHCSR & 1) { // check C_DEBUGEN == 1-> Debugger Connected __breakpoint (0); // halt program execution here
M7 中断应用详解
目录 1. M7 中断简介............................................................................................................................................................................ 2 2 相关文件的说明....................................................................................................................................................................... 2
if (CoreDebug->DHCSR & 1) { // check C_DEBUGEN == 1-> Debugger Connected __breakpoint (0); // halt program execution here
} /* Go to infinite loop when Hard Fault exception occurs */ while (1) { } }

TMS320F2812A的中断机制

TMS320F2812A的中断机制

生中断嵌套,即暂停正在执行的中断服务程序,首先响应优先级高的中断,优先 级高的中断服务程序执行完毕之后,再继续执行优先级低的中断服务程序。但是 在 PIE12 组中断源中,同一组内部的中断不可嵌套,例如正在执行 TIMER0 中 断服务程序时,即使有优先级更高的 ADC 中断触发信号,也不会响应 ADC 中 断,只有当 TIMER0 中断服务程序执行完毕之后才会响应。 四、中断向量表的映射
32 位的地址中,高地址的高 10 位被忽略。 下表列出了可用的中断向量以及它们的存储位置,同时也指出了每一个硬件
中断的优先级。
表 1 CPU 中断向量和优先级
向量
绝对地址
VMAP=0
VMAP=1
硬件 优先级
说明
RESET
00 0000
3F FFC0
1(最高)
复位
INT1
00 0002
3F FFC2
USER5
00 0030
3F FFF0
用户定义软中断
USER6
00 0032
3F FFF2
用户定义软中断
USER7
00 0034
3F FFF4
用户定义软中断
USER8
00 0036
3F FFF6
用户定义软中断
USER9
00 0038
3F FFF8
用户定义软中断
USER10
00 003A
3F FFFA
INT13
00 001A
3F FFDA
17
可屏蔽中断 13
INT14
00 001C
3F FFDC
18
可屏蔽中断 14
DLOGIN+
00 001E

单片机的延时与中断问题及解决方法9篇

单片机的延时与中断问题及解决方法9篇

单片机的延时与中断问题及解决方法9篇第1篇示例:单片机的延时与中断问题及解决方法在单片机的开发中,延时和中断是两个非常重要的问题。

延时是指在程序中需要暂停一段时间执行某些操作,而中断是指程序执行到一定的条件时需要立即转到另一个程序或者执行一些指定的操作。

这两个问题的处理直接影响到单片机的性能和稳定性。

延时问题是指在单片机程序中需要暂停一段时间执行某些操作。

延时的实现方法有很多种,一般情况下可以通过循环计数、定时器计数等方式来实现。

在单片机的开发中,延时的准确性和稳定性是非常重要的,不合适的延时会导致程序执行不稳定,或者无法达到所需的效果。

在单片机中,延时的实现方法有多种,常见的有软件延时、硬件延时和定时器延时。

软件延时是通过循环计数来实现的,这种方法简单易用,但是延时时间不够精确,而且延时期间单片机无法执行其他任务。

硬件延时是通过外部电路或器件来实现的,这种方法延时准确性比较高,但是需要外部器件的支持,且往往比较复杂。

定时器延时是利用单片机内部的定时器来实现的,这种方法不仅延时准确性高,而且可以同时执行其他任务,是一种比较理想的延时方法。

对于中断问题,中断是指程序执行到一定条件时需要立即转到另一个程序或者执行一些指定的操作。

中断可以分为外部中断和定时器中断,外部中断是指外部硬件信号引起的中断,而定时器中断是指定时器计数到达一定值引起的中断。

处理中断问题需要注意中断优先级的设置和中断服务程序的编写。

中断优先级的设置是指在多个中断同时发生时,系统根据一定的规则来确定哪个中断优先级更高,应先处理。

中断服务程序的编写是指在中断发生时,系统要执行哪些操作。

合理的中断处理可以提高单片机的性能和稳定性。

单片机中断的实现方式有多种,常见的有软件中断和硬件中断。

软件中断是通过程序来实现的,这种中断的响应速度较慢,适合处理一些不需要立即执行的任务。

硬件中断是通过外部硬件信号来触发的,这种中断的响应速度很快,适合处理一些需要立即执行的任务。

单片机指令编程的常见错误与解决方法

单片机指令编程的常见错误与解决方法

单片机指令编程的常见错误与解决方法在单片机指令编程过程中,往往会遇到各种问题和错误。

这些问题可能导致程序无法正常运行或者出现意料之外的结果。

本文将介绍一些常见的错误,以及相应的解决方法,帮助程序员更好地进行单片机指令编程。

一、编码错误编码错误是指在编写指令时出现的错误,包括语法错误和逻辑错误。

语法错误是最基本的错误,常见的有拼写错误、缺少分号等。

逻辑错误则是指程序的逻辑不正确,导致程序无法按照预期的方式执行。

解决方法:1. 仔细检查代码,查找并修复语法错误。

2. 使用调试工具,逐步执行代码,观察程序的执行过程,找出逻辑错误的根源。

3. 采用模块化编程方法,将程序划分为多个相对独立的模块,降低程序的复杂性,便于调试和维护。

二、寄存器配置错误单片机中的寄存器是非常重要的,它们用来存储程序的运行状态和数据。

配置寄存器时,如果设置不正确,可能导致程序无法正常运行。

解决方法:1. 仔细查阅单片机的手册或者数据手册,确保对寄存器的配置有充分的了解。

2. 逐个检查寄存器的配置,确保每个寄存器的值都正确设置。

3. 使用调试工具,观察寄存器的状态,排除配置错误的可能性。

三、时钟设置错误单片机的时钟是程序运行的基础,对于某些需要实时操作的程序尤为重要。

时钟设置错误可能导致程序时序不正确,无法正常执行。

解决方法:1. 确保时钟源的选择正确,并选择合适的分频系数。

2. 配置好时钟控制寄存器,确保时钟的频率满足程序运行的要求。

3. 使用专业的时钟分析工具,对时钟信号进行分析和调试,确保时钟信号的准确性和稳定性。

四、中断处理错误中断是单片机的重要功能,可以实现对外部事件的响应。

如果中断处理错误,可能导致程序的执行流程混乱,无法正常处理中断事件。

解决方法:1. 确保中断向量表的设置正确,每个中断向量都与对应的中断服务程序相对应。

2. 配置中断控制器,使能或禁止某些中断,确保中断的优先级设置正确。

3. 定期检查中断服务程序的正确性,确保程序在中断发生时能够正确响应。

单片机定时器计数器使用方法

单片机定时器计数器使用方法

单片机定时器计数器使用方法单片机作为嵌入式系统开发的核心部件之一,其定时器计数器具有重要的作用。

定时器计数器可以帮助我们实现时间控制、精确计时等功能。

本文将介绍单片机定时器计数器的使用方法,包括计数模式的设置、时钟选择和定时器中断的应用。

一、计数模式设置单片机定时器计数器可以分为定时计数和事件计数两种模式。

定时计数模式是根据设定的时间间隔进行计数,而事件计数模式是在外部事件触发下进行计数。

下面是单片机定时器计数器初始化的基本步骤:1. 确定计数模式:根据实际需求确定是使用定时计数模式还是事件计数模式。

2. 设置计数器初始值:根据所需的计数时间或计数事件的频率,设置计数器的初始值。

3. 配置计数器控制寄存器:设置计数器的计数模式、时钟源以及其他需要的参数。

4. 启动计数器:使能定时器计数器工作。

二、时钟选择单片机定时器计数器的时钟源可以选择内部时钟或外部时钟。

一般来说,内部时钟具有较高的精度和稳定性,使用起来更为方便。

以下是两种常见的时钟选择方式:1. 使用内部时钟:选择单片机内部提供的时钟源作为定时器计数器的时钟,通过设置寄存器来配置时钟源的频率。

2. 使用外部时钟:当需要更高的计数精度时,可以选择外部时钟源,将外部时钟接入到单片机的引脚,并在寄存器中配置外部时钟源。

三、定时器中断的应用定时器中断是单片机定时器计数器的重要应用之一,可以帮助我们实现精确的时间控制和任务调度。

下面是使用定时器中断的基本步骤:1. 配置中断向量表:为定时器中断向量分配一个唯一的中断向量地址,并将中断处理函数与之关联。

2. 配置中断优先级:如果系统中存在多个中断,需要根据实际情况为定时器中断配置适当的优先级。

3. 设置定时器计数器的中断触发条件:根据需求设置定时器计数器中断触发的条件,可以是定时完成或者达到指定的计数值。

4. 编写中断处理函数:编写定时器中断处理函数,完成需要执行的任务。

5. 启用定时器中断:使能定时器中断,将定时器计数器中的中断触发条件与中断处理函数关联起来。

8051启动代码文件的主要内容

8051单片机是一种经典的微处理器,被广泛应用于各种嵌入式系统中。

在进行8051单片机的开发时,启动代码文件是至关重要的一部分,它包含了系统初始化、外设配置、中断管理等重要内容。

在本文中,我们将详细介绍8051启动代码文件的主要内容,帮助读者更好地理解和运用这一关键的部分。

一、系统初始化在8051单片机启动过程中,系统需要进行一系列的初始化操作,以确保其正常运行。

在启动代码文件中,通常包括以下内容:1. 时钟设置:8051单片机的时钟源有多种选择,包括外部晶体振荡器、内部振荡器等。

在启动代码文件中,需要设置时钟源的类型、频率等参数。

2. 中断向量表初始化:中断是8051单片机的重要功能之一,中断向量表包含了各类中断的入口位置区域。

在启动代码文件中,需要将中断处理函数的入口位置区域写入中断向量表中。

3. IO端口初始化:8051单片机的IO端口是与外部设备进行数据交换的重要接口,需要在启动过程中进行相应的初始化,包括设置端口的工作模式、输入输出方向等。

二、外设配置在实际应用中,8051单片机通常需要与各类外部设备进行通信,如LED、LCD、键盘、传感器等。

在启动代码文件中,需要对这些外部设备进行相应的配置,以便与单片机进行数据交换。

1. LED/LCD配置:LED和LCD是常见的显示设备,通过配置相应的引脚和显示参数,可以在启动过程中初始化这些设备。

2. 键盘/按键配置:键盘和按键是常见的输入设备,通过配置相应的端口和中断,可以在启动过程中实现对这些设备的初始化。

3. 传感器配置:传感器可以用于检测各类环境参数,如温度、湿度、光照等。

在启动代码文件中,需要配置相应的IO端口和中断,以实现对传感器的初始化。

三、中断管理中断是8051单片机的重要特性,通过中断可以实现对各类事件的及时响应。

在启动代码文件中,需要对中断进行相应的配置,以确保系统可以正常响应各类中断事件。

1. 中断向量表设置:在启动代码文件中,需要将各类中断处理函数的入口位置区域写入中断向量表中,以实现对中断的响应。

标准sci中断函数

标准SCI中断函数一、简介在科学研究中,中断函数(Interrupt Service Routine,简称ISR)是一种常用的编程手段。

当发生硬件中断时,中断函数能够及时响应并处理中断请求,保证系统的稳定性和可靠性。

本文将全面讨论标准SCI中断函数的概念、功能、优势以及使用方法。

二、SCI中断函数的概念SCI,全称为”Serial Communication Interface”,是一种串行通信接口。

SCI中断函数是针对SCI接口设计的特定中断函数,用于处理SCI接口相关的中断请求。

三、SCI中断函数的功能SCI中断函数具有以下几个主要功能:1.接收数据:SCI中断函数可以接收外部设备发送的数据,并将其存储在指定的缓冲区中。

这样,主程序可以随时使用这些数据进行相应的处理。

2.发送数据:SCI中断函数可以将主程序准备好的数据发送给外部设备。

通过中断方式发送数据,可以提高系统的并发性和实时性。

3.错误处理:SCI中断函数能够检测并处理SCI通信中的错误。

在发生错误时,中断函数可以采取相应的纠错措施,以确保数据的准确传输。

四、SCI中断函数的优势与轮询方式相比,SCI中断函数具有以下几个明显的优势:1.实时性:SCI中断函数能够即时响应中断请求,并立即执行相应的处理程序。

这样可以确保在有限的时间内完成必要的操作,提高系统的实时性。

2.节省资源:SCI中断函数只有在中断请求发生时才会被调用,可以避免不必要的资源浪费。

在没有中断请求时,中断函数处于休眠状态,几乎不消耗系统的计算能力。

3.简化编程:SCI中断函数将中断处理与主程序分离,使得编程更加简洁、清晰。

开发人员只需关注主程序的逻辑,而不必过多考虑中断请求的处理。

五、SCI中断函数的使用方法要使用SCI中断函数,需要按照以下步骤进行配置和调用:1.初始化SCI接口:在主程序中对SCI接口进行初始化,包括波特率、数据位数、停止位数等相关参数的配置。

2.配置中断向量表:将SCI中断函数的入口地址添加到中断向量表中,以便系统在发生中断请求时能够找到并调用相应的中断函数。

关于28377D_DSP中的中断配置流程过程的总结

Notebook:Meine_Arbeiten Created:2016/12/9 9:56Updated :2016/12/9 13:21Author :havihouston@ 2016/12/92016/12/9DSP系统v118 调试过程中出现了添加天线配置函数后,系统定时器无法使用的现象,猜测是因为天线配置模块影响了定时器的开启DSP的中断过程流程 :外设产生中断的流程:1、中断锁存至PIE的中断标志及存器的第x组第y通道 : PIEIFRx.y2、如果PIEIERx.y设置为有效,那么终端将被传递至后一级3、如果PIEACK.x标志位被清除,那么中断传递至下一级,并将PIEACK.x置位14、中断锁存至IFR.X中5、如果IER.x有效,中断传输至下一级6、如果INTM清零,那么CPU收到中断。

7、后端的中断则开始继续传递8、cpu保存当前状态至stack9、IFR.X 和 IER.X 被清除,INTM置位,EALLOW被清除10、cpu从PIE获取中断地址,并且PIE.PIEIFRX.Y清除11、cpu执行中断配置和是能中断过程 :1、静止全局中断(禁止cpu中断接受)2、是能PIE通过设置ENPIE位在PIECTRL寄存器中3、配置和定位中断向量表;并使能PIE如下表所示4、设置合适的PIEIERX,给PIE组和通道赋值5、使能CPU IER是能cpu接受中断6、在外设中是能中断7、是能全局中断EINT OR CLRC INTM实例 : 1、使用TI dsp 28377d 的定时器列程第一步 : 关闭全局中断使能 DINT:第二步 : 禁止PIE使能,并且清除PIE中所有的中断标志以及中断表设置第三步 :关闭CPU 的中断使能第四步 : 初始化PIE VECTOR并且使能PIE第五步 :外设的中断配置第六步 : 使能CPU的第x组中断接受使能第七步 : 打开PIE对应的x组y通道接受使能第八步 : 打开全局中断使能2、使用v118版程序中断配置过程(修改之后的)第一步 初始化piectr;其中已经包括语句DINT(关闭全局中断过程)第二步 关闭PIE中断功能;通过设置PIRCTR.BIT.ENPIE = 0来实现,第三步 清空中断设置(即PIEIER.X PIEIFR.X中原来的配置值);第四步 清空中断列表,并且使能PIE功能(通过设置PIRCTR.BIT.ENPIE = 1来实现 )第五步 清空CPU中断接受组第六步 配置定时器的中断选项第26 - 30行为配置中断入口地址 第42 - 44行为配置CPU响应中断组(其中TIMER0是通过第PIEIER1 . 7来链接到PIE上的,所以CPU按照分组响应中断,顾此处的IER |= M_INT1就是这个意思);第52行表示了 我需要使能PIEIER1.7通道;是因为TIMER0的中断响应链路是通过PIE的第一组,第7个通过来连通的。

STM32外部中断原理与配置

STM32外部中断原理与配置STM32-外部中断原理与配置IO⼝外部中断原理概述STM32控制器⽀持的外部中断/事件请求中断线M3M4M7EXTI线0~15:对应外部IO⼝的输⼊中断。

√√√EXTI线16:连接到PVD输出。

√√√EXTI线17:连接到RTC闹钟事件。

√√√EXTI线18:连接到USB OTG FS唤醒事件。

√√√EXTI线19:连接到以太⽹唤醒事件。

√√EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件√√EXTI线21:连接到RTC⼊侵和时间戳事件。

√√EXTI线22:连接到RTC唤醒事件。

√√EXSTI线23:连接到LPTIM1异步事件√IO⼝外部中断STM32的每个IO都可以作为外部中断输⼊。

每个外部中断线可以独⽴的配置触发⽅式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专⽤的状态位。

STM32供IO使⽤的中断线只有16个,但是STM32F系列的IO⼝多达上百个,STM32F103ZGT6(112),那么中断线怎么跟io⼝对应呢?GPIO和中断线映射关系GPIOx.0映射到EXTI0GPIOx.1映射到EXTI1……GPIOx.14映射到EXTI14GPIOx.15映射到EXTI15对于M4/M7,配置寄存器为SYSCFG_EXTIRx对于M3,配置寄存器为AFIO_EXTICRx如下图所⽰,EXTI0[3:0]有4个位,可以配置16个,所以可以从PA0选择到PI0。

也就是说16个中断线,最多可以处理16*16个外部引脚的中断。

可以在⼿册中找到SYSCFG 外部中断配置寄存器:16个中断线就分配16个中断服务函数?IO⼝外部中断在中断向量表中只分配了7个中断向量,也就是只能使⽤7个中断服务函数。

从表中可以看出,外部中断线5~ 9分配⼀个中断向量,共⽤⼀个服务函数外部中断线10~15分配⼀个中断向量,共⽤⼀个中断服务函数。

中断服务函数列表:EXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerEXTI9_5_IRQHandlerEXTI15_10_IRQHandlerIO⼝外部中断HAL库配置⽅法外部中断操作使⽤到的函数分布⽂件stm32fxxx_hal_gpio.hstm32fxxx_hal_gpio.c外部中断配置:外部中断的中断线映射配置和触发⽅式都是在GPIO初始化函数中完成:GPIO_InitTypeDef GPIO_Initure;GPIO_Initure.Pin=GPIO_PIN_0; //PA0GPIO_Initure.Mode=GPIO_MODE_IT_RISING; //上升沿触发GPIO_Initure.Pull=GPIO_PULLDOWN;HAL_GPIO_Init(GPIOA,&GPIO_Initure);void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init){uint32_t position;uint32_t ioposition = 0x00;uint32_t iocurrent = 0x00;uint32_t temp = 0x00;/* Check the parameters */assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));assert_param(IS_GPIO_PIN(GPIO_Init->Pin));assert_param(IS_GPIO_MODE(GPIO_Init->Mode));assert_param(IS_GPIO_PULL(GPIO_Init->Pull));/* Configure the port pins */for(position = 0; position < GPIO_NUMBER; position++){/* Get the IO position */ioposition = ((uint32_t)0x01) << position;/* Get the current IO position */iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition;if(iocurrent == ioposition){/*--------------------- GPIO Mode Configuration ------------------------*//* In case of Alternate function mode selection */if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD)){/* Check the Alternate function parameter */assert_param(IS_GPIO_AF(GPIO_Init->Alternate));/* Configure Alternate function mapped with the current IO */temp = GPIOx->AFR[position >> 3];temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));GPIOx->AFR[position >> 3] = temp;}/* Configure IO Direction mode (Input, Output, Alternate or Analog) */temp = GPIOx->MODER;temp &= ~(GPIO_MODER_MODER0 << (position * 2));temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));GPIOx->MODER = temp;/* In case of Output or Alternate function mode selection */if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD)) {/* Check the Speed parameter */assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));/* Configure the IO Speed */temp = GPIOx->OSPEEDR;temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));temp |= (GPIO_Init->Speed << (position * 2));GPIOx->OSPEEDR = temp;/* Configure the IO Output Type */temp = GPIOx->OTYPER;temp &= ~(GPIO_OTYPER_OT_0 << position) ;temp |= (((GPIO_Init->Mode & GPIO_OUTPUT_TYPE) >> 4) << position);GPIOx->OTYPER = temp;}/* Activate the Pull-up or Pull down resistor for the current IO */temp = GPIOx->PUPDR;temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));temp |= ((GPIO_Init->Pull) << (position * 2));GPIOx->PUPDR = temp;/*--------------------- EXTI Mode Configuration ------------------------*//* Configure the External Interrupt or event for the current IO */if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE){/* Enable SYSCFG Clock */__HAL_RCC_SYSCFG_CLK_ENABLE();temp = SYSCFG->EXTICR[position >> 2];temp &= ~(((uint32_t)0x0F) << (4 * (position & 0x03)));temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03)));SYSCFG->EXTICR[position >> 2] = temp;/* Clear EXTI line configuration */temp = EXTI->IMR;temp &= ~((uint32_t)iocurrent);if((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT){temp |= iocurrent;}EXTI->IMR = temp;temp = EXTI->EMR;temp &= ~((uint32_t)iocurrent);if((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT){temp |= iocurrent;}EXTI->EMR = temp;/* Clear Rising Falling edge configuration */temp = EXTI->RTSR;temp &= ~((uint32_t)iocurrent);if((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE){temp |= iocurrent;}EXTI->RTSR = temp;temp = EXTI->FTSR;temp &= ~((uint32_t)iocurrent);if((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE){temp |= iocurrent;}EXTI->FTSR = temp;}}}}和串⼝中断⼀样,HAL库同样提供了外部中断通⽤处理函数HAL_GPIO_EXTI_IRQHandler,我们在外部中断服务函数中会调⽤该函数处理中断。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DM6437 中断向量表配置1. 编写中断服务例程在.c源文件中编写ISR函数c_intXX,用于中断处理,如:interrupt void c_intXX (void){…;}注:对于硬件中断而言,XX = 00~15。

2.初始化中断向量表,并在内存段中的中断向量表中配置好对应的中断向量首先是把中断向量表定位到某一内存段中,我们可以在cmd文件中配置中断向量表的内存映射,如:MEMORY{VECS: o = 0x10800000 l = 0x00000400MEMTEST: o = 0x10800400 l = 0x00000200IRAM: o = 0x10800600 l = 0x0001FA00DDR2: o = 0x80000000 l = 0x10000000}SECTIONS{.bss > IRAM.cinit > IRAM.cio > IRAM.const > IRAM.data > IRAM.far > IRAM.stack > IRAM.switch > IRAM.sysmem > IRAM.text > IRAM.vecs > VECS.ddr2 > DDR2}然后建立一个.asm文件,用以配置中断向量表中的中断向量,我们需要声明一些全局变量,以便其他源文件可以引用这些变量或者引用其他源文件的变量,如:*-----------------------------------------------------------------* Global symbols defined here and exported out of this file*-------------------------------------------------------------------- .global _vectors.global _c_int00.global _vector1.global _vector2 ;RSVD保留.global _vector3 ;RSVD保留.global _vector4.global _vector5.global _vector6.global _vector7.global _vector8.global _vector9.global _vector10.global _vector11.global _vector12.global _vector13.global _c_int14_vencint ; Hookup the c_int14 ISR in main().global _vector15因为引用了rts的_c_int00中断,即RESET中断,因此需要引入这个符号:.ref _c_int00为了把中断服务例程的地址,即中断向量插入到中断向量表中,可以定义一个宏:VEC_ENTRY .macro addrSTW B0,*--B15MVKL addr,B0MVKH addr,B0B B0LDW *B15++,B0NOP 2NOPNOP.endm为了初始化中断向量表中的中断向量,可以定义一个虚拟的中断向量:_vec_dummy:B B3NOP 5接下来就可以配置中断向量表了:.sect “.vecs”.align 1024_vectors:_vector0: VEC_ENTRY _c_int00;RESET中断_vector1: VEC_ENTRY _vec_dummy ;NMI不可屏蔽中断_vector2: VEC_ENTRY _vec_dummy ;保留中断1_vector3: VEC_ENTRY _vec_dummy ;保留中断2_vector4: VEC_ENTRY _vec_dummy ;外部中断INT4_vector5: VEC_ENTRY _vec_dummy ;外部中断INT5_vector6: VEC_ENTRY _vec_dummy ;外部中断INT6_vector7: VEC_ENTRY _vec_dummy ;外部中断INT7_vector8: VEC_ENTRY _c_int08 ; EDMA控制器中断EDMAINT,对应于c_int08 ISR_vector9: VEC_ENTRY _vec_dummy;JTAGRTDX中断_vector10: VEC_ENTRY _vec_dummy;EMIF_SDRAM_Timer 中断_vector11: VEC_ENTRY _vec_dummy;McBSP_0_Receive中断_vector12: VEC_ENTRY _vec_dummy;McBSP_1_Transmit中断_vector13: VEC_ENTRY _vec_dummy;Host_Port_Host_to_DSP中断_vector14: VEC_ENTRY _vec_dummy;Timer0中断_vector15: VEC_ENTRY _vec_dummy;Timer1中断3. 在C程序中指定定义的中断向量表,并且启用CPU中断功能在C程序中,用CSL的IRQ模块来设置中断比较方便,在设置之前,需要外部链接上面的asm程序的中断向量表符号:extern far void vectors();//之所以为vectors,因为C编译器编译后自动改名其为_vectors引用了中断向量表之后,就可以设置中断了:IRQ_setVecs(vectors); //指向asm中定义的中断向量表IRQ_nmiEnable();IRQ_globalEnable();IRQ_map(IRQ_EVT_EDMAINT, 8);//映射事件到指定的物理中断号IRQ_reset(IRQ_EVT_EDMAINT);4.启动中断源,如venc中断至此,中断服务例程c_int14_vencint 就可以为venc中断服务了,其它硬件中断向量的配置同理。

DSP中断设置简明教程 (2011-10-26 10:14)分类:未分类一、简述本文介绍TMS320C6000系列中断设置的简明方法。

通过示例定时器中断,MCBSP 串口接收中断及外部中断这三种中断实现过程,介绍如何实现中断各个寄存器的配置,中断向量表书写以及中断服务函数。

最后提供一个简要的示例程序可供大家下载使用。

此示例在DSK6416的TI官方实验板上通过测试。

由于定时器和串口工作模式较繁,因此对中断无关部分不做介绍。

二、实现DSP中断需要做哪些通用工作设置允许哪些非屏蔽中断设置各个允许的非屏蔽中断的中断来源设置开启总中断设计中断向量表将中断向量表通过cmd文件挂载到指令内存提供中断处理函数如果中断向量表首地址挂载的不是0地址,那么需要设置中断向量表地址寄存器对于不同的中断源,需要做各个自己的工作,比如如果是外部中断,那么需要设置管脚极性,即由高->低产生中断抑或反之。

为了照顾知识较少的读者,下面将从一个新工程出发,引导大家建立一个中断示例程序。

如果您对建立工程很熟悉,可以跳过此步。

三、建立新工程1.点击 Project->New,设置Project Name为intexample,Project Type为Executable,Target选择您需要的器件,在此由于本人使用的是DSK6416评估板。

因此选择TMS320C64XX。

2.添加标准库rts6400.lib,以便自动产生c_int00等函数。

右击当前工程,选择“Add Files to Project”,选择库所在路径,一般为CCS安装自带,可参考本CCS3.1版本的路径地址:\CCStudio_v3.1\C6000\cgtools\lib\rts6400.lib 如果您使用的是其他器件类型,请在lib文件夹内选择其他器件库。

添加源文件,选择File->New->Source File,保存为main.c到工程路径下。

在此文件内书写主函数。

void main(void){while(1);}最后通过如2步骤添加此文件到工程。

3.添加寄存器别名定义头文件。

在本示例中,对需要用到的寄存器定义别名后,构成global.h文件,内容在后文逐步介绍。

在此可以建立一个空文件,并在main.c中包括它。

#i nclude "global.h"到此,一个DSP的新工程框架制作完毕。

4.添加cmd链接文件为了实现链接时内存配置,我们需要提供一个cmd文件,为了方便,可以从官方的示例程序中拷贝一份,再加以修改。

在安装目录下D:\CCStudio_v3.1\tutorial\器件类型\hello1示例下,会找到一个hello1.cmd,将其拷贝到本工程目录下,并将其改名为link.cmd,最后将其添加到工程中。

由于此文件没有声明stack和heap,会产生警告,如果动态数据较多也容易溢出。

因此我们最好在此文件提供stack和heap的大小,其值可根据实际情况调整,修改后,此文件内容类似为:-stack 0x1000-heap 0x1000MEMORY{ISRAM : origin = 0x0, len = 0x1000000 }SECTIONS{.vectors > ISRAM.text > ISRAM.bss > ISRAM.cinit > ISRAM.const > ISRAM.far > ISRAM.stack > ISRAM.cio > ISRAM.sysmem > ISRAM}至此,工程建立完毕,可以编译一遍,观察是否正常。

--------------------------- intexample.pjt -Debug ---------------------------[main.c] "D:\CCStudio_v3.1\C6000\cgtools\bin\cl6x" -g-fr"D:/intexample/Debug" -d"_DEBUG" -mv6400 -@"Debug.lkf" "main.c"[Linking...] "D:\CCStudio_v3.1\C6000\cgtools\bin\cl6x" -@"Debug.lkf" <Linking>Build Complete,0 Errors, 0 Warnings, 0 Remarks.四、定时器中断设计首先,我们先实现一个定时器中断,因为它不受外部影响,容易测试。

相关文档
最新文档