⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.lis

📁 sunplus spca514 cdmp3 源码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -