Guest User

delay for stm8

a guest
Jun 17th, 2016
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.66 KB | None | 0 0
  1. /**
  2.   ******************************************************************************
  3.   * @file    delay.c
  4.   * @author  Microcontroller Division
  5.   * @version V1.2.0
  6.   * @date    09/2010
  7.   * @brief   delay functions
  8.   ******************************************************************************
  9.   * @copy
  10.   *
  11.   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12.   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13.   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  14.   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15.   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16.   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17.   *
  18.   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>
  19.   */
  20.  
  21. /* Includes ------------------------------------------------------------------*/
  22.  
  23. #include "stm8l15x_clk.h"
  24. /**
  25.   * @brief  delay for some time in ms unit
  26.   * @caller auto_test
  27.   * @param  n_ms is how many ms of time to delay
  28.   * @retval None
  29.   */
  30. void delay_ms(u16 n_ms)
  31. {
  32. /* Init TIMER 4 */
  33.   CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);
  34.  
  35. /* Init TIMER 4 prescaler: / (2^6) = /64 */
  36.   TIM4->PSCR = 6;
  37.  
  38. /* HSI div by 1 --> Auto-Reload value: 16M / 64 = 1/4M, 1/4M / 1k = 250*/
  39.   TIM4->ARR = 250;
  40.  
  41. /* Counter value: 2, to compensate the initialization of TIMER*/
  42.   TIM4->CNTR = 2;
  43.  
  44. /* clear update flag */
  45.   TIM4->SR1 &= ~TIM4_SR1_UIF;
  46.  
  47. /* Enable Counter */
  48.   TIM4->CR1 |= TIM4_CR1_CEN;
  49.  
  50.   while(n_ms--)
  51.   {
  52.     while((TIM4->SR1 & TIM4_SR1_UIF) == 0) ;
  53.     TIM4->SR1 &= ~TIM4_SR1_UIF;
  54.   }
  55.  
  56. /* Disable Counter */
  57.   TIM4->CR1 &= ~TIM4_CR1_CEN;
  58. }
  59.  
  60. /**
  61.   * @brief  delay for some time in 10us unit(partial accurate)
  62.   * @caller auto_test
  63.   * @param n_10us is how many 10us of time to delay
  64.   * @retval None
  65.   */
  66. void delay_10us(u16 n_10us)
  67. {
  68. /* Init TIMER 4 */
  69.   CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);
  70.  
  71. /* prescaler: / (2^0) = /1 */
  72.   TIM4->PSCR = 0;
  73.  
  74. /* SYS_CLK_HSI_DIV1 Auto-Reload value: 16M / 1 = 16M, 16M / 100k = 160 */
  75.   TIM4->ARR = 160;
  76.  
  77. /* Counter value: 10, to compensate the initialization of TIMER */
  78.   TIM4->CNTR = 10;
  79.  
  80. /* clear update flag */
  81.   TIM4->SR1 &= ~TIM4_SR1_UIF;
  82.  
  83. /* Enable Counter */
  84.   TIM4->CR1 |= TIM4_CR1_CEN;
  85.  
  86.   while(n_10us--)
  87.   {
  88.     while((TIM4->SR1 & TIM4_SR1_UIF) == 0) ;
  89.     TIM4->SR1 &= ~TIM4_SR1_UIF;
  90.   }
  91.  
  92. /* Disable Counter */
  93.   TIM4->CR1 &= ~TIM4_CR1_CEN;
  94.  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, DISABLE);
  95.  
  96. }
  97.  
  98. /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment