AT45DBXXX_import.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. // Файл импорта внешних функций
  2. // v 1.0 от 20/07/15
  3. // v 1.1 от 14/10/19
  4. // Автор: Сычев А.
  5. // Драйвер управления AD45DB161E использует интерфейсные функции SSP и системного таймера
  6. // Для нормальной работы требуется, чтобы в системе присутствовали следующие функции:
  7. // * функция обмена по SSP/SPI (двустороннйий обмен)
  8. // * функции управления ChipSelect
  9. // * функции задержки на микросекунды и миллисекунды
  10. // * функция получения отметки времени (системный таймер) в миллисекундах
  11. // * функция отключения/включения питания чипа
  12. // * функции работы с памятью
  13. #ifndef AT45DBXXX_IMPORT_H
  14. #define AT45DBXXX_IMPORT_H
  15. #include "drivers/flash/at45/config/at45db161e_conf.h"
  16. typedef struct
  17. {
  18. #if AT45DBXXX_POWER_MANAGEMENT
  19. void ( *SetPinPowerOn)();
  20. void ( *SetPinPowerOff)();
  21. #endif
  22. #if AT45DBXXX_RESET_MANAGEMENT
  23. void ( *ResetPinAssert)();
  24. void ( *ResetPinRelease)();
  25. #endif
  26. #if AT45DBXXX_HW_WR_PROTECT
  27. void ( *HwWrProtPinAssert)();
  28. void ( *HwWrProtPinRelease)();
  29. #endif
  30. }
  31. ExtMemPins_Handle_AT45_t;
  32. #ifdef AT45DBXXX_HAL_H
  33. // переопределите макросы на ваши функции (имя внутреннего макроса менять не надо)
  34. #include "stm32l1xx_hal.h" // HAL_GetTick()
  35. #include "core/main.h" // HAL_Wait_us()
  36. #include "drivers/spi/spi.h" // SPIHandle
  37. #include <string.h>
  38. // Import SPI handle
  39. #define pSPIHandle (&SPIHandle)
  40. #if AT45DBXXX_POWER_MANAGEMENT || AT45DBXXX_RESET_MANAGEMENT || AT45DBXXX_HW_WR_PROTECT
  41. extern const ExtMemPins_Handle_AT45_t ExtMemPinsHandle_AT45;
  42. // Import External Memory Pins Handle
  43. #define pExtMemPinsHandle (&ExtMemPinsHandle_AT45)
  44. #endif
  45. // внутренний макрос | ваша функция
  46. #define __imp_sys_delayus(_1us) HAL_Wait_us(_1us) // ожидание, в микросекундах
  47. #define __imp_sys_delayms(_1ms) HAL_Delay(_1ms) // ожидание, в миллисекундах
  48. #define __imp_sys_gettimer() HAL_GetTick() // возвращает количество тиков системы с момента старта системы
  49. #define __imp_ssp_cshi() pSPIHandle->SetNSS() // #CS в состояние 1 (HiLogicLevel)
  50. #define __imp_ssp_cslo() pSPIHandle->ClrNSS() // #CS в состояние 0 (LoLogicLevel)
  51. #define __imp_ssp_ro(r,c) pSPIHandle->Receive(r,c) // функция обмена по SSP / SPI
  52. #define __imp_ssp_wo(w,c) pSPIHandle->Transmit(w,c) // функция обмена по SSP / SPI
  53. // ------------------------------------------------------------------------------------
  54. // __imp_ssp_io - функция двунаправленного обмена - не требуется, если есть __imp_ssp_ro и __imp_ssp_wo
  55. //#define __imp_ssp_io(w,r,c) pSPIHandle->TransmitReceive(w,r,c) // функция обмена по SSP / SPI
  56. // ------------------------------------------------------------------------------------
  57. // __imp_ssp_io_rev - функция передачи данных по SPI в обратном порядке байт.
  58. // Создается для ускорения процесса обмена. Если такая функция отсутсвует в вашей системе,
  59. // не объявляйте макрос __imp_ssp_io_rev. При этом драйвер будет сам инвертировать порядок
  60. // байт в ущерб производительности.
  61. /*
  62. #define __imp_ssp_io_rev(w,r,c) ssp_ior(w,r,c) // функция обмена по SSP / SPI в обратном порядке байт
  63. */
  64. #if AT45DBXXX_POWER_MANAGEMENT
  65. // Опция AT45DBXXX_POWER_MANAGEMENT
  66. #define __imp_flash_poweron() pExtMemPinsHandle->SetPinPowerOn()
  67. #define __imp_flash_poweroff() pExtMemPinsHandle->SetPinPowerOff()
  68. #endif
  69. #if AT45DBXXX_RESET_MANAGEMENT
  70. // Опция AT45DBXXX_RESET_MANAGEMENT
  71. #define __imp_flash_reset_assert() pExtMemPinsHandle->ResetPinAssert()
  72. #define __imp_flash_reset_release() pExtMemPinsHandle->ResetPinRelease()
  73. #endif
  74. #if AT45DBXXX_HW_WR_PROTECT
  75. // Опция AT45DBXXX_HW_WR_PROTECT
  76. #define __imp_flash_hwwrprotect_assert() pExtMemPinsHandle->HwWrProtPinAssert()
  77. #define __imp_flash_hwwrprotect_release() pExtMemPinsHandle->HwWrProtPinRelease()
  78. #endif
  79. // ------------------------------------------------------------------------------------
  80. // __imp_flash_powercycle - перезапуск чипа по питанию.
  81. // нужна если требуется аппаратное конфигурирование чипа на размер 512 байт (одноразовое перепрограммирование)
  82. // Эта функция требуется ТОЛЬКО ЕСЛИ:
  83. // * 1) запрещено управление питанием (AT45DBXXX_POWER_MANAGEMENT = 0); и
  84. // * 2) запрещены сервисные байты (включен AT45DB161E_PRM512); и
  85. // * 2) отключен режим эмуляции страниц 512 байт (отключен AT45DB161E_EMU512).
  86. // Если все эти условия выполняются, требуется такую функцию объявить и импортировать.
  87. // В остальных случаях она не требуется.
  88. // #define __imp_flash_powercycle() sys_flash_AT45DBXXX_pwrcycle( ) // отключение питания чипа
  89. // // Note: при остутствии возможности отключить питание чипа используйте
  90. // // данный вызов как callback-событие для того, чтобы пользователь сделал это.
  91. // ------------------------------------------------------------------------------------
  92. #define __imp_sys_memset(p,b,c) memset(p,b,c) // порт функции memset()
  93. #define __imp_sys_memzero(p,c) memset(p,0,c) // порт функции memset()
  94. #define __imp_sys_memcpy(d,s,c) memcpy(d,s,c) // порт функции memcpy()
  95. #define __imp_sys_memmove(d,s,c) memmove(d,s,c) // порт функции memmove()
  96. // ------------------------------------------------------------------------------------
  97. #define __imp_utl_mutex_lock() // блокировка доступа к устройству ч/з мютекс
  98. #define __imp_utl_mutex_unlock() // разблокировка доступа к устройству ч/з мютекс
  99. // Добавьте прототипы функций:
  100. /* функция системы */
  101. // void sys_delayus( unsigned int _1us );
  102. // void sys_delayms( unsigned int _1ms );
  103. // unsigned int sys_gettimer( void );
  104. /* функции работы с памятью */
  105. // void sys_memset(void*,int,unsigned int);
  106. // void sys_memcpy(void*,const void*,unsigned int);
  107. // void sys_memmove(void*,const void*,unsigned int);
  108. /* функции обмена по SSP */
  109. // void ssp_cshi();
  110. // void ssp_cslo();
  111. // void ssp_io(
  112. // __FLASH_BYTE* , // -- буфер на запись (может быть 0)
  113. // __FLASH_BYTE* , // -- буфер на чтение (может быть 0)
  114. // __FLASH_DWORD ) ; // -- количество байт
  115. //
  116. // void ssp_ior(
  117. // __FLASH_BYTE* , // -- буфер на запись (может быть 0)
  118. // __FLASH_BYTE* , // -- буфер на чтение (может быть 0)
  119. // __FLASH_DWORD ) ; // -- количество байт
  120. //
  121. #endif
  122. #endif