📄 8733_i2c-master.lst
字号:
1 ;****************************************************************;
2 ; TILTE: eKTP8733 I2C TRANSMISSION DEMO CODE ;
3 ; FUNCTION: eKTP8733 I2C FUNCTION ;
4 ; COMPANY: ELAN MICROELECTRONICS (SZ) LTD. ;
5 ;****************************************************************;
6 ; 该范例用eKTP8733读写24C01,可读写单字节或多字节数据. Fc: IRC 4MHz
7 ;-----------------------------------------------------------------
8 ; bank 0
9 0000 R0 == 0x00 ; Indirect Address Register
10 0002 PC == 0x02 ; Program Counter & Stack
11 0003 STATUS == 0x03 ;
12 0000 C == 0 ; Carry flag
13 0002 Z == 2 ; Zero flag
14 0004 R4 == 0x04 ; RAM Select Register
15 0005 PORT5 == 0x05 ; PORT5 I/O register
16 0006 PORT6 == 0x06 ; PORT6 I/O register
17 0007 PORT7 == 0x07 ; PORT7 I/O register
18 0008 PORT8 == 0x08 ; PORT8 I/O register
19 000E B0RE == 0x0E
20 000E ISR1 == 0x0E ; Interrupt status register 1
21 0004 TCIF == 4 ; TCC interrupt flag
22 000F B0RF == 0x0F
23 000F ISR2 == 0x0F ; Interrupt status register 2
24 0007 I2CRIF == 7
25 0006 I2CTIF == 6
26 ; bank 1
27 0005 IOC5 == 0x05 ; PORT5 I/O control register
28 0006 IOC6 == 0x06 ; PORT6 I/O control register
29 0007 IOC7 == 0x07 ; PORT7 I/O control register
30 0008 IOC8 == 0x08 ; PORT8 I/O control register
31 000C WDTCR == 0x0C ; WDT timer control register
32 000E B1RE == 0x0E
33 000E IMR1 == 0x0E ; Interrupt mask register 1
34 000F B1RF == 0x0F
35 000F IMR2 == 0x0F ; Interrupt mask register 2
36 ; bank 2
37 0005 TCCCR == 0x05 ; Time Clock/Counter control register
38 ; bank 3
39 0005 TCC == 0x05 ; Time Clock/Counter
40 0006 COBS1 == 0x06 ; Code option: Type&IRC calibration register
41 0007 COBS2 == 0x07 ; Code option: LVR, Noise, IRC, RCOUT regist
42 000B I2CCR2 == 0x0B ; I2C status and control register 2
43 000C I2CCR1 == 0x0C ; I2C status and control register 1
44 0007 Strobe == 7
45 0007 Pend == 7
46 0006 IMR == 6 ; I2C master/slave mode select bit
47 0005 ISS == 5 ; I2C Fast/Standard mode select bit
48 0004 STOP == 4 ;
49 0003 SAR_EMPTY == 3
50 0002 ACK == 2
51 0001 FULL == 1
52 0000 EMPTY == 0
53 000D I2CSA == 0x0D ; I2C slave address register
54 000E I2CDA == 0x0E ; I2C Device address register
55 000F I2CDB == 0x0F ; I2C data buffer
56 ;
57 001F BUFFER == 0x1F ; Data buffer
58 ;-----------------------------------------------------------------
59 ORG 0x00
60 00000 1458 JMP Main
61 ORG 0X12 ; I2C interrupt vector
62 00012 1EB0 LJMP I2C_INT ; To I2C interrupt program
62 00013 0050 LJMP I2C_INT ; To I2C interrupt program
63 ORG 0x50
64 ;-----------------------------------------------------------------
65 00050 I2C_INT:
66 00050 1E90 BANK 0
67 00051 0FCF JBS ISR2, I2CRIF
68 00052 1454 JMP NOT_RINT
69 00053 09CF BC ISR2, I2CRIF
70 ; User code
71 ; ...
72 00054 NOT_RINT:
73 00054 0F8F JBS ISR2, I2CTIF
74 00055 1457 JMP I2C_INT_RET
75 00056 098F BC ISR2, I2CTIF
76 ; User code
77 ; ...
78 00057 I2C_INT_RET:
79 00057 0013 RETI
80 ;-----------------------------------------------------------------
81 00058 Main:
82 00058 0000 NOP
83 00059 1E90 BANK 0
84 0005A 00C5 CLR PORT5 ; PORT5 output logic "0"
85 0005B 00C6 CLR PORT6 ; PORT6 output logic "0"
86 0005C 00C7 CLR PORT7 ; PORT7 output logic "0"
87 0005D 00C8 CLR PORT8 ; PORT8 output logic "0"
88 0005E 1E91 BANK 1
89 0005F 00C5 CLR IOC5 ; Set port5 as output pin
90 00060 00C6 CLR IOC6 ; Set port6 as output pin
91 00061 00C7 CLR IOC7 ; Set port7 as output pin
92 00062 00C8 CLR IOC8 ; Set port8 as output pin
93 00063 1800 MOV A, @0x00
94 00064 004C MOV WDTCR, A ; Disable WDT
95 00065 1810 MOV A, @0x10
96 00066 004E MOV IMR1, A ; Enable TCC interrupt
97 00067 1800 MOV A, @0x00
98 00068 004F MOV IMR2, A ; Disable I2C interrupt
99 00069 1E92 BANK 2
100 0006A 180D MOV A, @0x0D
101 0006B 0045 MOV TCCCR, A ; TCC rate --> 1:256
102 0006C 1E93 BANK 3
103 0006D 183F MOV A, @0x3F ; Select ekt8733, irc: 1*F
104 0006E 0046 MOV COBS1, A
105 0006F 1830 MOV A, @0x30 ; Select IRC 4MHz
106 00070 0047 MOV COBS2, A
107 00071 00C5 CLR TCC
108 00072 1E93 BANK 3
109 00073 1831 MOV A, @00110001b ; I2C clock source select Fm and Enable I2C
110 00074 004B MOV I2CCR2, A
111 00075 0B8C BS I2CCR1, IMR ; Select master mode
112 00076 094C Bc I2CCR1, ISS ; Select standard mode
113 ;-----------------------------------------------------------------
114 00077 MainStart:
115 ;---------------------------------------------------------
116 ; Write 8bytes data to 0x00~0x0F address of 24C01
117 ;---------------------------------------------------------
118 00077 1808 MOV A, @0x08
119 00078 005F MOV BUFFER, A
120 ;
121 00079 1E93 BANK 3
122 0007A 18A0 MOV A, @10100000b ; Write command word (Write data)
123 0007B 004D MOV I2CSA, A
124 0007C 0BCC BS I2CCR1, Strobe
125 0007D 0ECC JBS I2CCR1, SAR_EMPTY
126 0007E 147D JMP $-1
127 ;
128 0007F 1800 MOV A, @0x00 ; Write first address of 24C01
129 00080 004F MOV I2CDB, A
130 00081 0BCC BS I2CCR1, Strobe
131 00082 0E0C JBS I2CCR1, EMPTY
132 00083 1482 JMP $-1
133 ;
134 00084 WriteDataLp:
135 00084 041F MOV A, BUFFER ; Write data
136 00085 10BB CALL Data_Tbl
137 00086 004F MOV I2CDB, A
138 00087 0BCC BS I2CCR1, Strobe
139 00088 041F MOV A, BUFFER
140 00089 1B01 XOR A, @0x01
141 0008A 0C83 JBC status, Z
142 0008B 0B0C BS I2CCR1, STOP
143 0008C 0E0C JBS I2CCR1, EMPTY
144 0008D 148C JMP $-1
145 0008E 05DF DJZ BUFFER
146 0008F 1484 JMP WriteDataLp
147 ;
148 00090 1E90 BANK 0
149 00091 00C5 CLR TCC
150 00092 0F0E JBS ISR1, TCIF ; Wait for about 4.096ms to write data
151 00093 1492 JMP $-1
152 00094 00CE CLR ISR1 ; Clear TCC flag
153 ;---------------------------------------------------------
154 ; Read 8 byte data from 24C01
155 ;---------------------------------------------------------
156 00095 1E93 BANK 3
157 00096 18A0 MOV A, @10100000b ; Write command word (Write data)
158 00097 004D MOV I2CSA, A
159 00098 0BCC BS I2CCR1, Strobe
160 00099 0ECC JBS I2CCR1, SAR_EMPTY
161 0009A 1499 JMP $-1
162 ;
163 0009B 1800 MOV A, @0x00 ; Write first address of 24C01
164 0009C 004F MOV I2CDB, A
165 0009D 0BCC BS I2CCR1, Strobe
166 0009E 0E0C JBS I2CCR1, EMPTY
167 0009F 149E JMP $-1
168 ;
169 000A0 1808 MOV A, @8
170 000A1 005F MOV BUFFER, A
171 000A2 1810 MOV A, @0x10
172 000A3 0044 MOV R4, A
173 ;
174 000A4 18A1 MOV A, @10100001b ; Write command word (Read data)
175 000A5 004D MOV I2CSA, A
176 000A6 0BCC BS I2CCR1, Strobe
177 000A7 0ECC JBS I2CCR1, SAR_EMPTY
178 000A8 14A7 JMP $-1
179 ;
180 000A9 ReadDataLp:
181 000A9 0BCC BS I2CCR1, Strobe
182 000AA 041F MOV A, BUFFER
183 000AB 1B01 XOR A, @0x01
184 000AC 0C83 JBC status, Z
185 000AD 0B0C BS I2CCR1, STOP
186 000AE 0000 NOP
187 000AF 0E4C JBS I2CCR1, FULL
188 000B0 14AF JMP $-1
189 000B1 040F MOV A, I2CDB
190 000B2 0040 MOV R0, A
191 000B3 0544 INC R4
192 000B4 05DF DJZ BUFFER
193 000B5 14A9 JMP ReadDataLp
194 000B6 1E90 BANK 0
195 000B7 0000 NOP
196 000B8 0000 NOP
197 000B9 0000 NOP
198 000BA 14BA JMP $
199 ;---------------------------------------------------------
200 000BB Data_Tbl:
201 000BB 03C2 ADD PC, A
202 000BC 0012 RET ; 0
203 000BD 1C07 RETL 0x07 ; 1
204 000BE 1C06 RETL 0x06 ; 2
205 000BF 1C05 RETL 0x05 ; 3
206 000C0 1C04 RETL 0x04 ; 4
207 000C1 1C03 RETL 0x03 ; 5
208 000C2 1C02 RETL 0x02 ; 6
209 000C3 1C01 RETL 0x01 ; 7
210 000C4 1C00 RETL 0x00 ; 8
211 END
212 ;-----------------------------------------------------------------
0 Error(s), 0 Warning(s), 0 User Message(s)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -