/**
******************************************************************************
* @file memspi_config.h
* @brief Конфигурационные параметры для общения с FLASH/EEPROM по SPI
******************************************************************************
@addtogroup MEMSPI_CONFIGS Memory SPI configs
@ingroup    MEMSPI
@brief Конфигурация библиотеки
@{
******************************************************************************
* @details
Файл содержит настройки для работы Memory SPI:
Размеры страниц и секторов внешней памяти
Включение двойного статус регистра (если соответствующая микросхема)
- Низкоуровневые функции для приема/передачи по SPI и выбора чипа ChipSelect
******************************************************************************/
#ifndef __SPI_MEMORY_CONFIG_H_
#define __SPI_MEMORY_CONFIG_H_
#include "stm32f1xx_hal.h"

/////////////////////////---USER SETTINGS---/////////////////////////

//#define MEMSPI_SEPARATED_STATUS_REGISTER ///< Использовать двойной статус регистр

#define     MEMSPI_SECTOR_SIZE          (0x1000)  ///< Размер одного сектора памяти (4096 байт)
#define     MEMSPI_PAGE_SIZE            (0x100)   ///< Размер одной страницы памяти (256 байт)


/** @defgroup MEMSPI_LowLevel Config Hardware SPI
 *  @brief Конфигурация функций для доступа к SPI
 *  @{
 */

/** 
	* @brief 	SPI Transmit.
	* @param 	_hmemspi_   Указатель на хендл внешней памяти.
	* @param 	_data_ 		Указатель на данные для отправки.
	* @param 	_size_ 		Размер данных для отправки.
	* @param 	_timeout_	Время, за которое должна быть осуществлена отправка.
	* @note 	Здесь вызывается только функция HAL, и ничего больше.
	*/
#define MEMSPI_SPI_Transmit(_hmemspi_, _data_, _size_, _timeout_)  HAL_SPI_Transmit(_hmemspi_->hspi, _data_, _size_, _timeout_)
/** 
	* @brief 	SPI Receive.
	* @param 	_hmemspi_ Указатель на хендл внешней памяти.
	* @param 	_data_ 		Указатель на буффер для прниема данных.
	* @param 	_size_ 		Размер данных для приема.
	* @param 	_timeout_	Время, за которое должен быть осуществлен прием.
	* @note 	Здесь вызывается только функция HAL, и ничего больше.
	*/
#define MEMSPI_SPI_Receive(_hmemspi_, _data_, _size_, _timeout_)  	HAL_SPI_Receive(_hmemspi_->hspi, _data_, _size_, _timeout_)

/**  
	* @brief 	Select MEMORY chip.
	*/
#define     MEMSPI_Select(_hmemspi_)    (_hmemspi_->CS_GPIOx->BSRR = _hmemspi_->CS_PIN << 16)
/**  
	* @brief 	Deselect MEMORY chip.
	*/
#define     MEMSPI_Deselect(_hmemspi_)  (_hmemspi_->CS_GPIOx->BSRR = _hmemspi_->CS_PIN)

/**  //MEMSPI_LowLevel
  * @}
  */

#endif // __SPI_MEMORY_CONFIG_H_

/**  //MEMSPI_CONFIGS
  * @}
  */
