@@ -68,9 +68,9 @@ static const PinMap PinMap_I2C_SCL[] = {
68
68
{NC , NC , 0 }
69
69
};
70
70
71
- static int address_save_int ;
72
- static int Byte_count ;
73
- static char address_save [4 ];
71
+ static int address_save_int [ 4 ] ;
72
+ static int Byte_count [ 4 ] ;
73
+ static u32 address_save [4 ];
74
74
static uint16_t i2c_target_addr [4 ];
75
75
static SAL_I2C_TRANSFER_BUF i2ctxtranbuf [4 ];
76
76
static SAL_I2C_TRANSFER_BUF i2crxtranbuf [4 ];
@@ -228,8 +228,8 @@ void i2c_frequency(i2c_t *obj, int hz)
228
228
229
229
inline int i2c_start (i2c_t * obj )
230
230
{
231
- address_save_int = 0 ;
232
- Byte_count = 0 ;
231
+ memset ( address_save_int , 0 , sizeof ( address_save_int )) ;
232
+ memset ( Byte_count , 0 , sizeof ( Byte_count )) ;
233
233
memset (address_save , 0 , sizeof (address_save ));
234
234
return 0 ;
235
235
}
@@ -400,24 +400,23 @@ int i2c_byte_read(i2c_t *obj, int last)
400
400
401
401
int i2c_byte_write (i2c_t * obj , int data )
402
402
{
403
- if (Byte_count < 3 ){
404
- address_save [Byte_count ]= data ;
405
- Byte_count ++ ;
406
- if (Byte_count == 3 ){
407
- address_save_int = (address_save [1 ]<<8 )+ address_save [2 ];
408
- }
409
- return 1 ;
410
- }
411
-
412
- int address = (address_save [0 ] & 0xFE ) >> 1 ;
413
- address_save [1 ]= (unsigned char )(address_save_int >> 8 );
414
- address_save [2 ]= (unsigned char )(address_save_int & 0xFF );
415
- address_save [3 ]= (unsigned char )data ;
416
-
417
403
PSAL_I2C_MNGT_ADPT pSalI2CMngtAdpt = NULL ;
418
404
PSAL_I2C_HND pSalI2CHND = NULL ;
419
405
pSalI2CMngtAdpt = & (obj -> SalI2CMngtAdpt );
420
406
pSalI2CHND = & (pSalI2CMngtAdpt -> pSalHndPriv -> SalI2CHndPriv );
407
+ u8 * dp = (u8 * )& address_save [pSalI2CHND -> DevNum ];
408
+ if (Byte_count [pSalI2CHND -> DevNum ]< 3 ){
409
+ dp [Byte_count [pSalI2CHND -> DevNum ]] = data ;
410
+ Byte_count [pSalI2CHND -> DevNum ]++ ;
411
+ if (Byte_count [pSalI2CHND -> DevNum ]== 3 ){
412
+ address_save_int [pSalI2CHND -> DevNum ] = (dp [1 ]<<8 )+ dp [2 ];
413
+ }
414
+ return 1 ;
415
+ }
416
+ int address = (dp [0 ] & 0xFE ) >> 1 ;
417
+ dp [1 ]= (unsigned char )(address_save_int [pSalI2CHND -> DevNum ] >> 8 );
418
+ dp [2 ]= (unsigned char )(address_save_int [pSalI2CHND -> DevNum ] & 0xFF );
419
+ dp [3 ]= (unsigned char )data ;
421
420
422
421
pSalI2CHND -> pInitDat -> I2CAckAddr = address ;
423
422
i2c_target_addr [pSalI2CHND -> DevNum ] = address ;
@@ -428,12 +427,12 @@ int i2c_byte_write(i2c_t *obj, int data)
428
427
pSalI2CHND -> pTXBuf -> DataLen = 3 ;
429
428
pSalI2CHND -> pTXBuf -> TargetAddr = i2c_target_addr [pSalI2CHND -> DevNum ];
430
429
pSalI2CHND -> pTXBuf -> RegAddr = 0 ;
431
- pSalI2CHND -> pTXBuf -> pDataBuf = address_save + 1 ;
430
+ pSalI2CHND -> pTXBuf -> pDataBuf = dp + 1 ;
432
431
433
432
if (RtkI2CSend (pSalI2CHND ) != HAL_OK ) {
434
433
return 0 ;
435
434
}
436
- address_save_int ++ ;
435
+ address_save_int [ pSalI2CHND -> DevNum ] ++ ;
437
436
return 1 ;
438
437
}
439
438
0 commit comments