| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /**
- * @file HW_SPI_ATY.c
- *
- * @param Project DEVICE_GENERAL_ATY_LIB
- *
- * @author ATY
- *
- * @copyright
- * - Copyright 2017 - 2023 MZ-ATY
- * - This code follows:
- * - MZ-ATY Various Contents Joint Statement -
- * <a href="https://mengze.top/MZ-ATY_VCJS">
- * https://mengze.top/MZ-ATY_VCJS</a>
- * - CC 4.0 BY-NC-SA -
- * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
- * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
- * - Your use will be deemed to have accepted the terms of this statement.
- *
- * @brief Familiar functions of SPI for all embedded device
- *
- * @version
- * - 1_01_221028 > ATY
- * -# Preliminary version, first Release
- * -Undone: in soft
- ********************************************************************************
- */
- #ifndef __HW_SPI_ATY_C
- #define __HW_SPI_ATY_C
- #include "HW_SPI_ATY.h"
- /******************************* For user *************************************/
- /******************************************************************************/
- #ifndef __SPI_HARDWARE_ATY
- #else
- #if defined(__STC51_ATY)
- uint8_t SPI_Write(uint8_t* data_t, uint16_t len)
- {
- uint8_t i = 0;
- uint16_t errCount = 1000;
- SPCTL = 0xD4;
- for(i = 0; i < len; i++)
- {
- SPSTAT |= 0xC0;
- SPDAT = *(data_t + i);
- while(((SPSTAT & 0x80) != 0x80) && errCount)
- errCount--;
- if(errCount == 0)
- return 1;
- }
- return 0;
- }
- uint8_t SPI_Read(uint8_t* data_t, uint16_t len)
- {
- uint8_t i = 0;
- uint16_t errCode = 1000;
- SPCTL = 0xD4;
- for(i = 0; i < len; i++)
- {
- SPSTAT |= 0xC0;
- SPDAT = 0xFF;
- while(((SPSTAT & 0x80) != 0x80) && errCode)
- errCode--;
- if(errCode == 0)
- return 1;
- *(data_t + i) = SPDAT;
- }
- return 0;
- }
- #elif defined(__STM32_HAL_ATY)
- #include "spi.h"
- uint8_t SPI_Write(uint8_t* data_t, uint16_t len)
- {
- uint8_t i = 3;
- while(i--)
- {
- if(HAL_SPI_Transmit(&SPIH_N, (uint8_t *)data_t, len, 1000) == HAL_OK)
- return 0;
- }
- return 1;
- }
- uint8_t SPI_Read(uint8_t* data_t, uint16_t len)
- {
- uint8_t i = 3;
- while(i--)
- {
- if(HAL_SPI_Receive(&SPIH_N, (uint8_t *)data_t, len, 1000) == HAL_OK)
- return 0;
- }
- return 1;
- }
- #elif defined(__ESP8266_RTOS_ATY)
- #include <stdio.h>
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "freertos/queue.h"
- #include "esp8266/gpio_struct.h"
- #include "esp8266/spi_struct.h"
- #include "esp_system.h"
- #include "esp_log.h"
- #include "esp_libc.h"
- #include "driver/gpio.h"
- #include "driver/spi.h"
- static const char *TAG = "user_spi";
- esp_err_t esp8266_spi_init(void)
- {
- ESP_LOGI(TAG, "init spi");
- spi_config_t spi_config;
- // Load default interface parameters
- // CS_EN:1, MISO_EN:1, MOSI_EN:1, BYTE_TX_ORDER:1, BYTE_TX_ORDER:1, BIT_RX_ORDER:0, BIT_TX_ORDER:0, CPHA:0, CPOL:0
- spi_config.interface.val = SPI_DEFAULT_INTERFACE;
- // Load default interrupt enable
- // TRANS_DONE: true, WRITE_STATUS: false, READ_STATUS: false, WRITE_BUFFER: false, READ_BUFFER: false
- spi_config.intr_enable.val = SPI_MASTER_DEFAULT_INTR_ENABLE;
- spi_config.interface.cs_en = 0;
- spi_config.interface.mosi_en = 1;
- spi_config.interface.miso_en = 1;
- // Set SPI to master mode
- // ESP8266 Only support half-duplex
- spi_config.mode = SPI_MASTER_MODE;
- // Set the SPI clock frequency division factor
- spi_config.clk_div = SPI_2MHz_DIV;
- spi_config.event_cb = NULL;
- return spi_init(HSPI_HOST, &spi_config);
- }
- /**
- * @brief
- * @note use [ESP8266_RTOS_SDK](https://github.com/espressif/ESP8266_RTOS_SDK/)
- */
- // esp_err_t SPI_Write(uint8_t* data_t, uint16_t len)
- uint8_t SPI_Write(uint8_t* data_t, uint16_t len)
- {
- spi_trans_t trans = {0};
- trans.mosi = data;
- trans.bits.mosi = len * 8;
- return spi_trans(HSPI_HOST, &trans);
- }
- uint8_t SPI_Read(uint8_t* data_t, uint16_t len)
- {
- spi_trans_t trans;
- memset(&trans, 0x0, sizeof(trans));
- trans.bits.val = 0;
- trans.miso = data_t;
- trans.bits.miso = len * 8;
- if(spi_trans(HSPI_HOST, &trans))
- return 0;
- return 1;
- }
- #endif /* PLATFORM */
- #endif /* __SPI_HARDWARE_ATY */
- #endif /* __HW_SPI_ATY_C */
- /******************************** End Of File *********************************/
|