adc.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #ifndef _ADC_H__
  2. #define _ADC_H__
  3. #include "hal/hal.h"
  4. #include "stm32f3xx_ll_adc.h"
  5. #include "stm32f3xx_ll_tim.h"
  6. #include "libs/types.h"
  7. typedef struct _R3_f3_1_adc_config {
  8. ADC_TypeDef * ADCx; /*!< First ADC peripheral to be used.*/
  9. TIM_TypeDef * TIMx; //which triger the staring of the adc
  10. u32 volatile * ADCDataReg1[6]; /*!< Contains the Address of ADC read value for one phase
  11. and all the 6 sectors */
  12. u32 volatile * ADCDataReg2[6]; /*!< Contains the Address of ADC read value for one phase
  13. and all the 6 sectors */
  14. uint32_t ADCConfig [6] ; /*!< values of JSQR for first ADC for 6 sectors */
  15. }R3_F30x_8_ADC_Config_t;
  16. static const R3_F30x_8_ADC_Config_t adc_config = {
  17. .ADCx = ADC1,
  18. .TIMx = TIM1,
  19. .ADCConfig = {//A ->U, B->V, C->W
  20. CURRENT_V_ADC_CHANNAL<<ADC_JSQR_JSQ1_Pos | CURRENT_U_ADC_CHANNAL<<ADC_JSQR_JSQ2_Pos | 1<<ADC_JSQR_JL_Pos | (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO & ~ADC_INJ_TRIG_EXT_EDGE_DEFAULT),
  21. CURRENT_U_ADC_CHANNAL<<ADC_JSQR_JSQ1_Pos | CURRENT_V_ADC_CHANNAL<<ADC_JSQR_JSQ2_Pos | 1<<ADC_JSQR_JL_Pos | (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO & ~ADC_INJ_TRIG_EXT_EDGE_DEFAULT),
  22. CURRENT_W_ADC_CHANNAL<<ADC_JSQR_JSQ1_Pos | CURRENT_V_ADC_CHANNAL<<ADC_JSQR_JSQ2_Pos | 1<<ADC_JSQR_JL_Pos | (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO & ~ADC_INJ_TRIG_EXT_EDGE_DEFAULT),
  23. CURRENT_V_ADC_CHANNAL<<ADC_JSQR_JSQ1_Pos | CURRENT_W_ADC_CHANNAL<<ADC_JSQR_JSQ2_Pos | 1<<ADC_JSQR_JL_Pos | (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO & ~ADC_INJ_TRIG_EXT_EDGE_DEFAULT),
  24. CURRENT_U_ADC_CHANNAL<<ADC_JSQR_JSQ1_Pos | CURRENT_W_ADC_CHANNAL<<ADC_JSQR_JSQ2_Pos | 1<<ADC_JSQR_JL_Pos | (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO & ~ADC_INJ_TRIG_EXT_EDGE_DEFAULT),
  25. CURRENT_W_ADC_CHANNAL<<ADC_JSQR_JSQ1_Pos | CURRENT_U_ADC_CHANNAL<<ADC_JSQR_JSQ2_Pos | 1<<ADC_JSQR_JL_Pos | (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO & ~ADC_INJ_TRIG_EXT_EDGE_DEFAULT),
  26. },
  27. .ADCDataReg1 = {
  28. &ADC1->JDR1,//V
  29. &ADC1->JDR2,//V
  30. &ADC1->JDR1,//W
  31. &ADC1->JDR2,//W
  32. &ADC1->JDR1,//U
  33. &ADC1->JDR2,//U
  34. },
  35. .ADCDataReg2 = {
  36. &ADC1->JDR2, //U
  37. &ADC1->JDR1, //U
  38. &ADC1->JDR2, //V
  39. &ADC1->JDR1, //V
  40. &ADC1->JDR2, //W
  41. &ADC1->JDR1, //W
  42. },
  43. };
  44. void HAL_ADC1_Init(void);
  45. void HAL_ADC1_Enable(void);
  46. void HAL_ADC1_InJ_StartConvert(void);
  47. void HAL_ADC1_ChanConfig(u32 channel);
  48. u16 HAL_ADC1_ReadValue(u32 channel);
  49. void __inline HAL_ADC1_Inject_Config(u8 sector, u32 inject_flags) {
  50. adc_config.ADCx->JSQR = adc_config.ADCConfig[sector] | inject_flags;
  51. MODIFY_REG(adc_config.TIMx->CR2, TIM_CR2_MMS, LL_TIM_TRGO_OC4REF);
  52. }
  53. void __inline HAL_ADC1_Inject_Read(u8 sector, u32 *v1, u32 *v2) {
  54. *v1 = *adc_config.ADCDataReg1[sector];
  55. *v2 = *adc_config.ADCDataReg2[sector];
  56. }
  57. #endif /* _ADC_H__ */