NetBurner 3.5.6
PDF Version
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
26extern volatile uint32_t PERIPH_CLOCK;
27
28// 49.5.3 PWM interrupt
29
30enum pwmChannelNumber {
31 PWM_CHANNEL_0 = 0,
32 PWM_CHANNEL_1 = 1,
33 PWM_CHANNEL_2 = 2,
34 PWM_CHANNEL_3 = 3,
35};
36
37enum pwmAlignment {
38 PWM_ALIGN_LEFT = 0,
39 PWM_ALIGN_CENTER = 1,
40};
41
42enum pwmPolarity {
43 PWM_LOW_LEVEL = 0,
44 PWM_HIGH_LEVEL = 1,
45};
46
47typedef 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
61class PWMModule
62{
63public:
64
65protected:
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;
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
115public:
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 ----- */
NetBurner Real-Time Operating System (NBRTOS) API.
#define PWM0
(PWM0 ) Base Address
Definition same70q21_sim.h:221