Subversion Repositories dashGPS

Rev

Rev 30 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 30 Rev 31
Line 130... Line 130...
130
  .read = user_i2c2_read,
130
  .read = user_i2c2_read,
131
  .write = user_i2c2_write,
131
  .write = user_i2c2_write,
132
  .delay_ms = user_delay_ms,
132
  .delay_ms = user_delay_ms,
133
 
133
 
134
  /* Update interface pointer with the structure that contains both device address and file descriptor */
134
  /* Update interface pointer with the structure that contains both device address and file descriptor */
135
  .dev_id = BMP280_I2C_ADDR_PRIM
135
  .dev_id = BMP280_I2C_ADDR_SEC
136
  };
136
  };
137
 
137
 
138
int8_t rslt;
138
int8_t rslt;
139
 
139
 
140
 
140
 
Line 194... Line 194...
194
  if (rslt != BMP280_OK)
194
  if (rslt != BMP280_OK)
195
    return rslt;
195
    return rslt;
196
 
196
 
197
}
197
}
198
 
198
 
-
 
199
 
-
 
200
///////////////////////////////////////
-
 
201
// code dealing with I2C1
199
static void reset_I2C1(void)
202
static void reset_I2C1(void)
200
{
203
{
201
  HAL_GPIO_WritePin ( GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
204
  HAL_GPIO_WritePin ( GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
202
  HAL_GPIO_WritePin ( GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
205
  HAL_GPIO_WritePin ( GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
203
  __HAL_AFIO_REMAP_I2C1_DISABLE();
206
  __HAL_AFIO_REMAP_I2C1_DISABLE();
Line 212... Line 215...
212
    }
215
    }
213
   __HAL_AFIO_REMAP_I2C1_ENABLE();
216
   __HAL_AFIO_REMAP_I2C1_ENABLE();
214
 
217
 
215
}
218
}
216
 
219
 
-
 
220
// the bus power also takes down the pullup power
-
 
221
static void power_I2C1(uint8_t power)
-
 
222
{
-
 
223
  if(power)
-
 
224
    {
-
 
225
      HAL_GPIO_WritePin (I2C1_BusPower_GPIO_Port, I2C1_BusPower_Pin, GPIO_PIN_SET);
-
 
226
    }
-
 
227
  else
-
 
228
    {
-
 
229
      HAL_GPIO_WritePin (I2C1_BusPower_GPIO_Port, I2C1_BusPower_Pin, GPIO_PIN_RESET);
-
 
230
    }
-
 
231
}
-
 
232
 
-
 
233
typedef enum
-
 
234
{
-
 
235
  BMP_NORMAL,              // normal operations
-
 
236
  BMP_RESET_ACTIVE,        // powering down
-
 
237
  BMP_PAUSE                // pause after powerup
-
 
238
} bmp2state_t;
-
 
239
 
-
 
240
bmp2state_t bmp2state;
-
 
241
unsigned    bmp2nextTime;
-
 
242
unsigned    bmp2offset;
-
 
243
 
217
void resetBmp2(void)
244
void initBmp2(void)
218
{
245
{
219
  HAL_GPIO_WritePin (I2C1_BusPower_GPIO_Port, I2C1_BusPower_Pin, GPIO_PIN_RESET);
-
 
220
  HAL_Delay (400);
-
 
221
  HAL_GPIO_WritePin (I2C1_BusPower_GPIO_Port, I2C1_BusPower_Pin, GPIO_PIN_SET);
-
 
222
  HAL_Delay (200);
246
  power_I2C1(1);
223
  init_bmp(&conf2,&bmp2);
247
  init_bmp(&conf2,&bmp2);
-
 
248
  bmp2state = BMP_NORMAL;
-
 
249
  bmp2nextTime = 0;
-
 
250
  bmp2offset   = 0;
-
 
251
}
-
 
252
 
-
 
253
void resetBmp2(void)
-
 
254
{
-
 
255
  reset_I2C1();  // physically reset the hardware
-
 
256
  power_I2C1(0); // power down the bus and devices
-
 
257
  bmp2nextTime = HAL_GetTick(); // 600 milliseconds hold the bus reset for
-
 
258
  bmp2offset = 600;
-
 
259
  bmp2state = BMP_RESET_ACTIVE;
-
 
260
}
-
 
261
 
-
 
262
uint8_t pollBmp2State(void)
-
 
263
{
-
 
264
  if (bmp2state == BMP_NORMAL)
-
 
265
    return 1;
224
 
266
 
-
 
267
  if (HAL_GetTick()-bmp2offset <  bmp2nextTime)
-
 
268
    return 0; // currently timer running
-
 
269
  switch (bmp2state)
-
 
270
  {
-
 
271
    // at the end of the period, take action
-
 
272
    case BMP_RESET_ACTIVE:
-
 
273
      power_I2C1(1);
-
 
274
      bmp2nextTime = HAL_GetTick();
-
 
275
      bmp2offset =  200; // power up and wait for 200 milliseconds
-
 
276
      bmp2state = BMP_PAUSE;
-
 
277
      break;
-
 
278
    case BMP_PAUSE:
-
 
279
      init_bmp(&conf2,&bmp2);
-
 
280
      bmp2state = BMP_NORMAL;
-
 
281
      return 1; // now in normal operation
-
 
282
    // can not get here in normal operation
-
 
283
    case BMP_NORMAL:
-
 
284
      return 1;
-
 
285
  }
-
 
286
  return 0;
225
}
287
}
226
 
288
 
227
 
289
 
-
 
290
 
228
/* USER CODE END 0 */
291
/* USER CODE END 0 */
229
 
292
 
230
/**
293
/**
231
  * @brief  The application entry point.
294
  * @brief  The application entry point.
232
  * @retval int
295
  * @retval int
Line 278... Line 341...
278
  EnableSerialRxInterrupt (&uc1);
341
  EnableSerialRxInterrupt (&uc1);
279
 
342
 
280
#endif
343
#endif
281
 
344
 
282
  init_bmp(&conf,&bmp);
345
  init_bmp(&conf,&bmp);
283
  init_bmp(&conf2,&bmp2);
346
  initBmp2();
284
 
347
 
285
   cc_init ();
348
   cc_init ();
286
 
349
 
287
 
350
 
288
  uint32_t timeNext = HAL_GetTick () + TICKS_LOOP;
351
  uint32_t timeNext = HAL_GetTick () + TICKS_LOOP;