STM32F4xx HAL Documentation
Hardware Abstraction Layer for STM32F4 familiy
Loading...
Searching...
No Matches
stm32f4xx_hal_pccard.c
Go to the documentation of this file.
1
101/* Includes ------------------------------------------------------------------*/
102#include "stm32f4xx_hal.h"
103
104#if defined(FMC_Bank4) || defined(FSMC_Bank4)
105
110#ifdef HAL_PCCARD_MODULE_ENABLED
111
116/* Private typedef -----------------------------------------------------------*/
117/* Private define ------------------------------------------------------------*/
118
122#define PCCARD_TIMEOUT_READ_ID 0x0000FFFFU
123#define PCCARD_TIMEOUT_READ_WRITE_SECTOR 0x0000FFFFU
124#define PCCARD_TIMEOUT_ERASE_SECTOR 0x00000400U
125#define PCCARD_TIMEOUT_STATUS 0x01000000U
126
127#define PCCARD_STATUS_OK (uint8_t)0x58
128#define PCCARD_STATUS_WRITE_OK (uint8_t)0x50
133/* Private macro -------------------------------------------------------------*/
134/* Private variables ---------------------------------------------------------*/
135/* Private function ----------------------------------------------------------*/
136/* Exported functions --------------------------------------------------------*/
165HAL_StatusTypeDef HAL_PCCARD_Init(PCCARD_HandleTypeDef *hpccard, FMC_NAND_PCC_TimingTypeDef *ComSpaceTiming,
166 FMC_NAND_PCC_TimingTypeDef *AttSpaceTiming, FMC_NAND_PCC_TimingTypeDef *IOSpaceTiming)
167{
168 /* Check the PCCARD controller state */
169 if (hpccard == NULL)
170 {
171 return HAL_ERROR;
172 }
173
174 if (hpccard->State == HAL_PCCARD_STATE_RESET)
175 {
176 /* Allocate lock resource and initialize it */
177 hpccard->Lock = HAL_UNLOCKED;
178#if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
179 if (hpccard->MspInitCallback == NULL)
180 {
181 hpccard->MspInitCallback = HAL_PCCARD_MspInit;
182 }
183 hpccard->ItCallback = HAL_PCCARD_ITCallback;
184
185 /* Init the low level hardware */
186 hpccard->MspInitCallback(hpccard);
187#else
188 /* Initialize the low level hardware (MSP) */
189 HAL_PCCARD_MspInit(hpccard);
190#endif
191 }
192
193 /* Initialize the PCCARD state */
194 hpccard->State = HAL_PCCARD_STATE_BUSY;
195
196 /* Initialize PCCARD control Interface */
197 FMC_PCCARD_Init(hpccard->Instance, &(hpccard->Init));
198
199 /* Init PCCARD common space timing Interface */
200 FMC_PCCARD_CommonSpace_Timing_Init(hpccard->Instance, ComSpaceTiming);
201
202 /* Init PCCARD attribute space timing Interface */
203 FMC_PCCARD_AttributeSpace_Timing_Init(hpccard->Instance, AttSpaceTiming);
204
205 /* Init PCCARD IO space timing Interface */
206 FMC_PCCARD_IOSpace_Timing_Init(hpccard->Instance, IOSpaceTiming);
207
208 /* Enable the PCCARD device */
209 __FMC_PCCARD_ENABLE(hpccard->Instance);
210
211 /* Update the PCCARD state */
212 hpccard->State = HAL_PCCARD_STATE_READY;
213
214 return HAL_OK;
215
216}
217
224HAL_StatusTypeDef HAL_PCCARD_DeInit(PCCARD_HandleTypeDef *hpccard)
225{
226#if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
227 if (hpccard->MspDeInitCallback == NULL)
228 {
229 hpccard->MspDeInitCallback = HAL_PCCARD_MspDeInit;
230 }
231
232 /* DeInit the low level hardware */
233 hpccard->MspDeInitCallback(hpccard);
234#else
235 /* De-Initialize the low level hardware (MSP) */
236 HAL_PCCARD_MspDeInit(hpccard);
237#endif
238
239 /* Configure the PCCARD registers with their reset values */
240 FMC_PCCARD_DeInit(hpccard->Instance);
241
242 /* Update the PCCARD controller state */
243 hpccard->State = HAL_PCCARD_STATE_RESET;
244
245 /* Release Lock */
246 __HAL_UNLOCK(hpccard);
247
248 return HAL_OK;
249}
250
257__weak void HAL_PCCARD_MspInit(PCCARD_HandleTypeDef *hpccard)
258{
259 /* Prevent unused argument(s) compilation warning */
260 UNUSED(hpccard);
261 /* NOTE : This function Should not be modified, when the callback is needed,
262 the HAL_PCCARD_MspInit could be implemented in the user file
263 */
264}
265
272__weak void HAL_PCCARD_MspDeInit(PCCARD_HandleTypeDef *hpccard)
273{
274 /* Prevent unused argument(s) compilation warning */
275 UNUSED(hpccard);
276 /* NOTE : This function Should not be modified, when the callback is needed,
277 the HAL_PCCARD_MspDeInit could be implemented in the user file
278 */
279}
280
308HAL_StatusTypeDef HAL_PCCARD_Read_ID(PCCARD_HandleTypeDef *hpccard, uint8_t CompactFlash_ID[], uint8_t *pStatus)
309{
310 uint32_t timeout = PCCARD_TIMEOUT_READ_ID, index = 0U;
311 uint8_t status = 0;
312
313 /* Process Locked */
314 __HAL_LOCK(hpccard);
315
316 /* Check the PCCARD controller state */
317 if (hpccard->State == HAL_PCCARD_STATE_BUSY)
318 {
319 return HAL_BUSY;
320 }
321
322 /* Update the PCCARD controller state */
323 hpccard->State = HAL_PCCARD_STATE_BUSY;
324
325 /* Initialize the PCCARD status */
326 *pStatus = PCCARD_READY;
327
328 /* Send the Identify Command */
329 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = (uint16_t)0xECEC;
330
331 /* Read PCCARD IDs and timeout treatment */
332 do
333 {
334 /* Read the PCCARD status */
335 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
336
337 timeout--;
338 } while ((status != PCCARD_STATUS_OK) && timeout);
339
340 if (timeout == 0U)
341 {
342 *pStatus = PCCARD_TIMEOUT_ERROR;
343 }
344 else
345 {
346 /* Read PCCARD ID bytes */
347 for (index = 0U; index < 16U; index++)
348 {
349 CompactFlash_ID[index] = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_DATA);
350 }
351 }
352
353 /* Update the PCCARD controller state */
354 hpccard->State = HAL_PCCARD_STATE_READY;
355
356 /* Process unlocked */
357 __HAL_UNLOCK(hpccard);
358
359 return HAL_OK;
360}
361
371HAL_StatusTypeDef HAL_PCCARD_Read_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress,
372 uint8_t *pStatus)
373{
374 uint32_t timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR, index = 0U;
375 uint8_t status = 0;
376
377 /* Process Locked */
378 __HAL_LOCK(hpccard);
379
380 /* Check the PCCARD controller state */
381 if (hpccard->State == HAL_PCCARD_STATE_BUSY)
382 {
383 return HAL_BUSY;
384 }
385
386 /* Update the PCCARD controller state */
387 hpccard->State = HAL_PCCARD_STATE_BUSY;
388
389 /* Initialize PCCARD status */
390 *pStatus = PCCARD_READY;
391
392 /* Set the parameters to write a sector */
393 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = (uint16_t)0x0000;
394 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = ((uint16_t)0x0100) | ((uint16_t)SectorAddress);
395 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = (uint16_t)0xE4A0;
396
397 do
398 {
399 /* wait till the Status = 0x80 */
400 status = *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
401 timeout--;
402 } while ((status == 0x80U) && timeout);
403
404 if (timeout == 0U)
405 {
406 *pStatus = PCCARD_TIMEOUT_ERROR;
407 }
408
409 timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR;
410
411 do
412 {
413 /* wait till the Status = PCCARD_STATUS_OK */
414 status = *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
415 timeout--;
416 } while ((status != PCCARD_STATUS_OK) && timeout);
417
418 if (timeout == 0U)
419 {
420 *pStatus = PCCARD_TIMEOUT_ERROR;
421 }
422
423 /* Read bytes */
424 for (; index < PCCARD_SECTOR_SIZE; index++)
425 {
426 *(uint16_t *)pBuffer++ = *(uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR);
427 }
428
429 /* Update the PCCARD controller state */
430 hpccard->State = HAL_PCCARD_STATE_READY;
431
432 /* Process unlocked */
433 __HAL_UNLOCK(hpccard);
434
435 return HAL_OK;
436}
437
438
448HAL_StatusTypeDef HAL_PCCARD_Write_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress,
449 uint8_t *pStatus)
450{
451 uint32_t timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR, index = 0U;
452 uint8_t status = 0;
453
454 /* Process Locked */
455 __HAL_LOCK(hpccard);
456
457 /* Check the PCCARD controller state */
458 if (hpccard->State == HAL_PCCARD_STATE_BUSY)
459 {
460 return HAL_BUSY;
461 }
462
463 /* Update the PCCARD controller state */
464 hpccard->State = HAL_PCCARD_STATE_BUSY;
465
466 /* Initialize PCCARD status */
467 *pStatus = PCCARD_READY;
468
469 /* Set the parameters to write a sector */
470 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = (uint16_t)0x0000;
471 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = ((uint16_t)0x0100) | ((uint16_t)SectorAddress);
472 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = (uint16_t)0x30A0;
473
474 do
475 {
476 /* Wait till the Status = PCCARD_STATUS_OK */
477 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
478 timeout--;
479 } while ((status != PCCARD_STATUS_OK) && timeout);
480
481 if (timeout == 0U)
482 {
483 *pStatus = PCCARD_TIMEOUT_ERROR;
484 }
485
486 /* Write bytes */
487 for (; index < PCCARD_SECTOR_SIZE; index++)
488 {
489 *(uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR) = *(uint16_t *)pBuffer++;
490 }
491
492 do
493 {
494 /* Wait till the Status = PCCARD_STATUS_WRITE_OK */
495 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
496 timeout--;
497 } while ((status != PCCARD_STATUS_WRITE_OK) && timeout);
498
499 if (timeout == 0U)
500 {
501 *pStatus = PCCARD_TIMEOUT_ERROR;
502 }
503
504 /* Update the PCCARD controller state */
505 hpccard->State = HAL_PCCARD_STATE_READY;
506
507 /* Process unlocked */
508 __HAL_UNLOCK(hpccard);
509
510 return HAL_OK;
511}
512
513
522HAL_StatusTypeDef HAL_PCCARD_Erase_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t SectorAddress, uint8_t *pStatus)
523{
524 uint32_t timeout = PCCARD_TIMEOUT_ERASE_SECTOR;
525 uint8_t status = 0;
526
527 /* Process Locked */
528 __HAL_LOCK(hpccard);
529
530 /* Check the PCCARD controller state */
531 if (hpccard->State == HAL_PCCARD_STATE_BUSY)
532 {
533 return HAL_BUSY;
534 }
535
536 /* Update the PCCARD controller state */
537 hpccard->State = HAL_PCCARD_STATE_BUSY;
538
539 /* Initialize PCCARD status */
540 *pStatus = PCCARD_READY;
541
542 /* Set the parameters to write a sector */
543 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_LOW) = 0x00;
544 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = 0x00;
545 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_NUMBER) = SectorAddress;
546 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = 0x01;
547 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CARD_HEAD) = 0xA0;
548 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = ATA_ERASE_SECTOR_CMD;
549
550 /* wait till the PCCARD is ready */
551 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
552
553 while ((status != PCCARD_STATUS_WRITE_OK) && timeout)
554 {
555 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
556 timeout--;
557 }
558
559 if (timeout == 0U)
560 {
561 *pStatus = PCCARD_TIMEOUT_ERROR;
562 }
563
564 /* Check the PCCARD controller state */
565 hpccard->State = HAL_PCCARD_STATE_READY;
566
567 /* Process unlocked */
568 __HAL_UNLOCK(hpccard);
569
570 return HAL_OK;
571}
572
579HAL_StatusTypeDef HAL_PCCARD_Reset(PCCARD_HandleTypeDef *hpccard)
580{
581 /* Process Locked */
582 __HAL_LOCK(hpccard);
583
584 /* Check the PCCARD controller state */
585 if (hpccard->State == HAL_PCCARD_STATE_BUSY)
586 {
587 return HAL_BUSY;
588 }
589
590 /* Provide a SW reset and Read and verify the:
591 - PCCard Configuration Option Register at address 0x98000200 --> 0x80
592 - Card Configuration and Status Register at address 0x98000202 --> 0x00
593 - Pin Replacement Register at address 0x98000204 --> 0x0C
594 - Socket and Copy Register at address 0x98000206 --> 0x00
595 */
596
597 /* Check the PCCARD controller state */
598 hpccard->State = HAL_PCCARD_STATE_BUSY;
599
600 *(__IO uint8_t *)(PCCARD_ATTRIBUTE_SPACE_ADDRESS | ATA_CARD_CONFIGURATION) = 0x01;
601
602 /* Check the PCCARD controller state */
603 hpccard->State = HAL_PCCARD_STATE_READY;
604
605 /* Process unlocked */
606 __HAL_UNLOCK(hpccard);
607
608 return HAL_OK;
609}
610
617void HAL_PCCARD_IRQHandler(PCCARD_HandleTypeDef *hpccard)
618{
619 /* Check PCCARD interrupt Rising edge flag */
620 if (__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_RISING_EDGE))
621 {
622 /* PCCARD interrupt callback*/
623#if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
624 hpccard->ItCallback(hpccard);
625#else
626 HAL_PCCARD_ITCallback(hpccard);
627#endif
628
629 /* Clear PCCARD interrupt Rising edge pending bit */
630 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_RISING_EDGE);
631 }
632
633 /* Check PCCARD interrupt Level flag */
634 if (__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_LEVEL))
635 {
636 /* PCCARD interrupt callback*/
637#if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
638 hpccard->ItCallback(hpccard);
639#else
640 HAL_PCCARD_ITCallback(hpccard);
641#endif
642
643 /* Clear PCCARD interrupt Level pending bit */
644 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_LEVEL);
645 }
646
647 /* Check PCCARD interrupt Falling edge flag */
648 if (__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_FALLING_EDGE))
649 {
650 /* PCCARD interrupt callback*/
651#if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
652 hpccard->ItCallback(hpccard);
653#else
654 HAL_PCCARD_ITCallback(hpccard);
655#endif
656
657 /* Clear PCCARD interrupt Falling edge pending bit */
658 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_FALLING_EDGE);
659 }
660
661 /* Check PCCARD interrupt FIFO empty flag */
662 if (__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_FEMPT))
663 {
664 /* PCCARD interrupt callback*/
665#if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
666 hpccard->ItCallback(hpccard);
667#else
668 HAL_PCCARD_ITCallback(hpccard);
669#endif
670
671 /* Clear PCCARD interrupt FIFO empty pending bit */
672 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_FEMPT);
673 }
674}
675
682__weak void HAL_PCCARD_ITCallback(PCCARD_HandleTypeDef *hpccard)
683{
684 /* Prevent unused argument(s) compilation warning */
685 UNUSED(hpccard);
686 /* NOTE : This function Should not be modified, when the callback is needed,
687 the HAL_PCCARD_ITCallback could be implemented in the user file
688 */
689}
690
691#if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
704HAL_StatusTypeDef HAL_PCCARD_RegisterCallback(PCCARD_HandleTypeDef *hpccard, HAL_PCCARD_CallbackIDTypeDef CallbackId,
705 pPCCARD_CallbackTypeDef pCallback)
706{
707 HAL_StatusTypeDef status = HAL_OK;
708
709 if (pCallback == NULL)
710 {
711 return HAL_ERROR;
712 }
713
714 /* Process locked */
715 __HAL_LOCK(hpccard);
716
717 if (hpccard->State == HAL_PCCARD_STATE_READY)
718 {
719 switch (CallbackId)
720 {
721 case HAL_PCCARD_MSP_INIT_CB_ID :
722 hpccard->MspInitCallback = pCallback;
723 break;
724 case HAL_PCCARD_MSP_DEINIT_CB_ID :
725 hpccard->MspDeInitCallback = pCallback;
726 break;
727 case HAL_PCCARD_IT_CB_ID :
728 hpccard->ItCallback = pCallback;
729 break;
730 default :
731 /* update return status */
732 status = HAL_ERROR;
733 break;
734 }
735 }
736 else if (hpccard->State == HAL_PCCARD_STATE_RESET)
737 {
738 switch (CallbackId)
739 {
740 case HAL_PCCARD_MSP_INIT_CB_ID :
741 hpccard->MspInitCallback = pCallback;
742 break;
743 case HAL_PCCARD_MSP_DEINIT_CB_ID :
744 hpccard->MspDeInitCallback = pCallback;
745 break;
746 default :
747 /* update return status */
748 status = HAL_ERROR;
749 break;
750 }
751 }
752 else
753 {
754 /* update return status */
755 status = HAL_ERROR;
756 }
757
758 /* Release Lock */
759 __HAL_UNLOCK(hpccard);
760 return status;
761}
762
774HAL_StatusTypeDef HAL_PCCARD_UnRegisterCallback(PCCARD_HandleTypeDef *hpccard, HAL_PCCARD_CallbackIDTypeDef CallbackId)
775{
776 HAL_StatusTypeDef status = HAL_OK;
777
778 /* Process locked */
779 __HAL_LOCK(hpccard);
780
781 if (hpccard->State == HAL_PCCARD_STATE_READY)
782 {
783 switch (CallbackId)
784 {
785 case HAL_PCCARD_MSP_INIT_CB_ID :
786 hpccard->MspInitCallback = HAL_PCCARD_MspInit;
787 break;
788 case HAL_PCCARD_MSP_DEINIT_CB_ID :
789 hpccard->MspDeInitCallback = HAL_PCCARD_MspDeInit;
790 break;
791 case HAL_PCCARD_IT_CB_ID :
792 hpccard->ItCallback = HAL_PCCARD_ITCallback;
793 break;
794 default :
795 /* update return status */
796 status = HAL_ERROR;
797 break;
798 }
799 }
800 else if (hpccard->State == HAL_PCCARD_STATE_RESET)
801 {
802 switch (CallbackId)
803 {
804 case HAL_PCCARD_MSP_INIT_CB_ID :
805 hpccard->MspInitCallback = HAL_PCCARD_MspInit;
806 break;
807 case HAL_PCCARD_MSP_DEINIT_CB_ID :
808 hpccard->MspDeInitCallback = HAL_PCCARD_MspDeInit;
809 break;
810 default :
811 /* update return status */
812 status = HAL_ERROR;
813 break;
814 }
815 }
816 else
817 {
818 /* update return status */
819 status = HAL_ERROR;
820 }
821
822 /* Release Lock */
823 __HAL_UNLOCK(hpccard);
824 return status;
825}
826#endif
827
853HAL_PCCARD_StateTypeDef HAL_PCCARD_GetState(PCCARD_HandleTypeDef *hpccard)
854{
855 return hpccard->State;
856}
857
867HAL_PCCARD_StatusTypeDef HAL_PCCARD_GetStatus(PCCARD_HandleTypeDef *hpccard)
868{
869 uint32_t timeout = PCCARD_TIMEOUT_STATUS, status_pccard = 0U;
870
871 /* Check the PCCARD controller state */
872 if (hpccard->State == HAL_PCCARD_STATE_BUSY)
873 {
874 return HAL_PCCARD_STATUS_ONGOING;
875 }
876
877 status_pccard = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
878
879 while ((status_pccard == PCCARD_BUSY) && timeout)
880 {
881 status_pccard = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
882 timeout--;
883 }
884
885 if (timeout == 0U)
886 {
887 status_pccard = PCCARD_TIMEOUT_ERROR;
888 }
889
890 /* Return the operation status */
891 return (HAL_PCCARD_StatusTypeDef) status_pccard;
892}
893
903HAL_PCCARD_StatusTypeDef HAL_PCCARD_ReadStatus(PCCARD_HandleTypeDef *hpccard)
904{
905 uint8_t data = 0U, status_pccard = PCCARD_BUSY;
906
907 /* Check the PCCARD controller state */
908 if (hpccard->State == HAL_PCCARD_STATE_BUSY)
909 {
910 return HAL_PCCARD_STATUS_ONGOING;
911 }
912
913 /* Read status operation */
914 data = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
915
916 if ((data & PCCARD_TIMEOUT_ERROR) == PCCARD_TIMEOUT_ERROR)
917 {
918 status_pccard = PCCARD_TIMEOUT_ERROR;
919 }
920 else if ((data & PCCARD_READY) == PCCARD_READY)
921 {
922 status_pccard = PCCARD_READY;
923 }
924
925 return (HAL_PCCARD_StatusTypeDef) status_pccard;
926}
927
940#endif /* HAL_PCCARD_MODULE_ENABLED */
941
946#endif /* FMC_Bank4 || FSMC_Bank4 */
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef
HAL Status structures definition
@ HAL_ERROR
@ HAL_OK
@ HAL_BUSY
#define UNUSED(X)
#define __HAL_UNLOCK(__HANDLE__)
@ HAL_UNLOCKED
#define __HAL_LOCK(__HANDLE__)