void userTask(void *param) { char_t buffer[40]; //Point to the network interface NetInterface *interface = &netInterface[0]; //Initialize LCD display lcdSetCursor(2, 0); printf("IPv4 Addr\r\n"); //Endless loop while(1) { #if (IPV4_SUPPORT == ENABLED) //Display IPv4 host address lcdSetCursor(3, 0); printf("%-16s\r\n", ipv4AddrToString(interface->ipv4Config.addr, buffer)); #endif lcdSetCursor(5, 0); printf("button=%d\r\n", GPIO_ReadBit(GPIO5, GPIO_Pin_4)); //Loop delay osDelayTask(100); } }
void key_thread_entry(void* parameter) { int i,key_num; uint32_t key_port_tab[] = {HW_GPIOE, HW_GPIOE}; uint32_t key_pin_tab[] = {26, 27}; key_num = ARRAY_SIZE(key_port_tab); for(i=0; i<key_num; i++) { GPIO_QuickInit(key_port_tab[i], key_pin_tab[i], kGPIO_Mode_IPU); } while(1) { for(i=0; i<key_num; i++) { if(GPIO_ReadBit(key_port_tab[i], key_pin_tab[i]) == 0) { switch(i) { case 0: GUI_SendKeyMsg(GUI_KEY_ENTER, 1); break; case 1: GUI_SendKeyMsg(GUI_KEY_ESCAPE, 1); break; default: break; } } } rt_thread_delay(10); } }
int main(void) { DelayInit(); GPIO_QuickInit(HW_GPIOE, 6, kGPIO_Mode_OPP); /* LED */ GPIO_QuickInit(HW_GPIOE, 26, kGPIO_Mode_IPU); /* KEY */ UART_QuickInit(UART0_RX_PD06_TX_PD07, 115200); /* 初始化看门狗 */ WDOG_InitTypeDef WDOG_InitStruct1; WDOG_InitStruct1.windowInMs = 0; WDOG_InitStruct1.mode = kWDOG_Mode_Normal; //设置看门狗处于正常工作模式 WDOG_InitStruct1.timeOutInMs = 2000; /* 时限 2000MS : 2000MS 内没有喂狗则复位 */ WDOG_Init(&WDOG_InitStruct1); printf("WDOG test start!\r\n"); printf("press KEY1 to feed dog within 2S or system with reset!\r\n"); /* 点亮LED 然后熄灭 指示系统运行从新上电运行 */ GPIO_WriteBit(HW_GPIOE, 6, 0); DelayMs(200); GPIO_WriteBit(HW_GPIOE, 6, 1); while(1) { if(GPIO_ReadBit(HW_GPIOE, 26) == 0) /* 按键被按下 */ { /* 喂狗 防止复位 */ printf("wdog feed! we have 2s\r\n"); WDOG_Refresh(); //喂狗 DelayMs(100); } DelayMs(10); } }
pio_type platform_pio_op( unsigned port, pio_type pinmask, int op ) { GPIO_TypeDef* base = ( GPIO_TypeDef* )port_data[ port ]; GPIO_InitTypeDef data; pio_type retval = 1; GPIO_StructInit( &data ); switch( op ) { case PLATFORM_IO_PORT_SET_VALUE: GPIO_Write( base, ( u8 )pinmask ); break; case PLATFORM_IO_PIN_SET: GPIO_WriteBit( base, ( u8 )pinmask, Bit_SET ); break; case PLATFORM_IO_PIN_CLEAR: GPIO_WriteBit( base, ( u8 )pinmask, Bit_RESET ); break; case PLATFORM_IO_PORT_DIR_OUTPUT: pinmask = 0xFF; case PLATFORM_IO_PIN_DIR_OUTPUT: data.GPIO_Direction = GPIO_PinOutput; data.GPIO_Type = GPIO_Type_PushPull ; data.GPIO_Alternate=GPIO_OutputAlt1; data.GPIO_Pin = ( u8 )pinmask; GPIO_Init(base, &data); break; case PLATFORM_IO_PORT_DIR_INPUT: pinmask = 0xFF; case PLATFORM_IO_PIN_DIR_INPUT: data.GPIO_Pin = ( u8 )pinmask; GPIO_Init(base, &data); break; case PLATFORM_IO_PORT_GET_VALUE: retval = GPIO_Read( base ); break; case PLATFORM_IO_PIN_GET: retval = GPIO_ReadBit( base, ( u8 )pinmask ); break; default: retval = 0; break; } return retval; }
void FiftyHzInterruptHandler(void) { VIC_SWITCmd(EXTIT3_ITLine, DISABLE); uint16_t button = GPIO_ReadBit(GPIO3, GPIO_Pin_1); static uint16_t button_pv = 0; // Start and stop magnetometer calibration. if (button && (button_pv == 0x7FFF)) mag_calibration_ = !mag_calibration_; // Reset GPS home position. // if (button && (button_pv == 0x7FFF)) SetGPSHome(); button_pv = (button_pv << 1) | button; }
/** * \brief 读取I2C上SDA数据,Internal function * \return SDA上的数据(1 bit) */ static inline uint8_t SDA_IN(void) { return GPIO_ReadBit(i2c.instace, i2c.sda_pin); }
int main(void) { int32_t i32Err; sysDisableCache(); sysFlushCache(I_D_CACHE); sysEnableCache(CACHE_WRITE_BACK); sysInitializeUART(); sysprintf("+-------------------------------------------------+\n"); sysprintf("| GPIO Sample Code |\n"); sysprintf("+-------------------------------------------------+\n\n"); /* Configure Port C to input mode and pull-up */ GPIO_Open(GPIOC, DIR_INPUT, PULL_UP); /* Set Port C output data to 0xFFF */ GPIO_Set(GPIOC, 0xFFF); /* Set Port C output data to 0x000 */ GPIO_Clr(GPIOC, 0xFFF); /* Configure Port C to default value */ GPIO_Close(GPIOC); i32Err = 0; sysprintf("GPIO PD.3(output mode) connect to PD.4(input mode) ......"); /* Configure PD3 to output mode */ GPIO_OpenBit(GPIOD, BIT3, DIR_OUTPUT, NO_PULL_UP); /* Configure PD4 to output mode */ GPIO_OpenBit(GPIOD, BIT4, DIR_INPUT, NO_PULL_UP); /* Use Pin Data Input/Output Control to pull specified I/O or get I/O pin status */ /* Pull PD.3 to High and check PD.4 status */ GPIO_SetBit(GPIOD, BIT3); if(GPIO_ReadBit(GPIOD,BIT4)==0) i32Err = 1; /* Pull PD.3 to Low and check PD.4 status */ GPIO_ClrBit(GPIOD, BIT3); if(GPIO_ReadBit(GPIOD,BIT4)==1) i32Err = 1; if(i32Err) { sysprintf(" [FAIL].\n"); } else { sysprintf(" [OK].\n"); } /* Configure PD3 to default value */ GPIO_CloseBit(GPIOD, BIT3); /* Configure PD4 to default value */ GPIO_CloseBit(GPIOD, BIT3); /* Set MFP_GPF11 to EINT0 */ outpw(REG_SYS_GPF_MFPH,(inpw(REG_SYS_GPF_MFPH) & ~(0xF<<12)) | (0xF<<12)); /* Configure PF11 to input mode and pull-up */ GPIO_OpenBit(GPIOF, BIT11, DIR_INPUT, PULL_UP); /* Confingure PF11 to rising-edge trigger */ GPIO_EnableTriggerType(GPIOF, BIT11,RISING); /* Enable external 0 interrupt */ GPIO_EnableEINT(NIRQ0, (GPIO_CALLBACK)EINT0Callback, 0); /* waiting for external 0 interrupt */ sysprintf("waiting for PF11 rsing-edge trigger..."); while(!eint_complete); /* Disable PF11 trigger type */ GPIO_DisableTriggerType(GPIOF, BIT11); /* Enable external 0 interrupt */ GPIO_DisableEINT(NIRQ0); sysprintf(" [OK].\n"); /* Configure PF11 to default value */ GPIO_CloseBit(GPIOF, BIT11); /* Configure PE3 to output mode */ GPIO_OpenBit(GPIOE, BIT3, DIR_INPUT, NO_PULL_UP); /* Confingure PE3 to falling-edge trigger */ GPIO_EnableTriggerType(GPIOE, BIT3,FALLING); /* Enable GPIOE interrupt */ GPIO_EnableInt(GPIOE, (GPIO_CALLBACK)GPIOECallback, 0); /* waiting for external 0 interrupt */ sysprintf("waiting for PE3 falling-edge trigger..."); while(!gpio_complete); /* Disable PE3 to trigger type */ GPIO_DisableTriggerType(GPIOE, BIT3); /* Disable GPIOE interrupt */ GPIO_DisableInt(GPIOE); /* Configure PE0 to default value */ GPIO_CloseBit(GPIOE, BIT3); sysprintf(" [OK].\n"); while(1); }