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

📄 i2c_ir_common.s43

📁 I2c details for MSP430
💻 S43
字号:
#include <msp430x11x1.h>

;-------------------------------------------------------------------------------
; Name: i2c_ir_common.s43
; Func: TimerA setting and its Interrupt routine
; Ver.: 1.1
; Date: June-2005
; Auth: Thomas Kot
;       MSP430
;       Texas Instruments Inc.
; Rem.: Build with IAR EW V4.3A
;-------------------------------------------------------------------------------
; Exported Symbols
;-------------------------------------------------------------------------------
            PUBLIC  INIT_COM
            PUBLIC  IR_STORED
            PUBLIC  ERROR_IR


;-------------------------------------------------------------------------------
; Imported Symbols
;-------------------------------------------------------------------------------
            EXTERN  IIC_STP2
            EXTERN  SDA
            EXTERN  SCL
            EXTERN  IR_SEQ
            EXTERN  IR_BRANCH
            EXTERN  CHECK_IR
            EXTERN  IR_FLAG
            EXTERN  DATA_IN
            EXTERN  BIT_CNT


;-------------------------------------------------------------------------------
; Define Constant
;-------------------------------------------------------------------------------
IRA1        EQU     04H                     ; P1.2 is used for IR signal capture


;-------------------------------------------------------------------------------
; Implementation
;-------------------------------------------------------------------------------
            RSEG    CODE
;-------------------------------------------------------------------------------
INIT_COM
            call    #INIT_TA12              ; Init Timer
            ret


;-------------------------------------------------------------------------------
INIT_TA12                                   ; Timer A Init
;-------------------------------------------------------------------------------
            bis.b   #IRA1,&P1SEL            ; Set P1.2 for TA1 capture input
            bic.b   #IRA1,&P1DIR            ; Set as input

            mov     #TASSEL_2+ID_3+TACLR+TAIE,&TACTL
                                            ; SMCLK, DIV BY 8, STOP MODE,
                                            ; INT Enable, flag clear
                                            ; As BCSCTL2 has set DIVS_3, which
                                            ; further divide the SMCLK by 8.
                                            ; So, when using 8MHz crystal, the
                                            ; clock for timer is 125kHz.
                                            ; The timer will time out after 0.5s

            mov     #CM_2+SCS+CAP+CCIE,&TACCTL1
                                            ; TIMER A1, Capture on falling edge,
                                            ; CCI1A, SYNC CAP, INT, flag clear

            mov     #IR_SEQ-2,IR_BRANCH     ; SET IR SEQUENCE ADDRESS
            mov.b   #00H,BIT_CNT            ; Reset IR data Bit counter
            mov     #0000H,DATA_IN          ; Reset IR data
            ret


;-------------------------------------------------------------------------------
ISR_TIMERA                                  ; Timer A Interrupt Routine
;-------------------------------------------------------------------------------
            bic.b   #SCL,&P1IE              ; Disable SCL
            bic.b   #SDA,&P2IE              ; Disable SDA, disable I2C
            bic     #0001H,&TACCTL1         ; Clear TA1 flag
            cmp     #000AH,&TAIV            ; Check if timer overflow
            jnz     CHECK_IR                ; If not, jump to CHECK_IR

IR_STORED
ERROR_IR    call    #INIT_TA12              ; Init TIMER A
            bit.b   #01H,IR_FLAG            ; Check if it is an IR transmission
            jc      IR_END                  ; If Yes, Jump to IR_END

            br      #IIC_STP2               ; If not, Jump to IIC_STP2
                                            ; because of time out

IR_END      bic.b   #01H,IR_FLAG            ; Reset IR_FLAG
            bic.b   #SDA,&P2IFG             ; Clear SDA FLAG
            bis.b   #SDA,&P2IE              ; Enable SDA interrupt, ENABLE I2C
            reti


;-------------------------------------------------------------------------------
; Interrupt Vector
;-------------------------------------------------------------------------------
            COMMON  INTVEC
;-------------------------------------------------------------------------------
            ORG     TIMERA1_VECTOR
            DW      ISR_TIMERA


END

⌨️ 快捷键说明

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