/*---------------------------------------------------------------------------- SPI Serial Device "LPC17xx" Write and Read a byte on SPI interface *----------------------------------------------------------------------------*/ static uint8_t SpiWriteRead (uint8_t Data) { //dummy to clear status SPI_GetStatus(SpiInfo.pSpi); //read for empty buffer SPI_ReceiveData(SpiInfo.pSpi); // Send data... SPI_SendData(SpiInfo.pSpi, Data); // Wait for transfer complete while (SPI_CheckStatus(SPI_GetStatus(SpiInfo.pSpi), SPI_STAT_SPIF) == RESET); return ((uint8_t)SPI_ReceiveData(SpiInfo.pSpi)); }
void gpio_init() { SPI_CFG_Type spiInitialization; PINSEL_CFG_Type PinSelCfg; /*----------------------------------------------------------------- *--------------------------PORT 0--------------------------------- *----------------------------------------------------------------- */ GPIO_SetDir(0, 0xFFFFFFFF, OUTPUT); PinSelCfg.Portnum = PINSEL_PORT_0; // PinSelCfg.Pinnum = PINSEL_PIN_0; // PinSelCfg.Funcnum = PINSEL_FUNC_3; // PinSelCfg.OpenDrain = 0; // PinSelCfg.Pinmode = 0; // PINSEL_ConfigPin(&PinSelCfg); // // PinSelCfg.Pinnum = PINSEL_PIN_1; // PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Pinnum = PINSEL_PIN_2; PinSelCfg.Funcnum = PINSEL_FUNC_1; PinSelCfg.OpenDrain = PINSEL_PINMODE_NORMAL; PinSelCfg.Pinmode = PINSEL_PINMODE_PULLUP; PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Pinnum = PINSEL_PIN_3; PINSEL_ConfigPin(&PinSelCfg); GPIO_SetDir(0, 0x01<<22, INPUT); PinSelCfg.Pinnum = PINSEL_PIN_10; PinSelCfg.Funcnum = PINSEL_FUNC_2; PinSelCfg.OpenDrain = PINSEL_PINMODE_OPENDRAIN; PinSelCfg.Pinmode = PINSEL_PINMODE_TRISTATE; PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Pinnum = PINSEL_PIN_11; PINSEL_ConfigPin(&PinSelCfg); //SET FMC_I2C1 in Hi-Z GPIO_SetDir(0, 0x01<<19, INPUT); GPIO_SetDir(0, 0x01<<20, INPUT); // PinSelCfg.Pinmode = PINSEL_PINMODE_TRISTATE; // PinSelCfg.Funcnum = PINSEL_FUNC_3; // PinSelCfg.Pinnum = PINSEL_PIN_19; // PINSEL_ConfigPin(&PinSelCfg); // // PinSelCfg.Pinnum = PINSEL_PIN_20; // PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Funcnum = PINSEL_FUNC_1; PinSelCfg.OpenDrain = PINSEL_PINMODE_OPENDRAIN; PinSelCfg.Pinnum = PINSEL_PIN_27; PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Pinnum = PINSEL_PIN_28; PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Pinnum = PINSEL_PIN_29; PinSelCfg.Funcnum = PINSEL_FUNC_1; PinSelCfg.OpenDrain = PINSEL_PINMODE_NORMAL; PinSelCfg.Pinmode = PINSEL_PINMODE_TRISTATE; PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Pinnum = PINSEL_PIN_30; PINSEL_ConfigPin(&PinSelCfg); /*----------------------------------------------------------------- *---------------------END OF PORT 0------------------------------- *----------------------------------------------------------------- *----------------------------------------------------------------- * ------------------------PORT 1---------------------------------- * ---------------------------------------------------------------- */ GPIO_SetDir(1, 0xFFFFFFFF, OUTPUT); GPIO_SetDir(1, ( 0x01<<IPMI_GA0 | 0x01<<IPMI_GA1 | 0x01<<IPMI_GA2 ), INPUT); GPIO_SetValue(LED_PORT, (0x01<<_IPMI_BLLED|0x01<<_IPMI_LED1|0x01<<_IPMI_LED2) ); // PinSelCfg.Portnum = PINSEL_PORT_1; // PinSelCfg.Pinnum = PINSEL_PIN_30; // PinSelCfg.Funcnum = PINSEL_FUNC_2; // PinSelCfg.OpenDrain = PINSEL_PINMODE_NORMAL; // PinSelCfg.Pinmode = PINSEL_PINMODE_TRISTATE; // PINSEL_ConfigPin(&PinSelCfg); GPIO_SetDir(ENA_PORT, 0x001<<ENA_PIN, INPUT); GPIO_SetDir(2, 0x0400, INPUT); GPIO_SetDir(IPMI_EJTHDL_PORT, 0x001<<IPMI_EJTHDL, INPUT); GPIO_SetDir(1, 0x01<<22, INPUT); GPIO_SetDir(PGOOD_PORT, 0x01<<PGOOD_PIN, INPUT); gpio_clr_gpio_pin(_IPMI_BLLED, LED_PORT); // turn on blue LED ASAP gpio_clr_gpio_pin(UC_PWRENOUT, UC_PWRENOUT_PORT); // turn off power enable PinSelCfg.Pinnum = PINSEL_PIN_15; PinSelCfg.Portnum = PINSEL_PORT_0; PinSelCfg.Pinmode = PINSEL_PINMODE_PULLUP; PinSelCfg.Funcnum = PINSEL_FUNC_3; PinSelCfg.OpenDrain = PINSEL_PINMODE_NORMAL; PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Pinnum = PINSEL_PIN_18; PINSEL_ConfigPin(&PinSelCfg); GPIO_SetDir(1, 0x01<<26, OUTPUT); GPIO_SetValue(1, 0x01<<26); GPIO_SetDir(0, 0x01<<21, OUTPUT); GPIO_SetDir(0, 0x01<<16, OUTPUT); GPIO_SetValue(0, 0x01<<16); GPIO_SetValue(0, 0x01<<21); GPIO_SetDir(PORT_EN_0, 0x01<<EN_P1V2, OUTPUT); GPIO_SetDir(PORT_EN_0, 0x01<<EN_P1V8, OUTPUT); GPIO_SetDir(PORT_EN_0, 0x01<<EN_FMC2_P3V3, OUTPUT); GPIO_SetDir(PORT_EN_0, 0x01<<EN_FMC1_P3V3, OUTPUT); GPIO_SetDir(PORT_EN_0, 0x01<<EM_FMC1_P12V, OUTPUT); GPIO_SetDir(PORT_EN_0, 0x01<<EN_FMC2_P12V, OUTPUT); GPIO_SetDir(PORT_EN_1, 0x01<<EN_FMC1_PVADJ, OUTPUT); GPIO_SetDir(PORT_EN_1, 0x01<<EN_FMC2_PVADJ, OUTPUT); GPIO_SetDir(PORT_EN_1, 0x01<<EN_P3V3, OUTPUT); GPIO_SetDir(PORT_EN_1, 0x01<<EN_1V5_VTT, OUTPUT); GPIO_SetDir(PORT_EN_1, 0x01<<EN_RTM_CONN, OUTPUT); GPIO_SetDir(PORT_EN_0, 0x01<<RTM_PRESENCE, INPUT); GPIO_SetDir(PORT_EN_3, 0x01<<EN_P1V0, OUTPUT); setDC_DC_ConvertersON(); spiInitialization.CPOL = SPI_CPOL_LO; spiInitialization.CPHA = SPI_CPHA_FIRST; spiInitialization.Databit = SPI_DATABIT_10; spiInitialization.DataOrder = SPI_DATA_MSB_FIRST; spiInitialization.ClockRate = 10000000; SPI_Init(LPC_SPI, &spiInitialization); LPC_SPI->SPCR = 0xA24; GPIO_ClearValue(0, 0x01<<16); SPI_SendData(LPC_SPI, 0x0125); while(! ( SPI_CheckStatus( SPI_GetStatus(LPC_SPI), SPI_STAT_SPIF) )); GPIO_SetValue(0, 0x01<<16); GPIO_ClearValue(0, 0x01<<16); SPI_SendData(LPC_SPI, 0x0025); while(! ( SPI_CheckStatus( SPI_GetStatus(LPC_SPI), SPI_STAT_SPIF) )); GPIO_SetValue(0, 0x01<<16); //SCANSTA JTAG GPIO_SetDir(2, 0x0FF, OUTPUT); GPIO_SetValue(2, 0x080); GPIO_ClearValue(2, 0x07F); SPI_ConfigStructInit(&spiInitialization); //FPGA_SPI GPIO_SetDir(1, 0x01<<20, INPUT); GPIO_SetDir(1, 0x01<<21, INPUT); GPIO_SetDir(1, 0x01<<23, INPUT); GPIO_SetDir(1, 0x01<<24, INPUT); // SET PROGRAM_B AS OUTPUT // AND SET THIS PIN HIGH GPIO_SetDir(0, 0x01<<17, INPUT); // SET DONE PIN AS INPUT // turn on pull-up GPIO_SetDir(0, 0x01<<22, INPUT); //////////////////////////////////////// // P0_6 - FCS_B - use as FPGA - RST //////////////////////////////////////// GPIO_SetDir(0, 0x01<<6, INPUT); //GPIO_ClearValue(0, 0x01<<6); /////////////////////////////////////// GPIO_SetDir(0, 0x01<<7, INPUT); GPIO_SetDir(0, 0x01<<8, INPUT); #ifdef AMC_CPU_COM_Express GPIO_SetDir(0, 0x01<<9, OUTPUT); #else GPIO_SetDir(0, 0x01<<9, INPUT); #endif /////////////////////////////////////// //FMC STATUS PORTS /////////////////////////////////////// GPIO_SetDir(1, 0x1<<14, INPUT); GPIO_SetDir(1, 0x1<<15, INPUT); GPIO_SetDir(1, 0x1<<16, INPUT); GPIO_SetDir(1, 0x1<<17, INPUT); GPIO_SetDir(1, 0x1<<18, INPUT); GPIO_SetDir(1, 0x1<<19, INPUT); /////////////////////////////////////// // FPGA Reset Button EXTI_InitTypeDef EXTICfg; /* Initialize EXT pin and register */ /* P2.12 as /EINT2*/ PinSelCfg.Funcnum = PINSEL_FUNC_1; PinSelCfg.OpenDrain = PINSEL_PINMODE_NORMAL; PinSelCfg.Pinmode = PINSEL_PINMODE_PULLUP; PinSelCfg.Pinnum = FPGA_RST_SW; PinSelCfg.Portnum = FPGA_RST_SW_PORT; PINSEL_ConfigPin(&PinSelCfg); PinSelCfg.Funcnum = PINSEL_FUNC_0; PinSelCfg.OpenDrain = PINSEL_PINMODE_NORMAL; PinSelCfg.Pinmode = PINSEL_PINMODE_PULLUP; PinSelCfg.Pinnum = FPGA_RESETn; PinSelCfg.Portnum = FPGA_RESETn_PORT; PINSEL_ConfigPin(&PinSelCfg); GPIO_SetDir(FPGA_RESETn_PORT, 1<<FPGA_RESETn, OUTPUT); EXTI_Init(); EXTICfg.EXTI_Line = EXTI_EINT2; EXTICfg.EXTI_Mode = EXTI_MODE_EDGE_SENSITIVE; EXTICfg.EXTI_polarity = EXTI_POLARITY_LOW_ACTIVE_OR_FALLING_EDGE; EXTI_ClearEXTIFlag(EXTI_EINT2); EXTI_Config(&EXTICfg); GPIO_IntCmd(0, 0x01 << FPGA_RST_SW, 1); NVIC_SetPriorityGrouping(0); NVIC_SetPriority(EINT2_IRQn, 4); NVIC_EnableIRQ(EINT2_IRQn); }