mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 08:36:24 +08:00
Fix SPI compilation errors
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2139 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
@@ -79,6 +79,36 @@
|
|||||||
* Private Functions
|
* Private Functions
|
||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
|
|
||||||
|
static void stm32_chipselect(FAR struct spi_dev_s *dev, uint32 pinset, boolean pinval, boolean selected)
|
||||||
|
{
|
||||||
|
spidbg("devid: %d CS: %s pinset: %08x pinval: %s\n",
|
||||||
|
(int)devid, selected ? "assert" : "de-assert", pinset, pinval ? "HIGH" : "LOW");
|
||||||
|
|
||||||
|
/* If we are selecting the chip, then we must call stm32_spitake to assure that we
|
||||||
|
* have mutually exclusive access to the SPI bus while the chip is selected.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (selected)
|
||||||
|
{
|
||||||
|
stm32_spitake(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Then set the CHIP select. Usually the chip select is LOW to select and HIGH, but
|
||||||
|
* that can vary from part to part.
|
||||||
|
*/
|
||||||
|
|
||||||
|
stm32_gpiowrite(pinset, pinval);
|
||||||
|
|
||||||
|
/* If we just de-selected the chip, then we must call stm32_spigive to to relinquish
|
||||||
|
* our exclusive access to the SPI bus. Now, any waiting threads can have the SPI.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!selected)
|
||||||
|
{
|
||||||
|
stm32_spigive(dev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
@@ -93,76 +123,65 @@
|
|||||||
|
|
||||||
void weak_function stm32_spiinitialize(void)
|
void weak_function stm32_spiinitialize(void)
|
||||||
{
|
{
|
||||||
/* NOTE: Clocking for SPI1 and/or SPI2 was already provided in stm32_rcc.c */
|
/* NOTE: Clocking for SPI1 and/or SPI2 was already provided in stm32_rcc.c.
|
||||||
|
* Configurations of SPI pins is performed in stm32_spi.c.
|
||||||
|
* Here, we only initialize chip select pins unique to the board
|
||||||
|
* architecture.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_STM32_SPI1
|
#ifdef CONFIG_STM32_SPI1
|
||||||
/* Select SPI1 pin mapping */
|
|
||||||
|
|
||||||
uint32 mapr = getreg32(STM32_AFIO_MAPR);
|
|
||||||
#ifdef CONFIG_STM32_SPI1_REMAP
|
|
||||||
mapr |= AFIO_MAPR_SPI1_REMAP;
|
|
||||||
#else
|
|
||||||
mapr &= ~AFIO_MAPR_SPI1_REMAP;
|
|
||||||
#endif
|
|
||||||
putreg32(mapr, STM32_AFIO_MAPR);
|
|
||||||
|
|
||||||
/* Configure SPI1 alternate function pins */
|
|
||||||
|
|
||||||
stm32_configgpio(GPIO_SPI1_SCK);
|
|
||||||
stm32_configgpio(GPIO_SPI1_MISO);
|
|
||||||
stm32_configgpio(GPIO_SPI1_MOSI);
|
|
||||||
|
|
||||||
/* Configure the SPI-based microSD and FLASH CS GPIO */
|
/* Configure the SPI-based microSD and FLASH CS GPIO */
|
||||||
|
|
||||||
stm32_configgpio(GPIO_MMCSD_CS);
|
stm32_configgpio(GPIO_MMCSD_CS);
|
||||||
stm32_configgpio(GPIO_FLASH_CS);
|
stm32_configgpio(GPIO_FLASH_CS);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_STM32_SPI2
|
|
||||||
/* Configure SPI1 alternate function pins */
|
|
||||||
|
|
||||||
stm32_configgpio(GPIO_SPI2_SCK);
|
|
||||||
stm32_configgpio(GPIO_SPI2_MISO);
|
|
||||||
stm32_configgpio(GPIO_SPI2_MOSI);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* The external functions, stm32_spi1/2select and stm32_spi1/2status must be
|
* Name: stm32_spi1/2/3select and stm32_spi1/2/3status
|
||||||
* provided by board-specific logic. These are implementations of the
|
*
|
||||||
* select and status methods SPI interface defined by struct spi_ops_s (see
|
* Description:
|
||||||
* include/nuttx/spi.h). All other methods (including up_spiinitialize())
|
* The external functions, stm32_spi1/2/3select and stm32_spi1/2/3status must be
|
||||||
* are provided by common logic. To use this common SPI logic on your board:
|
* provided by board-specific logic. They are implementations of the select
|
||||||
*
|
* and status methods of the SPI interface defined by struct spi_ops_s (see
|
||||||
* 1. Provide stm32_spi1/2select() and stm32_spi1/2status() functions in your
|
* include/nuttx/spi.h). All other methods (including up_spiinitialize())
|
||||||
* board-specific logic. This function will perform chip selection and
|
* are provided by common STM32 logic. To use this common SPI logic on your
|
||||||
* status operations using GPIOs in the way your board is configured.
|
* board:
|
||||||
* 2. Add a call to up_spiinitialize() in your low level initialization
|
*
|
||||||
* logic
|
* 1. Provide logic in stm32_boardinitialize() to configure SPI chip select
|
||||||
* 3. The handle returned by up_spiinitialize() may then be used to bind the
|
* pins.
|
||||||
* SPI driver to higher level logic (e.g., calling
|
* 2. Provide stm32_spi1/2/3select() and stm32_spi1/2/3status() functions in your
|
||||||
* mmcsd_spislotinitialize(), for example, will bind the SPI driver to
|
* board-specific logic. These functions will perform chip selection and
|
||||||
* the SPI MMC/SD driver).
|
* status operations using GPIOs in the way your board is configured.
|
||||||
*
|
* The select() methods must call stm32_spitake() when the chip is selected
|
||||||
|
* and stm32_spigive() when the chip is deselected. This assures mutually
|
||||||
|
* exclusive access to the SPI for the duration while a chip is selected.
|
||||||
|
* 3. Add a calls to up_spiinitialize() in your low level application
|
||||||
|
* initialization logic
|
||||||
|
* 4. The handle returned by up_spiinitialize() may then be used to bind the
|
||||||
|
* SPI driver to higher level logic (e.g., calling
|
||||||
|
* mmcsd_spislotinitialize(), for example, will bind the SPI driver to
|
||||||
|
* the SPI MMC/SD driver).
|
||||||
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_STM32_SPI1
|
#ifdef CONFIG_STM32_SPI1
|
||||||
void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, boolean selected)
|
void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, boolean selected)
|
||||||
{
|
{
|
||||||
spidbg("devid: %d CS: %s\n", (int)devid, selected ? "assert" : "de-assert");
|
spidbg("devid: %d CS: %s\n", (int)devid, selected ? "assert" : "de-assert");
|
||||||
|
uint32 pinset;
|
||||||
|
|
||||||
if (devid == SPIDEV_MMCSD)
|
if (devid == SPIDEV_MMCSD)
|
||||||
{
|
{
|
||||||
/* Set the GPIO low to select and high to de-select */
|
/* Set the GPIO low to select and high to de-select */
|
||||||
|
|
||||||
stm32_gpiowrite(GPIO_MMCSD_CS, !selected);
|
stm32_chipselect(dev, GPIO_MMCSD_CS,!selected, selected);
|
||||||
}
|
}
|
||||||
else if (devid == SPIDEV_FLASH)
|
else if (devid == SPIDEV_FLASH)
|
||||||
{
|
{
|
||||||
/* Set the GPIO low to select and high to de-select */
|
/* Set the GPIO low to select and high to de-select */
|
||||||
|
|
||||||
stm32_gpiowrite(GPIO_FLASH_CS, !selected);
|
stm32_chipselect(dev, GPIO_FLASH_CS,!selected, selected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,4 +203,16 @@ ubyte stm32_spi2status(FAR struct spi_dev_s *dev, enum spi_dev_e devid)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_STM32_SPI3
|
||||||
|
void stm32_spi3select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, boolean selected)
|
||||||
|
{
|
||||||
|
spidbg("devid: %d CS: %s\n", (int)devid, selected ? "assert" : "de-assert");
|
||||||
|
}
|
||||||
|
|
||||||
|
ubyte stm32_spi3status(FAR struct spi_dev_s *dev, enum spi_dev_e devid)
|
||||||
|
{
|
||||||
|
return SPI_STATUS_PRESENT;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* CONFIG_STM32_SPI1 || CONFIG_STM32_SPI2 */
|
#endif /* CONFIG_STM32_SPI1 || CONFIG_STM32_SPI2 */
|
||||||
|
|||||||
Reference in New Issue
Block a user