You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
8.0 KiB
Plaintext
186 lines
8.0 KiB
Plaintext
1 .file "i2c.c"
|
|
2 __SP_H__ = 0x3e
|
|
3 __SP_L__ = 0x3d
|
|
4 __SREG__ = 0x3f
|
|
5 __RAMPZ__ = 0x3b
|
|
6 __tmp_reg__ = 0
|
|
7 __zero_reg__ = 1
|
|
8 .text
|
|
9 .Ltext0:
|
|
10 .cfi_sections .debug_frame
|
|
11 .global i2c_init
|
|
13 i2c_init:
|
|
14 .LFB0:
|
|
15 .file 1 "src/i2c.c"
|
|
1:src/i2c.c **** #include "i2c.h"
|
|
2:src/i2c.c **** #include "pinout.h"
|
|
3:src/i2c.c **** #include <util/twi.h>
|
|
4:src/i2c.c **** #include <avr/io.h>
|
|
5:src/i2c.c ****
|
|
6:src/i2c.c ****
|
|
7:src/i2c.c **** void i2c_init(void)
|
|
8:src/i2c.c **** {
|
|
16 .loc 1 8 0
|
|
17 .cfi_startproc
|
|
18 /* prologue: function */
|
|
19 /* frame size = 0 */
|
|
20 /* stack size = 0 */
|
|
21 .L__stack_usage = 0
|
|
9:src/i2c.c **** /* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */
|
|
10:src/i2c.c ****
|
|
11:src/i2c.c **** TWSR = 1; /* no prescaler */
|
|
22 .loc 1 11 0
|
|
23 0000 81E0 ldi r24,lo8(1)
|
|
24 0002 8093 B900 sts 185,r24
|
|
12:src/i2c.c **** TWBR = ((F_CPU/SCL_CLOCK)-16)/2; /* must be > 10 for stable operation */
|
|
25 .loc 1 12 0
|
|
26 0006 8BE4 ldi r24,lo8(75)
|
|
27 0008 8093 B800 sts 184,r24
|
|
28 000c 0895 ret
|
|
29 .cfi_endproc
|
|
30 .LFE0:
|
|
32 .global i2c_start
|
|
34 i2c_start:
|
|
35 .LFB1:
|
|
13:src/i2c.c ****
|
|
14:src/i2c.c **** }
|
|
15:src/i2c.c ****
|
|
16:src/i2c.c ****
|
|
17:src/i2c.c **** unsigned char i2c_start(unsigned char address){
|
|
36 .loc 1 17 0
|
|
37 .cfi_startproc
|
|
38 .LVL0:
|
|
39 /* prologue: function */
|
|
40 /* frame size = 0 */
|
|
41 /* stack size = 0 */
|
|
42 .L__stack_usage = 0
|
|
18:src/i2c.c **** char DATA = 0b10011000;
|
|
19:src/i2c.c **** //Send START condition
|
|
20:src/i2c.c **** TWCR = (1<<TWINT)|
|
|
43 .loc 1 20 0
|
|
44 000e 94EA ldi r25,lo8(-92)
|
|
45 0010 9093 BC00 sts 188,r25
|
|
46 .L4:
|
|
21:src/i2c.c **** (1<<TWSTA)|
|
|
22:src/i2c.c **** (1<<TWEN);
|
|
23:src/i2c.c ****
|
|
24:src/i2c.c **** //Wait for TWINT Flag set. This indicates that the START condition has been transmitted.
|
|
25:src/i2c.c **** while (!(TWCR &(1<<TWINT)));
|
|
47 .loc 1 25 0 discriminator 1
|
|
48 0014 9091 BC00 lds r25,188
|
|
49 0018 97FF sbrs r25,7
|
|
50 001a 00C0 rjmp .L4
|
|
26:src/i2c.c ****
|
|
27:src/i2c.c **** //Check value of TWI Status Register. Mask prescaler bits. If status different from START go to ER
|
|
28:src/i2c.c **** if ((TWSR & 0xF8) != TW_START){
|
|
51 .loc 1 28 0
|
|
52 001c 9091 B900 lds r25,185
|
|
29:src/i2c.c **** //ERROR();
|
|
30:src/i2c.c **** }
|
|
31:src/i2c.c ****
|
|
32:src/i2c.c **** //Load SLA_W into TWDR Register. Clear TWINT bit in TWCR to start transmission of address.
|
|
33:src/i2c.c **** TWDR = address + I2C_WRITE;
|
|
53 .loc 1 33 0
|
|
54 0020 8093 BB00 sts 187,r24
|
|
34:src/i2c.c **** TWCR = (1<<TWINT) |
|
|
55 .loc 1 34 0
|
|
56 0024 84E8 ldi r24,lo8(-124)
|
|
57 .LVL1:
|
|
58 0026 8093 BC00 sts 188,r24
|
|
59 .LVL2:
|
|
60 .L6:
|
|
35:src/i2c.c **** (1<<TWEN);
|
|
36:src/i2c.c ****
|
|
37:src/i2c.c **** //Wait for TWINT Flag set. This indicates that the SLA+W has been transmitted, and ACK/NACK has be
|
|
38:src/i2c.c **** while (!(TWCR & (1<<TWINT)));
|
|
61 .loc 1 38 0 discriminator 1
|
|
62 002a 8091 BC00 lds r24,188
|
|
63 002e 87FF sbrs r24,7
|
|
64 0030 00C0 rjmp .L6
|
|
39:src/i2c.c ****
|
|
40:src/i2c.c **** //Check value of TWI Status Register. Mask prescaler bits. If status different from MT_SLA_ACK go
|
|
41:src/i2c.c **** if ((TWSR & 0xF8) != TW_MT_SLA_ACK){
|
|
65 .loc 1 41 0
|
|
66 0032 8091 B900 lds r24,185
|
|
42:src/i2c.c **** // ERROR();
|
|
43:src/i2c.c **** }
|
|
44:src/i2c.c ****
|
|
45:src/i2c.c **** //Load DATA into TWDR Register. Clear TWINT bit in TWCR to start transmission of data.
|
|
46:src/i2c.c **** TWDR = DATA;
|
|
67 .loc 1 46 0
|
|
68 0036 88E9 ldi r24,lo8(-104)
|
|
69 0038 8093 BB00 sts 187,r24
|
|
47:src/i2c.c **** TWCR = (1<<TWINT) |
|
|
70 .loc 1 47 0
|
|
71 003c 84E8 ldi r24,lo8(-124)
|
|
72 003e 8093 BC00 sts 188,r24
|
|
73 .L8:
|
|
48:src/i2c.c **** (1<<TWEN);
|
|
49:src/i2c.c ****
|
|
50:src/i2c.c **** //Wait for TWINT Flag set. This indicates that the DATA has been transmitted, and ACK/NACK has bee
|
|
51:src/i2c.c **** while (!(TWCR &(1<<TWINT)));
|
|
74 .loc 1 51 0 discriminator 1
|
|
75 0042 8091 BC00 lds r24,188
|
|
76 0046 87FF sbrs r24,7
|
|
77 0048 00C0 rjmp .L8
|
|
52:src/i2c.c ****
|
|
53:src/i2c.c **** //Check value of TWI Status Register. Mask prescaler bits. If status different from MT_DATA_ACK go
|
|
54:src/i2c.c **** if ((TWSR & 0xF8) != TW_MT_DATA_ACK){
|
|
78 .loc 1 54 0
|
|
79 004a 8091 B900 lds r24,185
|
|
55:src/i2c.c **** // ERROR();
|
|
56:src/i2c.c **** }
|
|
57:src/i2c.c ****
|
|
58:src/i2c.c **** //Transmit STOP condition
|
|
59:src/i2c.c **** TWCR = (1<<TWINT)|
|
|
80 .loc 1 59 0
|
|
81 004e 84E9 ldi r24,lo8(-108)
|
|
82 0050 8093 BC00 sts 188,r24
|
|
60:src/i2c.c **** (1<<TWEN) |
|
|
61:src/i2c.c **** (1<<TWSTO);
|
|
62:src/i2c.c ****
|
|
63:src/i2c.c ****
|
|
64:src/i2c.c **** /*
|
|
65:src/i2c.c **** TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);
|
|
66:src/i2c.c **** while (!(TWCR & (1<<TWINT)));
|
|
67:src/i2c.c **** if ((TWSR & 0xF8) != TW_START)
|
|
68:src/i2c.c **** return 1;
|
|
69:src/i2c.c **** //ERROR(); //Fehlerbehandlung
|
|
70:src/i2c.c **** TWDR = address + I2C_WRITE;
|
|
71:src/i2c.c **** TWCR = (1<<TWINT) | (1<<TWEN);
|
|
72:src/i2c.c **** while (!(TWCR & (1<<TWINT)));
|
|
73:src/i2c.c **** if ((TWSR & 0xF8) != TW_MT_SLA_ACK)
|
|
74:src/i2c.c **** //ERROR();
|
|
75:src/i2c.c **** return 2;
|
|
76:src/i2c.c ****
|
|
77:src/i2c.c **** TWDR = address;
|
|
78:src/i2c.c **** TWCR = (1<<TWINT) | (1<<TWEN);
|
|
79:src/i2c.c **** while (!(TWCR & (1<<TWINT)));
|
|
80:src/i2c.c **** if ((TWSR & 0xF8) != TW_MT_DATA_ACK)
|
|
81:src/i2c.c **** return 3;
|
|
82:src/i2c.c **** //ERROR();
|
|
83:src/i2c.c **** TWCR = (1<<TWINT)|(1<<TWEN)|
|
|
84:src/i2c.c **** (1<<TWSTO);
|
|
85:src/i2c.c **** */
|
|
86:src/i2c.c **** return 0;
|
|
87:src/i2c.c **** }
|
|
83 .loc 1 87 0
|
|
84 0054 80E0 ldi r24,0
|
|
85 0056 0895 ret
|
|
86 .cfi_endproc
|
|
87 .LFE1:
|
|
89 .Letext0:
|
|
90 .file 2 "/usr/local/CrossPack-AVR-20131216/avr/include/stdint.h"
|
|
DEFINED SYMBOLS
|
|
*ABS*:00000000 i2c.c
|
|
/var/folders/vp/mj8sv_kj3c1gtbdcbb9v8gb80000gn/T//ccKg5qqS.s:2 *ABS*:0000003e __SP_H__
|
|
/var/folders/vp/mj8sv_kj3c1gtbdcbb9v8gb80000gn/T//ccKg5qqS.s:3 *ABS*:0000003d __SP_L__
|
|
/var/folders/vp/mj8sv_kj3c1gtbdcbb9v8gb80000gn/T//ccKg5qqS.s:4 *ABS*:0000003f __SREG__
|
|
/var/folders/vp/mj8sv_kj3c1gtbdcbb9v8gb80000gn/T//ccKg5qqS.s:5 *ABS*:0000003b __RAMPZ__
|
|
/var/folders/vp/mj8sv_kj3c1gtbdcbb9v8gb80000gn/T//ccKg5qqS.s:6 *ABS*:00000000 __tmp_reg__
|
|
/var/folders/vp/mj8sv_kj3c1gtbdcbb9v8gb80000gn/T//ccKg5qqS.s:7 *ABS*:00000001 __zero_reg__
|
|
/var/folders/vp/mj8sv_kj3c1gtbdcbb9v8gb80000gn/T//ccKg5qqS.s:13 .text:00000000 i2c_init
|
|
/var/folders/vp/mj8sv_kj3c1gtbdcbb9v8gb80000gn/T//ccKg5qqS.s:34 .text:0000000e i2c_start
|
|
|
|
NO UNDEFINED SYMBOLS
|