Cortex M3汇编程序示例

更新时间:2023-06-18 23:17:17 阅读: 评论:0

GET ..\ASMFILE\LPC1700Cfg.s      ;包含CPU特殊寄存器定义文件
GET ..\ASMFILE\LPC1700PinCfg.s    ;包含芯片管脚功能定义文件
GET ..\ASMFILE\TargetCfg.s        ;包含目标板常数内存定义文件
PRESERVE8
THUMB
;Vector Table Mapped to Address 0 at Ret复位后映射在地址0x00000000处的向量表
AREA    RESET, CODE, READONLY
DCD    Stack_Top                ; 0: Top of Stack          堆栈顶端定义
DCD    START                    ; 1: Ret Handler        复位入口地址
周公解梦死人
DCD    NMI_Handler              ; 2: NMI Handler          不可屏蔽中断
DCD    HardFault_Handler        ; 3: Hard Fault Handler    硬件失败中断
DCD    MemManage_Handler        ; 4: MPU Fault Handler    存储器管理失败
DCD    BusFault_Handler          ; 5: Bus Fault Handler    总线失败
DCD    UsageFault_Handler        ; 6: Usage Fault Handler  用法失败
DCD    0                        ; 7: Rerved              保留[自生成校验和值]
DCD    0                        ; 8: Rerved              保留
DCD    0                        ; 9: Rerved              保留
DCD    0                        ;10: Rerved              保留
DCD    SVC_Handler              ;11: SVCall Handler        调用SVC异常中断
DCD    DebugMon_Handler          ;12: Debug Monitor Handler 调试监视器请求中断
DCD    0                        ;13: Rerved              保留
DCD    PendSV_Handler            ;14: PendSV Handler        系统设备挂起请求
青瓜图片DCD    SysTick_Handler          ;15: SysTick Handler      系统节拍定时器
;External Interrupts      外部中断
DCD    WDT_IRQHandler            ;16: Watchdog Timer        看门狗定时器中断
DCD    TIMER0_IRQHandler        ;17: Timer0                定时/计数器0中断
DCD    TIMER1_IRQHandler        ;18: Timer1                定时/计数器1中断
DCD    TIMER2_IRQHandler        ;19: Timer2                定时/计数器2中断
DCD    TIMER3_IRQHandler        ;20: Timer3                定时/计数器3中断
DCD    UART0_IRQHandler          ;21: UART0                串口0中断
DCD    UART1_IRQHandler          ;22: UART1                串口1中断
DCD    UART2_IRQHandler          ;23: UART2                串口2中断
DCD    UART3_IRQHandler          ;24: UART3                串口3中断
DCD    PWM1_IRQHandler 
;25: PWM1                  PWM1中断
DCD    I2C0_IRQHandler          ;26: I2C0                  I2C0中断
DCD    I2C1_IRQHandler          ;27: I2C1                  I2C1中断
DCD    I2C2_IRQHandler          ;28: I2C2                  I2C2中断
DCD    SPI_IRQHandler            ;29: SPI                  SPI中断
DCD    SSP0_IRQHandler          ;30: SSP0                  SSP0中断
DCD    SSP1_IRQHandler          ;31: SSP1                  SSP1中断
DCD    PLL0_IRQHandler          ;32: PLL0 Lock (Main PLL)  PLL0锁定中断
DCD    RTC_IRQHandler            ;33: Real Time Clock      实时时钟中断
DCD    EINT0_IRQHandler          ;34: External Interrupt 0  外部中断0
DCD    EINT1_IRQHandler          ;35: External Interrupt 1  外部中断1
DCD    EINT2_IRQHandler          ;36: External Interrupt 2  外部中断2
DCD    EINT3_IRQHandler          ;37: External Interrupt 3  外部中断3
DCD    ADC_IRQHandler            ;38: A/D Converter        A/D转换器中断
DCD    BOD_IRQHandler            ;39: Brown-Out Detect      掉电检测中断
DCD    USB_IRQHandler            ;40: USB                  USB中断
DCD    CAN_IRQHandler            ;41: CAN                  CAN总线中断
DCD    DMA_IRQHandler            ;42: General Purpo DMA  GPDMA中断
DCD    I2S_IRQHandler            ;43: I2S                  I2S中断
DCD    ENET_IRQHandler          ;44: Ethernet              以太网中断
DCD    RIT_IRQHandler            ;45: Repetitive Interrupt Timer  重复中断定时器
DCD    MCPWM_IRQHandler          ;46: Motor Control PWM          电机控制PWM
DCD    QEI_IRQHandler            ;47: Quadrature Encoder Interface正交编码器
DCD    PLL1_IRQHandler          ;48: PLL1 Lock (USB PLL)  PLL1锁定中断
DCD    USBActivity_IRQHandler    ;49: USB Activity interrupt to wakeup  USB活动
DCD    CANActivity_IRQHandler    ;50: CAN Activity interrupt to wakeup  CAN活动
;Address 0x0000 02FC ISP-Flash在地址0x0000 02FC处定义ISP访问片内Flash的限制等级[调试-0,商用-2]
AREA    |.ARM.__at_0x02FC|, CODE, READONLY
DCD    0xFFFFFFFF                ;调试CRP_LEVEL=0 0xFFFFFFFF
;商用CRP_LEVEL=2 0x87654321
AREA    |.itext|, CODE, READONLY  ;异常中断代码段
NMI_Handler                                      ; 2: NMI Handler          不可屏蔽中断
NOP                              ;P2_10未配置为NMI输入不会引起该中断
LDR    R1, =AIRCR                ;应用程序中断及复位控制寄存器[0xFA050000]
LDR    R0, =0x05FA0004          ;SYSRESETREQ=1请求芯片的控制逻辑产生一次复位
STR    R0, [R1]
deadloop
B      deadloop                  ;死循环,等待芯片复位
BX      lr                        ;中断返回
ALIGN                            ;代码存储对齐
HardFault_Handler                                ; 3: Hard Fault Handler    硬件失败中断
MemManage_Handler                                ; 4: MPU Fault Handler    存储器管理失败
BusFault_Handler                                  ; 5: Bus Fault Handler    总线失败
UsageFault_Handler                                ; 6: Usage Fault Handler  用法失败
MOVW    R1, #Stacked_NUM          ;fault计数值
MOVT    R1, #MEMADDG              ;内存单元地址高16位
LDR    R0, [R1]
ADD    R0, R0, #1                ;fault计数值+1
STR    R0, [R1]
TST    LR, #0x04
ITE    EQ
MRSEQ  R2, MSP
MRSNE  R2, PSP
STR    R2, [R1, #0x04]          ;Stacked_MSP=fault压栈MSP值
LDR    R0, [R2, #0x00]
STR    R0, [R1, #0x08]          ;Stacked_R0=fault压栈R0值
LDR    R0, [R2, #0x04]
STR    R0, [R1, #0x0C]          ;Stacked_R1=fault压栈R1值
LDR    R0, [R2, #0x08]
STR    R0, [R1, #0x10]          ;Stacked_R2=fault压栈R2值
LDR    R0, [R2, #0x0C]
STR    R0, [R1, #0x14]          ;Stacked_R3=fault压栈R3值
LDR    R0, [R2, #0x10]
STR    R0, [R1, #0x18]          ;Stacked_R12=fault压栈R12值
LDR    R0, [R2, #0x14]
南国先生
STR    R0, [R1, #0x1C]          ;Stacked_LR=fault压栈LR值
LDR    R0, [R2, #0x18]
STR    R0, [R1, #0x20]          ;Stacked_PC=fault压栈PC值
LDR    R0, [R2, #0x1C]
STR    R0, [R1, #0x24]          ;Stacked_PSR=fault压栈PSR值
LDR    R2, =MMAR                ;存储器管理失败状态寄存器-R/W[0]
LDR    R0, [R2]
STR    R0, [R1, #0x28]          ;Stacked_MMAR=fault压栈MMAR值
LDR    R2, =BFAR                ;总线失败地址寄存器-R/W
LDR    R0, [R2]
STR    R0, [R1, #0x2C]          ;Stacked_BFAR=fault压栈BFAR值
LDR    R2, =CFSR                ;可配置失败状态寄存器-R/W[0]
LDR    R0, [R2]
STR    R0, [R1, #0x30]          ;Stacked_CFSR=fault压栈CFSR值
LDR    R2, =HFSR                ;硬
件失败状态寄存器-R/W[0]
LDR    R0, [R2]
STR    R0, [R1, #0x34]          ;Stacked_HFSR=fault压栈HFSR值
LDR    R2, =DFSR                ;调试失败状态寄存器-R/W[0]
品管是做什么的LDR    R0, [R2]
STR    R0, [R1, #0x38]          ;Stacked_DFSR=fault压栈DFSR值
LDR    R2, =AFSR                ;辅助失败寄存器-R/W
LDR    R0, [R2]
STR    R0, [R1, #0x3C]          ;Stacked_AFSR=fault压栈AFSR值
NOP
LDR    R1, =AIRCR                ;应用程序中断及复位控制寄存器[0xFA050000]
LDR    R0, =0x05FA0002          ;VECTCLRACTIVE=1清零所有异常的活动状态信息
STR    R0, [R1]
BX      lr                        ;中断返回
ALIGN                            ;代码存储对齐
SVC_Handler                                      ;11: SVCall Handler        调用SVC异常中断
DebugMon_Handler                                  ;12: Debug Monitor Handler 调试监视器请求中断
PendSV_Handler                                    ;14: PendSV Handler        系统设备挂起请求
SysTick_Handler                                  ;15: SysTick Handler      系统节拍定时器
BX      lr                        ;中断返回
ALIGN                            ;代码存储对齐
;External Interrupts外部中断
WDT_IRQHandler                                    ;16: Watchdog Timer        看门狗定时器中断
BX      lr                        ;中断返回
TIMER0_IRQHandler                                ;17: Timer0                定时/计数器0中断
LDR    R1, =T0IR                ;T0中断寄存器-R/W[0x00]
MOV    R0, #0x01                ;复位(清零)中断标志
STR    R0, [R1]
NOP
MOVW    R1, #Ba_timer0          ;基础定时计数器字节0[32:500us+1循环计数]
MOVT    R1, #MEMADDG              ;内存单元地址高16位
LDR    R0, [R1]
ADD    R0, R0, #1                ;500us+1
STR    R0, [R1]
NOP
品牌管理MOVW    R1, #BtimeCh              ;基础定时计数器改变
MOVT    R1, #MEMADDG              ;内存单元地址高16位
MOV    R0, #0x01
STRB    R0, [R1]
BX      lr                        ;中断返回
TIMER1_IRQHandler                                ;18: Timer1                定时/计数器1中断
TIMER2_IRQHandler                                ;19: Timer2                定时/计数器2中断
TIMER3_IRQHandler                                ;20: Timer3                定时/计数器3中断
BX      lr                        ;中断返回
UART0_IRQHandler                                  ;21: UART0                串口0中断[数据接收]
LDR    R1, =U0IIR                ;U0中断ID寄存器-R0[0x01]
LDR    R0, [R1]
TST    R0, #0x01                ;bit0=0/1=有中断挂起/无中断
BNE    UART0_IRQ9                ;不相等/非0[Z==0]转移
AND    R0, R0, #0x0E
CMP    R0, #0x04                ;接收数据可用[8字符]
BNE    UART0_IRQ5                ;不相等/非0[Z==0]转移
MOV    R3, #0x08                ;待收8字符数据
MOVW    R1, #UART0_RecPh          ;Uart0接收数据头指针[待处理]
MOVT    R1, #MEMADDG              ;内存单元地址高16位
LDRB    R2, [R1]想法的英文
UART0_IRQ1
LDR    R1, =U0RBR                ;U0接收器缓冲寄存器-RO
LDR    R0, [R1]
MOVW    R1, #UART0_RecBuff        ;Uart0接收数据缓冲区[256单元]
MOVT    R1, #MEMADDG              ;内存单元地址高16位
STRB    R0, [R1, R2]
ADD    R2, R2, #1
AND    R2, R2, #0xFF
SUBS    R3, R3, #1
BNE    UART0_IRQ1                ;不相等/非0[Z==0]转移
MOVW    R1, #UART0_RecPh          ;Uart0接收数据头指针[待处理]
MOVT    R1, #MEMADDG              ;内存单元地址高16位
STRB    R2, [R1]
MOVW    R1, #UART0_Stat          ;Uart0状态字节
MOVT    R1, #MEMADDG              ;内存单元地址高16位
MOV    R0, #0x01                ;已收到新数据
STRB    R0, [R1]
B      UART0_IRQ9
UART0_IRQ5
CMP    R0, #0x0C                ;字符超时指示
BNE    UART0_IRQ9                ;不相等/非0[Z==0]转移
UART0_IRQ6
婴儿钙LDR    R1, =U0LSR                ;U0线状态寄存器-R0[0x60]
LDR    R0, [R1]
TST    R0, #0x01                ;bit0=0/1=U0RBR空/有有效数据
BEQ    UART0_IRQ9                ;相等/为0[Z==1]转移
MOVW    R1, #UART0_RecPh          ;Uart0接收数据头指针[待处理]
MOVT    R1, #MEMADDG              ;内存单元地址高16位
LDRB    R2, [R1]
LDR    R1, =U0RBR                ;U0接收器缓冲寄存器-RO
LDR    R0, [R1]
MOVW    R1, #UART0_RecBuff        ;Uart0接收数据缓冲区[256单元]
MOVT    R1, #MEMADDG              ;内存单元地址高16位
STRB    R0, [R1, R2]
ADD    R2, R2, #1帕金森的治疗方法
AND    R2, R2, #0xFF

本文发布于:2023-06-18 23:17:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1044693.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中断   失败   寄存器   地址   复位   内存   单元
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图