NetBurner 3.5.8
PDF Version
Toggle main menu visibility
pwm.h
1
/*NB_REVISION*/
2
3
/*NB_COPYRIGHT*/
4
5
#ifndef _PWM_H_INC
6
#define _PWM_H_INC
7
8
#include <predef.h>
9
#include <stdio.h>
10
#include <nbrtos.h>
11
#include <sim.h>
12
13
#ifndef __cplusplus
14
#error PWM driver is a C++ only library
15
#endif
16
17
#define DEFAULT_PWM_MODULE 0
18
#define PWM_MODULE_COUNT 2
19
#define PWM_CHANNEL_COUNT 4
20
21
#define PWM_CLOCK_DIV_MAX 256
22
#define PWM_CLOCK_PRE_MAX 11
23
24
#define __DEBUG_PWM
25
26
extern
volatile
uint32_t PERIPH_CLOCK;
27
28
// 49.5.3 PWM interrupt
29
30
enum
pwmChannelNumber {
31
PWM_CHANNEL_0 = 0,
32
PWM_CHANNEL_1 = 1,
33
PWM_CHANNEL_2 = 2,
34
PWM_CHANNEL_3 = 3,
35
};
36
37
enum
pwmAlignment {
38
PWM_ALIGN_LEFT = 0,
39
PWM_ALIGN_CENTER = 1,
40
};
41
42
enum
pwmPolarity {
43
PWM_LOW_LEVEL = 0,
44
PWM_HIGH_LEVEL = 1,
45
};
46
47
typedef
struct
48
{
49
uint32_t m_reg_PWM_CMR;
50
uint32_t m_frequency;
51
uint32_t m_dutyCycle;
52
uint32_t m_period;
53
uint8_t m_alignment;
54
uint8_t m_polarity;
55
uint32_t m_clockSource;
// clock A, clock B, or master clock/peripheral clock
56
// counter event
57
// deadtime
58
} pwmChannelStruct;
59
60
61
class
PWMModule
62
{
63
public
:
64
65
protected
:
66
static
PWMModule *lastCtxs[PWM_MODULE_COUNT];
67
// static spiDriverStruct driverCtx[PWM_MODULE_COUNT];
68
69
// PWM Module specific
70
uint8_t m_moduleNum;
71
uint32_t m_reg_PWM_CLK;
72
73
74
// polarity
75
76
// Channel Specific
77
// static pwmChannelStruct pwmChannels[PWM_CHANNEL_COUNT];
78
static
pwmChannelStruct pwmChannels[PWM_MODULE_COUNT][PWM_CHANNEL_COUNT];
79
// deadtime
80
81
/* Additional members pwm_channel_t (Microchip source): */
82
// pwm_counter_event_t counter_event; /** Channel counter event */
83
// bool b_deadtime_generator; /** Boolean of channel dead-time generator */
84
// bool b_pwmh_output_inverted; /** Boolean of channel dead-time PWMH output inverted */
85
// bool b_pwml_output_inverted; /** Boolean of channel dead-time PWML output inverted */
86
// uint16_t us_deadtime_pwmh; /** Dead-time Value for PWMH Output */
87
// uint16_t us_deadtime_pwml; /** Dead-time Value for PWML Output */
88
// pwm_output_t output_selection; /** Channel output */
89
// bool b_sync_ch; /** Boolean of Synchronous Channel */
90
// pwm_fault_id_t fault_id; /** Fault ID of the channel */
91
// pwm_level_t ul_fault_output_pwmh; /** Channel PWMH output level in fault protection */
92
// pwm_level_t ul_fault_output_pwml; /** Channel PWML output level in fault protection */
93
94
// uint32_t ul_spread; /** Spread Spectrum Value */
95
// pwm_spread_spectrum_mode_t spread_spectrum_mode; /** Spread Spectrum Mode */
96
// uint32_t ul_leading_edge_delay; /** Leading Edge Value */
97
// pwm_leading_edge_blanking_mode_t leading_edge_blanking_mode; /** Leading Edge Mode */
98
// uint32_t ul_ppm_mode; /** PPM Mode in Channel mode */
99
/* End Additional members pwm_channel_t (Microchip source): */
100
101
102
103
// uint32_t m_regMR;
104
// uint32_t m_regCSR;
105
// OS_SEM *m_finishedSem;
106
// uint32_t m_busSpeed;
107
// uint8_t m_CSNum;
108
// volatile bool m_inProgress;
109
110
// void ReadyHW();
111
// spiDriverStruct *getCtx() { return driverCtx + m_moduleNum; }
112
inline
Pwm * pwm() {
return
PWM0 + m_moduleNum; }
113
inline
pwmChannelStruct * getChannelStruct(uint8_t channelNum) {
return
&(pwmChannels[m_moduleNum][channelNum]); }
114
115
public
:
116
117
#ifdef __DEBUG_PWM
118
void
dumpRegs();
119
void
dumpChannelStruct(uint8_t channelNum);
120
#endif
121
122
PWMModule( uint8_t pwmModule = DEFAULT_PWM_MODULE);
123
124
uint8_t Init();
125
uint32_t ConfigureChannel(uint8_t channelNum, uint32_t frequency,
126
uint8_t alignment = PWM_ALIGN_LEFT, uint8_t polarity = PWM_LOW_LEVEL,
127
uint32_t period = 100, uint32_t dutyCycle = 50);
128
uint8_t EnableChannel(uint8_t channelNum);
129
uint8_t DisableChannel(uint8_t channelNum);
130
uint32_t SetFrequency(uint8_t channelNum, uint32_t frequency);
131
uint32_t GetActualFrequency(uint8_t channelNum);
132
bool
ChannelIsActive(uint8_t channelNum);
133
134
// EnableDeadtime(uint8_t channelNum)
135
// DisableDeadtime(uint8_t channelNum)
136
// uint8_t GetAvailableChannel() ?
137
};
138
139
140
#endif
/* ----- #ifndef _PWM_H_INC ----- */
arch
cortex-m7
cpu
SAME70
include
pwm.h
Generated by
1.18.0