// Файл импорта внешних функций // v 1.0 от 07/10/20 // Автор: Сычев А. // Драйвер управления W25Q16JV использует интерфейсные функции SSP и системного таймера // Для нормальной работы требуется, чтобы в системе присутствовали следующие функции: // * функция обмена по SSP/SPI (двустороннйий обмен) // * функции управления ChipSelect // * функции задержки на микросекунды и миллисекунды // * функция получения отметки времени (системный таймер) в миллисекундах // * функция отключения/включения питания чипа // * функции работы с памятью #ifndef W25QXXX_IMPORT_H #define W25QXXX_IMPORT_H #include "drivers/flash/w25q/config/W25Q16JV_conf.h" typedef struct { #if W25QXXX_POWER_MANAGEMENT void ( *SetPinPowerOn)(); void ( *SetPinPowerOff)(); #endif #if W25QXXX_RESET_MANAGEMENT void ( *ResetPinAssert)(); void ( *ResetPinRelease)(); #endif #if W25QXXX_HW_WR_PROTECT void ( *HwWrProtPinAssert)(); void ( *HwWrProtPinRelease)(); #endif } ExtMemPins_Handle_W25Q_t; #ifdef W25QXXX_HAL_H // переопределите макросы на ваши функции (имя внутреннего макроса менять не надо) #include "stm32l1xx_hal.h" // HAL_GetTick() #include "core/main.h" // HAL_Wait_us() #include "drivers/spi/spi.h" // SPIHandle #include // Import SPI handle #define pSPIHandle (&SPIHandle) #if W25QXXX_POWER_MANAGEMENT || W25QXXX_RESET_MANAGEMENT || W25QXXX_HW_WR_PROTECT extern const ExtMemPins_Handle_W25Q_t ExtMemPinsHandle_W25Q; // Import External Memory Pins Handle #define pExtMemPinsHandle (&ExtMemPinsHandle_W25Q) #endif // внутренний макрос | ваша функция #define __imp_sys_delayus(_1us) HAL_Wait_us(_1us) // ожидание, в микросекундах #define __imp_sys_delayms(_1ms) HAL_Delay(_1ms) // ожидание, в миллисекундах #define __imp_sys_gettimer() HAL_GetTick() // возвращает количество тиков системы с момента старта системы #define __imp_ssp_cshi() pSPIHandle->SetNSS() // #CS в состояние 1 (HiLogicLevel) #define __imp_ssp_cslo() pSPIHandle->ClrNSS() // #CS в состояние 0 (LoLogicLevel) #define __imp_ssp_ro(r,c) pSPIHandle->Receive(r,c) // функция обмена по SSP / SPI #define __imp_ssp_wo(w,c) pSPIHandle->Transmit(w,c) // функция обмена по SSP / SPI // ------------------------------------------------------------------------------------ // __imp_ssp_io - функция двунаправленного обмена - не требуется, если есть __imp_ssp_ro и __imp_ssp_wo //#define __imp_ssp_io(w,r,c) pSPIHandle->TransmitReceive(w,r,c) // функция обмена по SSP / SPI // ------------------------------------------------------------------------------------ // __imp_ssp_io_rev - функция передачи данных по SPI в обратном порядке байт. // Создается для ускорения процесса обмена. Если такая функция отсутсвует в вашей системе, // не объявляйте макрос __imp_ssp_io_rev. При этом драйвер будет сам инвертировать порядок // байт в ущерб производительности. /* #define __imp_ssp_io_rev(w,r,c) ssp_ior(w,r,c) // функция обмена по SSP / SPI в обратном порядке байт */ #if W25QXXX_POWER_MANAGEMENT // Опция W25QXXX_POWER_MANAGEMENT #define __imp_flash_poweron() pExtMemPinsHandle->SetPinPowerOn() #define __imp_flash_poweroff() pExtMemPinsHandle->SetPinPowerOff() #endif #if W25QXXX_RESET_MANAGEMENT // Опция W25QXXX_RESET_MANAGEMENT #define __imp_flash_reset_assert() pExtMemPinsHandle->ResetPinAssert() #define __imp_flash_reset_release() pExtMemPinsHandle->ResetPinRelease() #endif #if W25QXXX_HW_WR_PROTECT // Опция W25QXXX_HW_WR_PROTECT #define __imp_flash_hwwrprotect_assert() pExtMemPinsHandle->HwWrProtPinAssert() #define __imp_flash_hwwrprotect_release() pExtMemPinsHandle->HwWrProtPinRelease() #endif // ------------------------------------------------------------------------------------ // __imp_flash_powercycle - перезапуск чипа по питанию. // нужна для отключения блокировки регистра статуса "Status Register Lock" // Эта функция требуется ТОЛЬКО ЕСЛИ: // * 1) запрещено управление питанием (W25QXXX_POWER_MANAGEMENT = 0); и // * 2) требуется поддержка разблокировки регистра статуса // Если все эти условия выполняются, требуется такую функцию объявить и импортировать. // В остальных случаях она не требуется. // #define __imp_flash_powercycle() sys_flash_W25QXXX_pwrcycle() // отключение питания чипа // // Note: при остутствии возможности отключить питание чипа используйте // // данный вызов как callback-событие для того, чтобы пользователь сделал это. // ------------------------------------------------------------------------------------ #define __imp_sys_memset(p,b,c) memset(p,b,c) // порт функции memset() #define __imp_sys_memzero(p,c) memset(p,0,c) // порт функции memset() #define __imp_sys_memcmp(p1,p2,c) memcmp(p1,p2,c) // порт функции memcmp() #define __imp_sys_memcpy(d,s,c) memcpy(d,s,c) // порт функции memcpy() #define __imp_sys_memmove(d,s,c) memmove(d,s,c) // порт функции memmove() // ------------------------------------------------------------------------------------ #define __imp_utl_mutex_lock() // блокировка доступа к устройству ч/з мютекс #define __imp_utl_mutex_unlock() // разблокировка доступа к устройству ч/з мютекс #endif #endif