OpenCores
URL https://opencores.org/ocsvn/neo430/neo430/trunk

Subversion Repositories neo430

[/] [neo430/] [trunk/] [neo430/] [sw/] [lib/] [neo430/] [source/] [neo430_pwm.c] - Blame information for rev 198

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 198 zero_gravi
// #################################################################################################
2
// #  < neo430_pwm.c - PWM controller helper functions >                                           #
3
// # ********************************************************************************************* #
4
// # BSD 3-Clause License                                                                          #
5
// #                                                                                               #
6
// # Copyright (c) 2020, Stephan Nolting. All rights reserved.                                     #
7
// #                                                                                               #
8
// # Redistribution and use in source and binary forms, with or without modification, are          #
9
// # permitted provided that the following conditions are met:                                     #
10
// #                                                                                               #
11
// # 1. Redistributions of source code must retain the above copyright notice, this list of        #
12
// #    conditions and the following disclaimer.                                                   #
13
// #                                                                                               #
14
// # 2. Redistributions in binary form must reproduce the above copyright notice, this list of     #
15
// #    conditions and the following disclaimer in the documentation and/or other materials        #
16
// #    provided with the distribution.                                                            #
17
// #                                                                                               #
18
// # 3. Neither the name of the copyright holder nor the names of its contributors may be used to  #
19
// #    endorse or promote products derived from this software without specific prior written      #
20
// #    permission.                                                                                #
21
// #                                                                                               #
22
// # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS   #
23
// # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF               #
24
// # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE    #
25
// # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,     #
26
// # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
27
// # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED    #
28
// # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING     #
29
// # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED  #
30
// # OF THE POSSIBILITY OF SUCH DAMAGE.                                                            #
31
// # ********************************************************************************************* #
32
// # The NEO430 Processor - https://github.com/stnolting/neo430                                    #
33
// #################################################################################################
34
 
35
#include "neo430.h"
36
#include "neo430_pwm.h"
37
 
38
 
39
/* ------------------------------------------------------------
40
 * INFO Reset and activate PWM controller
41
 * PARAM prsc: Clock prescaler for PWM clock
42
 * PARAM size: 1=use 8-bit counter, 0=use 4-bit counter
43
 * PARAM gpio_pwm: Use channel 3 for GPIO.output modulation when 1
44
 * ------------------------------------------------------------ */
45
void neo430_pwm_enable(const uint16_t prsc, const uint16_t size, const uint16_t gpio_pwm) {
46
 
47
  PWM_CT = 0; // reset
48
  PWM_CT = (1<<PWM_CT_EN) | (prsc<<PWM_CT_PRSC0) | (size<<PWM_CT_SIZE_SEL) | (gpio_pwm<<PWM_CT_GPIO_PWM);
49
}
50
 
51
 
52
/* ------------------------------------------------------------
53
 * INFO Disable PWM controller
54
 * ------------------------------------------------------------ */
55
void neo430_pwm_disable(void) {
56
 
57
  PWM_CT = 0;
58
}
59
 
60
 
61
/* ------------------------------------------------------------
62
 * INFO Set duty cycle of channel
63
 * PARAM channel 0..3
64
 * PARAM 8-bit duty cycle
65
 * ------------------------------------------------------------ */
66
void neo430_pwm_set(uint8_t channel, uint8_t dc) {
67
 
68
  uint16_t duty_cycle = 0;
69
 
70
  // get current state
71
  if (channel & 2) // channel 2 or 3
72
    duty_cycle = PWM_CH32;
73
  else // channel 1 or 0
74
    duty_cycle = PWM_CH10;
75
 
76
  // modify high or low part (even or odd channel)
77
  if (channel & 1) { // channel 1 or 3
78
    duty_cycle &= 0x00ff;
79
    duty_cycle |= ((uint16_t)dc) << 8;
80
  }
81
  else { // channel 0 or 2
82
    duty_cycle &= 0xff00;
83
    duty_cycle |= ((uint16_t)dc) << 0;
84
  }
85
 
86
  // write back
87
  if (channel & 2) // channel 2 or 3
88
    PWM_CH32 = duty_cycle;
89
  else // channel 1 or 0
90
    PWM_CH10 = duty_cycle;
91
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.