コード例 #1
0
void SPI_RFT_Configure(SPI_RFT_low_cb_TypeDef pSpi_cb)
{
	SPI_InitTypeDef InitStructure;

  Spi_cb = pSpi_cb;

	SPI_StructInit(&InitStructure);

	InitStructure.SPI_CPHA = SPI_CPHA_1Edge;												// SPI(0,0)
	InitStructure.SPI_CPOL = SPI_CPOL_Low;
	InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;	// 1.5 MHz
	InitStructure.SPI_DataSize = SPI_DataSize_16b;									// 16 bit
	InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;	// Full-duplex
	InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;									// MSB first
	InitStructure.SPI_Mode = SPI_Mode_Master;
	InitStructure.SPI_NSS = SPI_NSS_Soft;
	SPI_Init(SPIx,&InitStructure);
	SPI_NSSInternalSoftwareConfig(SPIx,SPI_NSSInternalSoft_Set);
	SPI_Cmd(SPIx,ENABLE);

  SPI_I2S_ITConfig(SPIx,SPI_I2S_IT_RXNE,ENABLE);
  NVIC_EnableIRQ(SPIx_IRQn);

	*CS = 1;
}
コード例 #2
0
ファイル: dac.c プロジェクト: RomanGrekov/lzond
void init_dac(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	SPI_InitTypeDef SPI_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
	RCC_APB2PeriphClockCmd(DAC_CLOCKING_REGISTER, ENABLE);

	/* Confugure SCK and MOSI pins as Alternate Function Push Pull */
	GPIO_InitStructure.GPIO_Pin = DAC_CLK | DAC_MOSI;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(DAC_PORT, &GPIO_InitStructure);
	/* Confugure MISO pin as ususal output  */
	GPIO_InitStructure.GPIO_Pin = DAC_CS;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(DAC_PORT, &GPIO_InitStructure);
    GPIO_SetBits(DAC_PORT, DAC_CS);

	SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
	SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
	SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
	SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
	SPI_Init(SPI1, &SPI_InitStructure);

	SPI_Cmd(SPI1, ENABLE);
	SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);
}
コード例 #3
0
ファイル: st7735.c プロジェクト: Levsha128/ST7735-for-stm32
void st7735_initGPIO(void){
    GPIO_InitTypeDef GPIO_InitStructure;
    SPI_InitTypeDef SPI_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

    GPIO_InitStructure.GPIO_Pin = ST7735_PIN_A0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = ST7735_PIN_SCK | ST7735_PIN_SDA;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);


    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_Init(ST7735_SPI, &SPI_InitStructure);
    SPI_Cmd(ST7735_SPI, ENABLE);
    SPI_NSSInternalSoftwareConfig(ST7735_SPI, SPI_NSSInternalSoft_Set);
}
コード例 #4
0
ファイル: spi.c プロジェクト: alxsh/balmer-usb-sdr
/*
	Use
	EXTI Slave - PA4
	SPI1_SCK   - PA5 21 *
	SPI1_MISO  - PA6 22 *
	SPI1_MOSI  - PA7 23 *

	Пускай пока скорость будет маленькая 125 КГц примерно
*/
void SpiInit()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	SPI_InitTypeDef SPI_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //For exti

	//SPI lines
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);

	SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
	SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
	SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
	SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;//SPI_BaudRatePrescaler_256;
	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
	SPI_InitStructure.SPI_CRCPolynomial = 15;
	SPI_Init(SPI1, &SPI_InitStructure);
	SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,ENABLE);
	SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);
	//SPI_SSOutputCmd(SPI1, ENABLE);
	SPI_Cmd(SPI1, ENABLE);
	NVIC_EnableIRQ(SPI1_IRQn);

	//SPI_I2S_SendData(SPI1, 1234);

	//Init EXTI

	//EXTI line
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//GPIO_Speed_40MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource4);

	EXTI_InitTypeDef exti;
	exti.EXTI_Line = EXTI_Line4;
	exti.EXTI_Mode = EXTI_Mode_Interrupt;
	exti.EXTI_Trigger = EXTI_Trigger_Rising;
	exti.EXTI_LineCmd = ENABLE;
	EXTI_Init(&exti);

	NVIC_EnableIRQ(EXTI4_IRQn);
}
コード例 #5
0
void SPI_RC522_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef    SPI_InitStructure;
 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA |
                         RCC_APB2Periph_GPIOB, ENABLE);
 
#if _SPI_RC522_PORT == 1
  RCC_APB2PeriphClockCmd(RC522_SPI_CLK ,ENABLE);
#elif _SPI_RC522_PORT == 2
  RCC_APB1PeriphClockCmd(RC522_SPI_CLK ,ENABLE);
#endif
  
  RCC_APB2PeriphClockCmd(RC522_SPI_CS_GPIO_CLK, ENABLE);
  GPIO_StructInit(&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin =RC522_SPI_CS_PIN ;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(RC522_SPI_CS_PORT, &GPIO_InitStructure);
  RF_Deactivate();
 
  GPIO_StructInit(&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = RC522_SPI_SCK_PIN | RC522_SPI_MISO_PIN | RC522_SPI_MOSI_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(RC522_SPI_GPIO_PORT, &GPIO_InitStructure);
 
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;            //полный дуплекс
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_SPEED; 
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial=7;
  SPI_Init(RC522_SPI, &SPI_InitStructure); 
  SPI_Cmd(RC522_SPI, ENABLE);  
  
  SPI_NSSInternalSoftwareConfig(RC522_SPI, SPI_NSSInternalSoft_Set);//надо, что бы stm знал, что он мастер
  
  //Reset
  RCC_APB2PeriphClockCmd(RC522_RST_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin   = RC522_RST_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_Init(RC522_RST_PORT, &GPIO_InitStructure);
  GPIO_SetBits(RC522_RST_PORT, RC522_RST_PIN);

  RF_Deactivate();
}
コード例 #6
0
ファイル: main.c プロジェクト: avr-master/M-02-15003
void SPI_Enable(void)
{
  SPI_Struct_init.SPI_Direction = SPI_Direction_1Line_Tx ;
  SPI_Struct_init.SPI_Mode = SPI_Mode_Master;
  SPI_Struct_init.SPI_DataSize = SPI_DataSize_16b;
  SPI_Struct_init.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
  SPI_Struct_init.SPI_NSS = SPI_NSS_Soft; 
  SPI_Struct_init.SPI_CPOL = SPI_CPOL_Low;
  SPI_Init(SPI1,&SPI_Struct_init);
  SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);
  SPI_Cmd(SPI1, ENABLE);
  
};
コード例 #7
0
ファイル: nrf24l01.c プロジェクト: pistoletov1974/smarty
// SPI initialization with given prescaler
void nRF24_SPI_Init(uint16_t prescaler) {
	SPI_InitTypeDef SPI;
	SPI.SPI_Mode = SPI_Mode_Master;
	SPI.SPI_BaudRatePrescaler = prescaler;
	SPI.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
	SPI.SPI_CPOL = SPI_CPOL_Low;
	SPI.SPI_CPHA = SPI_CPHA_1Edge;
	SPI.SPI_CRCPolynomial = 7;
	SPI.SPI_DataSize = SPI_DataSize_8b;
	SPI.SPI_FirstBit = SPI_FirstBit_MSB;
	SPI.SPI_NSS = SPI_NSS_Soft;
	SPI_Init(SPI_PORT,&SPI);

	// NSS must be set to '1' due to NSS_Soft settings (otherwise it will be Multimaster mode).
	SPI_NSSInternalSoftwareConfig(SPI_PORT,SPI_NSSInternalSoft_Set);
}
コード例 #8
0
ファイル: decahard.c プロジェクト: Liyuxiang/Test
void dw1000_ioset(void)
{
	GPIO_InitTypeDef gpio_init;
	
	//dw1000 相关引脚初始化
	gpio_init.GPIO_Pin = DW1000_RSTn;				//DW1000复位引脚
	gpio_init.GPIO_Mode = GPIO_Mode_AIN;
	gpio_init.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(DW1000_DATA_PORT, &gpio_init);
	//GPIO_SetBits(DW1000_DATA_PORT, DW1000_RSTn);

	gpio_init.GPIO_Pin = DW1000_CS;					//DW1000片选引脚
	gpio_init.GPIO_Mode = GPIO_Mode_Out_PP;
	gpio_init.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(DW1000_DATA_PORT, &gpio_init);
	GPIO_SetBits(DW1000_DATA_PORT, DW1000_CS);

	gpio_init.GPIO_Pin = DW1000_SCK | DW1000_MOSI;	//DW1000 SPI时钟和MOSI引脚
	gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
	gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(DW1000_DATA_PORT, &gpio_init);

	gpio_init.GPIO_Pin = DW1000_MISO;				//DW1000 MISO引脚
	gpio_init.GPIO_Mode = GPIO_Mode_AF_OD;
	gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(DW1000_DATA_PORT, &gpio_init);

	gpio_init.GPIO_Pin = DW1000_WAK;				//DW1000唤醒引脚
	gpio_init.GPIO_Mode = GPIO_Mode_Out_PP;
	gpio_init.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(DW1000_CTRL_PORT, &gpio_init);
	GPIO_ResetBits(DW1000_DATA_PORT, DW1000_WAK);

	gpio_init.GPIO_Pin = DW1000_IRQn;				//DW1000中断引脚
	gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	gpio_init.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(DW1000_CTRL_PORT, &gpio_init);
	GPIO_EXTILineConfig(DW1000_INT_PORT, DW1000_INT_PIN);

	//SPI初始化
	BSP_DWTSpiSet(DW1000_SLOW_SPEED);
	SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);
	
}
コード例 #9
0
ファイル: spi_nrf.c プロジェクト: AntonLynnyk/Embedded
void SPI_Initialize()
{
    SPI_RCC_Configuration();
    SPI_GPIO_Configuration(SPI_Mode_Master);

    SPI_InitTypeDef   SPI_InitStructure;
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    SPI_Init(NRF_SPI, &SPI_InitStructure);
    SPI_Cmd(NRF_SPI, ENABLE);

    SPI_NSSInternalSoftwareConfig(NRF_SPI, SPI_NSSInternalSoft_Set);
}
コード例 #10
0
ファイル: main.c プロジェクト: jesstr/smarthome
void init_SPI(void)
{
   SPI_InitTypeDef SPI_InitStructure;
   SPI_StructInit(&SPI_InitStructure);
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
   SPI_InitStructure.SPI_CRCPolynomial = 7;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_Init(NRF24L01_SPI,&SPI_InitStructure);
   // NSS must be set to '1' due to NSS_Soft settings (otherwise it will be Multimaster mode).
   SPI_NSSInternalSoftwareConfig(NRF24L01_SPI,SPI_NSSInternalSoft_Set);
   NRF24L01_CSN_HIGH;
   NRF24L01_CE_LOW;
   SPI_Cmd(NRF24L01_SPI,ENABLE);
}
コード例 #11
0
ファイル: spi_f415.c プロジェクト: TSURKOVSERGEY/sdi
void SPI_Config(void)
{
  SPI_GPIO_Config();
  SPI_InitTypeDef  SPI_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); 
  SPI_I2S_DeInit(SPI3);
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 0;
  SPI_Init(SPI3, &SPI_InitStructure);
  SPI_SSOutputCmd(SPI3,DISABLE);
  SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);
  SPI_Cmd(SPI3, ENABLE); 
  SPI3->DR = DLE;
}
コード例 #12
0
ファイル: lcd_nokia.c プロジェクト: andrey-perepelitsyn/stm32
uint16_t lcd_init(framebuffer_t *framebuffer, lcd_wait_func_t wait_func)
{
	uint16_t i;

	// use framebuffer
	lcd_state.framebuffer = framebuffer;
	// scrolling is on by default, if we have a framebuffer
	// UTF-8 is on by default, because I use Eclipse
	lcd_state.flags = framebuffer != NULL ? LCD_FLAG_SCROLL|LCD_FLAG_UTF8CYR : LCD_FLAG_UTF8CYR;
	// use user :) wait function or default one
	lcd_state.wait_func = wait_func == NULL ? lcd_dumb_wait : wait_func;

	// init clocks
	RCC_APB2PeriphClockCmd(LCD_SPI_CLK, ENABLE);
	RCC_AHBPeriphClockCmd(LCD_GPIO_CLK, ENABLE);
	/*
	 * init GPIOs.
	 * since there be no reading, MISO is not used,
	 * and pin is configured as output GPIO for RESET signal
	 */
	// switch SCK and MOSI pins to alternate function
	GPIO_PinAFConfig(LCD_PORT, LCD_SCK_PIN_NUM, GPIO_AF_0);
	GPIO_PinAFConfig(LCD_PORT, LCD_MOSI_PIN_NUM, GPIO_AF_0);

	// set common parameters
	lcd_gpio_config.GPIO_Mode = GPIO_Mode_AF;
	lcd_gpio_config.GPIO_OType = GPIO_OType_PP;
	lcd_gpio_config.GPIO_PuPd = GPIO_PuPd_NOPULL;
	lcd_gpio_config.GPIO_Speed = GPIO_Speed_50MHz;

	// config SCK pin
	lcd_gpio_config.GPIO_Pin = LCD_SCK_PIN;
	GPIO_Init(LCD_PORT, &lcd_gpio_config);

	// config MOSI pin
	lcd_gpio_config.GPIO_Pin = LCD_MOSI_PIN;
	GPIO_Init(LCD_PORT, &lcd_gpio_config);

	// config MISO pin
	lcd_gpio_config.GPIO_Mode = GPIO_Mode_OUT;
	lcd_gpio_config.GPIO_Pin = LCD_RESET_PIN;
	GPIO_Init(LCD_PORT, &lcd_gpio_config);
	/*
	 * init SPI
	 * hell bunch of configurations :-\
	 */
	// just in case
	SPI_I2S_DeInit(LCD_SPI);

	// config SPI
	lcd_spi_config.SPI_Direction = SPI_Direction_1Line_Tx;
	lcd_spi_config.SPI_Mode = SPI_Mode_Master;
	lcd_spi_config.SPI_DataSize = SPI_DataSize_9b;
	lcd_spi_config.SPI_CPOL = SPI_CPOL_Low;
	lcd_spi_config.SPI_CPHA = SPI_CPHA_1Edge;
//	lcd_spi_config.SPI_CPOL = SPI_CPOL_High;
//	lcd_spi_config.SPI_CPHA = SPI_CPHA_2Edge;
	lcd_spi_config.SPI_NSS = SPI_NSS_Soft;
	lcd_spi_config.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
	lcd_spi_config.SPI_FirstBit = SPI_FirstBit_MSB;
	lcd_spi_config.SPI_CRCPolynomial = 7; // ?
	SPI_Init(LCD_SPI, &lcd_spi_config);

	// enable NSS
	SPI_NSSInternalSoftwareConfig(LCD_SPI, SPI_NSSInternalSoft_Set);

	// enable SPI
	SPI_Cmd(LCD_SPI, ENABLE);

	// finally, send RESET signal
	GPIO_ResetBits(LCD_PORT, LCD_RESET_PIN);

	lcd_state.wait_func(5); // let RESET last 5 msec!
	GPIO_SetBits(LCD_PORT, LCD_RESET_PIN);

//	// send Reading Mode command
//	lcd_write_command(0xdb);
//	// switch SPI to read
//	SPI_BiDirectionalLineConfig(LCD_SPI, SPI_Direction_Rx);
//	while(SPI_GetReceptionFIFOStatus(LCD_SPI) < SPI_ReceptionFIFOStatus_HalfFull);
//	data = SPI_I2S_ReceiveData16(LCD_SPI);
//	// switch SPI back to write
//	SPI_BiDirectionalLineConfig(LCD_SPI, SPI_Direction_Tx);

	// send command of internal display reset
	lcd_write_command(0xE2);
	// wait...
	lcd_state.wait_func(20);
	// send init commands to display
	for(i = 0; i < sizeof(lcd_init_sequence); i++)
		lcd_write_command(lcd_init_sequence[i]);

	return 0;
}