int init_lcd_pin_direction() { // GPIO2 LCD // 1 +5V -> 2 VDD // 2 Ground -> 1 GND // // 3 +3.3V EMPTY // 4 Ground EMPTY // // // 5 PB0 (TWI0-SCK) -> 4 RS // 6 PG11 (USBH_EN) -> 5 R/W // 7 PB1 (TWI0-SDA) -> 6 E // // 8 PG10 (VGA_DIS) -> 7 DB0 // 10 PG9 (LED1) -> 8 DB1 // 11 PB3 -> 9 DB2 // 12 PE11 -> 10 DB3 // 13 PB4 -> 11 DB4 // 14 PE10 -> 12 DB5 // 16 PE9 -> 13 DB6 // 18 PE8 -> 14 DB7 // 9 PB2 (PWM0) ERROR // 15 PB10 ERROR // 17 PB15 (TWI1-SCK) ERROR int ret; //init gpio ret = sunxi_gpio_init(); if(ret) { printf("sunxi_gpio_init ERROR\n"); return -1; } /* //RS, R/W, E sunxi_gpio_set_cfgpin(SUNXI_GPB(0), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPG(11), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPB(1), SUNXI_GPIO_OUTPUT); //DB0 - DB7 sunxi_gpio_set_cfgpin(SUNXI_GPG(10), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPG(9), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPB(3), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPE(11), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPB(4), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPE(10), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPE(9), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPE(8), SUNXI_GPIO_OUTPUT); */ sunxi_gpio_set_cfgpin(SUNXI_GPA(0), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPA(1), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPB(0), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPB(1), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPI(0), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPI(1), SUNXI_GPIO_OUTPUT); sunxi_gpio_set_cfgpin(SUNXI_GPG(9), SUNXI_GPIO_OUTPUT); return 0; }
void lcd_set_data(unsigned uValue) { sunxi_gpio_output(SUNXI_GPG(10), uValue & 0x01); sunxi_gpio_output(SUNXI_GPG(9), uValue & 0x02); sunxi_gpio_output(SUNXI_GPB(3), uValue & 0x04); sunxi_gpio_output(SUNXI_GPE(11), uValue & 0x08); sunxi_gpio_output(SUNXI_GPB(4), uValue & 0x10); sunxi_gpio_output(SUNXI_GPE(10), uValue & 0x20); sunxi_gpio_output(SUNXI_GPE(9), uValue & 0x40); sunxi_gpio_output(SUNXI_GPE(8), uValue & 0x80); }
void i2c_init(int speed, int slaveaddr) { int timeout = 0x2ff; sunxi_gpio_set_cfgpin(SUNXI_GPB(0), 2); sunxi_gpio_set_cfgpin(SUNXI_GPB(1), 2); clock_twi_onoff(0, 1); /* Enable the i2c bus */ writel(TWI_CTL_BUSEN, &i2c_base->ctl); /* 400KHz operation M=2, N=1, 24MHz APB clock */ writel(TWI_CLK_DIV(2, 1), &i2c_base->clkr); writel(TWI_SRST_SRST, &i2c_base->reset); while ((readl(&i2c_base->reset) & TWI_SRST_SRST) && timeout--); }
int main(int argc, const char* argv[] ) { //30ms delay delay(30); init_lcd_pin_direction(); delay(30); /* lcd_set_RS(0); lcd_set_RW(0); lcd_set_E(0); lcd_set_data(0x3A); lcd_set_E(1); delay(30); lcd_set_E(0); lcd_set_data(0x0F); lcd_set_E(1); delay(30); lcd_set_E(0); */ int pin; char *port; int i, k, val; val = 0; printf("app startup\n"); printf("argv[1]:%s argv[2]:%s\n", argv[1], argv[2]); port = argv[1]; pin = atoi(argv[2]); printf("port:%s\n",port); printf("pin:%d\n",pin); if(!strcmp(port, "G")) { while(1) { //sunxi_gpio_output(SUNXI_GPG(9), 0); sunxi_gpio_output(SUNXI_GPG(pin), 0); delay(3000); //sunxi_gpio_output(SUNXI_GPG(9), 1); sunxi_gpio_output(SUNXI_GPG(pin), 1); delay(3000); }; } else if(!strcmp(port, "A")) { while(1) { sunxi_gpio_output(SUNXI_GPA(pin), 0); //sunxi_gpio_output(SUNXI_GPA(pin), 0); delay(3000); sunxi_gpio_output(SUNXI_GPA(pin), 1); //sunxi_gpio_output(SUNXI_GPA(pin), 1); delay(3000); }; } else if(!strcmp(port, "B")) { while(1) { sunxi_gpio_output(SUNXI_GPB(pin), 0); //sunxi_gpio_output(SUNXI_GPA(pin), 0); delay(3000); sunxi_gpio_output(SUNXI_GPB(pin), 1); //sunxi_gpio_output(SUNXI_GPA(pin), 1); delay(3000); }; } else if(!strcmp(port, "I")) { while(1) { sunxi_gpio_output(SUNXI_GPI(pin), 0); //sunxi_gpio_output(SUNXI_GPA(pin), 0); delay(3000); sunxi_gpio_output(SUNXI_GPI(pin), 1); //sunxi_gpio_output(SUNXI_GPA(pin), 1); delay(3000); }; } return 0; }
void lcd_set_E(unsigned uValue) { sunxi_gpio_output(SUNXI_GPB(1), uValue); }
static volatile int pinPass = -1 ; static volatile char pinPassName[10] = {}; static pthread_mutex_t pinMutex ; // ISR Data static void (*isrFunctions [278])(void) ; static int pinToGpio[278] = { SUNXI_GPA(0), SUNXI_GPA(1), SUNXI_GPA(2), SUNXI_GPA(3), SUNXI_GPA(4), SUNXI_GPA(5), SUNXI_GPA(6), SUNXI_GPA(7), SUNXI_GPA(8), SUNXI_GPA(9), SUNXI_GPA(10), SUNXI_GPA(11), SUNXI_GPA(12), SUNXI_GPA(13), SUNXI_GPA(14), SUNXI_GPA(15), SUNXI_GPA(16), SUNXI_GPA(17), -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, SUNXI_GPB(0), SUNXI_GPB(1), SUNXI_GPB(2), SUNXI_GPB(3), SUNXI_GPB(4), SUNXI_GPB(5), SUNXI_GPB(6), SUNXI_GPB(7), SUNXI_GPB(8), SUNXI_GPB(9), SUNXI_GPB(10), SUNXI_GPB(11), SUNXI_GPB(12), SUNXI_GPB(13), SUNXI_GPB(14), SUNXI_GPB(15), SUNXI_GPB(16), SUNXI_GPB(17), SUNXI_GPB(18), SUNXI_GPB(19), SUNXI_GPB(20), SUNXI_GPB(21), SUNXI_GPB(22), SUNXI_GPB(23), -1, -1, -1, -1, -1, -1, -1, -1, SUNXI_GPC(0), SUNXI_GPC(1), SUNXI_GPC(2), SUNXI_GPC(3), SUNXI_GPC(4), SUNXI_GPC(5), SUNXI_GPC(6), SUNXI_GPC(7), SUNXI_GPC(8), SUNXI_GPC(9), SUNXI_GPC(10), SUNXI_GPC(11), SUNXI_GPC(12), SUNXI_GPC(13), SUNXI_GPC(14), SUNXI_GPC(15), SUNXI_GPC(16), SUNXI_GPC(17), SUNXI_GPC(18), SUNXI_GPC(19), SUNXI_GPC(20), SUNXI_GPC(21), SUNXI_GPC(22), SUNXI_GPC(23), SUNXI_GPC(24), -1, -1, -1, -1, -1, -1, -1, SUNXI_GPD(0), SUNXI_GPD(1), SUNXI_GPD(2), SUNXI_GPD(3), SUNXI_GPD(4), SUNXI_GPD(5), SUNXI_GPD(6), SUNXI_GPD(7), SUNXI_GPD(8), SUNXI_GPD(9), SUNXI_GPD(10), SUNXI_GPD(11), SUNXI_GPD(12), SUNXI_GPD(13), SUNXI_GPD(14), SUNXI_GPD(15), SUNXI_GPD(16), SUNXI_GPD(17), SUNXI_GPD(18), SUNXI_GPD(19), SUNXI_GPD(20), SUNXI_GPD(21), SUNXI_GPD(22), SUNXI_GPD(23), SUNXI_GPD(24), SUNXI_GPD(25), SUNXI_GPD(26), SUNXI_GPD(27),