STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
mfxstm32l152.c
Go to the documentation of this file.
1 
39 /* Includes ------------------------------------------------------------------*/
40 #include "mfxstm32l152.h"
41 
54 /* Private typedef -----------------------------------------------------------*/
55 
60 /* Private define ------------------------------------------------------------*/
61 
65 #define MFXSTM32L152_MAX_INSTANCE 3
66 
67 /* Private macro -------------------------------------------------------------*/
68 
73 /* Private variables ---------------------------------------------------------*/
74 
79 /* Touch screen driver structure initialization */
81 {
85 
89 
94 };
95 
96 /* IO driver structure initialization */
98 {
102 
107 
112 };
113 
114 /* IDD driver structure initialization */
116 {
123 
127 
132 
139 };
140 
141 
142 /* mfxstm32l152 instances by address */
148 /* Private function prototypes -----------------------------------------------*/
149 
153 static uint8_t mfxstm32l152_GetInstance(uint16_t DeviceAddr);
154 static uint8_t mfxstm32l152_ReleaseInstance(uint16_t DeviceAddr);
155 static void mfxstm32l152_reg24_setPinValue(uint16_t DeviceAddr, uint8_t RegisterAddr, uint32_t PinPosition, uint8_t PinValue );
156 
157 /* Private functions ---------------------------------------------------------*/
158 
168 void mfxstm32l152_Init(uint16_t DeviceAddr)
169 {
170  uint8_t instance;
171  uint8_t empty;
172 
173  /* Check if device instance already exists */
174  instance = mfxstm32l152_GetInstance(DeviceAddr);
175 
176  /* To prevent double initialization */
177  if(instance == 0xFF)
178  {
179  /* Look for empty instance */
180  empty = mfxstm32l152_GetInstance(0);
181 
182  if(empty < MFXSTM32L152_MAX_INSTANCE)
183  {
184  /* Register the current device instance */
185  mfxstm32l152[empty] = DeviceAddr;
186 
187  /* Initialize IO BUS layer */
188  MFX_IO_Init();
189  }
190  }
191 
194 }
195 
201 void mfxstm32l152_DeInit(uint16_t DeviceAddr)
202 {
203  uint8_t instance;
204 
205  /* release existing instance */
206  instance = mfxstm32l152_ReleaseInstance(DeviceAddr);
207 
208  /* De-Init only if instance was previously registered */
209  if(instance != 0xFF)
210  {
211  /* De-Initialize IO BUS layer */
212  MFX_IO_DeInit();
213  }
214 }
215 
221 void mfxstm32l152_Reset(uint16_t DeviceAddr)
222 {
223  /* Soft Reset */
225 
226  /* Wait for a delay to ensure registers erasing */
227  MFX_IO_Delay(10);
228 }
229 
235 void mfxstm32l152_LowPower(uint16_t DeviceAddr)
236 {
237  /* Enter standby mode */
239 
240  /* enable wakeup pin */
242 }
243 
249 void mfxstm32l152_WakeUp(uint16_t DeviceAddr)
250 {
251  uint8_t instance;
252 
253  /* Check if device instance already exists */
254  instance = mfxstm32l152_GetInstance(DeviceAddr);
255 
256  /* if instance does not exist, first initialize pins*/
257  if(instance == 0xFF)
258  {
259  /* enable wakeup pin */
261  }
262 
263  /* toggle wakeup pin */
264  MFX_IO_Wakeup();
265 }
266 
272 uint16_t mfxstm32l152_ReadID(uint16_t DeviceAddr)
273 {
274  uint8_t id;
275 
276  /* Wait for a delay to ensure the state of registers */
277  MFX_IO_Delay(1);
278 
279  /* Initialize IO BUS layer */
280  MFX_IO_Init();
281 
282  id = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_ID);
283 
284  /* Return the device ID value */
285  return (id);
286 }
287 
293 uint16_t mfxstm32l152_ReadFwVersion(uint16_t DeviceAddr)
294 {
295  uint8_t data[2];
296 
297  MFX_IO_ReadMultiple((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_FW_VERSION_MSB, data, sizeof(data)) ;
298 
299  /* Recompose MFX firmware value */
300  return ((data[0] << 8) | data[1]);
301 }
302 
317 void mfxstm32l152_EnableITSource(uint16_t DeviceAddr, uint8_t Source)
318 {
319  uint8_t tmp = 0;
320 
321  /* Get the current value of the INT_EN register */
322  tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN);
323 
324  /* Set the interrupts to be Enabled */
325  tmp |= Source;
326 
327  /* Set the register */
329 }
330 
345 void mfxstm32l152_DisableITSource(uint16_t DeviceAddr, uint8_t Source)
346 {
347  uint8_t tmp = 0;
348 
349  /* Get the current value of the INT_EN register */
350  tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN);
351 
352  /* Set the interrupts to be Enabled */
353  tmp &= ~Source;
354 
355  /* Set the register */
357 }
358 
359 
374 uint8_t mfxstm32l152_GlobalITStatus(uint16_t DeviceAddr, uint8_t Source)
375 {
376  /* Return the global IT source status (pending or not)*/
377  return((MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_PENDING) & Source));
378 }
379 
396 void mfxstm32l152_ClearGlobalIT(uint16_t DeviceAddr, uint8_t Source)
397 {
398  /* Write 1 to the bits that have to be cleared */
399  MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_ACK, Source);
400 }
401 
410 void mfxstm32l152_SetIrqOutPinPolarity(uint16_t DeviceAddr, uint8_t Polarity)
411 {
412  uint8_t tmp = 0;
413 
414  /* Get the current register value */
416 
417  /* Mask the polarity bits */
418  tmp &= ~(uint8_t)0x02;
419 
420  /* Modify the Interrupt Output line configuration */
421  tmp |= Polarity;
422 
423  /* Set the new register value */
425 
426  /* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */
427  MFX_IO_Delay(1);
428 
429 }
430 
439 void mfxstm32l152_SetIrqOutPinType(uint16_t DeviceAddr, uint8_t Type)
440 {
441  uint8_t tmp = 0;
442 
443  /* Get the current register value */
445 
446  /* Mask the type bits */
447  tmp &= ~(uint8_t)0x01;
448 
449  /* Modify the Interrupt Output line configuration */
450  tmp |= Type;
451 
452  /* Set the new register value */
454 
455  /* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */
456  MFX_IO_Delay(1);
457 
458 }
459 
460 
461 /* ------------------------------------------------------------------ */
462 /* ----------------------- GPIO ------------------------------------- */
463 /* ------------------------------------------------------------------ */
464 
465 
472 void mfxstm32l152_IO_Start(uint16_t DeviceAddr, uint32_t IO_Pin)
473 {
474  uint8_t mode;
475 
476  /* Get the current register value */
477  mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
478 
479  /* Set the IO Functionalities to be Enabled */
480  mode |= MFXSTM32L152_GPIO_EN;
481 
482  /* Enable ALTERNATE functions */
483  /* AGPIO[0..3] can be either IDD or GPIO */
484  /* AGPIO[4..7] can be either TS or GPIO */
485  /* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */
486  /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
487  /* so if IDD and TS are both active it is better to let ALTERNATE off (0) */
488  /* if however IDD or TS are not connected then set it on gives more GPIOs availability */
489  /* remind that AGPIO are less efficient then normal GPIO (They use pooling rather then EXTI */
490  if (IO_Pin > 0xFFFF)
491  {
493  }
494  else
495  {
497  }
498 
499  /* Write the new register value */
500  MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
501 
502  /* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */
503  MFX_IO_Delay(1);
504 }
505 
535 uint8_t mfxstm32l152_IO_Config(uint16_t DeviceAddr, uint32_t IO_Pin, IO_ModeTypedef IO_Mode)
536 {
537  uint8_t error_code = 0;
538 
539  /* Configure IO pin according to selected IO mode */
540  switch(IO_Mode)
541  {
542  case IO_MODE_OFF: /* Off or analog mode */
543  case IO_MODE_ANALOG: /* Off or analog mode */
544  mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
546  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
547  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
548  break;
549 
550  case IO_MODE_INPUT: /* Input mode */
551  mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
553  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
554  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
555  break;
556 
557  case IO_MODE_INPUT_PU: /* Input mode */
558  mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
560  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
561  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
562  break;
563 
564  case IO_MODE_INPUT_PD: /* Input mode */
565  mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
567  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
568  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
569  break;
570 
571  case IO_MODE_OUTPUT: /* Output mode */
572  case IO_MODE_OUTPUT_PP_PD: /* Output mode */
573  mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
575  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPO_PUSH_PULL);
576  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
577  break;
578 
579  case IO_MODE_OUTPUT_PP_PU: /* Output mode */
580  mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
582  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPO_PUSH_PULL);
583  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
584  break;
585 
586  case IO_MODE_OUTPUT_OD_PD: /* Output mode */
587  mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
589  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPO_OPEN_DRAIN);
590  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
591  break;
592 
593  case IO_MODE_OUTPUT_OD_PU: /* Output mode */
594  mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
596  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPO_OPEN_DRAIN);
597  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
598  break;
599 
600  case IO_MODE_IT_RISING_EDGE: /* Interrupt rising edge mode */
601  mfxstm32l152_IO_EnableIT(DeviceAddr);
603  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
604  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
607  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
608  break;
609 
610  case IO_MODE_IT_RISING_EDGE_PU: /* Interrupt rising edge mode */
611  mfxstm32l152_IO_EnableIT(DeviceAddr);
613  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
614  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
617  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
618  break;
619 
620  case IO_MODE_IT_RISING_EDGE_PD: /* Interrupt rising edge mode */
621  mfxstm32l152_IO_EnableIT(DeviceAddr);
623  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
624  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
627  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
628  break;
629 
630  case IO_MODE_IT_FALLING_EDGE: /* Interrupt falling edge mode */
631  mfxstm32l152_IO_EnableIT(DeviceAddr);
633  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
634  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
637  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
638  break;
639 
640  case IO_MODE_IT_FALLING_EDGE_PU: /* Interrupt falling edge mode */
641  mfxstm32l152_IO_EnableIT(DeviceAddr);
643  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
644  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
647  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
648  break;
649 
650  case IO_MODE_IT_FALLING_EDGE_PD: /* Interrupt falling edge mode */
651  mfxstm32l152_IO_EnableIT(DeviceAddr);
653  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
654  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
657  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
658  break;
659 
660  case IO_MODE_IT_LOW_LEVEL: /* Low level interrupt mode */
661  mfxstm32l152_IO_EnableIT(DeviceAddr);
663  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
664  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
667  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
668  break;
669 
670  case IO_MODE_IT_LOW_LEVEL_PU: /* Low level interrupt mode */
671  mfxstm32l152_IO_EnableIT(DeviceAddr);
673  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
674  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
677  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
678  break;
679 
680  case IO_MODE_IT_LOW_LEVEL_PD: /* Low level interrupt mode */
681  mfxstm32l152_IO_EnableIT(DeviceAddr);
683  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
684  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
687  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
688  break;
689 
690  case IO_MODE_IT_HIGH_LEVEL: /* High level interrupt mode */
691  mfxstm32l152_IO_EnableIT(DeviceAddr);
693  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
694  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
697  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
698  break;
699 
700  case IO_MODE_IT_HIGH_LEVEL_PU: /* High level interrupt mode */
701  mfxstm32l152_IO_EnableIT(DeviceAddr);
703  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
704  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
707  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
708  break;
709 
710  case IO_MODE_IT_HIGH_LEVEL_PD: /* High level interrupt mode */
711  mfxstm32l152_IO_EnableIT(DeviceAddr);
713  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
714  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
717  mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
718  break;
719 
720  default:
721  error_code = (uint8_t) IO_Mode;
722  break;
723  }
724 
725  return error_code;
726 }
727 
737 void mfxstm32l152_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction)
738 {
739  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_DIR1, IO_Pin, Direction);
740 }
741 
753 void mfxstm32l152_IO_SetIrqEvtMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Evt)
754 {
755  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_EVT1, IO_Pin, Evt);
756  MFX_IO_Delay(1);
757 }
758 
771 void mfxstm32l152_IO_SetIrqTypeMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Type)
772 {
773  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_TYPE1, IO_Pin, Type);
774  MFX_IO_Delay(1);
775 }
776 
786 void mfxstm32l152_IO_WritePin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t PinState)
787 {
788  /* Apply the bit value to the selected pin */
789  if (PinState != 0)
790  {
791  /* Set the SET register */
792  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPO_SET1, IO_Pin, 1);
793  }
794  else
795  {
796  /* Set the CLEAR register */
797  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPO_CLR1, IO_Pin, 1);
798  }
799 }
800 
809 uint32_t mfxstm32l152_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin)
810 {
811  uint8_t tmp1;
812  uint16_t tmp2;
813  uint32_t tmp3;
814 
815  tmp1 = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE1);
816  tmp2 = (uint16_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE2);
817  tmp3 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE3);
818  tmp3 = tmp1 + (tmp2 << 8) + (tmp3 << 16);
819 
820  return(tmp3 & IO_Pin);
821 }
822 
828 void mfxstm32l152_IO_EnableIT(uint16_t DeviceAddr)
829 {
830  MFX_IO_ITConfig();
831 
832  /* Enable global IO IT source */
834 }
835 
841 void mfxstm32l152_IO_DisableIT(uint16_t DeviceAddr)
842 {
843  /* Disable global IO IT source */
845 }
846 
855 void mfxstm32l152_IO_EnablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin)
856 {
857  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_SRC1, IO_Pin, 1);
858 }
859 
868 void mfxstm32l152_IO_DisablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin)
869 {
870  mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_SRC1, IO_Pin, 0);
871 }
872 
873 
881 uint32_t mfxstm32l152_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin)
882 {
883  /* Get the Interrupt status */
884  uint8_t tmp1;
885  uint16_t tmp2;
886  uint32_t tmp3;
887 
889  tmp2 = (uint16_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING2);
890  tmp3 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING3);
891  tmp3 = tmp1 + (tmp2 << 8) + (tmp3 << 16);
892 
893  return(tmp3 & IO_Pin);
894 }
895 
903 void mfxstm32l152_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin)
904 {
905  /* Clear the IO IT pending bit(s) by acknowledging */
906  /* it cleans automatically also the Global IRQ_GPIO */
907  /* normally this function is called under interrupt */
908  uint8_t pin_0_7, pin_8_15, pin_16_23;
909 
910  pin_0_7 = IO_Pin & 0x0000ff;
911  pin_8_15 = IO_Pin >> 8;
912  pin_8_15 = pin_8_15 & 0x00ff;
913  pin_16_23 = IO_Pin >> 16;
914 
915  if (pin_0_7)
916  {
917  MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_ACK1, pin_0_7);
918  }
919  if (pin_8_15)
920  {
921  MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_ACK2, pin_8_15);
922  }
923  if (pin_16_23)
924  {
925  MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_ACK3, pin_16_23);
926  }
927 }
928 
929 
935 void mfxstm32l152_IO_EnableAF(uint16_t DeviceAddr)
936 {
937  uint8_t mode;
938 
939  /* Get the current register value */
940  mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
941 
942  /* Enable ALTERNATE functions */
943  /* AGPIO[0..3] can be either IDD or GPIO */
944  /* AGPIO[4..7] can be either TS or GPIO */
945  /* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */
946  /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
947  /* so if IDD and TS are both active it is better to let ALTERNATE disabled (0) */
948  /* if however IDD or TS are not connected then set it on gives more GPIOs availability */
949  /* remind that AGPIO are less efficient then normal GPIO (they use pooling rather then EXTI) */
951 
952  /* Write the new register value */
953  MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
954 }
955 
961  void mfxstm32l152_IO_DisableAF(uint16_t DeviceAddr)
962 {
963  uint8_t mode;
964 
965  /* Get the current register value */
966  mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
967 
968  /* Enable ALTERNATE functions */
969  /* AGPIO[0..3] can be either IDD or GPIO */
970  /* AGPIO[4..7] can be either TS or GPIO */
971  /* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */
972  /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
973  /* so if IDD and TS are both active it is better to let ALTERNATE disabled (0) */
974  /* if however IDD or TS are not connected then set it on gives more GPIOs availability */
975  /* remind that AGPIO are less efficient then normal GPIO (they use pooling rather then EXTI) */
977 
978  /* Write the new register value */
979  MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
980 
981 }
982 
983 
984 /* ------------------------------------------------------------------ */
985 /* --------------------- TOUCH SCREEN ------------------------------- */
986 /* ------------------------------------------------------------------ */
987 
993 void mfxstm32l152_TS_Start(uint16_t DeviceAddr)
994 {
995  uint8_t mode;
996 
997  /* Get the current register value */
998  mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
999 
1000  /* Set the Functionalities to be Enabled */
1001  mode |= MFXSTM32L152_TS_EN;
1002 
1003  /* Set the new register value */
1004  MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
1005 
1006  /* Wait for 2 ms */
1007  MFX_IO_Delay(2);
1008 
1009  /* Select 2 nF filter capacitor */
1010  /* Configuration:
1011  - Touch average control : 4 samples
1012  - Touch delay time : 500 uS
1013  - Panel driver setting time: 500 uS
1014  */
1015  MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_SETTLING, 0x32);
1017  MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_AVE, 0x04);
1018 
1019  /* Configure the Touch FIFO threshold: single point reading */
1020  MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_FIFO_TH, 0x01);
1021 
1022  /* Clear the FIFO memory content. */
1024 
1025  /* Touch screen control configuration :
1026  - No window tracking index
1027  */
1028  MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_TRACK, 0x00);
1029 
1030 
1031  /* Clear all the IT status pending bits if any */
1032  mfxstm32l152_IO_ClearIT(DeviceAddr, 0xFFFFFF);
1033 
1034  /* Wait for 1 ms delay */
1035  MFX_IO_Delay(1);
1036 }
1037 
1043 uint8_t mfxstm32l152_TS_DetectTouch(uint16_t DeviceAddr)
1044 {
1045  uint8_t state;
1046  uint8_t ret = 0;
1047 
1048  state = MFX_IO_Read(DeviceAddr, MFXSTM32L152_TS_FIFO_STA);
1049  state = ((state & (uint8_t)MFXSTM32L152_TS_CTRL_STATUS) == (uint8_t)MFXSTM32L152_TS_CTRL_STATUS);
1050 
1051  if(state > 0)
1052  {
1053  if(MFX_IO_Read(DeviceAddr, MFXSTM32L152_TS_FIFO_LEVEL) > 0)
1054  {
1055  ret = 1;
1056  }
1057  }
1058 
1059  return ret;
1060 }
1061 
1069 void mfxstm32l152_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
1070 {
1071  uint8_t data_xy[3];
1072 
1073  MFX_IO_ReadMultiple(DeviceAddr, MFXSTM32L152_TS_XY_DATA, data_xy, sizeof(data_xy)) ;
1074 
1075  /* Calculate positions values */
1076  *X = (data_xy[1]<<4) + (data_xy[0]>>4);
1077  *Y = (data_xy[2]<<4) + (data_xy[0]&4);
1078 
1079  /* Reset the FIFO memory content. */
1081 }
1082 
1088 void mfxstm32l152_TS_EnableIT(uint16_t DeviceAddr)
1089 {
1090  MFX_IO_ITConfig();
1091 
1092  /* Enable global TS IT source */
1094 }
1095 
1101 void mfxstm32l152_TS_DisableIT(uint16_t DeviceAddr)
1102 {
1103  /* Disable global TS IT source */
1105 }
1106 
1112 uint8_t mfxstm32l152_TS_ITStatus(uint16_t DeviceAddr)
1113 {
1114  /* Return TS interrupts status */
1115  return(mfxstm32l152_GlobalITStatus(DeviceAddr, MFXSTM32L152_IRQ_TS));
1116 }
1117 
1123 void mfxstm32l152_TS_ClearIT(uint16_t DeviceAddr)
1124 {
1125  /* Clear the global TS IT source */
1127 }
1128 
1129 /* ------------------------------------------------------------------ */
1130 /* --------------------- IDD MEASUREMENT ---------------------------- */
1131 /* ------------------------------------------------------------------ */
1132 
1138 void mfxstm32l152_IDD_Start(uint16_t DeviceAddr)
1139 {
1140  uint8_t mode = 0;
1141 
1142  /* Get the current register value */
1143  mode = MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL);
1144 
1145  /* Set the Functionalities to be enabled */
1146  mode |= MFXSTM32L152_IDD_CTRL_REQ;
1147 
1148  /* Start measurement campaign */
1149  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL, mode);
1150 }
1151 
1158 void mfxstm32l152_IDD_Config(uint16_t DeviceAddr, IDD_ConfigTypeDef MfxIddConfig)
1159 {
1160  uint8_t value = 0;
1161  uint8_t mode = 0;
1162 
1163  /* Get the current register value */
1164  mode = MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
1165 
1166  if((mode & MFXSTM32L152_IDD_EN) != MFXSTM32L152_IDD_EN)
1167  {
1168  /* Set the Functionalities to be enabled */
1169  mode |= MFXSTM32L152_IDD_EN;
1170 
1171  /* Set the new register value */
1172  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
1173  }
1174 
1175  /* Control register setting: number of shunts */
1176  value = ((MfxIddConfig.ShuntNbUsed << 1) & MFXSTM32L152_IDD_CTRL_SHUNT_NB);
1177  value |= (MfxIddConfig.VrefMeasurement & MFXSTM32L152_IDD_CTRL_VREF_DIS);
1178  value |= (MfxIddConfig.Calibration & MFXSTM32L152_IDD_CTRL_CAL_DIS);
1179  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL, value);
1180 
1181  /* Idd pre delay configuration: unit and value*/
1182  value = (MfxIddConfig.PreDelayUnit & MFXSTM32L152_IDD_PREDELAY_UNIT) |
1184  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_PRE_DELAY, value);
1185 
1186  /* Shunt 0 register value: MSB then LSB */
1187  value = (uint8_t) (MfxIddConfig.Shunt0Value >> 8);
1188  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT0_MSB, value);
1189  value = (uint8_t) (MfxIddConfig.Shunt0Value);
1190  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT0_LSB, value);
1191 
1192  /* Shunt 1 register value: MSB then LSB */
1193  value = (uint8_t) (MfxIddConfig.Shunt1Value >> 8);
1194  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT1_MSB, value);
1195  value = (uint8_t) (MfxIddConfig.Shunt1Value);
1196  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT1_LSB, value);
1197 
1198  /* Shunt 2 register value: MSB then LSB */
1199  value = (uint8_t) (MfxIddConfig.Shunt2Value >> 8);
1200  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT2_MSB, value);
1201  value = (uint8_t) (MfxIddConfig.Shunt2Value);
1202  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT2_LSB, value);
1203 
1204  /* Shunt 3 register value: MSB then LSB */
1205  value = (uint8_t) (MfxIddConfig.Shunt3Value >> 8);
1206  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT3_MSB, value);
1207  value = (uint8_t) (MfxIddConfig.Shunt3Value);
1208  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT3_LSB, value);
1209 
1210  /* Shunt 4 register value: MSB then LSB */
1211  value = (uint8_t) (MfxIddConfig.Shunt4Value >> 8);
1212  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT4_MSB, value);
1213  value = (uint8_t) (MfxIddConfig.Shunt4Value);
1214  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT4_LSB, value);
1215 
1216  /* Shunt 0 stabilization delay */
1217  value = MfxIddConfig.Shunt0StabDelay;
1218  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH0_STABILIZATION, value);
1219 
1220  /* Shunt 1 stabilization delay */
1221  value = MfxIddConfig.Shunt1StabDelay;
1222  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH1_STABILIZATION, value);
1223 
1224  /* Shunt 2 stabilization delay */
1225  value = MfxIddConfig.Shunt2StabDelay;
1226  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH2_STABILIZATION, value);
1227 
1228  /* Shunt 3 stabilization delay */
1229  value = MfxIddConfig.Shunt3StabDelay;
1230  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH3_STABILIZATION, value);
1231 
1232  /* Shunt 4 stabilization delay */
1233  value = MfxIddConfig.Shunt4StabDelay;
1234  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH4_STABILIZATION, value);
1235 
1236  /* Idd ampli gain value: MSB then LSB */
1237  value = (uint8_t) (MfxIddConfig.AmpliGain >> 8);
1238  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_GAIN_MSB, value);
1239  value = (uint8_t) (MfxIddConfig.AmpliGain);
1240  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_GAIN_LSB, value);
1241 
1242  /* Idd VDD min value: MSB then LSB */
1243  value = (uint8_t) (MfxIddConfig.VddMin >> 8);
1244  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_VDD_MIN_MSB, value);
1245  value = (uint8_t) (MfxIddConfig.VddMin);
1246  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_VDD_MIN_LSB, value);
1247 
1248  /* Idd number of measurements */
1249  value = MfxIddConfig.MeasureNb;
1250  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_NBR_OF_MEAS, value);
1251 
1252  /* Idd delta delay configuration: unit and value */
1253  value = (MfxIddConfig.DeltaDelayUnit & MFXSTM32L152_IDD_DELTADELAY_UNIT) |
1255  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_MEAS_DELTA_DELAY, value);
1256 
1257  /* Idd number of shut on board */
1258  value = MfxIddConfig.ShuntNbOnBoard;
1259  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNTS_ON_BOARD, value);
1260 }
1261 
1267 void mfxstm32l152_IDD_ConfigShuntNbLimit(uint16_t DeviceAddr, uint8_t ShuntNbLimit)
1268 {
1269  uint8_t mode = 0;
1270 
1271  /* Get the current register value */
1272  mode = MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL);
1273 
1274  /* Clear number of shunt limit */
1275  mode &= ~(MFXSTM32L152_IDD_CTRL_SHUNT_NB);
1276 
1277  /* Clear number of shunt limit */
1278  mode |= ((ShuntNbLimit << 1) & MFXSTM32L152_IDD_CTRL_SHUNT_NB);
1279 
1280  /* Write noewx desired limit */
1281  MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL, mode);
1282 }
1283 
1290 void mfxstm32l152_IDD_GetValue(uint16_t DeviceAddr, uint32_t *ReadValue)
1291 {
1292  uint8_t data[3];
1293 
1294  MFX_IO_ReadMultiple((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_VALUE_MSB, data, sizeof(data)) ;
1295 
1296  /* Recompose Idd current value */
1297  *ReadValue = (data[0] << 16) | (data[1] << 8) | data[2];
1298 
1299 }
1300 
1306 uint8_t mfxstm32l152_IDD_GetShuntUsed(uint16_t DeviceAddr)
1307 {
1308  return(MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT_USED));
1309 }
1310 
1316 void mfxstm32l152_IDD_EnableIT(uint16_t DeviceAddr)
1317 {
1318  MFX_IO_ITConfig();
1319 
1320  /* Enable global IDD interrupt source */
1322 }
1323 
1329 void mfxstm32l152_IDD_ClearIT(uint16_t DeviceAddr)
1330 {
1331  /* Clear the global IDD interrupt source */
1333 }
1334 
1340 uint8_t mfxstm32l152_IDD_GetITStatus(uint16_t DeviceAddr)
1341 {
1342  /* Return IDD interrupt status */
1344 }
1345 
1351 void mfxstm32l152_IDD_DisableIT(uint16_t DeviceAddr)
1352 {
1353  /* Disable global IDD interrupt source */
1355 }
1356 
1357 
1358 /* ------------------------------------------------------------------ */
1359 /* --------------------- ERROR MANAGEMENT --------------------------- */
1360 /* ------------------------------------------------------------------ */
1361 
1367 uint8_t mfxstm32l152_Error_ReadSrc(uint16_t DeviceAddr)
1368 {
1369  /* Get the current source register value */
1370  return(MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_ERROR_SRC));
1371 }
1372 
1378 uint8_t mfxstm32l152_Error_ReadMsg(uint16_t DeviceAddr)
1379 {
1380  /* Get the current message register value */
1381  return(MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_ERROR_MSG));
1382 }
1383 
1390 void mfxstm32l152_Error_EnableIT(uint16_t DeviceAddr)
1391 {
1392  MFX_IO_ITConfig();
1393 
1394  /* Enable global Error interrupt source */
1396 }
1397 
1403 void mfxstm32l152_Error_ClearIT(uint16_t DeviceAddr)
1404 {
1405  /* Clear the global Error interrupt source */
1407 }
1408 
1414 uint8_t mfxstm32l152_Error_GetITStatus(uint16_t DeviceAddr)
1415 {
1416  /* Return Error interrupt status */
1418 }
1419 
1425 void mfxstm32l152_Error_DisableIT(uint16_t DeviceAddr)
1426 {
1427  /* Disable global Error interrupt source */
1429 }
1430 
1434 uint8_t mfxstm32l152_ReadReg(uint16_t DeviceAddr, uint8_t RegAddr)
1435 {
1436  /* Get the current register value */
1437  return(MFX_IO_Read((uint8_t) DeviceAddr, RegAddr));
1438 }
1439 
1440 void mfxstm32l152_WriteReg(uint16_t DeviceAddr, uint8_t RegAddr, uint8_t Value)
1441 {
1442  /* set the current register value */
1443  MFX_IO_Write((uint8_t) DeviceAddr, RegAddr, Value);
1444 }
1445 
1446 /* ------------------------------------------------------------------ */
1447 /* ----------------------- Private functions ------------------------ */
1448 /* ------------------------------------------------------------------ */
1455 static uint8_t mfxstm32l152_GetInstance(uint16_t DeviceAddr)
1456 {
1457  uint8_t idx = 0;
1458 
1459  /* Check all the registered instances */
1460  for(idx = 0; idx < MFXSTM32L152_MAX_INSTANCE ; idx ++)
1461  {
1462  if(mfxstm32l152[idx] == DeviceAddr)
1463  {
1464  return idx;
1465  }
1466  }
1467 
1468  return 0xFF;
1469 }
1470 
1476 static uint8_t mfxstm32l152_ReleaseInstance(uint16_t DeviceAddr)
1477 {
1478  uint8_t idx = 0;
1479 
1480  /* Check for all the registered instances */
1481  for(idx = 0; idx < MFXSTM32L152_MAX_INSTANCE ; idx ++)
1482  {
1483  if(mfxstm32l152[idx] == DeviceAddr)
1484  {
1485  mfxstm32l152[idx] = 0;
1486  return idx;
1487  }
1488  }
1489  return 0xFF;
1490 }
1491 
1500 void mfxstm32l152_reg24_setPinValue(uint16_t DeviceAddr, uint8_t RegisterAddr, uint32_t PinPosition, uint8_t PinValue )
1501 {
1502  uint8_t tmp = 0;
1503  uint8_t pin_0_7, pin_8_15, pin_16_23;
1504 
1505  pin_0_7 = PinPosition & 0x0000ff;
1506  pin_8_15 = PinPosition >> 8;
1507  pin_8_15 = pin_8_15 & 0x00ff;
1508  pin_16_23 = PinPosition >> 16;
1509 
1510  if (pin_0_7)
1511  {
1512  /* Get the current register value */
1513  tmp = MFX_IO_Read(DeviceAddr, RegisterAddr);
1514 
1515  /* Set the selected pin direction */
1516  if (PinValue != 0)
1517  {
1518  tmp |= (uint8_t)pin_0_7;
1519  }
1520  else
1521  {
1522  tmp &= ~(uint8_t)pin_0_7;
1523  }
1524 
1525  /* Set the new register value */
1526  MFX_IO_Write(DeviceAddr, RegisterAddr, tmp);
1527  }
1528 
1529  if (pin_8_15)
1530  {
1531  /* Get the current register value */
1532  tmp = MFX_IO_Read(DeviceAddr, RegisterAddr+1);
1533 
1534  /* Set the selected pin direction */
1535  if (PinValue != 0)
1536  {
1537  tmp |= (uint8_t)pin_8_15;
1538  }
1539  else
1540  {
1541  tmp &= ~(uint8_t)pin_8_15;
1542  }
1543 
1544  /* Set the new register value */
1545  MFX_IO_Write(DeviceAddr, RegisterAddr+1, tmp);
1546  }
1547 
1548  if (pin_16_23)
1549  {
1550  /* Get the current register value */
1551  tmp = MFX_IO_Read(DeviceAddr, RegisterAddr+2);
1552 
1553  /* Set the selected pin direction */
1554  if (PinValue != 0)
1555  {
1556  tmp |= (uint8_t)pin_16_23;
1557  }
1558  else
1559  {
1560  tmp &= ~(uint8_t)pin_16_23;
1561  }
1562 
1563  /* Set the new register value */
1564  MFX_IO_Write(DeviceAddr, RegisterAddr+2, tmp);
1565  }
1566 }
1567 
1568 
1584 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
#define MFXSTM32L152_IRQ_GPIO
Definition: mfxstm32l152.h:200
#define MFXSTM32L152_REG_ADR_IDD_SHUNTS_ON_BOARD
Register address: Idd number of shunt on board register (R/W)
Definition: mfxstm32l152.h:441
#define MFXSTM32L152_REG_ADR_IRQ_ACK
Reg Addr IRQs: the Main MCU must acknowledge it thanks to a writing access to the IRQ_ACK register...
Definition: mfxstm32l152.h:157
#define MFXSTM32L152_TS_TRACK
Definition: mfxstm32l152.h:352
#define MFXSTM32L152_REG_ADR_IRQ_GPI_ACK2
Definition: mfxstm32l152.h:280
void MFX_IO_Wakeup(void)
void MFX_IO_Delay(uint32_t delay)
#define MFXSTM32L152_TS_EN
Definition: mfxstm32l152.h:172
void mfxstm32l152_IO_SetIrqEvtMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Evt)
Set the global interrupt Type.
Definition: mfxstm32l152.c:753
#define MFXSTM32L152_IDD_DELTADELAY_VALUE
Definition: mfxstm32l152.h:506
uint16_t Shunt1StabDelay
Definition: idd.h:86
#define MFXSTM32L152_REG_ADR_GPIO_STATE1
Reg addr: GPIO STATE (R): Give state of the GPIO pin.
Definition: mfxstm32l152.h:243
IO_DrvTypeDef mfxstm32l152_io_drv
Definition: mfxstm32l152.c:97
#define MFXSTM32L152_TS_SETTLING
TOUCH SCREEN Registers.
Definition: mfxstm32l152.h:349
#define MFXSTM32L152_REG_ADR_GPIO_PUPD1
Reg addr: GPIO PULL_UP_PULL_DOWN (R/W): discussion open with Jean Claude.
Definition: mfxstm32l152.h:225
uint8_t DeltaDelayValue
Definition: idd.h:110
#define MFXSTM32L152_REG_ADR_IDD_SH0_STABILIZATION
Register address: shunt stabilisation delay registers (R/W)
Definition: mfxstm32l152.h:422
void MFX_IO_EnableWakeupPin(void)
uint32_t idx
Definition: lcd_log.c:247
#define MFXSTM32L152_TS_FIFO_TH
Definition: mfxstm32l152.h:353
uint16_t mfxstm32l152_ReadID(uint16_t DeviceAddr)
Read the MFXSTM32L152 IO Expander device ID.
Definition: mfxstm32l152.c:272
#define MFXSTM32L152_REG_ADR_IDD_SHUNT4_MSB
Definition: mfxstm32l152.h:386
#define MFXSTM32L152_REG_ADR_FW_VERSION_MSB
Register address: chip FW_VERSION (R)
Definition: mfxstm32l152.h:122
#define MFXSTM32L152_IRQ_IDD
Definition: mfxstm32l152.h:199
uint8_t ShuntNbUsed
Definition: idd.h:96
uint8_t mfxstm32l152_TS_ITStatus(uint16_t DeviceAddr)
Configure the selected source to generate a global interrupt or not.
#define MFXSTM32L152_TS_CLEAR_FIFO
Definition: mfxstm32l152.h:362
#define MFXSTM32L152_REG_ADR_ID
MFX COMMON defines.
Definition: mfxstm32l152.h:118
#define MFXSTM32L152_REG_ADR_IDD_GAIN_MSB
Register address: Idd ampli gain register (R/W)
Definition: mfxstm32l152.h:392
uint8_t mfxstm32l152_Error_ReadSrc(uint16_t DeviceAddr)
Read Error Source.
#define MFXSTM32L152_REG_ADR_GPIO_DIR1
GPIO: 24 programmable input/output called MFXSTM32L152_GPIO[23:0] are provided.
Definition: mfxstm32l152.h:212
#define MFXSTM32L152_REG_ADR_IDD_SHUNT_USED
Register address: Idd shunt used offset register (R)
Definition: mfxstm32l152.h:417
void mfxstm32l152_Error_ClearIT(uint16_t DeviceAddr)
Clear Error global interrupt.
uint16_t Shunt2Value
Definition: idd.h:78
#define MFXSTM32L152_REG_ADR_IRQ_PENDING
Reg Addr IRQs: the Main MCU must read the IRQ_PENDING register to know the interrupt reason...
Definition: mfxstm32l152.h:153
#define MFXSTM32L152_GPI_WITH_PULL_RESISTOR
Definition: mfxstm32l152.h:335
#define MFXSTM32L152_REG_ADR_IDD_SH4_STABILIZATION
Definition: mfxstm32l152.h:426
uint8_t PreDelayUnit
Definition: idd.h:102
#define MFXSTM32L152_IRQ_ERROR
Definition: mfxstm32l152.h:198
#define MFXSTM32L152_REG_ADR_IDD_SH2_STABILIZATION
Definition: mfxstm32l152.h:424
IO_ModeTypedef
Definition: io.h:74
#define MFXSTM32L152_REG_ADR_IDD_SHUNT1_LSB
Definition: mfxstm32l152.h:381
#define MFXSTM32L152_REG_ADR_IDD_VDD_MIN_MSB
Register address: Idd VDD min register (R/W)
Definition: mfxstm32l152.h:398
uint8_t VrefMeasurement
Definition: idd.h:98
void mfxstm32l152_IDD_EnableIT(uint16_t DeviceAddr)
Configure mfx to enable Idd interrupt.
#define MFXSTM32L152_IDD_CTRL_CAL_DIS
Definition: mfxstm32l152.h:454
#define MFXSTM32L152_ALTERNATE_GPIO_EN
Definition: mfxstm32l152.h:170
#define MFXSTM32L152_GPO_PUSH_PULL
Definition: mfxstm32l152.h:336
uint8_t MeasureNb
Definition: idd.h:106
void mfxstm32l152_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction)
Initialize the selected IO pin direction.
Definition: mfxstm32l152.c:737
void mfxstm32l152_IO_SetIrqTypeMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Type)
Configure the Edge for which a transition is detectable for the selected pin.
Definition: mfxstm32l152.c:771
This file contains all the functions prototypes for the mfxstm32l152.c IO expander driver...
void mfxstm32l152_IDD_ConfigShuntNbLimit(uint16_t DeviceAddr, uint8_t ShuntNbLimit)
This function allows to modify number of shunt used for a measurement.
#define MFXSTM32L152_REG_ADR_IDD_CTRL
Register address: Idd control register (R/W)
Definition: mfxstm32l152.h:368
void mfxstm32l152_TS_DisableIT(uint16_t DeviceAddr)
Configure the selected source to generate a global interrupt or not.
#define MFXSTM32L152_TS_FIFO_STA
Definition: mfxstm32l152.h:354
uint16_t Shunt0Value
Definition: idd.h:74
Definition: io.h:84
#define MFXSTM32L152_REG_ADR_IDD_SHUNT3_MSB
Definition: mfxstm32l152.h:384
#define MFXSTM32L152_IDD_EN
Definition: mfxstm32l152.h:171
void mfxstm32l152_EnableITSource(uint16_t DeviceAddr, uint8_t Source)
Enable the interrupt mode for the selected IT source.
Definition: mfxstm32l152.c:317
#define MFXSTM32L152_REG_ADR_SYS_CTRL
Register address: System Control Register (R/W)
Definition: mfxstm32l152.h:127
uint8_t mfxstm32l152_Error_ReadMsg(uint16_t DeviceAddr)
Read Error Message.
#define MFXSTM32L152_STANDBY
Definition: mfxstm32l152.h:169
#define MFXSTM32L152_MAX_INSTANCE
Definition: mfxstm32l152.c:65
void mfxstm32l152_IO_DisableIT(uint16_t DeviceAddr)
Disable the global IO interrupt source.
Definition: mfxstm32l152.c:841
#define MFXSTM32L152_REG_ADR_IRQ_GPI_EVT1
GPIO IRQ_GPI_EVT1/2/3 (R/W): Irq generated on level (0) or edge (1).
Definition: mfxstm32l152.h:261
void mfxstm32l152_WakeUp(uint16_t DeviceAddr)
WakeUp mfxstm32l152 from standby mode.
Definition: mfxstm32l152.c:249
#define MFXSTM32L152_REG_ADR_IDD_SH3_STABILIZATION
Definition: mfxstm32l152.h:425
void MFX_IO_Write(uint16_t addr, uint8_t reg, uint8_t value)
#define MFXSTM32L152_IRQ_TS
Definition: mfxstm32l152.h:202
void mfxstm32l152_Error_DisableIT(uint16_t DeviceAddr)
disable Error interrupt
uint16_t MFX_IO_ReadMultiple(uint16_t addr, uint8_t reg, uint8_t *buffer, uint16_t length)
uint16_t Shunt4StabDelay
Definition: idd.h:92
#define MFXSTM32L152_GPIO_EN
Definition: mfxstm32l152.h:173
uint8_t mfxstm32l152_TS_DetectTouch(uint16_t DeviceAddr)
Return if there is touch detected or not.
#define MFXSTM32L152_OUT_PIN_TYPE_PUSHPULL
Definition: mfxstm32l152.h:186
void mfxstm32l152_LowPower(uint16_t DeviceAddr)
Put mfxstm32l152 Device in Low Power standby mode.
Definition: mfxstm32l152.c:235
#define MFXSTM32L152_IDD_CTRL_REQ
IDD control register masks.
Definition: mfxstm32l152.h:451
uint8_t MFX_IO_Read(uint16_t addr, uint8_t reg)
#define MFXSTM32L152_IDD_PREDELAY_VALUE
Definition: mfxstm32l152.h:487
#define MFXSTM32L152_IDD_CTRL_VREF_DIS
Definition: mfxstm32l152.h:453
#define MFXSTM32L152_IRQ_GPI_EVT_LEVEL
Definition: mfxstm32l152.h:330
uint16_t Shunt3StabDelay
Definition: idd.h:90
#define MFXSTM32L152_REG_ADR_GPIO_TYPE1
Reg addr: GPIO TYPE (R/W): If GPIO in output: (0) output push pull, (1) output open drain...
Definition: mfxstm32l152.h:219
#define MFXSTM32L152_REG_ADR_GPIO_STATE3
Definition: mfxstm32l152.h:245
void mfxstm32l152_IO_EnablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin)
Enable interrupt mode for the selected IO pin(s).
Definition: mfxstm32l152.c:855
#define MFXSTM32L152_TS_CTRL_STATUS
TS registers masks.
Definition: mfxstm32l152.h:361
#define MFXSTM32L152_IDD_DELTADELAY_UNIT
IDD Delta Delay masks.
Definition: mfxstm32l152.h:505
void mfxstm32l152_TS_Start(uint16_t DeviceAddr)
Configures the touch Screen Controller (Single point detection)
Definition: mfxstm32l152.c:993
void MFX_IO_Init(void)
iobus prototypes (they should be defined in common/stm32_iobus.h)
void mfxstm32l152_IDD_Config(uint16_t DeviceAddr, IDD_ConfigTypeDef MfxIddConfig)
Configures the IDD current measurement.
void mfxstm32l152_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
Get the touch screen X and Y positions values.
#define MFXSTM32L152_REG_ADR_IDD_SHUNT0_LSB
Definition: mfxstm32l152.h:379
#define MFXSTM32L152_SWRST
MFXSTM32L152_REG_ADR_SYS_CTRL choices.
Definition: mfxstm32l152.h:168
uint16_t AmpliGain
Definition: idd.h:70
void mfxstm32l152_ClearGlobalIT(uint16_t DeviceAddr, uint8_t Source)
Clear the selected Global interrupt pending bit(s)
Definition: mfxstm32l152.c:396
void mfxstm32l152_IDD_DisableIT(uint16_t DeviceAddr)
disable Idd interrupt
#define MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR
Definition: mfxstm32l152.h:334
#define MFXSTM32L152_REG_ADR_IDD_SH1_STABILIZATION
Definition: mfxstm32l152.h:423
uint8_t mfxstm32l152_Error_GetITStatus(uint16_t DeviceAddr)
get Error interrupt status
#define MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING3
Definition: mfxstm32l152.h:275
#define MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING2
Definition: mfxstm32l152.h:274
void mfxstm32l152_IO_DisableAF(uint16_t DeviceAddr)
Disable the AF for aGPIO.
Definition: mfxstm32l152.c:961
#define MFXSTM32L152_REG_ADR_IRQ_GPI_TYPE1
GPIO IRQ_GPI_TYPE1/2/3 (R/W): Irq generated on (0) : Low level or Falling edge. (1) : High level or R...
Definition: mfxstm32l152.h:267
#define MFXSTM32L152_IDD_CTRL_SHUNT_NB
Definition: mfxstm32l152.h:452
void mfxstm32l152_SetIrqOutPinPolarity(uint16_t DeviceAddr, uint8_t Polarity)
Set the global interrupt Polarity of IRQ_OUT_PIN.
Definition: mfxstm32l152.c:410
uint8_t mfxstm32l152_IDD_GetShuntUsed(uint16_t DeviceAddr)
Get Last shunt used for measurement.
#define MFXSTM32L152_TS_AVE
Definition: mfxstm32l152.h:351
uint16_t mfxstm32l152_ReadFwVersion(uint16_t DeviceAddr)
Read the MFXSTM32L152 device firmware version.
Definition: mfxstm32l152.c:293
#define MFXSTM32L152_IRQ_GPI_EVT_EDGE
Definition: mfxstm32l152.h:331
#define MFXSTM32L152_GPIO_DIR_IN
GPIO: constant.
Definition: mfxstm32l152.h:328
void mfxstm32l152_SetIrqOutPinType(uint16_t DeviceAddr, uint8_t Type)
Set the global interrupt Type of IRQ_OUT_PIN.
Definition: mfxstm32l152.c:439
void MFX_IO_ITConfig(void)
uint8_t mfxstm32l152_GlobalITStatus(uint16_t DeviceAddr, uint8_t Source)
Returns the selected Global interrupt source pending bit value.
Definition: mfxstm32l152.c:374
void mfxstm32l152_IO_EnableAF(uint16_t DeviceAddr)
Enable the AF for aGPIO.
Definition: mfxstm32l152.c:935
#define MFXSTM32L152_TS_FIFO_LEVEL
Definition: mfxstm32l152.h:355
#define MFXSTM32L152_REG_ADR_IDD_VDD_MIN_LSB
Definition: mfxstm32l152.h:399
#define MFXSTM32L152_REG_ADR_IDD_SHUNT0_MSB
Register address: Idd Shunt registers (R/W)
Definition: mfxstm32l152.h:378
#define MFXSTM32L152_OUT_PIN_POLARITY_HIGH
Definition: mfxstm32l152.h:188
uint8_t Calibration
Definition: idd.h:100
uint8_t mfxstm32l152_IO_Config(uint16_t DeviceAddr, uint32_t IO_Pin, IO_ModeTypedef IO_Mode)
Configures the IO pin(s) according to IO mode structure value.
Definition: mfxstm32l152.c:535
void mfxstm32l152_IDD_GetValue(uint16_t DeviceAddr, uint32_t *ReadValue)
Get Idd current value.
#define MFXSTM32L152_IRQ_GPI_TYPE_LLFE
Definition: mfxstm32l152.h:332
#define MFXSTM32L152_REG_ADR_GPO_SET1
Reg addr: GPIO SET (W): When GPIO is in output mode, write (1) puts the corresponding GPO in High lev...
Definition: mfxstm32l152.h:231
#define MFXSTM32L152_GPO_OPEN_DRAIN
Definition: mfxstm32l152.h:337
#define MFXSTM32L152_REG_ADR_IRQ_GPI_ACK3
Definition: mfxstm32l152.h:281
#define MFXSTM32L152_REG_ADR_MFX_IRQ_OUT
Reg Addr IRQs: to config the pin that informs Main MCU that MFX events appear.
Definition: mfxstm32l152.h:145
uint16_t Shunt0StabDelay
Definition: idd.h:84
#define MFXSTM32L152_REG_ADR_GPO_CLR1
Reg addr: GPIO CLEAR (W): When GPIO is in output mode, write (1) puts the corresponding GPO in Low le...
Definition: mfxstm32l152.h:237
#define MFXSTM32L152_REG_ADR_IDD_SHUNT2_LSB
Definition: mfxstm32l152.h:383
#define MFXSTM32L152_REG_ADR_IDD_NBR_OF_MEAS
Register address: Idd number of measurements register (R/W)
Definition: mfxstm32l152.h:431
uint16_t Shunt3Value
Definition: idd.h:80
uint16_t Shunt4Value
Definition: idd.h:82
void mfxstm32l152_DisableITSource(uint16_t DeviceAddr, uint8_t Source)
Disable the interrupt mode for the selected IT source.
Definition: mfxstm32l152.c:345
#define MFXSTM32L152_REG_ADR_ERROR_SRC
Register address: Error source.
Definition: mfxstm32l152.h:136
uint32_t mfxstm32l152_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin)
Return the state of the selected IO pin(s).
Definition: mfxstm32l152.c:809
#define MFXSTM32L152_TS_TOUCH_DET_DELAY
Definition: mfxstm32l152.h:350
#define MFXSTM32L152_REG_ADR_IDD_SHUNT1_MSB
Definition: mfxstm32l152.h:380
#define MFXSTM32L152_REG_ADR_IRQ_GPI_SRC1
GPIO IRQ_GPIs.
Definition: mfxstm32l152.h:255
uint32_t mfxstm32l152_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin)
Check the status of the selected IO interrupt pending bit.
Definition: mfxstm32l152.c:881
void mfxstm32l152_IO_WritePin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t PinState)
When GPIO is in output mode, puts the corresponding GPO in High (1) or Low (0) level.
Definition: mfxstm32l152.c:786
#define MFXSTM32L152_GPIO_PULL_DOWN
Definition: mfxstm32l152.h:338
void mfxstm32l152_IO_DisablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin)
Disable interrupt mode for the selected IO pin(s).
Definition: mfxstm32l152.c:868
#define MFXSTM32L152_IDD_PREDELAY_UNIT
IDD PreDelay masks.
Definition: mfxstm32l152.h:486
void mfxstm32l152_TS_EnableIT(uint16_t DeviceAddr)
Configure the selected source to generate a global interrupt or not.
#define MFXSTM32L152_REG_ADR_IDD_SHUNT4_LSB
Definition: mfxstm32l152.h:387
void mfxstm32l152_DeInit(uint16_t DeviceAddr)
DeInitialize the mfxstm32l152 and unconfigure the needed hardware resources.
Definition: mfxstm32l152.c:201
void mfxstm32l152_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin)
Clear the selected IO interrupt pending bit(s). It clear automatically also the general MFXSTM32L152_...
Definition: mfxstm32l152.c:903
#define MFXSTM32L152_REG_ADR_IRQ_SRC_EN
Reg Addr IRQs: to select the events which activate the MFXSTM32L152_IRQ_OUT signal.
Definition: mfxstm32l152.h:149
#define MFXSTM32L152_REG_ADR_IDD_GAIN_LSB
Definition: mfxstm32l152.h:393
uint8_t ShuntNbOnBoard
Definition: idd.h:94
#define MFXSTM32L152_REG_ADR_IDD_PRE_DELAY
Register address: Idd pre delay register (R/W)
Definition: mfxstm32l152.h:373
#define MFXSTM32L152_REG_ADR_IDD_MEAS_DELTA_DELAY
Register address: Idd delta delay between 2 measurements register (R/W)
Definition: mfxstm32l152.h:436
#define MFXSTM32L152_IRQ_GPI_TYPE_HLRE
Definition: mfxstm32l152.h:333
#define MFXSTM32L152_IRQ_TS_DET
Definition: mfxstm32l152.h:197
IDD_DrvTypeDef mfxstm32l152_idd_drv
Definition: mfxstm32l152.c:115
#define MFXSTM32L152_TS_XY_DATA
Definition: mfxstm32l152.h:356
#define MFXSTM32L152_REG_ADR_IRQ_GPI_ACK1
GPIO IRQ_GPI_ACK1/2/3 (W): Write (1) to acknowledge IRQ event.
Definition: mfxstm32l152.h:279
#define MFXSTM32L152_REG_ADR_ERROR_MSG
Register address: Error Message.
Definition: mfxstm32l152.h:140
#define MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING1
GPIO IRQ_GPI_PENDING1/2/3 (R): irq occurs.
Definition: mfxstm32l152.h:273
void mfxstm32l152_Init(uint16_t DeviceAddr)
Initialize the mfxstm32l152 and configure the needed hardware resources.
Definition: mfxstm32l152.c:168
#define MFXSTM32L152_REG_ADR_GPIO_STATE2
Definition: mfxstm32l152.h:244
uint16_t Shunt1Value
Definition: idd.h:76
void mfxstm32l152_Error_EnableIT(uint16_t DeviceAddr)
Enable Error global interrupt.
void mfxstm32l152_IDD_Start(uint16_t DeviceAddr)
Launch IDD current measurement.
void mfxstm32l152_TS_ClearIT(uint16_t DeviceAddr)
Configure the selected source to generate a global interrupt or not.
void mfxstm32l152_IO_EnableIT(uint16_t DeviceAddr)
Enable the global IO interrupt source.
Definition: mfxstm32l152.c:828
#define MFXSTM32L152_GPIO_PULL_UP
Definition: mfxstm32l152.h:339
void mfxstm32l152_IDD_ClearIT(uint16_t DeviceAddr)
Clear Idd global interrupt.
uint16_t Shunt2StabDelay
Definition: idd.h:88
uint16_t VddMin
Definition: idd.h:72
uint8_t mfxstm32l152[MFXSTM32L152_MAX_INSTANCE]
Definition: mfxstm32l152.c:143
uint8_t mfxstm32l152_IDD_GetITStatus(uint16_t DeviceAddr)
get Idd interrupt status
uint8_t mfxstm32l152_ReadReg(uint16_t DeviceAddr, uint8_t RegAddr)
FOR DEBUG ONLY.
#define MFXSTM32L152_REG_ADR_IDD_SHUNT2_MSB
Definition: mfxstm32l152.h:382
#define MFXSTM32L152_GPIO_DIR_OUT
Definition: mfxstm32l152.h:329
void mfxstm32l152_Reset(uint16_t DeviceAddr)
Reset the mfxstm32l152 by Software.
Definition: mfxstm32l152.c:221
#define MFXSTM32L152_REG_ADR_IDD_SHUNT3_LSB
Definition: mfxstm32l152.h:385
void mfxstm32l152_WriteReg(uint16_t DeviceAddr, uint8_t RegAddr, uint8_t Value)
void MFX_IO_DeInit(void)
uint8_t PreDelayValue
Definition: idd.h:104
uint8_t DeltaDelayUnit
Definition: idd.h:108
void mfxstm32l152_IO_Start(uint16_t DeviceAddr, uint32_t IO_Pin)
Start the IO functionality used and enable the AF for selected IO pin(s).
Definition: mfxstm32l152.c:472
TS_DrvTypeDef mfxstm32l152_ts_drv
Definition: mfxstm32l152.c:80
#define MFXSTM32L152_REG_ADR_IDD_VALUE_MSB
Register address: Idd value register (R)
Definition: mfxstm32l152.h:404