Subversion Repositories DashDisplay

Rev

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

Rev 50 Rev 61
Line 940... Line 940...
940
  * @param  Timeout Timeout duration
940
  * @param  Timeout Timeout duration
941
  * @retval HAL status
941
  * @retval HAL status
942
  */
942
  */
943
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
943
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
944
{
944
{
-
 
945
#if (USE_SPI_CRC != 0U)
-
 
946
  __IO uint32_t tmpreg = 0U;
-
 
947
#endif /* USE_SPI_CRC */
945
  uint32_t tickstart;
948
  uint32_t tickstart;
946
  HAL_StatusTypeDef errorcode = HAL_OK;
949
  HAL_StatusTypeDef errorcode = HAL_OK;
947
 
950
 
948
  if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES))
951
  if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES))
949
  {
952
  {
Line 1091... Line 1094...
1091
      errorcode = HAL_TIMEOUT;
1094
      errorcode = HAL_TIMEOUT;
1092
      goto error;
1095
      goto error;
1093
    }
1096
    }
1094
 
1097
 
1095
    /* Read CRC to Flush DR and RXNE flag */
1098
    /* Read CRC to Flush DR and RXNE flag */
1096
    READ_REG(hspi->Instance->DR);
1099
    tmpreg = READ_REG(hspi->Instance->DR);
-
 
1100
    /* To avoid GCC warning */
-
 
1101
    UNUSED(tmpreg);
1097
  }
1102
  }
1098
#endif /* USE_SPI_CRC */
1103
#endif /* USE_SPI_CRC */
1099
 
1104
 
1100
  /* Check the end of the transaction */
1105
  /* Check the end of the transaction */
1101
  if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK)
1106
  if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK)
Line 1138... Line 1143...
1138
{
1143
{
1139
  uint16_t             initial_TxXferCount;
1144
  uint16_t             initial_TxXferCount;
1140
  uint32_t             tmp_mode;
1145
  uint32_t             tmp_mode;
1141
  HAL_SPI_StateTypeDef tmp_state;
1146
  HAL_SPI_StateTypeDef tmp_state;
1142
  uint32_t             tickstart;
1147
  uint32_t             tickstart;
-
 
1148
#if (USE_SPI_CRC != 0U)
-
 
1149
  __IO uint32_t tmpreg = 0U;
-
 
1150
#endif /* USE_SPI_CRC */
1143
 
1151
 
1144
  /* Variable used to alternate Rx and Tx during transfer */
1152
  /* Variable used to alternate Rx and Tx during transfer */
1145
  uint32_t             txallowed = 1U;
1153
  uint32_t             txallowed = 1U;
1146
  HAL_StatusTypeDef    errorcode = HAL_OK;
1154
  HAL_StatusTypeDef    errorcode = HAL_OK;
1147
 
1155
 
Line 1308... Line 1316...
1308
      SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC);
1316
      SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC);
1309
      errorcode = HAL_TIMEOUT;
1317
      errorcode = HAL_TIMEOUT;
1310
      goto error;
1318
      goto error;
1311
    }
1319
    }
1312
    /* Read CRC */
1320
    /* Read CRC */
1313
    READ_REG(hspi->Instance->DR);
1321
    tmpreg = READ_REG(hspi->Instance->DR);
-
 
1322
    /* To avoid GCC warning */
-
 
1323
    UNUSED(tmpreg);
1314
  }
1324
  }
1315
 
1325
 
1316
  /* Check if CRC error occurred */
1326
  /* Check if CRC error occurred */
1317
  if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
1327
  if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
1318
  {
1328
  {
Line 2737... Line 2747...
2737
  */
2747
  */
2738
static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
2748
static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
2739
{
2749
{
2740
  SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */
2750
  SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */
2741
  uint32_t tickstart;
2751
  uint32_t tickstart;
-
 
2752
#if (USE_SPI_CRC != 0U)
-
 
2753
  __IO uint32_t tmpreg = 0U;
-
 
2754
#endif /* USE_SPI_CRC */
2742
 
2755
 
2743
  /* Init tickstart for timeout management*/
2756
  /* Init tickstart for timeout management*/
2744
  tickstart = HAL_GetTick();
2757
  tickstart = HAL_GetTick();
2745
 
2758
 
2746
  /* DMA Normal Mode */
2759
  /* DMA Normal Mode */
Line 2758... Line 2771...
2758
      {
2771
      {
2759
        /* Error on the CRC reception */
2772
        /* Error on the CRC reception */
2760
        SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC);
2773
        SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC);
2761
      }
2774
      }
2762
      /* Read CRC */
2775
      /* Read CRC */
2763
      READ_REG(hspi->Instance->DR);
2776
      tmpreg = READ_REG(hspi->Instance->DR);
-
 
2777
      /* To avoid GCC warning */
-
 
2778
      UNUSED(tmpreg);
2764
    }
2779
    }
2765
#endif /* USE_SPI_CRC */
2780
#endif /* USE_SPI_CRC */
2766
 
2781
 
2767
    /* Check if we are in Master RX 2 line mode */
2782
    /* Check if we are in Master RX 2 line mode */
2768
    if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER))
2783
    if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER))
Line 2821... Line 2836...
2821
  */
2836
  */
2822
static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma)
2837
static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma)
2823
{
2838
{
2824
  SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */
2839
  SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */
2825
  uint32_t tickstart;
2840
  uint32_t tickstart;
-
 
2841
#if (USE_SPI_CRC != 0U)
-
 
2842
  __IO uint32_t tmpreg = 0U;
-
 
2843
#endif /* USE_SPI_CRC */
2826
 
2844
 
2827
  /* Init tickstart for timeout management*/
2845
  /* Init tickstart for timeout management*/
2828
  tickstart = HAL_GetTick();
2846
  tickstart = HAL_GetTick();
2829
 
2847
 
2830
  /* DMA Normal Mode */
2848
  /* DMA Normal Mode */
Line 2841... Line 2859...
2841
      if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
2859
      if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
2842
      {
2860
      {
2843
        SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC);
2861
        SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_CRC);
2844
      }
2862
      }
2845
      /* Read CRC to Flush DR and RXNE flag */
2863
      /* Read CRC to Flush DR and RXNE flag */
2846
      READ_REG(hspi->Instance->DR);
2864
      tmpreg = READ_REG(hspi->Instance->DR);
-
 
2865
      /* To avoid GCC warning */
-
 
2866
      UNUSED(tmpreg);
2847
    }
2867
    }
2848
#endif /* USE_SPI_CRC */
2868
#endif /* USE_SPI_CRC */
2849
 
2869
 
2850
    /* Check the end of the transaction */
2870
    /* Check the end of the transaction */
2851
    if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
2871
    if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
Line 3156... Line 3176...
3156
  *               the configuration information for SPI module.
3176
  *               the configuration information for SPI module.
3157
  * @retval None
3177
  * @retval None
3158
  */
3178
  */
3159
static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi)
3179
static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi)
3160
{
3180
{
-
 
3181
  __IO uint8_t  * ptmpreg8;
-
 
3182
  __IO uint8_t  tmpreg8 = 0;
-
 
3183
 
-
 
3184
  /* Initialize the 8bit temporary pointer */
-
 
3185
  ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR;
3161
  /* Read 8bit CRC to flush Data Register */
3186
  /* Read 8bit CRC to flush Data Register */
-
 
3187
  tmpreg8 = *ptmpreg8;
3162
  READ_REG(*(__IO uint8_t *)&hspi->Instance->DR);
3188
  /* To avoid GCC warning */
-
 
3189
  UNUSED(tmpreg8);
3163
 
3190
 
3164
  /* Disable RXNE and ERR interrupt */
3191
  /* Disable RXNE and ERR interrupt */
3165
  __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3192
  __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3166
 
3193
 
3167
  if (hspi->TxXferCount == 0U)
3194
  if (hspi->TxXferCount == 0U)
Line 3247... Line 3274...
3247
  *               the configuration information for SPI module.
3274
  *               the configuration information for SPI module.
3248
  * @retval None
3275
  * @retval None
3249
  */
3276
  */
3250
static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi)
3277
static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi)
3251
{
3278
{
-
 
3279
  __IO uint32_t tmpreg = 0U;
-
 
3280
 
3252
  /* Read 16bit CRC to flush Data Register */
3281
  /* Read 16bit CRC to flush Data Register */
3253
  READ_REG(hspi->Instance->DR);
3282
  tmpreg = READ_REG(hspi->Instance->DR);
-
 
3283
  /* To avoid GCC warning */
-
 
3284
  UNUSED(tmpreg);  
3254
 
3285
 
3255
  /* Disable RXNE interrupt */
3286
  /* Disable RXNE interrupt */
3256
  __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE);
3287
  __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE);
3257
 
3288
 
3258
  SPI_CloseRxTx_ISR(hspi);
3289
  SPI_CloseRxTx_ISR(hspi);
Line 3303... Line 3334...
3303
  *               the configuration information for SPI module.
3334
  *               the configuration information for SPI module.
3304
  * @retval None
3335
  * @retval None
3305
  */
3336
  */
3306
static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi)
3337
static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi)
3307
{
3338
{
-
 
3339
  __IO uint8_t  * ptmpreg8;
-
 
3340
  __IO uint8_t  tmpreg8 = 0;
-
 
3341
 
-
 
3342
  /* Initialize the 8bit temporary pointer */
-
 
3343
  ptmpreg8 = (__IO uint8_t *)&hspi->Instance->DR;
3308
  /* Read 8bit CRC to flush Data Register */
3344
  /* Read 8bit CRC to flush Data Register */
-
 
3345
  tmpreg8 = *ptmpreg8;
3309
  READ_REG(*(__IO uint8_t *)&hspi->Instance->DR);
3346
  /* To avoid GCC warning */
-
 
3347
  UNUSED(tmpreg8);
3310
 
3348
 
3311
  SPI_CloseRx_ISR(hspi);
3349
  SPI_CloseRx_ISR(hspi);
3312
}
3350
}
3313
#endif /* USE_SPI_CRC */
3351
#endif /* USE_SPI_CRC */
3314
 
3352
 
Line 3352... Line 3390...
3352
  *               the configuration information for SPI module.
3390
  *               the configuration information for SPI module.
3353
  * @retval None
3391
  * @retval None
3354
  */
3392
  */
3355
static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi)
3393
static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi)
3356
{
3394
{
-
 
3395
  __IO uint32_t tmpreg = 0U;
-
 
3396
 
3357
  /* Read 16bit CRC to flush Data Register */
3397
  /* Read 16bit CRC to flush Data Register */
3358
  READ_REG(hspi->Instance->DR);
3398
  tmpreg = READ_REG(hspi->Instance->DR);
-
 
3399
  /* To avoid GCC warning */
-
 
3400
  UNUSED(tmpreg);
3359
 
3401
 
3360
  /* Disable RXNE and ERR interrupt */
3402
  /* Disable RXNE and ERR interrupt */
3361
  __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3403
  __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3362
 
3404
 
3363
  SPI_CloseRx_ISR(hspi);
3405
  SPI_CloseRx_ISR(hspi);
Line 3834... Line 3876...
3834
  *               the configuration information for SPI module.
3876
  *               the configuration information for SPI module.
3835
  * @retval None
3877
  * @retval None
3836
  */
3878
  */
3837
static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi)
3879
static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi)
3838
{
3880
{
-
 
3881
  __IO uint32_t tmpreg = 0U;
3839
  __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
3882
  __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
3840
 
3883
 
3841
  /* Wait until TXE flag is set */
3884
  /* Wait until TXE flag is set */
3842
  do
3885
  do
3843
  {
3886
  {
Line 3853... Line 3896...
3853
  __HAL_SPI_DISABLE(hspi);
3896
  __HAL_SPI_DISABLE(hspi);
3854
 
3897
 
3855
  /* Disable TXEIE, RXNEIE and ERRIE(mode fault event, overrun error, TI frame error) interrupts */
3898
  /* Disable TXEIE, RXNEIE and ERRIE(mode fault event, overrun error, TI frame error) interrupts */
3856
  CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE | SPI_CR2_RXNEIE | SPI_CR2_ERRIE));
3899
  CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE | SPI_CR2_RXNEIE | SPI_CR2_ERRIE));
3857
 
3900
 
3858
  /* Read CRC to flush Data Register */
3901
  /* Flush Data Register by a blank read */
3859
  READ_REG(hspi->Instance->DR);
3902
  tmpreg = READ_REG(hspi->Instance->DR);
-
 
3903
  /* To avoid GCC warning */
-
 
3904
  UNUSED(tmpreg);
3860
 
3905
 
3861
  hspi->State = HAL_SPI_STATE_ABORT;
3906
  hspi->State = HAL_SPI_STATE_ABORT;
3862
}
3907
}
3863
 
3908
 
3864
/**
3909
/**