Add pullup/down mode to pinMode

ex)
pinMode(pin, INPUT_PULLUP);
pinMode(pin, INPUT_PULLDOWN);
This commit is contained in:
Hyeonki Hong
2019-08-14 09:42:25 +09:00
committed by Joshua Yang
parent 53b8871ccf
commit 50e35741d1
6 changed files with 65 additions and 7 deletions

View File

@@ -281,10 +281,19 @@ static int _pinMode (int pin, int mode)
switch (mode) {
case INPUT:
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_OFF);
break;
case OUTPUT:
*(gpio + fsel) = (*(gpio + fsel) & ~(1 << shift));
break;
case INPUT_PULLUP:
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_UP);
break;
case INPUT_PULLDOWN:
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_DOWN);
break;
case SOFT_PWM_OUTPUT:
softPwmCreate (origPin, 0, 100);
break;

View File

@@ -335,10 +335,19 @@ static int _pinMode (int pin, int mode)
switch (mode) {
case INPUT:
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_OFF);
break;
case OUTPUT:
*(gpio + fsel) = (*(gpio + fsel) & ~(1 << shift));
break;
case INPUT_PULLUP:
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_UP);
break;
case INPUT_PULLDOWN:
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_DOWN);
break;
case SOFT_PWM_OUTPUT:
softPwmCreate (origPin, 0, 100);
break;

View File

@@ -286,10 +286,19 @@ static int _pinMode (int pin, int mode)
switch (mode) {
case INPUT:
*(gpio[bank] + (N1_GPIO_CON_OFFSET >> 2)) &= ~(1 << gpioToShiftReg(pin));
_pullUpDnControl(origPin, PUD_OFF);
break;
case OUTPUT:
*(gpio[bank] + (N1_GPIO_CON_OFFSET >> 2)) |= (1 << gpioToShiftReg(pin));
break;
case INPUT_PULLUP:
*(gpio[bank] + (N1_GPIO_CON_OFFSET >> 2)) &= ~(1 << gpioToShiftReg(pin));
_pullUpDnControl(origPin, PUD_UP);
break;
case INPUT_PULLDOWN:
*(gpio[bank] + (N1_GPIO_CON_OFFSET >> 2)) &= ~(1 << gpioToShiftReg(pin));
_pullUpDnControl(origPin, PUD_DOWN);
break;
case SOFT_PWM_OUTPUT:
softPwmCreate (origPin, 0, 100);
break;

View File

@@ -449,11 +449,22 @@ static int _pinMode (int pin, int mode)
case INPUT:
*(gpio + mux) = (*(gpio + mux) & ~(0xF << target));
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_OFF);
break;
case OUTPUT:
*(gpio + mux) = (*(gpio + mux) & ~(0xF << target));
*(gpio + fsel) = (*(gpio + fsel) & ~(1 << shift));
break;
case INPUT_PULLUP:
*(gpio + mux) = (*(gpio + mux) & ~(0xF << target));
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_UP);
break;
case INPUT_PULLDOWN:
*(gpio + mux) = (*(gpio + mux) & ~(0xF << target));
*(gpio + fsel) = (*(gpio + fsel) | (1 << shift));
_pullUpDnControl(origPin, PUD_DOWN);
break;
case SOFT_PWM_OUTPUT:
softPwmCreate (origPin, 0, 100);
break;

View File

@@ -352,10 +352,12 @@ static int _pinMode (int pin, int mode)
switch (mode) {
case INPUT:
if(pin < 100)
if(pin < 100) {
*(gpio + fsel) &= ~(0xF << shift);
else
} else {
*(gpio1 + fsel) &= ~(0xF << shift);
}
_pullUpDnControl(origPin, PUD_OFF);
break;
case OUTPUT:
if(pin < 100) {
@@ -366,6 +368,22 @@ static int _pinMode (int pin, int mode)
*(gpio1 + fsel) |= (0x1 << shift);
}
break;
case INPUT_PULLUP:
if(pin < 100) {
*(gpio + fsel) &= ~(0xF << shift);
} else {
*(gpio1 + fsel) &= ~(0xF << shift);
}
_pullUpDnControl(origPin, PUD_UP);
break;
case INPUT_PULLDOWN:
if(pin < 100) {
*(gpio + fsel) &= ~(0xF << shift);
} else {
*(gpio1 + fsel) &= ~(0xF << shift);
}
_pullUpDnControl(origPin, PUD_DOWN);
break;
case SOFT_PWM_OUTPUT:
softPwmCreate (origPin, 0, 100);
break;

View File

@@ -68,11 +68,13 @@
// Pin modes
#define INPUT 0
#define OUTPUT 1
#define PWM_OUTPUT 2
#define GPIO_CLOCK 3
#define SOFT_PWM_OUTPUT 4
#define SOFT_TONE_OUTPUT 5
#define PWM_TONE_OUTPUT 6
#define INPUT_PULLUP 2
#define INPUT_PULLDOWN 3
#define PWM_OUTPUT 4
#define GPIO_CLOCK 5
#define SOFT_PWM_OUTPUT 6
#define SOFT_TONE_OUTPUT 7
#define PWM_TONE_OUTPUT 8
#define LOW 0
#define HIGH 1