📄 i2cbus.lst
字号:
* M16C FAMILY ASSEMBLER * SOURCE LIST Mon Sep 10 15:02:41 2001 PAGE 001
SEQ. LOC. OBJ. 0XMSDA ....*....SOURCE STATEMENT....7....*....8....*....9....*....0....*....1....*....2....*....3....*....4
1 ;;; ./i2cbus.a30 start
2 00000004h IICIPL .equ 4 ; IPL
3 00000001h DEBUG .equ 1 ;
4 .if DEBUG == 1 ;
5 000003F1h dp .equ 3f1h ;
6 000003F3h ddp .equ 3f3h ;
7 .endif ;
8 ;;; *****************************************************************************
9 ;;; PLEASE do not edit this file. Make changes for Main Clock Speed, Clock Devisor,
10 ;;; and Baudrate in I2C.H header file.
11 ;;; System Name : IIC-BUS F/W Ver1.00 (Sample I2C device driver)
12 ;;; Summary : M16C/62 revise IIC-BUS F/W ( clock is set in I2C.H header file (NO WAIT).)
13 ;;; : Multi Master
14 ;;; : BaudRate: Set in I2C.H file.
15 ;;; : Disable of Features address and 10Bit address.
16 ;;; : This program supports only C-language interface.
17 ;;; : This program can support only transmit/receive in a slave
18 ;;; as a combination format.
19 ;;; : It cannot connect C-Bus and M3Low and etc.
20 ;;; : This program cannot generate Sr.
21 ;;; : This program doesn't do whole failure restoration.
22 ;;; Date : 08/JAN/'99 (FRI)
23 ;;; Object File Name : i2cbus.a30
24 ;;; MCU Type : M3062xMx
25 ;;; Author : Copyright 1997-1999 MITSUBISHI ELECTRIC CORPORATION
26 ;;; : MITSUBISHI ELECTRIC
27 ;;; : And MITSUBISHI ELECT
28 ;;; : SEMICONDUCTOR SYSTEM
29 ;;; -----------------------------------------------------------------------------
30 ;;; IPL SET
31 00000004h STSPIPL .equ IICIPL ; IPL of stop condition.
32 00000003h S2RIPL .equ IICIPL-1 ; IPL of UART2 receive INT parity level.
33 ;;;
34 .glb _iic_ini ; Initialization function.
35 .glb _iic_stop ; I2C bus disable.
36 .glb _iic_mr_start ; Master receive start.
37 .glb _iic_mw_start ; Master write start.
38 .glb $iic_mw_end ; Master write end.
39 .glb $iic_mr_end ; Master read end.
40 .glb stsp_int ; Stop start condition interrupt.
41 .glb u2rcv_int ; Uart 2 received interrupt "ACK"
42 ;;; ---------------------------------------------------------------------------
43 ;;
44 ;;
45 00000376h U2SMR2 .equ 376h ; UART2 Special Mode Register 2.
46 00000377h U2SMR .equ 377h ; UART2 special mode register.
47 ;;; UART2
48 00000378h U2MR .equ 378h ; UART2 transmit / receive mode register.
49 00000379h U2BRG .equ 379h ; UART2 bit rate generator.
50 0000037Ah U2TB .equ 37ah ; UART2 transmit buffer register.
51 0000037Ch U2C0 .equ 37ch ; UART2 transmit / receive control register 0.
52 0000037Dh U2C1 .equ 37dh ; UART2 transmit / receive control register 1.
53 0000037Eh U2RB .equ 37eh ; UART2 receive buffer register.
54 ;;
55 0000004Ah STSPIC .equ 004ah ; Bus collision detection interrupt control register
56 00000050h S2RIC .equ 0050h ; UART2 receive interrupt control register(ACK).
57 ;;
58 000003EDh P7 .equ 3edh ; Port 7 register.
59 000003EFh PD7 .equ 3efh ; M16C port 7 directional register.
60 ;;; -----------------------------------------------------------------------------
61 .section iicbus,data,align
62 .align
* M16C FAMILY ASSEMBLER * SOURCE LIST Mon Sep 10 15:02:41 2001 PAGE 002
SEQ. LOC. OBJ. 0XMSDA ....*....SOURCE STATEMENT....7....*....8....*....9....*....0....*....1....*....2....*....3....*....4
63 00000(000002H) mw_data: .blkw 1 ; Master transmit data start address.
64 00002(000002H) mr_data: .blkw 1 ; Master receive data start address.
65 00004(000002H) slave_ram: .blkw 1 ; Transmission data start address for slave.
66 00006(000001H) mw_lng: .blkb 1 ; Master write data length.
67 00007(000001H) mr_lng: .blkb 1 ; Master read data length.
68 00008(000001H) md_cnt: .blkb 1 ; Master transmit/receive data counter.
69 00009(000001H) sd_p: .blkb 1 ; Slave data counter.
70 0000A(000001H) mw_target: .blkb 1 ; Master transmit address.
71 0000B(000001H) mr_target: .blkb 1 ; Master receive address.
72 0000C(000001H) id_adr: .blkb 1 ; ID address (CHIP DEVICE ID).
73 ;;-- Symbols declared in i2c.c ---------------------------------------------------
74 .glb _del_2usec
75 .glb _del_4usec
76 .glb _del_5usec
77 .glb _del_15usec
78 .glb _del_20usec
79 .glb _i2c_baudrate
80 ;;; ---------------------------------------------------------------------------
81 0000D(000001H) m_iic: .blkb 1 ; I2C bus mode condition.
82 ; 00: Wait mode stop to start condition.
83 ; 02: Master transmission mode.
84 ; 03: Master receive mode
85 ; 04: Slave transmit mode.
86 ; 05 Slave receive mode.
87 ; bit0 0:Write,1:Read
88 ; bit1 0:NM 1:Master
89 ; bit2 0:NM 1:Slave
90 ;;; ---------------------------------------------------------------------------
91 .section program,code,align
92 ;;; ***************************************************************************
93 ;;; ***************************************************************************
94 ;;; void iic_ini(R0L,A0)
95 ;;; I2C Bus Initialization
96 ;;; --------------------------------------------------------------------------
97 .align ;
98 00000 _iic_ini: ;
99 .if DEBUG == 1 ; ---DEBUG---
100 00000 7E9F881F bset 0,dp ; ---DEBUG---
101 .endif ; ---DEBUG---
102 00004 EB32 pushc FLG ; Push Flag register on to stack.
103 00006 EB65 fclr I ; Disable interrupts.
104 ;;; for C
105 00008 937F S and.b #7fh,R0H ;
106 0000A 070000r S mov.b R0H,id_adr ; Set ID "Device" address for slave mode.
107 0000D 734F0000r mov.w A0,slave_ram ; Set Slave transmit data start address.
108 ;;
109 00011 97FCEF03 S and.b #0fch,PD7 ; Set PD7 to input mode SDA and SCL.
110 ;;
111 00015 C7017703 S mov.b #01h,U2SMR ; Set U2SMR to I2C mode.
112 00019 C7D17603 S mov.b #0d1h,U2SMR2 ; Set to I2C mode, Clock Synch. disable, SCL wait output disab
113 ; UART2 init. bit enabled, SCL wait ou
114 ; impedance, and Start/stop condition
115 ;;
116 0001D 7E9F681F bset 0,P7 ; Set SDA output to high impedance.
117 00021 C70A7803 S mov.b #0ah,U2MR ; Set to external clock and I2C mode.
118 00025 72FF0000r7903 mov.b _i2c_baudrate,U2BRG ; Set baudrate. _i2c_baudrate is define in i2
119 0002B C7907C03 S mov.b #90h,U2C0 ; Set MSB format for I2C mode.
120 0002F C7057D03 S mov.b #05h,U2C1 ; Transmit and Reception authorized.
121 ;;
122 00033 B74A00 Z mov.b #00h,STSPIC ; Init. disable STSP interrupts.
123 00036 C7035000 S mov.b #S2RIPL,S2RIC ; UART2 receive interrupt enable.
124 ;;
* M16C FAMILY ASSEMBLER * SOURCE LIST Mon Sep 10 15:02:41 2001 PAGE 003
SEQ. LOC. OBJ. 0XMSDA ....*....SOURCE STATEMENT....7....*....8....*....9....*....0....*....1....*....2....*....3....*....4
125 0003A B70000r Z mov.b #00h,m_iic ; Init. slave wait mode counter
126 0003D B70000r Z mov.b #00h,md_cnt ; Init. master data counter.
127 00040 B70000r Z mov.b #00h,sd_p ; Init. slave data counter.
128 00043 EB33 popc FLG ; Pop flag register.
129 .if DEBUG == 1 ; ---DEBUG---
130 00045 7E8F881F bclr 0,dp ; ---DEBUG---
131 .endif ; ---DEBUG---
132 00049 F3 rts ;
133 ;;; ***************************************************************************
134 ;;; ***************************************************************************
135 ;;; unsigned char iic_kill(void)
136 ;; Disable I2C Bus. Return values are;
137 ;; 0: Stop I2C function completed.
138 ;; 1: Cannot stop I2C operation, b
139 ;; M16C is currently performing
140 ;;; --------------------------------------------------------------------------
141 .align ;
142 0004A _iic_stop: ;
143 .if DEBUG == 1 ; ---DEBUG---
144 0004A 7E9F881F bset 0,dp ; ---DEBUG---
145 .endif ; ---DEBUG---
146 0004E EB32 pushc FLG ; Push Flag register on to stack.
147 00050 EB65 fclr I ; Disable interrupt.
148 00052 7EBF0000r btst 1,m_iic ; Bit test for master or slave operation.
149 00056 6A05 jz iic_stop_slave ; If Slave mode jump to iic_stop_slave (line #161).
150 00058 iic_stop_master: ;
151 00058 C401 S mov.b #01h,R0L ; Disable I2C mode.
152 0005A FE1D B jmp iic_stop_common ; Jump to iic_stop_common (line #171).
153 0005C iic_stop_slave: ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -