注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
btvnlue的个人空间 https://home.eeworld.com.cn/space-uid-402105.html [收藏] [复制] [分享] [RSS]
日志

中断的处理与解析

已有 1532 次阅读2012-4-15 22:27


本文就STM32中断的以下特性进行解析与归纳

  • 启动代码中的中断映射
  • 系统中断,内部中断,外部中断
  • 中断的优先级设置
  • DMA中断的设置
在STM32标配的启动代码中,定义了所有的中断入口,并且集中为向量列表在所有代码的初始位置

RESET section

AREA    RESET, DATA, READONLY

__Vectors       DCD     __initial_sp               ; Top of Stack
                    DCD     Reset_Handler              ; Reset Handler

向量的初始位置是以128字节任何地址,其初始地址可以设置SCB的VTOR寄存器
以下代码是对标准中断向量表地址偏移128字节进行的测试

Vectors Address

Handler_Shift_Size EQU 0x00000080

__Vectors_Shift SPACE Handler_Shift_Size
__Vectors       DCD     __initial_sp               ; Top of Stack

*scb_vtor = addr & 0x3FFFFF80;



所有中断函数共享相同的最简内容,无限循环

Event Handler

WWDG_IRQHandler
:
:
OTG_FS_IRQHandler

                B       .

                ENDP


所有的中断函数以“脆弱”方式对外部公开,如果有其他同名的函数实现,连接时就会覆盖原有函数

Weak Handler

EXPORT  RCC_IRQHandler             [WEAK]
EXPORT  EXTI0_IRQHandler           [WEAK]


为了精确的实现中断连接,可以将原始的函数实现删除,强制使用外部函数
以下代码是强制使用C语言函数响应中断

Import Handler

IMPORT SysTick_Handler
IMPORT EXTI2_IRQHandler

;SysTick_Handler PROC
;EXPORT  SysTick_Handler            [WEAK]

;EXPORT  EXTI2_IRQHandler           [WEAK]
;EXTI2_IRQHandler


STM32的中断分为系统中断,内部中断和外部中断
系统中断和内部中断只需设置相关寄存器即可触发中断
系统中断如SysTick是较常用的中断,设置非常简单,且中断响应也只需单纯的用户逻辑
以下代码仅对用户变量加一操作,主程序中读取数据

SysTick Intterupt

*systick_ctrl |= 0x1; //systicker enable

void SysTick_Handler(void) {
Pub_Tick_Value++;
}



本文含有来自论坛的附件或图片:[run_simple_int.zip],点击查看原帖附件。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章