source: rtems/c/src/lib/libbsp/arm/lm3s69xx/startup/syscon.c @ f22bba3

4.115
Last change on this file since f22bba3 was f22bba3, checked in by Eugeniy Meshcheryakov <eugen@…>, on 04/26/13 at 09:03:59

bsp/lm3s69xx: New BSP variants

Add support for LM3S3749.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/*
2 * Copyright © 2013 Eugeniy Meshcheryakov <eugen@debian.org>
3 *
4 * The license and distribution terms for this file may be
5 * found in the file LICENSE in this distribution or at
6 * http://www.rtems.com/license/LICENSE.
7 */
8
9#include <bsp/syscon.h>
10#include <bsp/lm3s69xx.h>
11#include <rtems.h>
12
13static void delay_3_clocks(void)
14{
15  asm volatile(
16      "nop\n\t"
17      "nop\n\t"
18      "nop");
19}
20
21void lm3s69xx_syscon_enable_gpio_clock(unsigned int port, bool enable)
22{
23  volatile lm3s69xx_syscon *syscon = LM3S69XX_SYSCON;
24  uint32_t mask = 1 << port;
25  rtems_interrupt_level level;
26
27  rtems_interrupt_disable(level);
28
29  if (enable)
30    syscon->rcgc2 |= mask;
31  else
32    syscon->rcgc2 &= ~mask;
33
34  delay_3_clocks();
35
36  rtems_interrupt_enable(level);
37}
38
39void lm3s69xx_syscon_enable_uart_clock(unsigned int port, bool enable)
40{
41  volatile lm3s69xx_syscon *syscon = LM3S69XX_SYSCON;
42  uint32_t mask = 1 << port;
43  rtems_interrupt_level level;
44
45  rtems_interrupt_disable(level);
46
47  if (enable)
48    syscon->rcgc1 |= mask;
49  else
50    syscon->rcgc1 &= ~mask;
51
52  delay_3_clocks();
53
54  rtems_interrupt_enable(level);
55}
56
57void lm3s69xx_syscon_enable_ssi_clock(unsigned int port, bool enable)
58{
59  volatile lm3s69xx_syscon *syscon = LM3S69XX_SYSCON;
60  uint32_t mask = 1 << (port + 4);
61  rtems_interrupt_level level;
62
63  rtems_interrupt_disable(level);
64
65  if (enable)
66    syscon->rcgc1 |= mask;
67  else
68    syscon->rcgc1 &= ~mask;
69
70  delay_3_clocks();
71
72  rtems_interrupt_enable(level);
73}
74
75void lm3s69xx_syscon_enable_pwm_clock(bool enable)
76{
77  volatile lm3s69xx_syscon *syscon = LM3S69XX_SYSCON;
78  rtems_interrupt_level level;
79
80  rtems_interrupt_disable(level);
81
82  if (enable)
83    syscon->rcgc0 |= SYSCONRCGC0_PWM;
84  else
85    syscon->rcgc0 &= ~SYSCONRCGC0_PWM;
86
87  delay_3_clocks();
88
89  rtems_interrupt_enable(level);
90}
91
92/**
93 * Sets PWMDIV field in the RCC register.
94 *
95 * @note div should be one of SCRCC_PWMDIV_DIV?_VAL constants.
96 */
97void lm3s69xx_syscon_set_pwmdiv(unsigned int div)
98{
99  volatile lm3s69xx_syscon *syscon = LM3S69XX_SYSCON;
100  rtems_interrupt_level level;
101
102  rtems_interrupt_disable(level);
103  syscon->rcc = (syscon->rcc & ~SYSCONRCC_PWMDIV_MSK) | SYSCONRCC_PWMDIV(div)
104      | SYSCONRCC_USEPWMDIV;
105  rtems_interrupt_enable(level);
106}
Note: See TracBrowser for help on using the repository browser.