易備份在Blogger上, 以方便之後有需要的時候容易能馬上使用.
2. 使用I2C Master Driver之前, 必須要先include以下的c & h file, 才能正常使用, 檔名及路徑如
下:
- 測試的版本皆是在nRF51_SDK_9.0.0_2e23562.zip這個sdk版本下進行測試的.
- twi_hw_master.c:
\components\drivers_nrf\twi_master\incubated\
- twi_master.h:
\components\drivers_nrf\twi_master\incubated\
- twi_master_config.h:
\components\drivers_nrf\twi_master\incubated\config\
3. 接著就是使用底下的i2c.c & i2c.h 這兩個檔案就可以使用了.
i2c.c:
--------------------------------------------------------------------------------------------------------------------------
i2c.h:
--------------------------------------------------------------------------------------------------------------------------
i2c.c:
--------------------------------------------------------------------------------------------------------------------------
#include "i2c.h"
void I2C_Master_Init(void)
{
twi_master_init();
}
int I2C_Write(uint8_t DeviceAddr, uint8_t RegAddr, uint8_t* pBuffer, uint16_t NumByteToWrite)
{
#define i2c_write_data_len 6
uint8_t w2_data[i2c_write_data_len+1], i;
w2_data[0] = RegAddr;
for ( i = 0 ; i < NumByteToWrite ; i++ ) {
w2_data[i +1] = pBuffer[i];
}
if(twi_master_transfer(DeviceAddr,w2_data,NumByteToWrite+1,TWI_ISSUE_STOP) == false)
return -1;
return 0;
}
int I2C_Read(uint8_t DeviceAddr, uint8_t RegAddr, uint8_t* pBuffer, uint16_t NumByteToRead)
{
if(twi_master_transfer(DeviceAddr, &RegAddr, 1, TWI_DONT_ISSUE_STOP) == false)
return -1;
if(twi_master_transfer(DeviceAddr|TWI_READ_BIT, pBuffer, NumByteToRead, TWI_ISSUE_STOP) == false)
return -1;
return 0;
}
i2c.h:
--------------------------------------------------------------------------------------------------------------------------
#include "twi_master.h" void I2C_Master_Init(void); int I2C_Write(uint8_t DeviceAddr, uint8_t RegAddr, uint8_t* pBuffer, uint16_t NumByteToWrite); int I2C_Read(uint8_t DeviceAddr, uint8_t RegAddr, uint8_t* pBuffer, uint16_t NumByteToRead);
4. 調整i2c speed的地方在twi_master_init()裡面:
沒有留言:
張貼留言