SPI Device API (#304)

* spi device config
* fix api_interrupt_call warning
* added configs for spi2 bus devices
* simplified spi bus api
* use new spi device api
This commit is contained in:
DrZlo13
2021-01-13 03:33:36 +10:00
committed by GitHub
parent 6a5e3e83b4
commit 9ed8bebba1
10 changed files with 172 additions and 24 deletions

View File

@@ -291,11 +291,9 @@ static uint8_t SD_ReadData(void);
* - MSD_OK: Sequence succeed
*/
uint8_t BSP_SD_Init(void) {
// TODO: SPI manager
api_hal_spi_lock(&SPI_SD_HANDLE);
/* Init to maximum slow speed */
SD_SPI_Reconfigure_Slow();
// TODO: SPI manager
api_hal_spi_lock_device(&sd_slow_spi);
/* Configure IO functionalities for SD pin */
SD_IO_Init();
@@ -304,11 +302,8 @@ uint8_t BSP_SD_Init(void) {
SdStatus = SD_PRESENT;
uint8_t res = SD_GoIdleState();
/* Init to maximum fastest speed */
SD_SPI_Reconfigure_Fast();
// TODO: SPI manager
api_hal_spi_unlock(&SPI_SD_HANDLE);
api_hal_spi_unlock_device(&sd_slow_spi);
/* SD initialized and set to SPI mode properly */
return res;

View File

@@ -87,12 +87,12 @@ Diskio_drvTypeDef USER_Driver = {
DSTATUS USER_initialize(BYTE pdrv) {
/* USER CODE BEGIN INIT */
// TODO: SPI manager
api_hal_spi_lock(&SPI_SD_HANDLE);
api_hal_spi_lock_device(&sd_fast_spi);
DSTATUS status = User_CheckStatus(pdrv);
// TODO: SPI manager
api_hal_spi_unlock(&SPI_SD_HANDLE);
api_hal_spi_unlock_device(&sd_fast_spi);
return status;
/* USER CODE END INIT */
@@ -122,7 +122,7 @@ DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) {
DRESULT res = RES_ERROR;
// TODO: SPI manager
api_hal_spi_lock(&SPI_SD_HANDLE);
api_hal_spi_lock_device(&sd_fast_spi);
if(BSP_SD_ReadBlocks((uint32_t*)buff, (uint32_t)(sector), count, SD_DATATIMEOUT) == MSD_OK) {
/* wait until the read operation is finished */
@@ -132,7 +132,7 @@ DRESULT USER_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) {
}
// TODO: SPI manager
api_hal_spi_unlock(&SPI_SD_HANDLE);
api_hal_spi_unlock_device(&sd_fast_spi);
return res;
/* USER CODE END READ */
@@ -153,7 +153,7 @@ DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) {
DRESULT res = RES_ERROR;
// TODO: SPI manager
api_hal_spi_lock(&SPI_SD_HANDLE);
api_hal_spi_lock_device(&sd_fast_spi);
if(BSP_SD_WriteBlocks((uint32_t*)buff, (uint32_t)(sector), count, SD_DATATIMEOUT) == MSD_OK) {
/* wait until the Write operation is finished */
@@ -163,7 +163,7 @@ DRESULT USER_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) {
}
// TODO: SPI manager
api_hal_spi_unlock(&SPI_SD_HANDLE);
api_hal_spi_unlock_device(&sd_fast_spi);
return res;
/* USER CODE END WRITE */
@@ -186,7 +186,7 @@ DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff) {
if(Stat & STA_NOINIT) return RES_NOTRDY;
// TODO: SPI manager
api_hal_spi_lock(&SPI_SD_HANDLE);
api_hal_spi_lock_device(&sd_fast_spi);
switch(cmd) {
/* Make sure that no pending write process */
@@ -220,7 +220,7 @@ DRESULT USER_ioctl(BYTE pdrv, BYTE cmd, void* buff) {
}
// TODO: SPI manager
api_hal_spi_unlock(&SPI_SD_HANDLE);
api_hal_spi_unlock_device(&sd_fast_spi);
return res;
/* USER CODE END IOCTL */

View File

@@ -290,7 +290,7 @@ void SD_SPI_Reconfigure_Fast(void) {
SPI_SD_HANDLE.Init.CLKPolarity = SPI_POLARITY_LOW;
SPI_SD_HANDLE.Init.CLKPhase = SPI_PHASE_1EDGE;
SPI_SD_HANDLE.Init.NSS = SPI_NSS_SOFT;
SPI_SD_HANDLE.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
SPI_SD_HANDLE.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
SPI_SD_HANDLE.Init.FirstBit = SPI_FIRSTBIT_MSB;
SPI_SD_HANDLE.Init.TIMode = SPI_TIMODE_DISABLE;
SPI_SD_HANDLE.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;