📄 i2c.lis
字号:
0168 A898 CBI 0x15,0
016A .dbline 222
;
; if (rdack)
016A 6030 cpi R22,0
016C 6707 cpc R22,R23
016E 09F0 breq L53
0170 .dbline 223
; sda_hi(); /* release if set */
0170 A99A SBI 0x15,1
0172 L53:
0172 .dbline 225
;
; return d;
0172 042F mov R16,R20
0174 1127 clr R17
0176 .dbline -2
0176 L40:
0176 0E940000 xcall pop_gset3
017A .dbline 0 ; func end
017A 0895 ret
017C .dbsym r i 10 c
017C .dbsym r d 20 c
017C .dbsym r rdack 22 i
017C .dbfunc s i2c_select_device _i2c_select_device fI
; subaddr -> R20
; addr -> R22
.even
017C _i2c_select_device::
017C 0E940000 xcall push_gset2
0180 422F mov R20,R18
0182 602F mov R22,R16
0184 .dbline -1
0184 .dbline 230
; }
;
;
; unsigned char i2c_select_device( unsigned char addr, unsigned char subaddr )
; {
0184 .dbline 231
; if (i2c_start())
0184 77DF xcall _i2c_start
0186 1801 movw R2,R16
0188 2220 tst R2
018A 69F0 breq L56
018C .dbline 232
; {
018C .dbline 234
;
; if (i2c_putc(addr))
018C 062F mov R16,R22
018E 9FDF xcall _i2c_putc
0190 1801 movw R2,R16
0192 2220 tst R2
0194 41F0 breq L58
0196 .dbline 235
; {
0196 .dbline 236
; if (i2c_putc(subaddr))
0196 042F mov R16,R20
0198 9ADF xcall _i2c_putc
019A 1801 movw R2,R16
019C 2220 tst R2
019E 19F0 breq L60
01A0 .dbline 237
; {
01A0 .dbline 238
; return TRUE;
01A0 01E0 ldi R16,1
01A2 10E0 ldi R17,0
01A4 02C0 xjmp L55
01A6 L60:
01A6 .dbline 240
; }
; }
01A6 L58:
01A6 .dbline 241
01A6 L56:
01A6 .dbline 241
; };
01A6 .dbline 242
; return FALSE;
01A6 0027 clr R16
01A8 1127 clr R17
01AA .dbline -2
01AA L55:
01AA 0E940000 xcall pop_gset2
01AE .dbline 0 ; func end
01AE 0895 ret
01B0 .dbsym r subaddr 20 c
01B0 .dbsym r addr 22 c
01B0 .dbfunc s i2c_write _i2c_write fI
; res -> R20
; dat -> y+4
; subaddr -> R22
; addr -> R20
.even
01B0 _i2c_write::
01B0 0E940000 xcall push_gset2
01B4 622F mov R22,R18
01B6 402F mov R20,R16
01B8 .dbline -1
01B8 .dbline 254
; }
;
; /*
; * This function writes address, subaddr, and data on the I2C bus.
; * The bits in the byte are
; * sent in the order of the high bit first and the lowest bit last.
; */
;
; unsigned char i2c_write(unsigned char addr,
; unsigned char subaddr,
; unsigned char dat)
; {
01B8 .dbline 257
; unsigned char res;
;
; if (res = i2c_select_device( addr, subaddr ))
01B8 262F mov R18,R22
01BA 042F mov R16,R20
01BC DFDF xcall _i2c_select_device
01BE 1801 movw R2,R16
01C0 422D mov R20,R2
01C2 2220 tst R2
01C4 21F0 breq L63
01C6 .dbline 258
; {
01C6 .dbline 259
; res = i2c_putc(dat);
01C6 0C81 ldd R16,y+4
01C8 82DF xcall _i2c_putc
01CA 1801 movw R2,R16
01CC 422D mov R20,R2
01CE .dbline 260
01CE L63:
01CE .dbline 260
; };
01CE .dbline 263
;
; /* <<< ZRN SH0125: Modified to return FALSE if an error occured */
; i2c_stop();
01CE 67DF xcall _i2c_stop
01D0 .dbline 265
;
; return res;
01D0 042F mov R16,R20
01D2 1127 clr R17
01D4 .dbline -2
01D4 L62:
01D4 0E940000 xcall pop_gset2
01D8 .dbline 0 ; func end
01D8 0895 ret
01DA .dbsym r res 20 c
01DA .dbsym l dat 4 c
01DA .dbsym r subaddr 22 c
01DA .dbsym r addr 20 c
01DA .dbfunc s pt2320_write _pt2320_write fI
; res -> R20
; data -> R22
.even
01DA _pt2320_write::
01DA 0E940000 xcall push_gset2
01DE 602F mov R22,R16
01E0 .dbline -1
01E0 .dbline 351
; }
; /*
; unsigned char i2c_write_string( unsigned char addr, unsigned char subaddr, int count, unsigned char *data )
; {
; // int retry = 10; // SEC LEE0216
; // unsigned char retry = 10; // SEC LEE0216
;
; while (count&&ret){
; if (i2c_write(addr, subaddr, *data)){
; subaddr++;
; data++;
; count--;
; retry = 10;
; usleep(10000L);
; }
; else
; retry--;
; usleep(10000L); // sgjm wait 1ms(us_delay(1000L)-->wait 10ms(usleep(10000L)
; }
; return retry?TRUE:FALSE;
; }
; */
; /*
; unsigned char i2c_read_string( unsigned char addr, unsigned char subaddr, unsigned char count, unsigned char *data )
; {
;
; unsigned char res;
; if (res = i2c_select_device( addr, subaddr ))
; {
; if (!i2c_start()) // another start for read
; {
;
; return 0;
; }
; i2c_putc((unsigned char)(addr|1)); //set up for a read
; while (--count)
; *data++ = i2c_getc(1);
; *data = i2c_getc(0);
; }
; i2c_stop();
;
;
; return res;
; }
;
; */
;
;
; /*
; BOOL i2c_read_string( unsigned char addr, unsigned char subaddr, int count, unsigned char *data )
; {
; BYTE i ;
;
; // set up for reads starting at address 0
; if ( i2c_select_device( addr, subaddr ) ) {
; // send a second start
; i2c_start() ;
; if ( i2c_putc( addr | 1 ) ) {
; for ( i=0 ; i<count ; i++ ) {
;
; data[i] = ( i2c_getc() ) ;
; if ( i != (count-1) )
; i2c_ack() ;
; else {
; i2c_clock() ;
; i2c_stop() ;
; }
; }
; return ( TRUE ) ;
; }
; else {
; i2c_stop() ;
; return ( FALSE ) ;
; }
; }
; else
; i2c_stop() ;
; return ( FALSE ) ;
;
; }*/
;
; #define PT2320_ADD 0x88
;
;
; unsigned char pt2320_write(unsigned char data)
; {
01E0 .dbline 357
;
; register unsigned char res;
;
; //res=i2c_select_device(PT2314_ADD,data);
;
; if (res=i2c_start())
01E0 49DF xcall _i2c_start
01E2 1801 movw R2,R16
01E4 422D mov R20,R2
01E6 2220 tst R2
01E8 51F0 breq L66
01EA .dbline 358
; {
01EA .dbline 359
; if (res=i2c_putc(PT2320_ADD))
01EA 08E8 ldi R16,136
01EC 70DF xcall _i2c_putc
01EE 1801 movw R2,R16
01F0 422D mov R20,R2
01F2 2220 tst R2
01F4 21F0 breq L68
01F6 .dbline 360
; {
01F6 .dbline 362
;
; res=i2c_putc(data);
01F6 062F mov R16,R22
01F8 6ADF xcall _i2c_putc
01FA 1801 movw R2,R16
01FC 422D mov R20,R2
01FE .dbline 364
;
; }
01FE L68:
01FE .dbline 365
; }
01FE L66:
01FE .dbline 366
; i2c_stop();
01FE 4FDF xcall _i2c_stop
0200 .dbline 367
; return res;
0200 042F mov R16,R20
0202 1127 clr R17
0204 .dbline -2
0204 L65:
0204 0E940000 xcall pop_gset2
0208 .dbline 0 ; func end
0208 0895 ret
020A .dbsym r res 20 c
020A .dbsym r data 22 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -