📄 ecp_i2c_hw.lst
字号:
###############################################################################
# #
# IAR Systems MSP430 Assembler V3.42A/W32 29/Jun/2007 14:45:59 #
# Copyright 1996-2006 IAR Systems. All rights reserved. #
# #
# Target option = MSP430 #
# Source file = C:\Data\DM350MSP430\VA3\ECP_I2C_HW.s43 #
# List file = C:\Data\DM350MSP430\VA3\Debug\List\ECP_I2C_HW.lst#
# Object file = C:\Data\DM350MSP430\VA3\Debug\Obj\ECP_I2C_HW.r43 #
# Command line = C:\Data\DM350MSP430\VA3\ECP_I2C_HW.s43 #
# -OC:\Data\DM350MSP430\VA3\Debug\Obj\ -s+ -M<> #
# -w+ -LC:\Data\DM350MSP430\VA3\Debug\List\ -t8 #
# -r -D__MSP430F155__ #
# -IC:\Program Files\IAR Systems\Embedded Workbench 4.0\430\INC\ #
# #
###############################################################################
1 00FFF0 #include <msp430x15x.h>
2 00FFF0 #include "ECP.h"
3 000000 EXTERN ECPCommand
4 000000 EXTERN ECPStatus
5 000000 EXTERN PowerStatus
6 000000 EXTERN PowerDownEVM
7 000000 EXTERN DSPSoftReset
8 000000 EXTERN CheckPower
9 000000 EXTERN SWDelay100ms
10 000000 EXTERN SWDelay500ms
11 00FFF0
12 000000 EXTERN RESET
13 000000 EXTERN WARMENTRY
14 000000 EXTERN Volts1V3
15 000000 EXTERN Volts1V8
16 000000 EXTERN Volts3V3
17 000000 EXTERN VoltsECP
18 000000 EXTERN InitIR
19 00FFF0
20 000000 EXTERN IRBuffer
21 000000 EXTERN IRReadIndex
22 000000 EXTERN IRWriteIndex
23 00FFF0
24 00FFF0 ORG 0FFF0h
; I2C interrupt vector
25 00FFF0 .... DW I2C_ISR
26 00FFF2
27 000000 RSEG I2CCOMM
28 000000 RXED_OFFSET DS 0x01
29 000001 I2COFFSET DS 0x01
30 000002 I2CDATA DS 0x01
31 000003 DUMMY DS 0x01
32 000004
33 000000 RSEG I2CHW_CODE
34 000000 ; **********************************************
******************************
35 000000 ; Function: I2CBugFix
36 000000 ;
37 000000 ; Purpose: This function pulses the I2C clock
line line for one clock to
38 000000 ; get around an I2C initial lock up
bug that appears to be caused
39 000000 ; by the THS7353
40 000000 ;
41 000000 ; Inputs: None
42 000000 ;
43 000000 ; Returns: None
44 000000 ; **********************************************
******************************
45 000000 F2D00A001900 I2CBugFix bis.b #HW_SDA+HW_SCL,&P3OUT
; Set to drive SCL
46 000006
; and SDA high
47 000006 F2C00A001B00 bic.b #HW_SDA+HW_SCL,&P3SEL
; GPIO
48 00000C F2D00A001A00 bis.b #HW_SDA+HW_SCL,&P3DIR
; Outputs
49 000012 B012.... call #SWDelay100ms
; Wait 100ms
50 000016 F2C21900 bic.b #HW_SCL,&P3OUT
; SCL = 0
51 00001A B012.... call #SWDelay100ms
; Wait 100ms
52 00001E F2D21900 bis.b #HW_SCL,&P3OUT
; SCL = 1
53 000022 F2C00A001A00 bic.b #HW_SDA+HW_SCL,&P3DIR
; Make inputs
54 000028 3041 ret
55 00002A
56 00002A ; **********************************************
******************************
57 00002A ; Function: I2CInit
58 00002A ;
59 00002A ; Purpose: Initializes MSP430 HW I2C Interface
60 00002A ;
61 00002A ; Inputs: None
62 00002A ;
63 00002A ; Returns: None
64 00002A ; **********************************************
******************************
65 00002A
66 000000 PUBLIC I2CInit
67 00002A B012.... I2CInit call #I2CBugFix
; Toggle SCL
68 00002E C043.... mov.b #0x00,RXED_OFFSET
; Clear RCV Offset fl
69 000032 F2D00A001B00 bis.b #HW_SDA+HW_SCL,&P3SEL
; Config HW I2C Pins
70 000038 F2D024007000 bis.b #I2C+SYNC,&U0CTL
; Recommended
71 00003E D2C37000 bic.b #I2CEN,&U0CTL
; init procedure
72 000042 F2D020007100 bis.b #I2CSSEL1,&I2CTCTL
; SMCLK
73 000048 B24025001801 mov #ECP_I2CADDR,&I2COA
; I2C Address
74 00004E E2D25000 bis.b #OAIE,&I2CIE
; Enable START Int
75 000052 F2D010005000 bis.b #RXRDYIE,&I2CIE
; Enable RXRDYIFG Int
76 000058 F2D020005000 bis.b #TXRDYIE,&I2CIE
; Enable TXRDYIFG Int
77 00005E D2D37000 bis.b #I2CEN,&U0CTL
; Enable I2C
78 000062 3041 ret
79 000064
80 000064
81 000064 ;-----------------------------------------------
-------------------------------
82 000064 I2C_ISR; Common ISR for I2C Module
83 000064 ;-----------------------------------------------
-------------------------------
84 000064 10521C01 add &I2CIV,PC
; I2C
offset
vector
85 000068 0013 reti
; No Interrupt
86 00006A 0013 reti
; Arbitration lost
87 00006C 0013 reti
; No Acknowledge
88 00006E 053C jmp INDICATE_ECP_ADDR
; ECP Addressed
89 000070 0013 reti
; Register Acc Ready
90 000072 043C jmp RXRDY_ISR
; Receive Ready
91 000074 203C jmp TXRDY_ISR
; Transmit Ready
92 000076 0013 reti
; General Call
93 000078 0013 reti
94 00007A
95 00007A 0013 INDICATE_ECP_ADDR reti
96 00007C
97 00007C ; **********************************************
******************************
98 00007C ; RX Primary I2C ISR
99 00007C ; **********************************************
******************************
100 00007C RXRDY_ISR
101 00007C C093.... cmp.b #0x00,RXED_OFFSET
; RX'ed the offset?
102 000080 0620 jne RX_DATA
; Yes, this is data
103 000082 D0427600.... mov.b &I2CDRB,I2COFFSET
; Save the
offset
104 000088 D043.... mov.b #0x01, RXED_OFFSET
; Indicate RX offset
105 00008C 0013 reti
106 00008E RX_DATA
107 00008E 0412 PUSH R4
108 000090 0512 PUSH R5
109 000092 0E12 PUSH R14
110 000094 0F12 PUSH R15
111 000096 D0427600.... mov.b &I2CDRB,I2CDATA
; Save the
data
112 00009C 5440.... mov.b I2COFFSET,R4
; Offset
in R4
113 0000A0 5540.... mov.b I2CDATA,R5
; Written
data in
R5
114 0000A4 B012.... call #ProcessI2CWrite
; Process the data
115 0000A8 C043.... mov.b #0x00, RXED_OFFSET
; Clear RX offset flag
116 0000AC 3F41 POP R15
117 0000AE 3E41 POP R14
118 0000B0 3541 POP R5
119 0000B2 3441 POP R4
120 0000B4 0013 reti
; That's it
121 0000B6
122 0000B6 ; **********************************************
******************************
123 0000B6 ; TX Primary I2C ISR
124 0000B6 ; **********************************************
******************************
125 0000B6 TXRDY_ISR
126 0000B6 C093.... cmp.b #0x00,RXED_OFFSET
; RX'ed the offset?
127 0000BA 0520 jne TX_DATA
; Yes, transmit data
128 0000BC B012.... call #IndicateI2CError
; Master tried to read
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -