ptu32_t led_flash1(void) { u32 my_para; while(1) { Djy_GetEventPara(&my_para,NULL); switch(my_para) { case 1: GPIO_SettoLow(CN_GPIO_C, (1<<4)|(1<<6)|(1<<8)); GPIO_SettoHigh(CN_GPIO_C, (1<<9)); break; case 2: GPIO_SettoLow(CN_GPIO_C, (1<<4)|(1<<6)|(1<<9)); GPIO_SettoHigh(CN_GPIO_C, (1<<8)); break; case 3: GPIO_SettoLow(CN_GPIO_C, (1<<6)|(1<<9)|(1<<8)); GPIO_SettoHigh(CN_GPIO_C, (1<<4)); break; case 4: GPIO_SettoLow(CN_GPIO_C, (1<<9)|(1<<4)|(1<<8)); GPIO_SettoHigh(CN_GPIO_C, (1<<6)); break; default:break; } Djy_ParaUsed(0); Djy_WaitEvttPop(Djy_MyEvttId(),NULL,CN_TIMEOUT_FOREVER); } }
// ============================================================================= // 功能: I/O模拟的方式 释放没有复位和使能引脚的IIC器件 // 参数: port I/O口 如 CN_GPIO_B // TS_SDA:引脚号 // TS_SCK:引脚号 // 返回: true/false // ============================================================================= static bool_t _IIC_Busfree(u32 port,u32 sda_pin,u32 sck_pin) { u32 timeout=0; GPIO_CfgPinFunc(port,sda_pin,CN_GPIO_MODE_IN_FLOATING);//TS_SDA GPIO_CfgPinFunc(port,sck_pin,CN_GPIO_MODE_GPIO_OUT_OD_50Mhz);//TS_SCK while(1) { timeout++; GPIO_SettoLow(port,1<<sck_pin); Djy_DelayUs(10); GPIO_SettoHigh(port,1<<sck_pin); Djy_DelayUs(10); if(timeout>=CONFIG_I2C_TIMEOUT) return false; if( GPIO_GetData(port)&(1<<sda_pin)) break; } GPIO_CfgPinFunc(port,sda_pin,CN_GPIO_MODE_GPIO_OUT_OD_50Mhz);//TS_SDA //产生停止信号 iic总线释放 GPIO_SettoLow(port,1<<sda_pin); Djy_DelayUs(10); GPIO_SettoHigh(port,1<<sda_pin); Djy_DelayUs(10); return true; }
// ============================================================================= // 功能:根据具体的板件配置SPI的GPIO的引脚功能,这是与板件相关,所以该函数放在该文件,CPU // SPI驱动直接调用该函数来初始化串口的GPIO引脚 // 主要包括GPIO端口和外设时钟使能、GPIO配置、重映射、时钟等 // 参数:无 // 返回:true // ============================================================================= bool_t Board_SpiGpioInit(u8 SPIx) { if(SPIx == CN_SPI1) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; // 使能PORTB时钟 RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // 使能SPI1时钟 RCC->AHB1ENR |= 1<<6; // 使能PORTG时钟 RCC->APB2RSTR |= RCC_APB2RSTR_SPI1; // 复位SPI1 RCC->APB2RSTR &= ~RCC_APB2RSTR_SPI1; // 停止复位SPI1 GPIO_CfgPinFunc(GPIO_B,PIN4|PIN5|PIN3,GPIO_MODE_AF,GPIO_OTYPE_PP, GPIO_SPEED_50M,GPIO_PUPD_PU); // GPB3、4和5为SCK、MISO和MOSI GPIO_AFSet(GPIO_B,3,5); GPIO_AFSet(GPIO_B,4,5); GPIO_AFSet(GPIO_B,5,5); #if 0 // CS由设备确定 GPIO_CfgPinFunc(GPIO_B,PIN14,GPIO_MODE_OUT,GPIO_OTYPE_PP, GPIO_SPEED_50M,GPIO_PUPD_PU); // GPB14为CS用于NOR GPIO_CfgPinFunc(GPIOG,PIN7,GPIO_MODE_OUT,GPIO_OTYPE_PP, GPIO_SPEED_100M,GPIO_PUPD_PU); // GPG7为CS用于无线模式 GPIOG->ODR|=1<<7; GPIO_SettoHigh(GPIO_B,PIN14);// CS为高 #endif } else { return false; } return true; }
ptu32_t led_flash(void) { while(1) { GPIO_SettoLow(CN_GPIO_C, (1<<4)|(1<<6)|(1<<8)); GPIO_SettoHigh(CN_GPIO_C, (1<<9)); Djy_EventDelay(500*mS); GPIO_SettoLow(CN_GPIO_C, (1<<4)|(1<<6)|(1<<9)); GPIO_SettoHigh(CN_GPIO_C, (1<<8)); Djy_EventDelay(500*mS); GPIO_SettoLow(CN_GPIO_C, (1<<6)|(1<<9)|(1<<8)); GPIO_SettoHigh(CN_GPIO_C, (1<<4)); Djy_EventDelay(500*mS); GPIO_SettoLow(CN_GPIO_C, (1<<9)|(1<<4)|(1<<8)); GPIO_SettoHigh(CN_GPIO_C, (1<<6)); Djy_EventDelay(500*mS); } }
void lcd_backlight_off(void) { GPIO_SettoHigh(CN_GPIO_F,0x400); }
void lcd_reset(void) { GPIO_SettoLow(CN_GPIO_G,0x100); Djy_DelayUs(5000); GPIO_SettoHigh(CN_GPIO_G,0x100); }