bsp_periph.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:11k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                     MICIRUM BOARD SUPPORT PACKAGE
  4. *
  5. *                            (c) Copyright 2007-2008; Micrium, Inc.; Weston, FL
  6. *
  7. *                   All rights reserved.  Protected by international copyright laws.
  8. *                   Knowledge of the source code may not be used to write a similar
  9. *                   product.  This file may only be used in accordance with a license
  10. *                   and should not be redistributed in any way.
  11. *********************************************************************************************************
  12. */
  13. /*
  14. *********************************************************************************************************
  15. *
  16. *                                        BOARD SUPPORT PACKAGE
  17. *
  18. *                                     ST Microelectronics STM32
  19. *                                              with the
  20. *                                   STM3210B-EVAL Evaluation Board
  21. *
  22. * Filename      : bsp_periph.c
  23. * Version       : V1.00
  24. * Programmer(s) : BAN
  25. *********************************************************************************************************
  26. */
  27. /*
  28. *********************************************************************************************************
  29. *                                             INCLUDE FILES
  30. *********************************************************************************************************
  31. */
  32. #define  BSP_PERIPH_MODULE
  33. #include <bsp.h>
  34. /*
  35. *********************************************************************************************************
  36. *                                            LOCAL DEFINES
  37. *********************************************************************************************************
  38. */
  39. #define  BSP_PERIPH_REG_RCC_BASE                 0x40021000
  40. #define  BSP_PERIPH_REG_RCC_CFGR            (*(volatile  CPU_INT32U *)(BSP_PERIPH_REG_RCC_BASE + 0x004))
  41. #define  BSP_PERIPH_REG_RCC_AHBENR          (*(volatile  CPU_INT32U *)(BSP_PERIPH_REG_RCC_BASE + 0x014))
  42. #define  BSP_PERIPH_REG_RCC_APB2ENR         (*(volatile  CPU_INT32U *)(BSP_PERIPH_REG_RCC_BASE + 0x018))
  43. #define  BSP_PERIPH_REG_RCC_APB1ENR         (*(volatile  CPU_INT32U *)(BSP_PERIPH_REG_RCC_BASE + 0x01C))
  44. /*
  45. *********************************************************************************************************
  46. *                                           LOCAL CONSTANTS
  47. *********************************************************************************************************
  48. */
  49. /*
  50. *********************************************************************************************************
  51. *                                          LOCAL DATA TYPES
  52. *********************************************************************************************************
  53. */
  54. /*
  55. *********************************************************************************************************
  56. *                                            LOCAL TABLES
  57. *********************************************************************************************************
  58. */
  59. /*
  60. *********************************************************************************************************
  61. *                                       LOCAL GLOBAL VARIABLES
  62. *********************************************************************************************************
  63. */
  64. /*
  65. *********************************************************************************************************
  66. *                                      LOCAL FUNCTION PROTOTYPES
  67. *********************************************************************************************************
  68. */
  69. /*
  70. *********************************************************************************************************
  71. *                                     LOCAL CONFIGURATION ERRORS
  72. *********************************************************************************************************
  73. */
  74. /*
  75. *********************************************************************************************************
  76. *                                         BSP_PeriphClkFreqGet()
  77. *
  78. * Description : Get clock frequency of a peripheral.
  79. *
  80. * Argument(s) : pwr_clk_id      Power/clock ID.
  81. *
  82. * Return(s)   : none.
  83. *
  84. * Caller(s)   : Application.
  85. *
  86. * Note(s)     : none.
  87. *********************************************************************************************************
  88. */
  89. CPU_INT32U  BSP_PeriphClkFreqGet (CPU_DATA  pwr_clk_id)
  90. {
  91.     CPU_INT32U  clk_freq;
  92.     CPU_INT32U  clk_div;
  93.     clk_freq = BSP_CPU_ClkFreq();
  94.     switch (pwr_clk_id) {
  95.         case BSP_PERIPH_ID_DMA1:
  96.         case BSP_PERIPH_ID_DMA2:
  97.         case BSP_PERIPH_ID_SRAM:
  98.         case BSP_PERIPH_ID_FLITF:
  99.         case BSP_PERIPH_ID_CRC:
  100.         case BSP_PERIPH_ID_FSMC:
  101.         case BSP_PERIPH_ID_SDIO:
  102.              return (clk_freq);
  103.         case BSP_PERIPH_ID_AFIO:
  104.         case BSP_PERIPH_ID_IOPA:
  105.         case BSP_PERIPH_ID_IOPB:
  106.         case BSP_PERIPH_ID_IOPC:
  107.         case BSP_PERIPH_ID_IOPD:
  108.         case BSP_PERIPH_ID_IOPE:
  109.         case BSP_PERIPH_ID_IOPF:
  110.         case BSP_PERIPH_ID_IOPG:
  111.         case BSP_PERIPH_ID_ADC1:
  112.         case BSP_PERIPH_ID_ADC2:
  113.         case BSP_PERIPH_ID_TIM1:
  114.         case BSP_PERIPH_ID_SPI1:
  115.         case BSP_PERIPH_ID_TIM8:
  116.         case BSP_PERIPH_ID_USART1:
  117.         case BSP_PERIPH_ID_ADC3:
  118.              clk_div = (BSP_PERIPH_REG_RCC_CFGR & 0x00003800) >> 11;
  119.              if (clk_div < 4) {
  120.                  return (clk_freq);
  121.              }
  122.              clk_div   = (clk_div - 3) << 1;
  123.              clk_freq /= clk_div;
  124.              return (clk_freq);
  125.         case BSP_PERIPH_ID_TIM2:
  126.         case BSP_PERIPH_ID_TIM3:
  127.         case BSP_PERIPH_ID_TIM4:
  128.         case BSP_PERIPH_ID_TIM5:
  129.         case BSP_PERIPH_ID_TIM6:
  130.         case BSP_PERIPH_ID_TIM7:
  131.         case BSP_PERIPH_ID_WWDG:
  132.         case BSP_PERIPH_ID_SPI2:
  133.         case BSP_PERIPH_ID_SPI3:
  134.         case BSP_PERIPH_ID_USART2:
  135.         case BSP_PERIPH_ID_USART3:
  136.         case BSP_PERIPH_ID_USART4:
  137.         case BSP_PERIPH_ID_USART5:
  138.         case BSP_PERIPH_ID_I2C1:
  139.         case BSP_PERIPH_ID_I2C2:
  140.         case BSP_PERIPH_ID_USB:
  141.         case BSP_PERIPH_ID_CAN:
  142.         case BSP_PERIPH_ID_BKP:
  143.         case BSP_PERIPH_ID_PWR:
  144.         case BSP_PERIPH_ID_DAC:
  145.              clk_div = (BSP_PERIPH_REG_RCC_CFGR & 0x00000700) >> 8;
  146.              if (clk_div < 4) {
  147.                  return (clk_freq);
  148.              }
  149.              clk_div   = (clk_div - 3) << 1;
  150.              clk_freq /= clk_div;
  151.              return (clk_freq);
  152.     }
  153.     return ((CPU_INT32U)0);
  154. }
  155. /*
  156. *********************************************************************************************************
  157. *                                             BSP_PeriphEn()
  158. *
  159. * Description : Enable clock for peripheral.
  160. *
  161. * Argument(s) : pwr_clk_id      Power/clock ID.
  162. *
  163. * Return(s)   : none.
  164. *
  165. * Caller(s)   : Application.
  166. *
  167. * Note(s)     : none.
  168. *********************************************************************************************************
  169. */
  170. void  BSP_PeriphEn (CPU_DATA  pwr_clk_id)
  171. {
  172.     switch (pwr_clk_id) {
  173.         case BSP_PERIPH_ID_DMA1:
  174.         case BSP_PERIPH_ID_DMA2:
  175.         case BSP_PERIPH_ID_SRAM:
  176.         case BSP_PERIPH_ID_FLITF:
  177.         case BSP_PERIPH_ID_CRC:
  178.         case BSP_PERIPH_ID_FSMC:
  179.         case BSP_PERIPH_ID_SDIO:
  180.              BSP_PERIPH_REG_RCC_AHBENR |= DEF_BIT(pwr_clk_id);
  181.              break;
  182.         case BSP_PERIPH_ID_AFIO:
  183.         case BSP_PERIPH_ID_IOPA:
  184.         case BSP_PERIPH_ID_IOPB:
  185.         case BSP_PERIPH_ID_IOPC:
  186.         case BSP_PERIPH_ID_IOPD:
  187.         case BSP_PERIPH_ID_IOPE:
  188.         case BSP_PERIPH_ID_IOPF:
  189.         case BSP_PERIPH_ID_IOPG:
  190.         case BSP_PERIPH_ID_ADC1:
  191.         case BSP_PERIPH_ID_ADC2:
  192.         case BSP_PERIPH_ID_TIM1:
  193.         case BSP_PERIPH_ID_SPI1:
  194.         case BSP_PERIPH_ID_TIM8:
  195.         case BSP_PERIPH_ID_USART1:
  196.         case BSP_PERIPH_ID_ADC3:
  197.              BSP_PERIPH_REG_RCC_APB2ENR |= DEF_BIT(pwr_clk_id - 32);
  198.              break;
  199.         case BSP_PERIPH_ID_TIM2:
  200.         case BSP_PERIPH_ID_TIM3:
  201.         case BSP_PERIPH_ID_TIM4:
  202.         case BSP_PERIPH_ID_TIM5:
  203.         case BSP_PERIPH_ID_TIM6:
  204.         case BSP_PERIPH_ID_TIM7:
  205.         case BSP_PERIPH_ID_WWDG:
  206.         case BSP_PERIPH_ID_SPI2:
  207.         case BSP_PERIPH_ID_SPI3:
  208.         case BSP_PERIPH_ID_USART2:
  209.         case BSP_PERIPH_ID_USART3:
  210.         case BSP_PERIPH_ID_USART4:
  211.         case BSP_PERIPH_ID_USART5:
  212.         case BSP_PERIPH_ID_I2C1:
  213.         case BSP_PERIPH_ID_I2C2:
  214.         case BSP_PERIPH_ID_USB:
  215.         case BSP_PERIPH_ID_CAN:
  216.         case BSP_PERIPH_ID_BKP:
  217.         case BSP_PERIPH_ID_PWR:
  218.         case BSP_PERIPH_ID_DAC:
  219.              BSP_PERIPH_REG_RCC_APB1ENR |= DEF_BIT(pwr_clk_id - 64);
  220.              break;
  221.     }
  222. }
  223. /*
  224. *********************************************************************************************************
  225. *                                             BSP_PeriphDis()
  226. *
  227. * Description : Disable clock for peripheral.
  228. *
  229. * Argument(s) : pwr_clk_id      Power/clock ID.
  230. *
  231. * Return(s)   : none.
  232. *
  233. * Caller(s)   : Application.
  234. *
  235. * Note(s)     : none.
  236. *********************************************************************************************************
  237. */
  238. void  BSP_PeriphDis (CPU_DATA  pwr_clk_id)
  239. {
  240.     switch (pwr_clk_id) {
  241.         case BSP_PERIPH_ID_DMA1:
  242.         case BSP_PERIPH_ID_DMA2:
  243.         case BSP_PERIPH_ID_SRAM:
  244.         case BSP_PERIPH_ID_FLITF:
  245.         case BSP_PERIPH_ID_CRC:
  246.         case BSP_PERIPH_ID_FSMC:
  247.         case BSP_PERIPH_ID_SDIO:
  248.              BSP_PERIPH_REG_RCC_AHBENR &= ~DEF_BIT(pwr_clk_id);
  249.              break;
  250.         case BSP_PERIPH_ID_AFIO:
  251.         case BSP_PERIPH_ID_IOPA:
  252.         case BSP_PERIPH_ID_IOPB:
  253.         case BSP_PERIPH_ID_IOPC:
  254.         case BSP_PERIPH_ID_IOPD:
  255.         case BSP_PERIPH_ID_IOPE:
  256.         case BSP_PERIPH_ID_IOPF:
  257.         case BSP_PERIPH_ID_IOPG:
  258.         case BSP_PERIPH_ID_ADC1:
  259.         case BSP_PERIPH_ID_ADC2:
  260.         case BSP_PERIPH_ID_TIM1:
  261.         case BSP_PERIPH_ID_SPI1:
  262.         case BSP_PERIPH_ID_TIM8:
  263.         case BSP_PERIPH_ID_USART1:
  264.         case BSP_PERIPH_ID_ADC3:
  265.              BSP_PERIPH_REG_RCC_APB2ENR &= ~DEF_BIT(pwr_clk_id - 32);
  266.              break;
  267.         case BSP_PERIPH_ID_TIM2:
  268.         case BSP_PERIPH_ID_TIM3:
  269.         case BSP_PERIPH_ID_TIM4:
  270.         case BSP_PERIPH_ID_TIM5:
  271.         case BSP_PERIPH_ID_TIM6:
  272.         case BSP_PERIPH_ID_TIM7:
  273.         case BSP_PERIPH_ID_WWDG:
  274.         case BSP_PERIPH_ID_SPI2:
  275.         case BSP_PERIPH_ID_SPI3:
  276.         case BSP_PERIPH_ID_USART2:
  277.         case BSP_PERIPH_ID_USART3:
  278.         case BSP_PERIPH_ID_USART4:
  279.         case BSP_PERIPH_ID_USART5:
  280.         case BSP_PERIPH_ID_I2C1:
  281.         case BSP_PERIPH_ID_I2C2:
  282.         case BSP_PERIPH_ID_USB:
  283.         case BSP_PERIPH_ID_CAN:
  284.         case BSP_PERIPH_ID_BKP:
  285.         case BSP_PERIPH_ID_PWR:
  286.         case BSP_PERIPH_ID_DAC:
  287.              BSP_PERIPH_REG_RCC_APB1ENR &= ~DEF_BIT(pwr_clk_id - 64);
  288.              break;
  289.     }
  290. }