Advertisement
Guest User

I2C DMA

a guest
Jul 22nd, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.86 KB | None | 0 0
  1. /* Private variables ---------------------------------------------------------*/
  2. I2C_HandleTypeDef hi2c1;
  3. DMA_HandleTypeDef hdma_i2c1_rx;
  4.  
  5. /* Private function prototypes -----------------------------------------------*/
  6. static void MX_I2C1_Init(void);
  7.  
  8. /* I2C1 init function */
  9. static void MX_I2C1_Init(void)
  10. {
  11.  
  12.   hi2c1.Instance = I2C1;
  13.   hi2c1.Init.ClockSpeed = 400000;
  14.   hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  15.   hi2c1.Init.OwnAddress1 = 0;
  16.   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  17.   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  18.   hi2c1.Init.OwnAddress2 = 0;
  19.   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  20.   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  21.   if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  22.   {
  23.     _Error_Handler(__FILE__, __LINE__);
  24.   }
  25.  
  26. }
  27.  
  28. static void MX_DMA_Init(void)
  29. {
  30.   /* DMA controller clock enable */
  31.   __HAL_RCC_DMA1_CLK_ENABLE();
  32.  
  33.   /* DMA interrupt init */
  34.   /* DMA1_Channel3_IRQn interrupt configuration */
  35.   HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0);
  36.   HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
  37.   /* DMA1_Channel4_IRQn interrupt configuration */
  38.   HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 0, 0);
  39.   HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);
  40.   /* DMA1_Channel7_IRQn interrupt configuration */
  41.   HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 0, 0);
  42.   HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
  43.  
  44. }
  45.  
  46.  
  47. /* Function to read I2C bus */
  48. void readAccelRegisters(void) {
  49.     buffer[0] = 0x3B; // Access register 3B - Accelerometer start of data
  50.     HAL_I2C_Master_Transmit_DMA(&hi2c1, 0x68<<1, buffer, 1);
  51.     HAL_I2C_Master_Receive_DMA(&hi2c1, 0x68<<1, buffer, 6);
  52.  
  53.     // Bit shift and store each returned byte into variables
  54.     accelX = buffer[0] << 8 | buffer[1]; // Accelerometer X raw
  55.     accelY = buffer[2] << 8 | buffer[3]; // Accelerometer Y raw
  56.     accelZ = buffer[4] << 8 | buffer[5]; // Accelerometer Z raw
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement