mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-13 02:38:50 +01:00
add wiringPi a04 code
This commit is contained in:
parent
9a21d046e0
commit
57f5328423
@ -8,35 +8,35 @@
|
||||
|
||||
int bcmToGpioCPi[64] =
|
||||
{
|
||||
106, 107, // 0, 1
|
||||
104, 10, // 2, 3
|
||||
3, 9, // 4 5
|
||||
4, 90, // 6, 7
|
||||
92, 158, // 8, 9
|
||||
156, 105, //10,11
|
||||
146, 150, //12,13
|
||||
81, 80, //14,15
|
||||
58, 57, // 0, 1
|
||||
167, 0, // 2, 3
|
||||
1, 2, // 4 5
|
||||
3, 4, // 6, 7
|
||||
5, 6, // 8, 9
|
||||
7, 8, //10,11
|
||||
15, 54, //12,13
|
||||
134, 135, //14,15
|
||||
|
||||
82, 83, //16,17
|
||||
131, 132, //18,19
|
||||
134, 135, //20,21
|
||||
89, 88, //22,23
|
||||
84, 85, //24,25
|
||||
86, 87, //26,27
|
||||
112, 113, //28,29
|
||||
109, 157, //30,31
|
||||
137, 136, //16,17
|
||||
139, 138, //18,19
|
||||
141, 140, //20,21
|
||||
128, 129, //22,23
|
||||
130, 131, //24,25
|
||||
132, 133, //26,27
|
||||
9, 201, //28,29
|
||||
196, 199, //30,31
|
||||
|
||||
148, 147, //32,33
|
||||
100, 101, //34,35
|
||||
102, 103, //36,37
|
||||
97, 98, //38,39
|
||||
99, 96, //40,41
|
||||
110, 111, //42,43
|
||||
64, 65, //44,45
|
||||
161, 160, //32,33
|
||||
227, 198, //34,35
|
||||
163, 166, //36,37
|
||||
165, 164, //38,39
|
||||
228, 224, //40,41
|
||||
225, 226, //42,43
|
||||
56, 55, //44,45
|
||||
-1, -1, //46,47
|
||||
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,// ... 63
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@ -81,32 +81,60 @@ static char *alts [] =
|
||||
"IN", "OUT", "ALT2", "ALT3", "ALT4", "ALT5", "ALT6", "OFF"
|
||||
} ;
|
||||
|
||||
static char* get_pin_name(int pin)
|
||||
{
|
||||
static char name[10];
|
||||
char c;
|
||||
int b, d;
|
||||
|
||||
b = pin/32;
|
||||
d = pin % 32;
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
if(b < 6)
|
||||
c = b + 'C';
|
||||
else
|
||||
c = b - 6 + 'L';
|
||||
sprintf(name, "P%c%d", c, d);
|
||||
|
||||
#elif defined(CONFIG_CLOCKWORKPI_A06)
|
||||
|
||||
c = d/8 + 'A';
|
||||
sprintf(name, "%d%c%d", b, c, d % 8);
|
||||
|
||||
#endif
|
||||
return name;
|
||||
}
|
||||
|
||||
void CPiReadAll(void)
|
||||
{
|
||||
int pin, pin2;
|
||||
int tmp = wiringPiDebug;
|
||||
wiringPiDebug = FALSE;
|
||||
|
||||
printf (" +-----+------+------+---+-----+------+------+---+\n");
|
||||
printf (" | BCM | GPIO | Mode | V | BCM | GPIO | Mode | V |\n");
|
||||
printf (" +-----+------+------+---+-----+------+------+---+\n");
|
||||
printf (" +-----+------+------+------+---+-----+------+------+------+---+\n");
|
||||
printf (" | BCM | GPIO | Name | Mode | V | BCM | GPIO | Name | Mode | V |\n");
|
||||
printf (" +-----+------+------+------+---+-----+------+------+------+---+\n");
|
||||
|
||||
for (pin = 0 ; pin < 23; pin ++) {
|
||||
printf (" | %3d", pin);
|
||||
printf (" | %4d", bcmToGpioCPi[pin]);
|
||||
printf (" | %-4s", get_pin_name(bcmToGpioCPi[pin]));
|
||||
printf (" | %4s", alts [CPi_get_gpio_mode(bcmToGpioCPi[pin])]);
|
||||
printf (" | %d", CPi_digitalRead(bcmToGpioCPi[pin])) ;
|
||||
pin2 = pin + 23;
|
||||
printf (" | %3d", pin2);
|
||||
printf (" | %4d", bcmToGpioCPi[pin2]);
|
||||
printf (" | %-4s", get_pin_name(bcmToGpioCPi[pin2]));
|
||||
printf (" | %4s", alts [CPi_get_gpio_mode(bcmToGpioCPi[pin2])]);
|
||||
printf (" | %d", CPi_digitalRead(bcmToGpioCPi[pin2])) ;
|
||||
printf (" |\n") ;
|
||||
}
|
||||
|
||||
printf (" +-----+------+------+---+-----+------+------+---+\n");
|
||||
printf (" | BCM | GPIO | Mode | V | BCM | GPIO | Mode | V |\n");
|
||||
printf (" +-----+------+------+---+-----+------+------+---+\n");
|
||||
printf (" +-----+------+------+------+---+-----+------+------+------+---+\n");
|
||||
printf (" | BCM | GPIO | Name | Mode | V | BCM | GPIO | Name | Mode | V |\n");
|
||||
printf (" +-----+------+------+------+---+-----+------+------+------+---+\n");
|
||||
|
||||
wiringPiDebug = tmp;
|
||||
}
|
||||
@ -117,6 +145,38 @@ void CPiReadAllRaw(void)
|
||||
int tmp = wiringPiDebug;
|
||||
wiringPiDebug = FALSE;
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
printf (" +------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+\n");
|
||||
printf (" | GPIO | Name | Mode | V | GPIO | Name | Mode | V | GPIO | Name | Mode | V | GPIO | Name | Mode | V | GPIO | Name | Mode | V | GPIO | Name | Mode | V |\n");
|
||||
printf (" +------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+\n");
|
||||
|
||||
for (pin = 0 ; pin < 27; pin++) {
|
||||
pin2 = pin;
|
||||
for(i = 0; i < 6; i++) {
|
||||
if(CPi_get_gpio_mode(pin2) >= 0) {
|
||||
printf (" | %4d", pin2) ;
|
||||
printf (" | %-4s", get_pin_name(pin2));
|
||||
printf (" | %4s", alts [CPi_get_gpio_mode(pin2)]) ;
|
||||
printf (" | %d", CPi_digitalRead(pin2)) ;
|
||||
} else {
|
||||
printf (" | ") ;
|
||||
printf (" | ") ;
|
||||
printf (" | ") ;
|
||||
printf (" | ") ;
|
||||
}
|
||||
pin2 += 32;
|
||||
if(i == 1) pin2 += 64;
|
||||
}
|
||||
printf (" |\n") ;
|
||||
}
|
||||
|
||||
printf (" +------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+\n");
|
||||
printf (" | GPIO | Name | Mode | V | GPIO | Name | Mode | V | GPIO | Name | Mode | V | GPIO | Name | Mode | V | GPIO | Name | Mode | V | GPIO | Name | Mode | V |\n");
|
||||
printf (" +------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+------+------+------+---+\n");
|
||||
|
||||
#elif defined(CONFIG_CLOCKWORKPI_A06)
|
||||
|
||||
printf (" +------+------+---+------+------+---+------+------+---+------+------+---+------+------+---+\n");
|
||||
printf (" | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V |\n");
|
||||
printf (" +------+------+---+------+------+---+------+------+---+------+------+---+------+------+---+\n");
|
||||
@ -136,6 +196,8 @@ void CPiReadAllRaw(void)
|
||||
printf (" | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V |\n");
|
||||
printf (" +------+------+---+------+------+---+------+------+---+------+------+---+------+------+---+\n");
|
||||
|
||||
#endif
|
||||
|
||||
wiringPiDebug = tmp;
|
||||
}
|
||||
|
||||
|
||||
@ -30,22 +30,53 @@ static int wpimode = -1 ;
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
int CPI_PIN_MASK[12][32] = //[BANK] [INDEX]
|
||||
int bcmToGpioCPi[64] =
|
||||
{
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PA
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PB
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PC
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,15,16,-1,18,-1,-1,21,22,23,24,25,26,-1,-1,-1,-1,-1,},//PD
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PE
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PF
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PG
|
||||
{-1,-1,-1, 3, 4, 5, 6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PH
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PI
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PJ
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PK
|
||||
{-1,-1, 2, 3,-1,-1,-1,-1, 8,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PL
|
||||
58, 57, // 0, 1
|
||||
167, 0, // 2, 3
|
||||
1, 2, // 4 5
|
||||
3, 4, // 6, 7
|
||||
5, 6, // 8, 9
|
||||
7, 8, //10,11
|
||||
15, 54, //12,13
|
||||
134, 135, //14,15
|
||||
|
||||
137, 136, //16,17
|
||||
139, 138, //18,19
|
||||
141, 140, //20,21
|
||||
128, 129, //22,23
|
||||
130, 131, //24,25
|
||||
132, 133, //26,27
|
||||
9, 201, //28,29
|
||||
196, 199, //30,31
|
||||
|
||||
161, 160, //32,33
|
||||
227, 198, //34,35
|
||||
163, 166, //36,37
|
||||
165, 164, //38,39
|
||||
228, 224, //40,41
|
||||
225, 226, //42,43
|
||||
56, 55, //44,45
|
||||
-1, -1, //46,47
|
||||
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,// ... 63
|
||||
};
|
||||
|
||||
int CPI_PIN_MASK[8][32] = //[BANK] [INDEX]
|
||||
{
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,},//PC 0
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1,},//PD 32
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PE 64
|
||||
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PF 96
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,},//PG 128
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,},//PH 160
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,},//PL 192
|
||||
{ 1, 1, 1, 1, 1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PM 224
|
||||
};
|
||||
|
||||
volatile uint32_t *gpio_base;
|
||||
volatile uint32_t *gpioL_base;
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
@ -84,11 +115,11 @@ int bcmToGpioCPi[64] =
|
||||
|
||||
int CPI_PIN_MASK[5][32] = //[BANK] [INDEX]
|
||||
{
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//PA
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//PB
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//PC
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//PD
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//PD
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//GPIO0
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//GPIO1
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//GPIO2
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//GPIO3
|
||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},//GPIO4
|
||||
};
|
||||
|
||||
volatile uint32_t *cru_base;
|
||||
@ -132,8 +163,17 @@ static unsigned int readR(unsigned int addr)
|
||||
return val;
|
||||
|
||||
#elif (defined CONFIG_CLOCKWORKPI_A04)
|
||||
|
||||
uint32_t val = 0;
|
||||
uint32_t mmap_base = (addr & ~MAP_MASK);
|
||||
uint32_t mmap_seek = ((addr - mmap_base) >> 2);
|
||||
|
||||
if (addr >= GPIOL_BASE)
|
||||
val = *(gpioL_base + mmap_seek);
|
||||
else
|
||||
val = *(gpio_base + mmap_seek);
|
||||
return val;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -165,6 +205,14 @@ static void writeR(unsigned int val, unsigned int addr)
|
||||
|
||||
#elif (defined CONFIG_CLOCKWORKPI_A04)
|
||||
|
||||
unsigned int mmap_base = (addr & ~MAP_MASK);
|
||||
unsigned int mmap_seek = ((addr - mmap_base) >> 2);
|
||||
|
||||
if (addr >= GPIOL_BASE)
|
||||
*(gpioL_base + mmap_seek) = val;
|
||||
else
|
||||
*(gpio_base + mmap_seek) = val;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -176,6 +224,9 @@ int CPi_get_gpio_mode(int pin)
|
||||
unsigned int phyaddr = 0;
|
||||
unsigned char mode = -1;
|
||||
|
||||
if (CPI_PIN_MASK[bank][index] < 0)
|
||||
return -1;
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
|
||||
unsigned int grf_phyaddr = 0, ddr_phyaddr = 0;
|
||||
@ -202,31 +253,29 @@ int CPi_get_gpio_mode(int pin)
|
||||
ddr_phyaddr = GPIO4_BASE + GPIO_SWPORTA_DDR_OFFSET;
|
||||
}
|
||||
|
||||
if (CPI_PIN_MASK[bank][index] != -1) {
|
||||
regval = readR(grf_phyaddr);
|
||||
mode = (regval >> (offset << 1)) & 0x3;
|
||||
|
||||
if(mode == 0){
|
||||
regval = readR(ddr_phyaddr);
|
||||
return (regval >> index) & 1;
|
||||
}
|
||||
|
||||
return mode + 1;
|
||||
}
|
||||
|
||||
#elif (defined CONFIG_CLOCKWORKPI_A04)
|
||||
|
||||
int offset = ((index - ((index >> 3) << 3)) << 2);
|
||||
|
||||
if (bank == 11) {
|
||||
phyaddr = GPIOL_BASE + ((index >> 3) << 2);
|
||||
if (bank >= 6) {
|
||||
phyaddr = GPIOL_BASE + (bank -6) * 0x24 + ((index >> 3) << 2);
|
||||
}
|
||||
else {
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 0x24) + ((index >> 3) << 2);
|
||||
}
|
||||
else
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 36) + ((index >> 3) << 2);
|
||||
|
||||
/* Ignore unused gpio */
|
||||
if (CPI_PIN_MASK[bank][index] != -1) {
|
||||
regval = readR(phyaddr);
|
||||
mode = (regval >> offset) & 7;
|
||||
}
|
||||
|
||||
return mode;
|
||||
|
||||
@ -243,21 +292,23 @@ int CPi_set_gpio_mode(int pin, int mode)
|
||||
unsigned int index = pin - (bank << 5);
|
||||
unsigned int phyaddr = 0;
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
int offset = ((index - ((index >> 3) << 3)));
|
||||
unsigned int cru_phyaddr, grf_phyaddr, gpio_phyaddr;
|
||||
#elif (defined CONFIG_CLOCKWORKPI_A04)
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
int offset = ((index - ((index >> 3) << 3)) << 2);
|
||||
|
||||
if (bank == 11) {
|
||||
phyaddr = GPIOL_BASE + ((index >> 3) << 2);
|
||||
if (bank >= 6) {
|
||||
phyaddr = GPIOL_BASE + (bank -6) * 0x24 + ((index >> 3) << 2);
|
||||
} else {
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 36) + ((index >> 3) << 2);
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 0x24) + ((index >> 3) << 2);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
|
||||
int offset = ((index - ((index >> 3) << 3)));
|
||||
unsigned int cru_phyaddr, grf_phyaddr, gpio_phyaddr;
|
||||
|
||||
if(bank == 0){
|
||||
cru_phyaddr = PMUCRU_BASE + PMUCRU_CLKGATE_CON1_OFFSET;
|
||||
grf_phyaddr = PMUGRF_BASE + ((index >> 3) << 2);
|
||||
@ -295,7 +346,6 @@ int CPi_set_gpio_mode(int pin, int mode)
|
||||
if (wiringPiDebug)
|
||||
printf("Register[%#x]: %#x index:%d\n", phyaddr, regval, index);
|
||||
|
||||
/* Set Input */
|
||||
if (INPUT == mode) {
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
writeR(0xffff0180, cru_phyaddr);
|
||||
@ -317,7 +367,7 @@ int CPi_set_gpio_mode(int pin, int mode)
|
||||
if (wiringPiDebug)
|
||||
printf("Input mode set over reg val: %#x\n",regval);
|
||||
#endif
|
||||
} else if (OUTPUT == mode) { /* Set Output */
|
||||
} else if (OUTPUT == mode) {
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
writeR(0xffff0180, cru_phyaddr);
|
||||
regval = readR(grf_phyaddr);
|
||||
@ -356,10 +406,10 @@ int CPi_set_gpio_alt(int pin, int mode)
|
||||
unsigned int phyaddr = 0;
|
||||
int offset = ((index - ((index >> 3) << 3)) << 2);
|
||||
|
||||
if (bank == 11) {
|
||||
if (bank >= 6) {
|
||||
phyaddr = GPIOL_BASE + ((index >> 3) << 2);
|
||||
}else
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 36) + ((index >> 3) << 2);
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 0x24) + ((index >> 3) << 2);
|
||||
|
||||
/* Ignore unused gpio */
|
||||
if (CPI_PIN_MASK[bank][index] != -1) {
|
||||
@ -385,22 +435,22 @@ void CPi_digitalWrite(int pin, int value)
|
||||
unsigned int bank = pin >> 5;
|
||||
unsigned int index = pin - (bank << 5);
|
||||
unsigned int phyaddr = 0;
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
unsigned int regval = 0;
|
||||
unsigned int cru_phyaddr = 0;
|
||||
|
||||
#else
|
||||
unsigned int regval = 0;
|
||||
|
||||
if (bank == 11) {
|
||||
phyaddr = GPIOL_BASE + 0x10;
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
if (bank >= 6) {
|
||||
phyaddr = GPIOL_BASE + (bank -6) * 0x24 + 0x10;
|
||||
} else {
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 0x24) + 0x10;
|
||||
}
|
||||
else
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 36) + 0x10;
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
|
||||
unsigned int cru_phyaddr = 0;
|
||||
|
||||
if(bank == 0){
|
||||
phyaddr = GPIO0_BASE + GPIO_SWPORTA_DR_OFFSET;
|
||||
cru_phyaddr = PMUCRU_BASE + PMUCRU_CLKGATE_CON1_OFFSET;
|
||||
@ -450,9 +500,7 @@ void CPi_digitalWrite(int pin, int value)
|
||||
printf("HIGH val set over reg val: 0x%x\n", regval);
|
||||
}
|
||||
|
||||
} else
|
||||
printf("unused pin\n");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -463,19 +511,20 @@ int CPi_digitalRead(int pin)
|
||||
int bank = pin >> 5;
|
||||
int index = pin - (bank << 5);
|
||||
int val;
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
unsigned int phyaddr;
|
||||
|
||||
if (bank == 11) {
|
||||
phyaddr = GPIOL_BASE + 0x10;
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
if (bank >= 6) {
|
||||
phyaddr = GPIOL_BASE + (bank -6) * 0x24 + 0x10;
|
||||
} else {
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 36) + 0x10;
|
||||
phyaddr = GPIO_BASE_MAP + (bank * 0x24) + 0x10;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
unsigned int phyaddr;
|
||||
|
||||
if(bank == 0)
|
||||
phyaddr = GPIO0_BASE + GPIO_EXT_PORTA_OFFSET;
|
||||
else if(bank == 1)
|
||||
@ -486,6 +535,7 @@ int CPi_digitalRead(int pin)
|
||||
phyaddr = GPIO3_BASE + GPIO_EXT_PORTA_OFFSET;
|
||||
else if(bank == 4)
|
||||
phyaddr = GPIO4_BASE + GPIO_EXT_PORTA_OFFSET;
|
||||
|
||||
#endif
|
||||
|
||||
if (CPI_PIN_MASK[bank][index] != -1) {
|
||||
@ -493,7 +543,7 @@ int CPi_digitalRead(int pin)
|
||||
val = val >> index;
|
||||
val &= 1;
|
||||
if (wiringPiDebug)
|
||||
printf("Read reg val: 0x%#x, bank:%d, index:%d\n", val, bank, index);
|
||||
printf("Read reg val: 0x%#x, bank:%d, index:%d phyaddr: 0x%x\n", val, bank, index, phyaddr);
|
||||
return val;
|
||||
}
|
||||
return 0;
|
||||
@ -504,9 +554,15 @@ int CPiSetup(int fd)
|
||||
{
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
|
||||
gpio_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIOA_BASE);
|
||||
if ((int32_t)(unsigned long)gpio_base == -1)
|
||||
return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror(errno));
|
||||
gpioL_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIOL_BASE);
|
||||
if ((int32_t)(unsigned long)gpioL_base == -1)
|
||||
return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror(errno));
|
||||
|
||||
#elif defined(CONFIG_CLOCKWORKPI_A06)
|
||||
|
||||
gpio0_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO0_BASE);
|
||||
if ((int32_t)(unsigned long)gpio0_base == -1)
|
||||
return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO0_BASE) failed: %s\n", strerror(errno));
|
||||
@ -535,6 +591,7 @@ int CPiSetup(int fd)
|
||||
pmugrf_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, PMUGRF_BASE);
|
||||
if ((int32_t)(unsigned long)pmugrf_base == -1)
|
||||
return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (PMUGRF_BASE) failed: %s\n", strerror(errno));
|
||||
|
||||
#endif
|
||||
wpimode = WPI_MODE_BCM;
|
||||
}
|
||||
|
||||
@ -2,14 +2,11 @@
|
||||
#define _WIRING_CPI_H
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
#define GPIOA_BASE (0x0300B000)
|
||||
#define GPIO_NUM (0x40)
|
||||
#define GPIO_BASE_MAP (0x0300B000)
|
||||
#define MEM_INFO (1024)
|
||||
#define GPIOA_BASE 0x0300B000
|
||||
#define GPIO_BASE_MAP (GPIOA_BASE + 0x24 * 2)
|
||||
#define GPIOL_BASE (0x07022000)
|
||||
#define GPIOL_BASE_MAP (0x07022000)
|
||||
#define MAP_SIZE_L (4096 * 1)
|
||||
#define GPIO_PWM_OP (0x0300A000)
|
||||
#define GPIO_NUM (256)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
@ -18,7 +15,6 @@
|
||||
#define GPIO2_BASE 0xff780000
|
||||
#define GPIO3_BASE 0xff788000
|
||||
#define GPIO4_BASE 0xff790000
|
||||
#define GPIO_NUM (160)
|
||||
#define GPIO_SWPORTA_DR_OFFSET 0x00
|
||||
#define GPIO_SWPORTA_DDR_OFFSET 0x04
|
||||
#define GPIO_EXT_PORTA_OFFSET 0x50
|
||||
@ -26,12 +22,12 @@
|
||||
#define GRF_BASE 0xff77e000
|
||||
#define CRU_BASE 0xff760000
|
||||
#define PMUCRU_BASE 0xff750000
|
||||
#define CRU_CLKGATE_CON31_OFFSET 0x037c //bit 3 4 5
|
||||
#define CRU_CLKGATE_CON31_OFFSET 0x037c
|
||||
#define PMUCRU_CLKGATE_CON1_OFFSET 0x0104
|
||||
#define GPIO_NUM (160)
|
||||
#endif
|
||||
|
||||
#define MAP_SIZE_L (4*1024)
|
||||
#define MAP_SIZE MAP_SIZE_L
|
||||
#define MAP_SIZE (4*1024)
|
||||
#define MAP_MASK (MAP_SIZE - 1)
|
||||
|
||||
extern int CPi_set_gpio_mode(int pin, int mode);
|
||||
|
||||
@ -109,7 +109,7 @@ int wiringPiSPISetupMode (int channel, int speed, int mode)
|
||||
// Channel can be anything - lets hope for the best
|
||||
// channel &= 1 ; // Channel is 0 or 1
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
snprintf (spiDev, 31, "/dev/spidev2.%d", channel) ;
|
||||
#else
|
||||
snprintf (spiDev, 31, "/dev/spidev0.%d", channel) ;
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
#define DRCN_ANALOG_READ 9
|
||||
|
||||
|
||||
struct drcNetComStruct
|
||||
typedef struct drcNetComStruct
|
||||
{
|
||||
uint32_t pin ;
|
||||
uint32_t cmd ;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user