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

📄 uart0.s43

📁 430系列开发之MSP430FE42x开发代码实例
💻 S43
字号:
#include "device.h"

#define     _def_uart 1
#include    "UART0.h"             ;  UART Externals


#if __VER__ < 200
            RSEG UDATA0
#else
            RSEG DATA16_Z
#endif


_UART_RX_Buffer_Size
UART_RX_Buffer_Size  equ 20                  ; Define Size of Receive Buffer
_UART_RX_Buffer
UART_RX_Buffer DS    UART_RX_Buffer_Size     ; Allocate Buffer
_UART_RX_Bytes
UART_RX_Bytes  DS    2                       ; Counter for RX'd Bytes

_UART_TX_Buffer_Size
UART_TX_Buffer_Size  equ 40                  ; Define Size of Transmit Buffer
_UART_TX_Buffer
UART_TX_Buffer DS    UART_TX_Buffer_Size     ; Allocate Buffer
_UART_TX_Bytes
UART_TX_Bytes  DS    2                       ; Counter for Bytes to TX

_UART_Status
UART_Status    DS    2                       ; UART Status Register

_TXData
TXData         DS    2                       ; Buffer for Data to transmit
_RXTXData
RXTXData       DS    2                       ; Work Register for Transmit/Receive


             EVEN
;******************************************************************************
            RSEG CODE


;******************************************************************************
;------------------------------------------------------------------------------ 
URX0_ISR    ; UART0 Receive Interrupt Routine
;------------------------------------------------------------------------------ 
RX1         
            push    R15                     ; Save Register
            mov.b   &RXBUF0,R15             ; RXed character    

            bit     #LineReceived,UART_Status ; ignore if last Buffer has not been processed
            jnz     End_RX0_ISR             ;
          ; ignore LF
            cmp.b   #'\n',R15
            jeq     End_RX0_ISR
          ; Line Received
            cmp.b   #'\r',R15 
            jne     RX1_1
            bis     #LineReceived,UART_Status
            bic     #LPM3,2(SP)             ; clear LPM on Stack
 
            clr     R15                     ; end received String with '0' Char
            jmp     RX1_2
RX1_1
          ; <ESC> -> Clear Buffer
            cmp.b   #0x1B,R15
            jne     RX1_2
            clr     UART_RX_Bytes           ; Clear RX Buffer
            jmp     End_RX0_ISR
RX1_2
          ; special single char received
            cmp.b   #'0',R15 
            jc      RX1_3
            bis     #LineReceived,UART_Status
            bic     #LPM3,2(SP)             ; clear LPM on Stack
RX1_3
          ; Byte received -> move to Buffer
            push    R14
            mov     UART_RX_Bytes,R14
            mov.b   R15,UART_RX_Buffer(R14)
            cmp     #(UART_RX_Buffer_Size-1),UART_RX_Bytes
            jeq     RX1_BufFull             ; Buffer full -> Skip inc Pointer
            inc     UART_RX_Bytes
RX1_BufFull
            pop     R14
;            jmp     End_RX0_ISR

End_RX0_ISR
            pop     R15
            reti




;--------------------------------------------------------------
; Extract the number out of the received string
; R12 has to contain the pointer to the start of the string
; The string have to be terminated by a '0' char
; Used registers R6, R8
; R12 contains return value
_GetNumber:
GetNumber
           push         R6
           push         R8
           mov          R12,R8
           clr          R12
LoopGetNumber
           tst.b        0(R8)
           jz           EndGetNumber
           mov.b        @R8+,R6
           call         #Append_NUM
           jmp          LoopGetNumber           
EndGetNumber              
           pop          R8
           pop          R6
           ret


;--------------------------------------------------------------
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Subroutine : Convert character in R6 into a hex number (0..9,a..f)
; and shift it left aligned into R12.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Append_NUM
                SUB     #030h,R6       ; Convert character in R6 into hex
                CMP     #10,R6
                JLO     Append_NUM1
                SUB     #039,R6
Append_NUM1
                RLA     R12             ; Shift summary in R12 one digit left
                RLA     R12
                RLA     R12
                RLA     R12
                ADD     R6,R12          ; place new digit to the rightmost digit
                RET




;******************************************************************************
#if !defined(__CROSSWORKS__)
              COMMON INTVEC
#else
              RSEG   INTVEC
              KEEP
#endif
              ORG    UART0RX_VECTOR         ;USART0 RX Vector
              DW     URX0_ISR

             END

⌨️ 快捷键说明

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