⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq_usart.s

📁 LPC based lcd interface
💻 S
字号:
/*
------------------------------------------------------------------------------
   ATMEL Microcontroller Software Support  -   ROUSSET -
------------------------------------------------------------------------------
 The software is delivered "AS IS" without warranty or condition of any
 kind, either express, implied or statutory. This includes without
 limitation any warranty or condition with respect to merchantability or
 fitness for any particular purpose, or against the infringements of
 intellectual property rights of others.
-----------------------------------------------------------------------------
- File source          : irq_usart.s
- Object               : Assembler USART Interrupt Handler.
- Translator           : ARM Software Development Toolkit V2.11a
-
- Imported Resources   :
-          USARTHandlerTable, PtUSART0Base, PtUSART1Base
- Exported Resources   :
-          usart0_interrupt_handler, usart1_interrupt_handler
-
- 1.0 JCZ 03/11/97     : Creation
- 1.1 JCZ 24/04/98     : Add END at the end of file
- 1.2 JCZ 15/09/98     : See irq.mac 1.1
- 2.0 JCZ 21/10/98     : Clean up and add interworking capabilities
------------------------------------------------------------------------------
 Function :
 This file allows to manage 3 different types of interrupt from one USART.
 One error interrupt, one in receive and one in transmit. Each is identified
 by a Mask and a Handler stored in the table <USARTHandlerTable>.
 When an interrupt occurs, the Status Register of the USART is read, masked
 with the Interrupt Mask Register firstly and with each of the three masks
 read in the table. When a result is not null, the corresponding handler is
 executed.
 Masks and Handlers are definable with the C function <enable_usart_irq>.
 Note in thumb mode, handler addresses are saved with bit 0 set. Then,
 you don't need to set it before execution of bx.
------------------------------------------------------------------------------
*/
/*            AREA    AT91Lib, CODE, READONLY, INTERWORK
*/
/* -------------------------- List of Included Files ---------------------------*/

            .INCLUDE     "../Include/arm.inc"
            .INCLUDE     "../Include/usart.inc"
            .INCLUDE     "../Include/aic.inc"
            .INCLUDE     "../Include/irq.mac"

/* ------------------------ List of constants and types ------------------------ */
/* None

/* ------------------------ List of Imported resources ------------------------- */

            .extern      USARTHandlerTable

/* ------------------------ List of Internal resources ------------------------- */
PtUSART0Base:
            .long         USART0_BASE
PtUSART1Base:
            .long         USART1_BASE
/*
------------------------------------------------------------------------------ 
- Function             : look_for_interrupt
- Treatments           : Look for Interrupt from a USART
- Input Parameters     : r4 = USART Base Address
-                      : r5 = USART Handler Table Address
- Output Parameters    :
-      When Handler is called :
-          r0 = USART Base Address
-          r1 = USART Handler Table Address
- Registers lost       : None
- Called Functions     : None
- Called Macros        : IRQ_EXIT
------------------------------------------------------------------------------
*/
look_for_interrupt:
/*- Read the Channel Status Register */
            ldr         r0, [r4, #US_CSR]

/*- Read the Interrupt Mask Register */
            ldr         r1, [r4, #US_IMR]

/*- Clear bits of the status for disabled interrupt */
            and         r6, r0, r1

/*- If any error interrupt */
            ldr         r1, [r5, #ErrorMask]
            ands        r0, r6, r1

/* | Load parameters */
            movne       r0, r4
            movne       r1, r5

/*- | Branch on the error handler */
            ldrne       r2, [r5, #ErrorHandler]
            movne       lr, pc
            bxne        r2
/*- EndIf */

/*- If any receive interrupt */
            ldr         r1, [r5, #RxMask]
            ands        r0, r6, r1

/* | Load parameters */
            movne       r0, r4
            movne       r1, r5

/*- | Branch on the receive handler */
            ldrne       r2, [r5, #RxHandler]
            movne       lr, pc
            bxne        r2
/*- EndIf */

/*- If any transmit interrupt */
            ldr         r1, [r5, #TxMask]
            ands        r0, r6, r1

/* | Load parameters */
            movne       r0, r4
            movne       r1, r5

/*- | Branch on the transmit handler */
            ldrne       r2, [r5, #TxHandler]
            movne       lr, pc
            bxne        r2
/*- EndIf */

            IRQ_EXIT    r4-r6

/* ------------------------ List of Exported resources ------------------------- */
/*
------------------------------------------------------------------------------
- Function             : usart0_interrupt_handler
- Treatments           : USART Channel 0 Interrupt Handler.
- Input Parameters     : None
- Output Parameters    : r4 = USART 0 Base Address
-                      : r5 = USART 0 Handler Table Address
- Registers lost       : None
- Called Functions     : look_for_interrupt
- Called Macros        : IRQ_ENTRY
------------------------------------------------------------------------------
*/
            .global      usart0_interrupt_handler

usart0_interrupt_handler:
            IRQ_ENTRY   r4-r6

/*- Load the USART 0 Base address */
            ldr         r4, PtUSART0Base

/*- Load the address of the USART Handler Table */
            ldr         r5, =USARTHandlerTable

/*- Look for all present interrupt and manage them */
            b           look_for_interrupt
/*          
------------------------------------------------------------------------------
- Function             : usart1_interrupt_handler
- Treatments           : USART Channel 1 Interrupt Handler.
- Input Parameters     : None
- Output Parameters    : r4 = USART 1 Base Address
-                      : r5 = USART 1 Handler Table Address
- Registers lost       : None
- Called Functions     : look_for_interrupt
- Called Macros        : IRQ_ENTRY
------------------------------------------------------------------------------
*/
            .global      usart1_interrupt_handler

usart1_interrupt_handler:
            IRQ_ENTRY   r4-r6

/*- Load the USART 0 Base address */
            ldr         r4, PtUSART1Base

/*- Load the address of the USART Handler Table */
            ldr         r5, =USARTHandlerTable
            add         r5, r5 , #SIZE_USART_HANDLER_TABLE

/*- Look for all present interrupt and manage them */
            b           look_for_interrupt


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -