103 lines
2.5 KiB
C
103 lines
2.5 KiB
C
#include <rtthread.h>
|
|
#include <board.h>
|
|
|
|
#ifdef RT_USING_LWIP
|
|
#include "stm32_eth.h"
|
|
#endif /* RT_USING_LWIP */
|
|
|
|
#ifdef RT_USING_SPI
|
|
#include "rt_stm32f10x_spi.h"
|
|
|
|
#if defined(RT_USING_DFS) && defined(RT_USING_SPI_MSD)
|
|
#include "spi_msd.h"
|
|
#endif /* RT_USING_DFS */
|
|
|
|
/*
|
|
* SPI1_MOSI: PA7
|
|
* SPI1_MISO: PA6
|
|
* SPI1_SCK : PA5
|
|
*
|
|
* CS0: PA4 SD card.
|
|
*/
|
|
static void rt_hw_spi_init(void)
|
|
{
|
|
#ifdef RT_USING_SPI1
|
|
/* register spi bus */
|
|
{
|
|
static struct stm32_spi_bus stm32_spi;
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
/* Enable GPIO clock */
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,
|
|
ENABLE);
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
|
|
|
stm32_spi_register(SPI1, &stm32_spi, "spi1");
|
|
}
|
|
|
|
/* attach cs */
|
|
{
|
|
static struct rt_spi_device spi_device;
|
|
static struct stm32_spi_cs spi_cs;
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
|
|
/* spi21: PG10 */
|
|
spi_cs.GPIOx = GPIOA;
|
|
spi_cs.GPIO_Pin = GPIO_Pin_4;
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
|
|
|
|
GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin;
|
|
GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin);
|
|
GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure);
|
|
|
|
rt_spi_bus_attach_device(&spi_device, "spi10", "spi1", (void*)&spi_cs);
|
|
}
|
|
#endif /* RT_USING_SPI1 */
|
|
}
|
|
#endif /* RT_USING_SPI */
|
|
|
|
|
|
void rt_platform_init(void)
|
|
{
|
|
#ifdef RT_USING_SPI
|
|
rt_hw_spi_init();
|
|
|
|
#if defined(RT_USING_DFS) && defined(RT_USING_SPI_MSD)
|
|
/* init sdcard driver */
|
|
{
|
|
extern void rt_hw_msd_init(void);
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
/* PC4 : SD Power */
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
|
|
|
/* SD card power on. */
|
|
GPIO_ResetBits(GPIOC, GPIO_Pin_4);
|
|
rt_thread_delay(2);
|
|
|
|
msd_init("sd0", "spi10");
|
|
}
|
|
#endif /* RT_USING_DFS && RT_USING_SPI_MSD */
|
|
|
|
#endif // RT_USING_SPI
|
|
|
|
#ifdef RT_USING_LWIP
|
|
/* initialize eth interface */
|
|
rt_hw_stm32_eth_init();
|
|
#endif /* RT_USING_LWIP */
|
|
|
|
}
|