Merge pull request #70 from steveb/master

Add support for Raspberry Pi 4B
This commit is contained in:
Mark Liffiton 2019-12-29 20:23:09 -06:00 committed by GitHub
commit 16a23e3688
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 80 additions and 34 deletions

View File

@ -1 +1 @@
2.50 2.60

View File

@ -309,6 +309,8 @@ static void plus2header (int model)
printf (" +-----+-----+---------+------+---+---Pi 3B+-+---+------+---------+-----+-----+\n") ; printf (" +-----+-----+---------+------+---+---Pi 3B+-+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_3AP) else if (model == PI_MODEL_3AP)
printf (" +-----+-----+---------+------+---+---Pi 3A+-+---+------+---------+-----+-----+\n") ; printf (" +-----+-----+---------+------+---+---Pi 3A+-+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_4B)
printf (" +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+\n") ;
else else
printf (" +-----+-----+---------+------+---+---Pi ?---+---+------+---------+-----+-----+\n") ; printf (" +-----+-----+---------+------+---+---Pi ?---+---+------+---------+-----+-----+\n") ;
} }
@ -356,6 +358,7 @@ void doReadall (void)
(model == PI_MODEL_2) || (model == PI_MODEL_2) ||
(model == PI_MODEL_3AP) || (model == PI_MODEL_3AP) ||
(model == PI_MODEL_3B) || (model == PI_MODEL_3BP) || (model == PI_MODEL_3B) || (model == PI_MODEL_3BP) ||
(model == PI_MODEL_4B) ||
(model == PI_MODEL_ZERO) || (model == PI_MODEL_ZERO_W)) (model == PI_MODEL_ZERO) || (model == PI_MODEL_ZERO_W))
piPlusReadall (model) ; piPlusReadall (model) ;
else if ((model == PI_MODEL_CM) || (model == PI_MODEL_CM3) || ((model == PI_MODEL_CM3P))) else if ((model == PI_MODEL_CM) || (model == PI_MODEL_CM3) || ((model == PI_MODEL_CM3P)))

View File

@ -1,3 +1,3 @@
#define VERSION "2.50" #define VERSION "2.60"
#define VERSION_MAJOR 2 #define VERSION_MAJOR 2
#define VERSION_MINOR 50 #define VERSION_MINOR 60

View File

@ -214,7 +214,8 @@ volatile unsigned int *_wiringPiTimerIrqRaw ;
// The base address of the GPIO memory mapped hardware IO // The base address of the GPIO memory mapped hardware IO
#define GPIO_PERI_BASE_OLD 0x20000000 #define GPIO_PERI_BASE_OLD 0x20000000
#define GPIO_PERI_BASE_NEW 0x3F000000 #define GPIO_PERI_BASE_2835 0x3F000000
#define GPIO_PERI_BASE_2711 0xFE000000
static volatile unsigned int piGpioBase = 0 ; static volatile unsigned int piGpioBase = 0 ;
@ -237,7 +238,7 @@ const char *piModelNames [20] =
"Pi 3A+", // 14 "Pi 3A+", // 14
"Unknown15", // 15 "Unknown15", // 15
"CM3+", // 16 "CM3+", // 16
"Unknown17", // 17 "Pi 4B", // 17
"Unknown18", // 18 "Unknown18", // 18
"Unknown19", // 19 "Unknown19", // 19
} ; } ;
@ -542,6 +543,14 @@ static uint8_t gpioToFEN [] =
#define GPPUD 37 #define GPPUD 37
/* 2711 has a different mechanism for pin pull-up/down/enable */
#define GPPUPPDN0 57 /* Pin pull-up/down for pins 15:0 */
#define GPPUPPDN1 58 /* Pin pull-up/down for pins 31:16 */
#define GPPUPPDN2 59 /* Pin pull-up/down for pins 47:32 */
#define GPPUPPDN3 60 /* Pin pull-up/down for pins 57:48 */
static volatile unsigned int piGpioPupOffset = 0 ;
// gpioToPUDCLK // gpioToPUDCLK
// (Word) offset to the Pull Up Down Clock regsiter // (Word) offset to the Pull Up Down Clock regsiter
@ -1508,12 +1517,37 @@ void pullUpDnControl (int pin, int pud)
else if (wiringPiMode != WPI_MODE_GPIO) else if (wiringPiMode != WPI_MODE_GPIO)
return ; return ;
if (piGpioPupOffset == GPPUPPDN0)
{
// Pi 4B pull up/down method
int pullreg = GPPUPPDN0 + (pin>>4);
int pullshift = (pin & 0xf) << 1;
unsigned int pullbits;
unsigned int pull;
switch (pud)
{
case PUD_OFF: pull = 0; break;
case PUD_UP: pull = 1; break;
case PUD_DOWN: pull = 2; break;
default: return ; /* An illegal value */
}
pullbits = *(gpio + pullreg);
pullbits &= ~(3 << pullshift);
pullbits |= (pull << pullshift);
*(gpio + pullreg) = pullbits;
}
else
{
// legacy pull up/down method
*(gpio + GPPUD) = pud & 3 ; delayMicroseconds (5) ; *(gpio + GPPUD) = pud & 3 ; delayMicroseconds (5) ;
*(gpio + gpioToPUDCLK [pin]) = 1 << (pin & 31) ; delayMicroseconds (5) ; *(gpio + gpioToPUDCLK [pin]) = 1 << (pin & 31) ; delayMicroseconds (5) ;
*(gpio + GPPUD) = 0 ; delayMicroseconds (5) ; *(gpio + GPPUD) = 0 ; delayMicroseconds (5) ;
*(gpio + gpioToPUDCLK [pin]) = 0 ; delayMicroseconds (5) ; *(gpio + gpioToPUDCLK [pin]) = 0 ; delayMicroseconds (5) ;
} }
}
else // Extension module else // Extension module
{ {
if ((node = wiringPiFindNode (pin)) != NULL) if ((node = wiringPiFindNode (pin)) != NULL)
@ -1533,7 +1567,6 @@ int digitalRead (int pin)
{ {
char c ; char c ;
struct wiringPiNodeStruct *node = wiringPiNodes ; struct wiringPiNodeStruct *node = wiringPiNodes ;
if ((pin & PI_GPIO_MASK) == 0) // On-Board Pin if ((pin & PI_GPIO_MASK) == 0) // On-Board Pin
{ {
/**/ if (wiringPiMode == WPI_MODE_GPIO_SYS) // Sys mode /**/ if (wiringPiMode == WPI_MODE_GPIO_SYS) // Sys mode
@ -2243,7 +2276,9 @@ int wiringPiSetup (void)
piBoardId (&model, &rev, &mem, &maker, &overVolted) ; piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
if ((model == PI_MODEL_CM) || (model == PI_MODEL_CM3) || (model == PI_MODEL_CM3P)) if ((model == PI_MODEL_CM) ||
(model == PI_MODEL_CM3) ||
(model == PI_MODEL_CM3P))
wiringPiMode = WPI_MODE_GPIO ; wiringPiMode = WPI_MODE_GPIO ;
else else
wiringPiMode = WPI_MODE_PINS ; wiringPiMode = WPI_MODE_PINS ;
@ -2268,10 +2303,17 @@ int wiringPiSetup (void)
case PI_ALPHA: case PI_MODEL_CM: case PI_ALPHA: case PI_MODEL_CM:
case PI_MODEL_ZERO: case PI_MODEL_ZERO_W: case PI_MODEL_ZERO: case PI_MODEL_ZERO_W:
piGpioBase = GPIO_PERI_BASE_OLD ; piGpioBase = GPIO_PERI_BASE_OLD ;
piGpioPupOffset = GPPUD ;
break ;
case PI_MODEL_4B:
piGpioBase = GPIO_PERI_BASE_2711 ;
piGpioPupOffset = GPPUPPDN0 ;
break ; break ;
default: default:
piGpioBase = GPIO_PERI_BASE_NEW ; piGpioBase = GPIO_PERI_BASE_2835 ;
piGpioPupOffset = GPPUD ;
break ; break ;
} }

View File

@ -102,6 +102,7 @@
#define PI_MODEL_3BP 13 #define PI_MODEL_3BP 13
#define PI_MODEL_3AP 14 #define PI_MODEL_3AP 14
#define PI_MODEL_CM3P 16 #define PI_MODEL_CM3P 16
#define PI_MODEL_4B 17
#define PI_VERSION_1 0 #define PI_VERSION_1 0
#define PI_VERSION_1_1 1 #define PI_VERSION_1_1 1