void inline static mcp7941x_setup(void) { FUNC_PREFIX(i2c_setSlaveAddress(i2c_mcp7941x_slave_address)); #ifdef __AVR_ARCH__ #else bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); #endif }
// set I2C clock divider by means of a baudrate number void bcm2835_i2c_set_baudrate(uint32_t baudrate) { uint32_t divider; // use 0xFFFE mask to limit a max value and round down any odd number divider = (BCM2835_CORE_CLK_HZ / baudrate) & 0xFFFE; bcm2835_i2c_setClockDivider( (uint16_t)divider ); }
uint16_t SlushBoard::getTempRaw(void) { uint8_t buf[2] = { 0, 0 }; bcm2835_i2c_setSlaveAddress(MAX1164_I2C_ADDRESS); bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_626); (void) bcm2835_i2c_read((char *) buf, (uint32_t) 2); return (uint16_t) ((uint16_t) buf[0] << 8 | (uint16_t) buf[1]); }
int main(int argc, char **argv) { printf("Running ... \n"); // parse the command line if (comparse(argc, argv) == EXIT_FAILURE) return showusage (EXIT_FAILURE); if (!bcm2835_init()) { printf("bcm2835_init failed. Are you running as root??\n"); return 1; } // I2C begin if specified if (init == I2C_BEGIN) { if (!bcm2835_i2c_begin()) { printf("bcm2835_i2c_begin failed. Are you running as root??\n"); return 1; } } // If len is 0, no need to continue, but do I2C end if specified if (len == 0) { if (init == I2C_END) bcm2835_i2c_end(); printf("... done!\n"); return EXIT_SUCCESS; } bcm2835_i2c_setSlaveAddress(slave_address); bcm2835_i2c_setClockDivider(clk_div); fprintf(stderr, "Clock divider set to: %d\n", clk_div); fprintf(stderr, "len set to: %d\n", len); fprintf(stderr, "Slave address set to: %d\n", slave_address); if (mode == MODE_READ) { for (i=0; i<MAX_LEN; i++) buf[i] = 'n'; data = bcm2835_i2c_read(buf, len); printf("Read Result = %d\n", data); for (i=0; i<MAX_LEN; i++) { if(buf[i] != 'n') printf("Read Buf[%d] = %x\n", i, buf[i]); } } if (mode == MODE_WRITE) { data = bcm2835_i2c_write(wbuf, len); printf("Write Result = %d\n", data); } // This I2C end is done after a transfer if specified if (init == I2C_END) bcm2835_i2c_end(); bcm2835_close(); printf("... done!\n"); return 0; }
int MAG3110_Init() { char v = 0; bcm2835_i2c_begin(); bcm2835_i2c_setClockDivider(2500); MAG3110_WRITE_REGISTER(16, 0); v = MAG3110_READ_REGISTER(7); if (v == 0xc4) { MAG3110_WRITE_REGISTER(17, 128); MAG3110_Initialized = 1; } return MAG3110_Initialized; }
/** * @ingroup I2C * Prints the identification string. * @param device_info */ void bw_i2c_read_id(const device_info_t *device_info) { char cmd[] = { BW_PORT_READ_ID_STRING }; char buf[BW_ID_STRING_LENGTH]; FUNC_PREFIX(i2c_setSlaveAddress(device_info->slave_address >> 1)); #ifdef __AVR_ARCH__ #else bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); #endif FUNC_PREFIX(i2c_write(cmd, sizeof(cmd) / sizeof(char))); FUNC_PREFIX(i2c_read(buf, BW_ID_STRING_LENGTH)); printf("[%s]\n", buf); }
static PyObject * PyBCM2835_i2c_setClockDivider(PyObject *self, PyObject *args) { int divider; if (!PyArg_ParseTuple(args,"i",÷r)) { return NULL; } bcm2835_i2c_setClockDivider(divider); Py_RETURN_NONE; }
int main(int argc, char **argv) { int first = 0x03, last = 0x77; int flags = 0; int version = 0; while (1 + flags < argc && argv[1 + flags][0] == '-') { switch (argv[1 + flags][1]) { case 'V': version = 1; break; case 'a': first = 0x00; last = 0x7F; break; default: fprintf(stderr, "Warning: Unsupported flag \"-%c\"!\n", argv[1 + flags][1]); //help(); // TODO exit(1); } flags++; } if (version) { fprintf(stderr, "i2cdetect version %s\n", VERSION); exit(0); } if (bcm2835_init() != 1) { fprintf(stderr, "bcm2835_init() failed\n"); exit(1); } bcm2835_i2c_begin(); bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); // 100kHz int address; for (address = 0x00; address <= 0x7F; address++) { if (address < first || address > last) { continue; } bcm2835_i2c_setSlaveAddress(address); if (bcm2835_i2c_write(NULL, 0) == 0) { printf("0x%.2X : 0x%.2X : %s\n", address, address << 1, lookup_device(address)); } } bcm2835_i2c_end(); bcm2835_close(); return 0; }
/** *@brief Initializes the I2C peripheral *@param address Address the I2C peripheral is communicating with. *@return none */ void I2C_Initialize(unsigned char address) { if (!bcm2835_init()) //Configure I2C pins { printf("BCM libray error.\n"); } bcm2835_i2c_end(); //Close I2C peripheral to reconfigure it bcm2835_i2c_begin(); //Set pins as I2C bcm2835_i2c_set_baudrate(baudrate); //Set I2C baudrate bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); //100 Khz bcm2835_i2c_setSlaveAddress(address); //Set device address }
int init_all(I2CVariables *i2c_var) { if (!bcm2835_init()) return ERROR_BCM2835_INIT; bcm2835_i2c_begin(); bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_626); // 400 kHz ADXL345_init(); L3G4200D_init(); HMC5883L_init(); BMP085_init(); PCA9685PW_init(1); I2CVariables_init(i2c_var); return 0; }
/**************************************************************************//*! * @brief The IIC Initialization for MMA7660 * * @param mod - current used module for conection ******************************************************************************/ uint8_t MAG3110_Init(void) { byte who_i_am = 0; bcm2835_i2c_begin(); bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); // The default MAG3110_WRITE_REGISTER(REG3110_CTRL_REG1, 0x00); who_i_am = MAG3110_READ_REGISTER(REG3110_WHO_AM_I); if(who_i_am == ID_MAG3110) { MAG3110_WRITE_REGISTER(REG3110_CTRL_REG2, 0x80); MAG3110_enabled = TRUE; } return MAG3110_enabled; }
void inline static mcp7941x_setup(void) { bcm2835_i2c_setSlaveAddress(i2c_mcp7941x_slave_address); bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); }
void bcm2835_i2c_set_baudrate(uint32_t baudrate) { uint32_t divider = ((uint32_t)BCM2835_CORE_CLK_HZ / baudrate); bcm2835_i2c_setClockDivider((uint16_t) divider); }
//void bcm2835_i2c_setClockDivider(uint16_t divider); /// Call bcm2835_i2c_setClockDivider with 1 parameter /// \par Refer /// \par Modify void ope_i2c_setclockdivider(void) { get_short_code(); bcm2835_i2c_setClockDivider( *((uint16_t *)(buff+1)) ); }