板上各位前輩好,
目前欲嘗試24LC64這EEPROM, 硬件上的接法是
A0, A1, A2, Vss, WP --> GND
Vcc --> 3.3V
SCL--> PA6
SDA-->PA7
-----------------------------------------------------------------
程式功能是想要傳送一個byte資料後, 馬上進行讀取剛剛寫入的值, 但卻無法達到此目的, 程式碼如附件, 請各位前輩指教何處有問題!
//=====================================// // Testing Item : // I2C 24LC64 EEPROM //=====================================// #include"hw_types.h" #include"hw_memmap.h" #include"gpio.h" #include"sysctl.h" #include"hw_ints.h" #include"hw_timer.h" #include"interrupt.h" #include"pin_map.h" #include"timer.h" #include"uart.h" #include"uartstdio.h" #include "hw_gpio.h" #include "hw_i2c.h" #include "i2c.h" void Init_Clk( void ) ; void Init_Timer( void ) ; void Timer0_ISR( void ) ; void Init_I2C( void ) ; //===============================================================// volatile long Cnt32_1 = 0, Cnt32_2 = 0, Cnt32_3 = 0, i = 0 ; //================================================================// void Init_Clk( void ) { SysCtlClockSet( SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN ) ; } //----------------------------------------------------------------// void Init_Timer( void ) { SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ) ; TimerConfigure( TIMER0_BASE, TIMER_CFG_PERIODIC ) ; TimerLoadSet(TIMER0_BASE, TIMER_A, 80000); TimerIntRegister( TIMER0_BASE, TIMER_A, Timer0_ISR ) ; TimerIntEnable( TIMER0_BASE, TIMER_TIMA_TIMEOUT ) ; IntEnable(INT_TIMER0A); TimerEnable( TIMER0_BASE, TIMER_A ) ; } //----------------------------------------------------------------// void Init_I2C( void ) { // �f�tMicochip 24CL64. // �B��I2C1 - SCL:PA6, SDA:PA7. //---------------<Initial>-------------------// SysCtlPeripheralEnable( SYSCTL_PERIPH_I2C1 ) ; I2CMasterInitExpClk(I2C1_MASTER_BASE, SysCtlClockGet(), false); SysCtlPeripheralEnable(I2C1_MASTER_BASE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinTypeI2C (GPIO_PORTA_BASE, GPIO_PIN_6 | GPIO_PIN_7); I2CMasterInit (I2C1_MASTER_BASE, false); //---------------<Write>-------------------// I2CMasterSlaveAddrSet(I2C1_MASTER_BASE, 0x00, false); I2CMasterDataPut(I2C1_MASTER_BASE, 0x08); I2CMasterControl(I2C1_MASTER_BASE, I2C_MASTER_CMD_SINGLE_SEND); while(I2CMasterBusBusy(I2C1_MASTER_BASE)) ; for (i = 0; i < 1500; i++) ; //---------------<Read_1>-------------------// I2CMasterSlaveAddrSet(I2C1_MASTER_BASE, 0x00, true); I2CMasterControl(I2C1_MASTER_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); while(I2CMasterBusBusy(I2C1_MASTER_BASE)) ; Cnt32_2 = I2CMasterDataGet( I2C1_MASTER_BASE ) ; for (i = 0; i < 1500; i++) ; } //----------------------------------------------------------------// void Timer0_ISR( void ) { TimerIntClear( TIMER0_BASE, TIMER_TIMA_TIMEOUT ) ; TimerLoadSet(TIMER0_BASE, TIMER_A, 80000); //100us���_�@�� Init_I2C( ) ; } //================================================================// void main( void ) { Init_Clk( ) ; Init_Timer( ) ; while( 1 ) { ; } }