Browsing this Thread:
1 Anonymous Users
|
Re: 請問--dsPIC30F Peripheral Module -- I2C 裡的練習一
|
|
版主
Joined
: 2004/4/30 10:53 最後登入時間
: 2021/11/30 18:11
From CAE, Microchip
Group:
站務管理者 註冊會員
Level : 75 HP : 744 / 1861 MP : 5367 / 111025 EXP : 45
|
發表於: 2008/9/9 15:56
|
|
|
請問--dsPIC30F Peripheral Module -- I2C 裡的練習一
|
|
新會員
Joined
: 2008/9/2 14:36 最後登入時間
: 2008/11/18 15:06
Group:
註冊會員
Level : 2 HP : 0 / 40 MP : 5 / 1909 EXP : 62
|
dsPIC30F Peripheral Module -- I2C 裡的練習一
我用示波器量測 SDA & SCL 發現它固定傳出資料在此 請問它的值代表的意義或是哪一個變數之值。。謝謝 *********************** #include <p30F4011.h> #include <I2C.h> #include "I2CSubs.h"
#define REPORT_NACK { \ IFS0bits.MI2CIF = 0 ; \ StopI2C( ) ; \ while ( I2CCONbits.PEN ) ; \ return -1 ; \ }
unsigned char I2C_ACKPolling(unsigned char CMD) { unsigned char ACK_Result ; IdleI2C( ) ; StartI2C( ) ; while ( I2CCONbits.SEN) ; // Send START bit ! SEN will be clear automatically once START bits completed IFS0bits.MI2CIF = 0 ; MasterWriteI2C((CMD & 0xFE)) ; while(! IFS0bits.MI2CIF ) ; // MI2CIF will be clear after data transmitted completely ! if ( I2CSTATbits.ACKSTAT ) ACK_Result = 1 ; else ACK_Result = 0 ; IFS0bits.MI2CIF = 0 ; StopI2C( ) ; while ( I2CCONbits.PEN ) ; return ACK_Result ; }
void Init_I2C(void) { unsigned int config1 , config2 ;
config2 = 0xff; config1 = I2C_ON & I2C_IDLE_STOP&I2C_CLK_REL & I2C_IPMI_DIS & I2C_7BIT_ADD & I2C_SLW_DIS & I2C_SM_DIS & I2C_GCALL_DIS & I2C_STR_DIS & I2C_NACK & I2C_ACK_DIS & I2C_RCV_DIS & I2C_STOP_DIS & I2C_RESTART_DIS & I2C_START_DIS ;
ConfigIntI2C(MI2C_INT_OFF & MI2C_INT_PRI_0 ) ; OpenI2C(config1,config2) ;
// TRISFbits.TRISF2 = 1 ; // TRISFbits.TRISF3 = 1 ; }
int EEPROM_ByteWrite(unsigned char CMD , unsigned char Addr , unsigned char Data ) { IdleI2C( ) ; StartI2C( ) ;
while ( I2CCONbits.SEN) ; // Send START bit ! SEN will be clear automatically once START bits completed
IFS0bits.MI2CIF = 0 ; MasterWriteI2C((CMD & 0xFE)) ; while(! IFS0bits.MI2CIF ) ; // MI2CIF will be clear after data transmitted completely !
if ( I2CSTATbits.ACKSTAT ) REPORT_NACK
IFS0bits.MI2CIF = 0 ; MasterWriteI2C(Addr) ; while(! IFS0bits.MI2CIF ) ;
if ( I2CSTATbits.ACKSTAT ) REPORT_NACK
IFS0bits.MI2CIF = 0 ; MasterWriteI2C(Data) ; while(! IFS0bits.MI2CIF ) ;
if ( I2CSTATbits.ACKSTAT ) REPORT_NACK
IFS0bits.MI2CIF = 0 ; StopI2C( ) ; while ( I2CCONbits.PEN ) ;
return 0 ;
}
int EEPROM_ByteRead(unsigned char CMD , unsigned char Addr ) { unsigned char Temp_Buffer ;
unsigned ReadDelay ; IdleI2C( ) ; StartI2C( ) ; while ( I2CCONbits.SEN) ;
IFS0bits.MI2CIF = 0 ; MasterWriteI2C((CMD & 0xFE)) ; // Mask bit 0 -> Write command while(! IFS0bits.MI2CIF ) ;
if ( I2CSTATbits.ACKSTAT ) REPORT_NACK
IFS0bits.MI2CIF = 0 ; MasterWriteI2C(Addr) ; while(! IFS0bits.MI2CIF ) ;
if ( I2CSTATbits.ACKSTAT ) REPORT_NACK
IFS0bits.MI2CIF = 0 ; RestartI2C( ) ; while ( I2CCONbits.RSEN) ;
IFS0bits.MI2CIF = 0 ; MasterWriteI2C((CMD | 0x01)) ; // Set bit 0 for "Read" command while(! IFS0bits.MI2CIF ) ;
if ( I2CSTATbits.ACKSTAT ) REPORT_NACK
IFS0bits.MI2CIF = 0 ;
Temp_Buffer = MasterReadI2C( ) ; while(! IFS0bits.MI2CIF ) ;
IFS0bits.MI2CIF = 0 ; NotAckI2C( ) ; while(! IFS0bits.MI2CIF ) ; IFS0bits.MI2CIF = 0 ;
StopI2C( ) ; while ( I2CCONbits.PEN ) ;
return (int)Temp_Buffer ;
}
發表於: 2008/9/9 15:34
|
|
You can view topic.
你 不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.