Skip to content

Commit 488006a

Browse files
committed
add HwPWM3 for nrf52840
1 parent 8d2fed6 commit 488006a

File tree

4 files changed

+27
-8
lines changed

4 files changed

+27
-8
lines changed

cores/nRF5/HardwarePWM.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,17 @@ HardwarePWM HwPWM0(NRF_PWM0);
4141
HardwarePWM HwPWM1(NRF_PWM1);
4242
HardwarePWM HwPWM2(NRF_PWM2);
4343

44-
HardwarePWM* HwPWMx[3] = { &HwPWM0, &HwPWM1, &HwPWM2 };
44+
#ifdef NRF52840_XXAA
45+
HardwarePWM HwPWM3(NRF_PWM3);
46+
#endif
47+
48+
HardwarePWM* HwPWMx[] =
49+
{
50+
&HwPWM0, &HwPWM1, &HwPWM2
51+
#ifdef NRF52840_XXAA
52+
,&HwPWM3
53+
#endif
54+
};
4555

4656
HardwarePWM::HardwarePWM(NRF_PWM_Type* pwm)
4757
{

cores/nRF5/HardwarePWM.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@
3939
#include "common_inc.h"
4040
#include "nrf.h"
4141

42+
#ifdef NRF52840_XXAA
43+
#define HWPWM_MODULE_NUM 4
44+
#else
4245
#define HWPWM_MODULE_NUM 3
46+
#endif
4347

4448
class HardwarePWM
4549
{
@@ -65,7 +69,7 @@ class HardwarePWM
6569
void setClockDiv(uint8_t div); // value is PWM_PRESCALER_PRESCALER_DIV_x, DIV1 is 16Mhz
6670

6771
bool addPin (uint8_t pin);
68-
int pin2channel(uint8_t pin) ATTR_ALWAYS_INLINE
72+
int pin2channel(uint8_t pin)
6973
{
7074
for(int i=0; i<_count; i++)
7175
{
@@ -74,7 +78,7 @@ class HardwarePWM
7478
return (-1);
7579
}
7680

77-
bool checkPin(uint8_t pin) ATTR_ALWAYS_INLINE
81+
bool checkPin(uint8_t pin)
7882
{
7983
return pin2channel(pin) >= 0;
8084
}
@@ -84,8 +88,8 @@ class HardwarePWM
8488
void stop (void);
8589

8690
// Generate PWM
87-
bool writePin (uint8_t pin, uint16_t value, bool inverted = false);
88-
bool writeChannel(uint8_t ch , uint16_t value, bool inverted = false);
91+
bool writePin (uint8_t pin, uint16_t value, bool inverted = false);
92+
bool writeChannel(uint8_t ch , uint16_t value, bool inverted = false);
8993

9094
// Read current set value
9195
uint16_t readPin (uint8_t pin);
@@ -96,6 +100,10 @@ extern HardwarePWM HwPWM0;
96100
extern HardwarePWM HwPWM1;
97101
extern HardwarePWM HwPWM2;
98102

99-
extern HardwarePWM* HwPWMx[3];
103+
#ifdef NRF52840_XXAA
104+
extern HardwarePWM HwPWM3;
105+
#endif
106+
107+
extern HardwarePWM* HwPWMx[];
100108

101109
#endif /* HARDWAREPWM_H_ */

cores/nRF5/wiring_analog.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ void analogWriteResolution( uint8_t res )
6464
*/
6565
void analogWrite( uint32_t pin, uint32_t value )
6666
{
67-
for(int i=0; i<3; i++)
67+
for(int i=0; i<HWPWM_MODULE_NUM; i++)
6868
{
6969
// Added by if needed
7070
if ( HwPWMx[i]->addPin(pin) )

libraries/Bluefruit52Lib/examples/Hardware/hwpwm/hwpwm.ino

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828

2929
#include <Arduino.h>
3030

31-
// Maximum 12 pins can be used for 3 PWM module ( 4 channel each )
31+
// Maximum 12 pins can be used for 3 PWM modules ( 4 channel each )
32+
// Note: nRF52832 has 3 PWM modules, nRF52840 has 4 PWM modules
3233
int pins[12] =
3334
{
3435
A0 , A1 , A2 , A3,

0 commit comments

Comments
 (0)