// ============================================================================= // 功能:根据具体的板件配置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; }
// ============================================================================= // 功能: 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; }
//----初始化键盘硬件----------------------------------------------------------- //功能: 如题,初始化后才能扫描键盘 //参数: 无 //返回: 无 //---------------------------------------------------------------------------- bool_t key_hard_init(void) { GPIO_PowerOn(CN_GPIO_C); GPIO_CfgPinFunc(CN_GPIO_C,10,CN_GPIO_MODE_IN_PULLUP); GPIO_CfgPinFunc(CN_GPIO_C,11,CN_GPIO_MODE_IN_PULLUP); GPIO_CfgPinFunc(CN_GPIO_C,12,CN_GPIO_MODE_IN_PULLUP); GPIO_CfgPinFunc(CN_GPIO_C,13,CN_GPIO_MODE_IN_PULLUP); return true; }
// ============================================================================= // 功能: 硬件GPIO初始化,包括电源等 // 参数: IIC_NO,编号 // 返回: 无 // ============================================================================= static bool_t __IIC_GpioConfig(u8 IIC_NO) { u8 tout; pg_rcc_reg->APB2ENR |=(1<<3)|(1<<0); //开时钟B和复用功能 switch(IIC_NO) { case CN_IIC1: pg_rcc_reg->APB1ENR |=(1<<21); //开时钟 pg_iic1_reg->CR1 |=I2C_CR1_SWRST_MASK; /* 复位IIC外设 */ for (tout = 100; tout; tout--); pg_iic1_reg->CR1 = 0x0000; //对于一些 IIC器件它们没有复位或者使能管脚,像stmpe811 在工作过程中,如果在数据端口为低电平时发生cpu复位 //将导致iic总线被从器件一直占用 在这里采用I/O模拟的方式产生停止信号释放IIC总线 if(_IIC_Busfree(CN_GPIO_B,9,8)==false) return false; GPIO_CfgPinFunc(CN_GPIO_B,9,CN_GPIO_MODE_PERI_OUT_OD_50Mhz);//TS_SDA GPIO_CfgPinFunc(CN_GPIO_B,8,CN_GPIO_MODE_PERI_OUT_OD_50Mhz);//TS_SCK pg_iic1_reg->CR1 = 0x0001;//PE使能 pg_iic1_reg->CR2 = 24; //I2C模块时钟频率 24M pg_iic1_reg->CR1 = 0x0000;//PE使能 pg_iic1_reg->TRISE = 0x0025;//在快速/标准模式下的最大上升时间(主模式) pg_iic1_reg->CCR = 0x00b4;//快速/标准模式下的时钟控制分频系数(主模式) pg_iic1_reg->CR1 |= 0x0401;//PE使能&ACK pg_iic1_reg->OAR1 = 0x40A0;//4必须始终由软件保持为’1’。A接口地址 pg_iic1_reg->CCR|=I2C_CCR_FS_MASK;//快速模式 break; case CN_IIC2: pg_rcc_reg->APB1ENR |=(1<<22);//开时钟 if(_IIC_Busfree(CN_GPIO_B,11,10)==false) return false; GPIO_CfgPinFunc(CN_GPIO_B,11,CN_GPIO_MODE_PERI_OUT_OD_50Mhz);//TS_SDA GPIO_CfgPinFunc(CN_GPIO_B,10,CN_GPIO_MODE_PERI_OUT_OD_50Mhz);//TS_SCK pg_iic2_reg->CR1 |= I2C_CR1_SWRST_MASK; /* 复位IIC外设 */ for (tout = 100; tout; tout--); pg_iic2_reg->CR1 = 0x0000; pg_iic2_reg->CR1 |= I2C_CR1_PE_MASK; pg_iic2_reg->CR2 = 24; pg_iic2_reg->CR1 = 0x0000; pg_iic2_reg->TRISE = 0x0025; pg_iic2_reg->CCR = 0x0078; pg_iic2_reg->CR1 |= 0x0401; pg_iic2_reg->OAR1 = 0x40A0; pg_iic2_reg->CCR|=I2C_CCR_FS_MASK;//快速模式 break; default: break; } return true; }
void led_init(void) { GPIO_PowerOn(CN_GPIO_C); GPIO_CfgPinFunc(CN_GPIO_C, 6, CN_GPIO_MODE_GPIO_OUT_PP_2Mhz); GPIO_CfgPinFunc(CN_GPIO_C, 4, CN_GPIO_MODE_GPIO_OUT_PP_2Mhz); GPIO_CfgPinFunc(CN_GPIO_C, 8, CN_GPIO_MODE_GPIO_OUT_PP_2Mhz); GPIO_CfgPinFunc(CN_GPIO_C, 9, CN_GPIO_MODE_GPIO_OUT_PP_2Mhz); evtt_led = Djy_EvttRegist(EN_CORRELATIVE, CN_PRIO_RRS, 0, 1, led_flash, NULL,1000, "hello led"); if (evtt_led != CN_EVTT_ID_INVALID) { event_led = Djy_EventPop(evtt_led, NULL, 0, NULL, 0, 0); } }
// ============================================================================= // 功能:根据具体的板件配置串口的GPIO的引脚功能,这是与板件相关,所以该函数放在该文件,CPU // 串口驱动直接调用该函数来初始化串口的GPIO引脚 // 主要包括GPIO端口和串口时钟使能、GPIO配置、重映射、时钟等 // 参数:无 // 返回:true // ============================================================================= bool_t Board_UartGpioInit(u8 SerialNo) { //初始化IO端口位uart功能 //Ports : GPA10 GPA9 GPA8 GPA7 GPA6 GPA5 GPA4 GPA3 GPA2 GPA1 GPA0 //Signal : RXD1 TXD1 xx xx xx xx xx xx xx xx xx switch(SerialNo) { case CN_UART1: RCC->AHB1ENR|=1<<0; //使能PORTA口时钟 RCC->APB2ENR|=1<<4; //使能串口1时钟 GPIO_CfgPinFunc(GPIO_A,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP, GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出 GPIO_AFSet(GPIO_A,9,7); //PA9,AF7 GPIO_AFSet(GPIO_A,10,7);//PA10,AF7 break; case CN_UART2: RCC->APB1ENR |= (1<<17); RCC->AHB1ENR |= (1<<0);//port A clock enable GPIO_CfgPinFunc(GPIO_A,PIN2|PIN3,GPIO_MODE_AF,GPIO_OTYPE_PP, GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出 GPIO_AFSet(GPIO_A,2,7); //PA2,AF7 GPIO_AFSet(GPIO_A,3,7);//PA3,AF7 break; case CN_UART3: RCC->APB1ENR |= (1<<18);//uart3 clock enable RCC->AHB1ENR |= (1<<1);// port b clock enable GPIO_CfgPinFunc(GPIO_B,PIN10|PIN11,GPIO_MODE_AF,GPIO_OTYPE_PP, GPIO_SPEED_50M,GPIO_PUPD_PU); GPIO_AFSet(GPIO_B,10,7); //PB10,AF7 GPIO_AFSet(GPIO_B,11,7);//PB11,AF7 break; case CN_UART4: RCC->APB1ENR |= (1<<19);//uart4 clock enable RCC->AHB1ENR |= (1<<0);//port A clock enable GPIO_CfgPinFunc(GPIO_A,PIN0|PIN1,GPIO_MODE_AF,GPIO_OTYPE_PP, GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出 GPIO_AFSet(GPIO_A,0,7); //PA2,AF7 GPIO_AFSet(GPIO_A,1,7);//PA3,AF7 break; case CN_UART5: RCC->APB1ENR |= (1<<20);//uart5 clock enable RCC->AHB1ENR |= (1<<2);//port C clock enable GPIO_CfgPinFunc(GPIO_C,PIN11|PIN12,GPIO_MODE_AF,GPIO_OTYPE_PP, GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出 GPIO_AFSet(GPIO_C,11,7); //PA2,AF7 GPIO_AFSet(GPIO_C,12,7);//PA3,AF7 break; case CN_UART6: RCC->APB2ENR|= (1<<5); //使能串口6时钟 RCC->AHB1ENR |= (1<<2);//port C clock enable GPIO_CfgPinFunc(GPIO_C,PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP, GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出 GPIO_AFSet(GPIO_C,6,7); //PA2,AF7 GPIO_AFSet(GPIO_C,7,7);//PA3,AF7 break; default: break; } return true; }
/*--------------------------------------------------------------------------- 功能: lcd 初始化 ---------------------------------------------------------------------------*/ void __lcd_ili9325_init(void) { GPIO_PowerOn(CN_GPIO_F); GPIO_PowerOn(CN_GPIO_G); GPIO_CfgPinFunc(CN_GPIO_F,10,CN_GPIO_MODE_GPIO_OUT_OD_2Mhz); GPIO_CfgPinFunc(CN_GPIO_G,8,CN_GPIO_MODE_GPIO_OUT_PP_2Mhz); lcd_backlight_off(); lcd_reset(); Djy_DelayUs(100000); if( __ili9325_read_reg() != 0x9325) { return; } __ili9325_write_reg(0x0000, 0x0001); //Start internal OSC __ili9325_write_reg(0x0001, 0x0000); // set SS=0 and SM=0 S1---S720 __ili9325_write_reg(0x0002, 0x0700); // set 1 line inversion __ili9325_write_reg(0x0003, 0x1030); // set GRAM write direction and BGR=1. __ili9325_write_reg(0x0004, 0x0000); // Resize register __ili9325_write_reg(0x0008, 0x0207); // set the back porch and front porch __ili9325_write_reg(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0] __ili9325_write_reg(0x000a, 0x0000); // FMARK function __ili9325_write_reg(0x000c, 0x0000); // RGB interface setting __ili9325_write_reg(0x000d, 0x0000); // Frame marker Position __ili9325_write_reg(0x000f, 0x0000); // RGB interface polarity //-------------power on sequence------------ __ili9325_write_reg(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB __ili9325_write_reg(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] __ili9325_write_reg(0x0012, 0x0000); // VREG1OUT voltage __ili9325_write_reg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude Djy_DelayUs(5000); __ili9325_write_reg(0x0010, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB __ili9325_write_reg(0x0011, 0x0227); // R11H=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0] Djy_DelayUs(5000); __ili9325_write_reg(0x0012, 0x001d); // External reference voltage= Vci;001d Djy_DelayUs(5000); __ili9325_write_reg(0x0013, 0x0800); // R13H=1D00 when R12H=009D;VDV[4:0] for VCOM amplitude __ili9325_write_reg(0x0029, 0x0014); // R29H=0013 when R12H=009D;VCM[5:0] for VCOMH __ili9325_write_reg(0x002b, 0x000B); // Frame Rate = 96Hz Djy_DelayUs(5000); __ili9325_write_reg(0x0020, 0x0000); // GRAM horizontal Address __ili9325_write_reg(0x0021, 0x0000); // GRAM Vertical Address // ----------- Adjust the Gamma Curve ---------- __ili9325_write_reg(0x0030, 0x0007); __ili9325_write_reg(0x0031, 0x0707); __ili9325_write_reg(0x0032, 0x0006); __ili9325_write_reg(0x0035, 0x0704); __ili9325_write_reg(0x0036, 0x1F04); __ili9325_write_reg(0x0037, 0x0004); __ili9325_write_reg(0x0038, 0x0000); __ili9325_write_reg(0x0039, 0x0706); __ili9325_write_reg(0x003c, 0x0701); __ili9325_write_reg(0x003d, 0x000F); // ------------------ Set GRAM area --------------- __ili9325_write_reg(0x0050, 0x0000); // Horizontal GRAM Start Address __ili9325_write_reg(0x0051, 239); // Horizontal GRAM End Address __ili9325_write_reg(0x0052, 0x0000); // Vertical GRAM Start Address __ili9325_write_reg(0x0053, 319); // Vertical GRAM Start Address __ili9325_write_reg(0x0060, 0x2700); // GS=0 320 line __ili9325_write_reg(0x0061, 0x0001); // NDL,VLE(滚屏允许), REV(灰度翻转) __ili9325_write_reg(0x006a, 0x0000); // set scrolling line // -------------- Partial Display Control --------- __ili9325_write_reg(0x0080, 0x0000); __ili9325_write_reg(0x0081, 0x0000); __ili9325_write_reg(0x0082, 0x0000); __ili9325_write_reg(0x0083, 0x0000); __ili9325_write_reg(0x0084, 0x0000); __ili9325_write_reg(0x0085, 0x0000); // -------------- Panel Control ------------------- __ili9325_write_reg(0x0090, 0x0010); __ili9325_write_reg(0x0092, 0x0000); __ili9325_write_reg(0x0093, 0x0003); __ili9325_write_reg(0x0095, 0x0110); __ili9325_write_reg(0x0097, 0x0000); __ili9325_write_reg(0x0098, 0x0000); // Set GRAM write direction and BGR = 1 // I/D=11 (Horizontal : increment, Vertical : increment) // AM=0 (address is updated in Horizontal writing direction) __ili9325_write_reg(0x0003, 0x1030); __ili9325_write_reg(0x0007, 0x0173); // 262K color and display ON lcd_backlight_on(); }
void __lcd_hard_init(void) { u32 x,y,reg; u16 *pdata; // enable power and setup lcdc. Cpucfg_EnableLPSC(cn_PSC1_LCDC); /* Palette */ pdata = (u16*)(u8g_dsp_buffer - CN_PALETTE_SIZE); #if CN_LCD_TYPE == CN_MODE_GREY_MONO *pdata++ = 0; *pdata++ = 15; #elif CN_LCD_TYPE == CN_MODE_GREY_04 *pdata++ = 0; *pdata++ = 5; *pdata++ = 10; *pdata++ = 15; #elif CN_LCD_TYPE == CN_MODE_GREY_16 *pdata++ = 0; *pdata++ = 1; *pdata++ = 2; *pdata++ = 3; *pdata++ = 4; *pdata++ = 5; *pdata++ = 6; *pdata++ = 7; *pdata++ = 8; *pdata++ = 9; *pdata++ = 10; *pdata++ = 11; *pdata++ = 12; *pdata++ = 13; *pdata++ = 14; *pdata++ = 15; #endif #if ((CN_LCD_TYPE == CN_MODE_GREY_MONO) || (CN_LCD_TYPE == CN_MODE_GREY_04) || (CN_LCD_TYPE == CN_MODE_GREY_16)) //以下分配LCD控制器所需的引脚 GPIO_CfgPinFunc(7,8,cn_p7_8_lcd_d0); GPIO_CfgPinFunc(7,9,cn_p7_9_lcd_d1); GPIO_CfgPinFunc(7,10,cn_p7_10_lcd_d2); GPIO_CfgPinFunc(7,11,cn_p7_11_lcd_d3); GPIO_CfgPinFunc(8,10,cn_p8_10_lcd_mclk); GPIO_CfgPinFunc(8,11,cn_p8_11_lcd_pclk); GPIO_CfgPinFunc(6,0,cn_p6_0_nlcd_ac_enb_cs); GPIO_CfgPinFunc(8,8,cn_p8_8_lcd_vsync); GPIO_CfgPinFunc(8,9,cn_p8_9_lcd_hsync); g_ptSysconfig0Reg->MSTPRI[2] &= 0x0fffffff; //设置LCD数据传送次高优先级 g_ptSysconfig0Reg->MSTPRI[2] |= 0x10000000; //设置LCD数据传送次高优先级 // Turn raster controller off g_ptLcdcReg->RASTER_CTRL &= 0xfffffffe; // Clear status bits g_ptLcdcReg->LCD_STAT = 0x000003ff; // PCLK = 1.27MHz, 帧频66,raster mode reg = CN_LCD_CLKVAL /(CN_LCD_SIZE_X * CN_LCD_SIZE_Y * 66) * 4; g_ptLcdcReg->LCD_CTRL &= ~CN_LCDC_LCD_CTRL_CLKDIV_MASK; g_ptLcdcReg->LCD_CTRL |= reg << CN_LCDC_LCD_CTRL_CLKDIV_SHIFT; g_ptLcdcReg->LCD_CTRL |= CN_LCDC_LCD_CTRL_MODESEL_MASK; g_ptLcdcReg->RASTER_CTRL = (CN_LCDC_RASTER_CTRL_NIB_MODE_ENABLE << CN_LCDC_RASTER_CTRL_NIB_MODE_SHIFT) +(CN_LCDC_RASTER_CTRL_MONO_COLOR_MONOCHROME << CN_LCDC_RASTER_CTRL_MONO_COLOR_SHIFT); // HBP = 0; HFP = 0; HSW = 0x3; PPL = 0x13 g_ptLcdcReg->RASTER_TIMING_0 = (4 << CN_LCDC_RASTER_TIMING_0_HBP_SHIFT) +(4 << CN_LCDC_RASTER_TIMING_0_HFP_SHIFT) +(4 << CN_LCDC_RASTER_TIMING_0_HSW_SHIFT) +((CN_LCD_SIZE_X/16 -1)<< CN_LCDC_RASTER_TIMING_0_PPL_SHIFT); // VBP = 0x3; VFP = 0x2; VSW = 0xA: LPP = 0xef; g_ptLcdcReg->RASTER_TIMING_1 = (10 << CN_LCDC_RASTER_TIMING_1_VBP_SHIFT) +(9 << CN_LCDC_RASTER_TIMING_1_VFP_SHIFT) +(5 << CN_LCDC_RASTER_TIMING_1_VSW_SHIFT) +((CN_LCD_SIZE_Y -1)<< CN_LCDC_RASTER_TIMING_1_LPP_SHIFT); g_ptLcdcReg->RASTER_TIMING_2 = (CN_LCDC_RASTER_TIMING_2_IPC_RISING << CN_LCDC_RASTER_TIMING_2_IPC_SHIFT); g_ptLcdcReg->LCDDMA_CTRL = 0x00000540; // Frame buffer start g_ptLcdcReg->LCDDMA_FB0_BASE = (u32)(u8g_dsp_buffer - CN_PALETTE_SIZE); // Frame buffer end,不知为何要减1 g_ptLcdcReg->LCDDMA_FB0_CEILING = (u32)(u8g_dsp_buffer + cn_frame_buffer_size - 1); g_ptLcdcReg->RASTER_CTRL |= 0x00000001; // Enable controller #endif return; }
void SRAM_GPIO_Init(void) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); GPIO_PowerOn(CN_GPIO_D); GPIO_PowerOn(CN_GPIO_E); GPIO_PowerOn(CN_GPIO_F); GPIO_PowerOn(CN_GPIO_G); GPIO_CfgPinFunc(CN_GPIO_D, 14, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d0 GPIO_CfgPinFunc(CN_GPIO_D, 15, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d1 GPIO_CfgPinFunc(CN_GPIO_D, 0, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d2 GPIO_CfgPinFunc(CN_GPIO_D, 1, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d3 GPIO_CfgPinFunc(CN_GPIO_E, 7, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d4 GPIO_CfgPinFunc(CN_GPIO_E, 8, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d5 GPIO_CfgPinFunc(CN_GPIO_E, 9, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d6 GPIO_CfgPinFunc(CN_GPIO_E, 10, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d7 GPIO_CfgPinFunc(CN_GPIO_E, 11, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d8 GPIO_CfgPinFunc(CN_GPIO_E, 12, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d9 GPIO_CfgPinFunc(CN_GPIO_E, 13, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d10 GPIO_CfgPinFunc(CN_GPIO_E, 14, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d11 GPIO_CfgPinFunc(CN_GPIO_E, 15, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d12 GPIO_CfgPinFunc(CN_GPIO_D, 8, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d13 GPIO_CfgPinFunc(CN_GPIO_D, 9, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d14 GPIO_CfgPinFunc(CN_GPIO_D, 10, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //d15 GPIO_CfgPinFunc(CN_GPIO_F, 0, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a0 GPIO_CfgPinFunc(CN_GPIO_F, 1, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a1 GPIO_CfgPinFunc(CN_GPIO_F, 2, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a2 GPIO_CfgPinFunc(CN_GPIO_F, 3, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a3 GPIO_CfgPinFunc(CN_GPIO_F, 4, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a4 GPIO_CfgPinFunc(CN_GPIO_F, 5, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a5 GPIO_CfgPinFunc(CN_GPIO_F, 12, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a6 GPIO_CfgPinFunc(CN_GPIO_F, 13, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a7 GPIO_CfgPinFunc(CN_GPIO_F, 14, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a8 GPIO_CfgPinFunc(CN_GPIO_F, 15, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a9 GPIO_CfgPinFunc(CN_GPIO_G, 0, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a10 GPIO_CfgPinFunc(CN_GPIO_G, 1, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a11 GPIO_CfgPinFunc(CN_GPIO_G, 2, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a12 GPIO_CfgPinFunc(CN_GPIO_G, 3, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a13 GPIO_CfgPinFunc(CN_GPIO_G, 4, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a14 GPIO_CfgPinFunc(CN_GPIO_G, 5, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a15 GPIO_CfgPinFunc(CN_GPIO_D, 11, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a16 GPIO_CfgPinFunc(CN_GPIO_D, 12, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a17 GPIO_CfgPinFunc(CN_GPIO_D, 13, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a18 GPIO_CfgPinFunc(CN_GPIO_E, 3, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a19 GPIO_CfgPinFunc(CN_GPIO_E, 4, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a20 GPIO_CfgPinFunc(CN_GPIO_E, 5, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //a21 GPIO_CfgPinFunc(CN_GPIO_D, 5, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //we GPIO_CfgPinFunc(CN_GPIO_D, 4, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //re GPIO_CfgPinFunc(CN_GPIO_D, 7, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //cs1 for sram GPIO_CfgPinFunc(CN_GPIO_G, 9, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //cs2 for nand GPIO_CfgPinFunc(CN_GPIO_G, 10, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //cs3 for lcd GPIO_CfgPinFunc(CN_GPIO_G, 12, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //cs4 for dm9000a GPIO_CfgPinFunc(CN_GPIO_E, 0, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //lb GPIO_CfgPinFunc(CN_GPIO_E, 1, CN_GPIO_MODE_PERI_OUT_PP_50Mhz); //ub }