aboutsummaryrefslogtreecommitdiff
path: root/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2017-01-25 22:24:18 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2017-01-25 22:29:25 +0100
commit40e04e3772726829d66c12e69f24b03920d79c67 (patch)
tree636811bad956798c9d5d22de9e7ba8c799b8d791 /tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities
parent2fff65aed2477a503c72629d27e2a330d30c02d1 (diff)
downloadstm32f103-playground-40e04e3772726829d66c12e69f24b03920d79c67.tar.gz
stm32f103-playground-40e04e3772726829d66c12e69f24b03920d79c67.tar.bz2
stm32f103-playground-40e04e3772726829d66c12e69f24b03920d79c67.tar.xz
stm32f103-playground-40e04e3772726829d66c12e69f24b03920d79c67.zip
o Moving tinyprintf and stm libraries under thirdparty.
Diffstat (limited to 'tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities')
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/fonts.c997
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/fonts.h118
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_ee.c854
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_ee.h201
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_tsensor.c977
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_sdio_sd.c2502
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_sdio_sd.h397
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_flash.c541
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_flash.h151
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_sd.c901
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_sd.h280
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Release_Notes.html328
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval.c624
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval.h341
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_cec.c1722
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_cec.h290
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_lcd.c1875
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_lcd.h393
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval.c762
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval.h393
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_fsmc_sram.h104
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.c1419
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.h359
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210B_EVAL/stm3210b_eval_lcd.c1878
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210B_EVAL/stm3210b_eval_lcd.h394
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval.c604
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval.h277
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval_lcd.c1407
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval_lcd.h379
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval.c667
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval.h342
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nand.c546
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nor.c479
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nor.h128
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_lcd.c1329
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_lcd.h359
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval.c750
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_i2c_ee.c810
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_i2c_ee.h181
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_lcd.c1529
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_lcd.h392
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/stm32_eval.c120
-rw-r--r--tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/stm32_eval.h368
43 files changed, 0 insertions, 29468 deletions
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/fonts.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/fonts.c
deleted file mode 100644
index 04c5560..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/fonts.c
+++ /dev/null
@@ -1,997 +0,0 @@
-/**
- ******************************************************************************
- * @file fonts.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides text fonts for STM32xx-EVAL's LCD driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "fonts.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup FONTS
- * @brief This file includes the Fonts driver of STM32-EVAL boards.
- * @{
- */
-
-/** @defgroup FONTS_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup FONTS_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup FONTS_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup FONTS_Private_Variables
- * @{
- */
-const uint16_t ASCII16x24_Table [] = {
-/**
- * @brief Space ' '
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '!'
- */
- 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000,
- 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '"'
- */
- 0x0000, 0x0000, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '#'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C60, 0x0C60,
- 0x0C60, 0x0630, 0x0630, 0x1FFE, 0x1FFE, 0x0630, 0x0738, 0x0318,
- 0x1FFE, 0x1FFE, 0x0318, 0x0318, 0x018C, 0x018C, 0x018C, 0x0000,
-/**
- * @brief '$'
- */
- 0x0000, 0x0080, 0x03E0, 0x0FF8, 0x0E9C, 0x1C8C, 0x188C, 0x008C,
- 0x0098, 0x01F8, 0x07E0, 0x0E80, 0x1C80, 0x188C, 0x188C, 0x189C,
- 0x0CB8, 0x0FF0, 0x03E0, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '%'
- */
- 0x0000, 0x0000, 0x0000, 0x180E, 0x0C1B, 0x0C11, 0x0611, 0x0611,
- 0x0311, 0x0311, 0x019B, 0x018E, 0x38C0, 0x6CC0, 0x4460, 0x4460,
- 0x4430, 0x4430, 0x4418, 0x6C18, 0x380C, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '&'
- */
- 0x0000, 0x01E0, 0x03F0, 0x0738, 0x0618, 0x0618, 0x0330, 0x01F0,
- 0x00F0, 0x00F8, 0x319C, 0x330E, 0x1E06, 0x1C06, 0x1C06, 0x3F06,
- 0x73FC, 0x21F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '''
- */
- 0x0000, 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '('
- */
- 0x0000, 0x0200, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x0060, 0x0060,
- 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
- 0x0060, 0x0060, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0200, 0x0000,
-/**
- * @brief ')'
- */
- 0x0000, 0x0020, 0x0060, 0x00C0, 0x0180, 0x0180, 0x0300, 0x0300,
- 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
- 0x0300, 0x0300, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0020, 0x0000,
-/**
- * @brief '*'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
- 0x06D8, 0x07F8, 0x01E0, 0x0330, 0x0738, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '+'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0180, 0x3FFC, 0x3FFC, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief ','
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000,
-/**
- * @brief '-'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x07E0, 0x07E0, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '.'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '/'
- */
- 0x0000, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300,
- 0x0300, 0x0380, 0x0180, 0x0180, 0x0180, 0x00C0, 0x00C0, 0x00C0,
- 0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '0'
- */
- 0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x180C, 0x180C, 0x180C,
- 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C18, 0x0E38,
- 0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '1'
- */
- 0x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180,
- 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '2'
- */
- 0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x1800,
- 0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
- 0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '3'
- */
- 0x0000, 0x01E0, 0x07F8, 0x0E18, 0x0C0C, 0x0C0C, 0x0C00, 0x0600,
- 0x03C0, 0x07C0, 0x0C00, 0x1800, 0x1800, 0x180C, 0x180C, 0x0C18,
- 0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '4'
- */
- 0x0000, 0x0C00, 0x0E00, 0x0F00, 0x0F00, 0x0D80, 0x0CC0, 0x0C60,
- 0x0C60, 0x0C30, 0x0C18, 0x0C0C, 0x3FFC, 0x3FFC, 0x0C00, 0x0C00,
- 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '5'
- */
- 0x0000, 0x0FF8, 0x0FF8, 0x0018, 0x0018, 0x000C, 0x03EC, 0x07FC,
- 0x0E1C, 0x1C00, 0x1800, 0x1800, 0x1800, 0x180C, 0x0C1C, 0x0E18,
- 0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '6'
- */
- 0x0000, 0x07C0, 0x0FF0, 0x1C38, 0x1818, 0x0018, 0x000C, 0x03CC,
- 0x0FEC, 0x0E3C, 0x1C1C, 0x180C, 0x180C, 0x180C, 0x1C18, 0x0E38,
- 0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '7'
- */
- 0x0000, 0x1FFC, 0x1FFC, 0x0C00, 0x0600, 0x0600, 0x0300, 0x0380,
- 0x0180, 0x01C0, 0x00C0, 0x00E0, 0x0060, 0x0060, 0x0070, 0x0030,
- 0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '8'
- */
- 0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x0C18, 0x0C18, 0x0638,
- 0x07F0, 0x07F0, 0x0C18, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C38,
- 0x0FF8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '9'
- */
- 0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C1C, 0x180C, 0x180C, 0x180C,
- 0x1C1C, 0x1E38, 0x1BF8, 0x19E0, 0x1800, 0x0C00, 0x0C00, 0x0E1C,
- 0x07F8, 0x01F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief ':'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief ';'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '<'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x1000, 0x1C00, 0x0F80, 0x03E0, 0x00F8, 0x0018, 0x00F8, 0x03E0,
- 0x0F80, 0x1C00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '='
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x1FF8, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '>'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0008, 0x0038, 0x01F0, 0x07C0, 0x1F00, 0x1800, 0x1F00, 0x07C0,
- 0x01F0, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '?'
- */
- 0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x0C00,
- 0x0600, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000,
- 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '@'
- */
- 0x0000, 0x0000, 0x07E0, 0x1818, 0x2004, 0x29C2, 0x4A22, 0x4411,
- 0x4409, 0x4409, 0x4409, 0x2209, 0x1311, 0x0CE2, 0x4002, 0x2004,
- 0x1818, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'A'
- */
- 0x0000, 0x0380, 0x0380, 0x06C0, 0x06C0, 0x06C0, 0x0C60, 0x0C60,
- 0x1830, 0x1830, 0x1830, 0x3FF8, 0x3FF8, 0x701C, 0x600C, 0x600C,
- 0xC006, 0xC006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'B'
- */
- 0x0000, 0x03FC, 0x0FFC, 0x0C0C, 0x180C, 0x180C, 0x180C, 0x0C0C,
- 0x07FC, 0x0FFC, 0x180C, 0x300C, 0x300C, 0x300C, 0x300C, 0x180C,
- 0x1FFC, 0x07FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'C'
- */
- 0x0000, 0x07C0, 0x1FF0, 0x3838, 0x301C, 0x700C, 0x6006, 0x0006,
- 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x6006, 0x700C, 0x301C,
- 0x1FF0, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'D'
- */
- 0x0000, 0x03FE, 0x0FFE, 0x0E06, 0x1806, 0x1806, 0x3006, 0x3006,
- 0x3006, 0x3006, 0x3006, 0x3006, 0x3006, 0x1806, 0x1806, 0x0E06,
- 0x0FFE, 0x03FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'E'
- */
- 0x0000, 0x3FFC, 0x3FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
- 0x1FFC, 0x1FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
- 0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'F'
- */
- 0x0000, 0x3FF8, 0x3FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
- 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
- 0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'G'
- */
- 0x0000, 0x0FE0, 0x3FF8, 0x783C, 0x600E, 0xE006, 0xC007, 0x0003,
- 0x0003, 0xFE03, 0xFE03, 0xC003, 0xC007, 0xC006, 0xC00E, 0xF03C,
- 0x3FF8, 0x0FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'H'
- */
- 0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
- 0x3FFC, 0x3FFC, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
- 0x300C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'I'
- */
- 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'J'
- */
- 0x0000, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
- 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0618, 0x0618, 0x0738,
- 0x03F0, 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'K'
- */
- 0x0000, 0x3006, 0x1806, 0x0C06, 0x0606, 0x0306, 0x0186, 0x00C6,
- 0x0066, 0x0076, 0x00DE, 0x018E, 0x0306, 0x0606, 0x0C06, 0x1806,
- 0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'L'
- */
- 0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
- 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
- 0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'M'
- */
- 0x0000, 0xE00E, 0xF01E, 0xF01E, 0xF01E, 0xD836, 0xD836, 0xD836,
- 0xD836, 0xCC66, 0xCC66, 0xCC66, 0xC6C6, 0xC6C6, 0xC6C6, 0xC6C6,
- 0xC386, 0xC386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'N'
- */
- 0x0000, 0x300C, 0x301C, 0x303C, 0x303C, 0x306C, 0x306C, 0x30CC,
- 0x30CC, 0x318C, 0x330C, 0x330C, 0x360C, 0x360C, 0x3C0C, 0x3C0C,
- 0x380C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'O'
- */
- 0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xC003, 0xC003,
- 0xC003, 0xC003, 0xC003, 0xC003, 0xC003, 0x6006, 0x700E, 0x381C,
- 0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'P'
- */
- 0x0000, 0x0FFC, 0x1FFC, 0x380C, 0x300C, 0x300C, 0x300C, 0x300C,
- 0x180C, 0x1FFC, 0x07FC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
- 0x000C, 0x000C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'Q'
- */
- 0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xE003, 0xC003,
- 0xC003, 0xC003, 0xC003, 0xC003, 0xE007, 0x6306, 0x3F0E, 0x3C1C,
- 0x3FF8, 0xF7E0, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'R'
- */
- 0x0000, 0x0FFE, 0x1FFE, 0x3806, 0x3006, 0x3006, 0x3006, 0x3806,
- 0x1FFE, 0x07FE, 0x0306, 0x0606, 0x0C06, 0x1806, 0x1806, 0x3006,
- 0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'S'
- */
- 0x0000, 0x03E0, 0x0FF8, 0x0C1C, 0x180C, 0x180C, 0x000C, 0x001C,
- 0x03F8, 0x0FE0, 0x1E00, 0x3800, 0x3006, 0x3006, 0x300E, 0x1C1C,
- 0x0FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'T'
- */
- 0x0000, 0x7FFE, 0x7FFE, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'U'
- */
- 0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
- 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x1818,
- 0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'V'
- */
- 0x0000, 0x6003, 0x3006, 0x3006, 0x3006, 0x180C, 0x180C, 0x180C,
- 0x0C18, 0x0C18, 0x0E38, 0x0630, 0x0630, 0x0770, 0x0360, 0x0360,
- 0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'W'
- */
- 0x0000, 0x6003, 0x61C3, 0x61C3, 0x61C3, 0x3366, 0x3366, 0x3366,
- 0x3366, 0x3366, 0x3366, 0x1B6C, 0x1B6C, 0x1B6C, 0x1A2C, 0x1E3C,
- 0x0E38, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'X'
- */
- 0x0000, 0xE00F, 0x700C, 0x3018, 0x1830, 0x0C70, 0x0E60, 0x07C0,
- 0x0380, 0x0380, 0x03C0, 0x06E0, 0x0C70, 0x1C30, 0x1818, 0x300C,
- 0x600E, 0xE007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'Y'
- */
- 0x0000, 0xC003, 0x6006, 0x300C, 0x381C, 0x1838, 0x0C30, 0x0660,
- 0x07E0, 0x03C0, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'Z'
- */
- 0x0000, 0x7FFC, 0x7FFC, 0x6000, 0x3000, 0x1800, 0x0C00, 0x0600,
- 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, 0x000C, 0x0006,
- 0x7FFE, 0x7FFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '['
- */
- 0x0000, 0x03E0, 0x03E0, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
- 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
- 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x03E0, 0x03E0, 0x0000,
-/**
- * @brief '\'
- */
- 0x0000, 0x0030, 0x0030, 0x0060, 0x0060, 0x0060, 0x00C0, 0x00C0,
- 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0300, 0x0300, 0x0300,
- 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief ']'
- */
- 0x0000, 0x03E0, 0x03E0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
- 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
- 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x03E0, 0x03E0, 0x0000,
-/**
- * @brief '^'
- */
- 0x0000, 0x0000, 0x01C0, 0x01C0, 0x0360, 0x0360, 0x0360, 0x0630,
- 0x0630, 0x0C18, 0x0C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '_'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '''
- */
- 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'a'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03F0, 0x07F8,
- 0x0C1C, 0x0C0C, 0x0F00, 0x0FF0, 0x0CF8, 0x0C0C, 0x0C0C, 0x0F1C,
- 0x0FF8, 0x18F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'b'
- */
- 0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x03D8, 0x0FF8,
- 0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
- 0x0FF8, 0x03D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'c'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x07F0,
- 0x0E30, 0x0C18, 0x0018, 0x0018, 0x0018, 0x0018, 0x0C18, 0x0E30,
- 0x07F0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'd'
- */
- 0x0000, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1BC0, 0x1FF0,
- 0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
- 0x1FF0, 0x1BC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'e'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
- 0x0C30, 0x1818, 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x1838, 0x1C30,
- 0x0FF0, 0x07C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'f'
- */
- 0x0000, 0x0F80, 0x0FC0, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
- 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
- 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'g'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0DE0, 0x0FF8,
- 0x0E18, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0E18,
- 0x0FF8, 0x0DE0, 0x0C00, 0x0C0C, 0x061C, 0x07F8, 0x01F0, 0x0000,
-/**
- * @brief 'h'
- */
- 0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x07D8, 0x0FF8,
- 0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
- 0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'i'
- */
- 0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
- 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
- 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'j'
- */
- 0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
- 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
- 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00F8, 0x0078, 0x0000,
-/**
- * @brief 'k'
- */
- 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0C0C, 0x060C,
- 0x030C, 0x018C, 0x00CC, 0x006C, 0x00FC, 0x019C, 0x038C, 0x030C,
- 0x060C, 0x0C0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'l'
- */
- 0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
- 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
- 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'm'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3C7C, 0x7EFF,
- 0xE3C7, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183,
- 0xC183, 0xC183, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'n'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0798, 0x0FF8,
- 0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
- 0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'o'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
- 0x0C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C30,
- 0x0FF0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'p'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D8, 0x0FF8,
- 0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
- 0x0FF8, 0x03D8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0000,
-/**
- * @brief 'q'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BC0, 0x1FF0,
- 0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
- 0x1FF0, 0x1BC0, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x0000,
-/**
- * @brief 'r'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07B0, 0x03F0,
- 0x0070, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
- 0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 's'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03E0, 0x03F0,
- 0x0E38, 0x0C18, 0x0038, 0x03F0, 0x07C0, 0x0C00, 0x0C18, 0x0E38,
- 0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 't'
- */
- 0x0000, 0x0000, 0x0080, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
- 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
- 0x07C0, 0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'u'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1818, 0x1818,
- 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C38,
- 0x1FF0, 0x19E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'v'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x180C, 0x0C18,
- 0x0C18, 0x0C18, 0x0630, 0x0630, 0x0630, 0x0360, 0x0360, 0x0360,
- 0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'w'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0x41C1,
- 0x61C3, 0x6363, 0x6363, 0x6363, 0x3636, 0x3636, 0x3636, 0x1C1C,
- 0x1C1C, 0x1C1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'x'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x381C, 0x1C38,
- 0x0C30, 0x0660, 0x0360, 0x0360, 0x0360, 0x0360, 0x0660, 0x0C30,
- 0x1C38, 0x381C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief 'y'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3018, 0x1830,
- 0x1830, 0x1870, 0x0C60, 0x0C60, 0x0CE0, 0x06C0, 0x06C0, 0x0380,
- 0x0380, 0x0380, 0x0180, 0x0180, 0x01C0, 0x00F0, 0x0070, 0x0000,
-/**
- * @brief 'z'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FFC, 0x1FFC,
- 0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
- 0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-/**
- * @brief '{'
- */
- 0x0000, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
- 0x00C0, 0x0060, 0x0060, 0x0030, 0x0060, 0x0040, 0x00C0, 0x00C0,
- 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0000, 0x0000,
-/**
- * @brief '|'
- */
- 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000,
-/**
- * @brief '}'
- */
- 0x0000, 0x0060, 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0180,
- 0x0180, 0x0300, 0x0300, 0x0600, 0x0300, 0x0100, 0x0180, 0x0180,
- 0x0180, 0x0180, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0000, 0x0000,
-/**
- * @brief '~'
- */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x10F0, 0x1FF8, 0x0F08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
-
-const uint16_t ASCII12x12_Table [] = {
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x0000,0x2000,0x0000,0x0000,
- 0x0000,0x5000,0x5000,0x5000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0900,0x0900,0x1200,0x7f00,0x1200,0x7f00,0x1200,0x2400,0x2400,0x0000,0x0000,
- 0x1000,0x3800,0x5400,0x5000,0x5000,0x3800,0x1400,0x5400,0x5400,0x3800,0x1000,0x0000,
- 0x0000,0x3080,0x4900,0x4900,0x4a00,0x32c0,0x0520,0x0920,0x0920,0x10c0,0x0000,0x0000,
- 0x0000,0x0c00,0x1200,0x1200,0x1400,0x1800,0x2500,0x2300,0x2300,0x1d80,0x0000,0x0000,
- 0x0000,0x4000,0x4000,0x4000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0800,0x1000,0x1000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x1000,0x1000,
- 0x0000,0x4000,0x2000,0x2000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x2000,0x2000,
- 0x0000,0x2000,0x7000,0x2000,0x5000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0800,0x0800,0x7f00,0x0800,0x0800,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x2000,0x4000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,
- 0x0000,0x1000,0x1000,0x1000,0x2000,0x2000,0x2000,0x2000,0x4000,0x4000,0x0000,0x0000,
- 0x0000,0x1000,0x2800,0x4400,0x4400,0x4400,0x4400,0x4400,0x2800,0x1000,0x0000,0x0000,
- 0x0000,0x1000,0x3000,0x5000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x0000,0x0000,
- 0x0000,0x3000,0x4800,0x4400,0x0400,0x0800,0x1000,0x2000,0x4000,0x7c00,0x0000,0x0000,
- 0x0000,0x3000,0x4800,0x0400,0x0800,0x1000,0x0800,0x4400,0x4800,0x3000,0x0000,0x0000,
- 0x0000,0x0800,0x1800,0x1800,0x2800,0x2800,0x4800,0x7c00,0x0800,0x0800,0x0000,0x0000,
- 0x0000,0x3c00,0x2000,0x4000,0x7000,0x4800,0x0400,0x4400,0x4800,0x3000,0x0000,0x0000,
- 0x0000,0x1800,0x2400,0x4000,0x5000,0x6800,0x4400,0x4400,0x2800,0x1000,0x0000,0x0000,
- 0x0000,0x7c00,0x0400,0x0800,0x1000,0x1000,0x1000,0x2000,0x2000,0x2000,0x0000,0x0000,
- 0x0000,0x1000,0x2800,0x4400,0x2800,0x1000,0x2800,0x4400,0x2800,0x1000,0x0000,0x0000,
- 0x0000,0x1000,0x2800,0x4400,0x4400,0x2c00,0x1400,0x0400,0x4800,0x3000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x2000,0x4000,
- 0x0000,0x0000,0x0400,0x0800,0x3000,0x4000,0x3000,0x0800,0x0400,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x7c00,0x0000,0x0000,0x7c00,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x4000,0x2000,0x1800,0x0400,0x1800,0x2000,0x4000,0x0000,0x0000,0x0000,
- 0x0000,0x3800,0x6400,0x4400,0x0400,0x0800,0x1000,0x1000,0x0000,0x1000,0x0000,0x0000,
- 0x0000,0x0f80,0x1040,0x2ea0,0x51a0,0x5120,0x5120,0x5120,0x5320,0x4dc0,0x2020,0x1040,
- 0x0000,0x0800,0x1400,0x1400,0x1400,0x2200,0x3e00,0x2200,0x4100,0x4100,0x0000,0x0000,
- 0x0000,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x0000,0x0000,
- 0x0000,0x0e00,0x1100,0x2100,0x2000,0x2000,0x2000,0x2100,0x1100,0x0e00,0x0000,0x0000,
- 0x0000,0x3c00,0x2200,0x2100,0x2100,0x2100,0x2100,0x2100,0x2200,0x3c00,0x0000,0x0000,
- 0x0000,0x3e00,0x2000,0x2000,0x2000,0x3e00,0x2000,0x2000,0x2000,0x3e00,0x0000,0x0000,
- 0x0000,0x3e00,0x2000,0x2000,0x2000,0x3c00,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000,
- 0x0000,0x0e00,0x1100,0x2100,0x2000,0x2700,0x2100,0x2100,0x1100,0x0e00,0x0000,0x0000,
- 0x0000,0x2100,0x2100,0x2100,0x2100,0x3f00,0x2100,0x2100,0x2100,0x2100,0x0000,0x0000,
- 0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000,
- 0x0000,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x4800,0x4800,0x3000,0x0000,0x0000,
- 0x0000,0x2200,0x2400,0x2800,0x2800,0x3800,0x2800,0x2400,0x2400,0x2200,0x0000,0x0000,
- 0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x3e00,0x0000,0x0000,
- 0x0000,0x2080,0x3180,0x3180,0x3180,0x2a80,0x2a80,0x2a80,0x2a80,0x2480,0x0000,0x0000,
- 0x0000,0x2100,0x3100,0x3100,0x2900,0x2900,0x2500,0x2300,0x2300,0x2100,0x0000,0x0000,
- 0x0000,0x0c00,0x1200,0x2100,0x2100,0x2100,0x2100,0x2100,0x1200,0x0c00,0x0000,0x0000,
- 0x0000,0x3c00,0x2200,0x2200,0x2200,0x3c00,0x2000,0x2000,0x2000,0x2000,0x0000,0x0000,
- 0x0000,0x0c00,0x1200,0x2100,0x2100,0x2100,0x2100,0x2100,0x1600,0x0d00,0x0100,0x0000,
- 0x0000,0x3e00,0x2100,0x2100,0x2100,0x3e00,0x2400,0x2200,0x2100,0x2080,0x0000,0x0000,
- 0x0000,0x1c00,0x2200,0x2200,0x2000,0x1c00,0x0200,0x2200,0x2200,0x1c00,0x0000,0x0000,
- 0x0000,0x3e00,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0000,0x0000,
- 0x0000,0x2100,0x2100,0x2100,0x2100,0x2100,0x2100,0x2100,0x1200,0x0c00,0x0000,0x0000,
- 0x0000,0x4100,0x4100,0x2200,0x2200,0x2200,0x1400,0x1400,0x1400,0x0800,0x0000,0x0000,
- 0x0000,0x4440,0x4a40,0x2a40,0x2a80,0x2a80,0x2a80,0x2a80,0x2a80,0x1100,0x0000,0x0000,
- 0x0000,0x4100,0x2200,0x1400,0x1400,0x0800,0x1400,0x1400,0x2200,0x4100,0x0000,0x0000,
- 0x0000,0x4100,0x2200,0x2200,0x1400,0x0800,0x0800,0x0800,0x0800,0x0800,0x0000,0x0000,
- 0x0000,0x7e00,0x0200,0x0400,0x0800,0x1000,0x1000,0x2000,0x4000,0x7e00,0x0000,0x0000,
- 0x0000,0x3000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
- 0x0000,0x4000,0x4000,0x2000,0x2000,0x2000,0x2000,0x2000,0x1000,0x1000,0x0000,0x0000,
- 0x0000,0x6000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
- 0x0000,0x1000,0x2800,0x2800,0x2800,0x4400,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7e00,
- 0x4000,0x2000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3800,0x4400,0x0400,0x3c00,0x4400,0x4400,0x3c00,0x0000,0x0000,
- 0x0000,0x4000,0x4000,0x5800,0x6400,0x4400,0x4400,0x4400,0x6400,0x5800,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3000,0x4800,0x4000,0x4000,0x4000,0x4800,0x3000,0x0000,0x0000,
- 0x0000,0x0400,0x0400,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3800,0x4400,0x4400,0x7c00,0x4000,0x4400,0x3800,0x0000,0x0000,
- 0x0000,0x6000,0x4000,0xe000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0400,0x4400,
- 0x0000,0x4000,0x4000,0x5800,0x6400,0x4400,0x4400,0x4400,0x4400,0x4400,0x0000,0x0000,
- 0x0000,0x4000,0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000,
- 0x0000,0x4000,0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
- 0x0000,0x4000,0x4000,0x4800,0x5000,0x6000,0x5000,0x5000,0x4800,0x4800,0x0000,0x0000,
- 0x0000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5200,0x6d00,0x4900,0x4900,0x4900,0x4900,0x4900,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5800,0x6400,0x4400,0x4400,0x4400,0x4400,0x4400,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3800,0x4400,0x4400,0x4400,0x4400,0x4400,0x3800,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x5800,0x6400,0x4400,0x4400,0x4400,0x6400,0x5800,0x4000,0x4000,
- 0x0000,0x0000,0x0000,0x3400,0x4c00,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0400,0x0400,
- 0x0000,0x0000,0x0000,0x5000,0x6000,0x4000,0x4000,0x4000,0x4000,0x4000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x3000,0x4800,0x4000,0x3000,0x0800,0x4800,0x3000,0x0000,0x0000,
- 0x0000,0x4000,0x4000,0xe000,0x4000,0x4000,0x4000,0x4000,0x4000,0x6000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4400,0x4400,0x4400,0x4400,0x4400,0x4c00,0x3400,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4400,0x4400,0x2800,0x2800,0x2800,0x2800,0x1000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4900,0x4900,0x5500,0x5500,0x5500,0x5500,0x2200,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4400,0x2800,0x2800,0x1000,0x2800,0x2800,0x4400,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x4400,0x4400,0x2800,0x2800,0x2800,0x1000,0x1000,0x1000,0x1000,
- 0x0000,0x0000,0x0000,0x7800,0x0800,0x1000,0x2000,0x2000,0x4000,0x7800,0x0000,0x0000,
- 0x0000,0x1000,0x2000,0x2000,0x2000,0x2000,0x4000,0x2000,0x2000,0x2000,0x2000,0x2000,
- 0x0000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
- 0x0000,0x4000,0x2000,0x2000,0x2000,0x2000,0x1000,0x2000,0x2000,0x2000,0x2000,0x2000,
- 0x0000,0x0000,0x0000,0x0000,0x7400,0x5800,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x7000,0x5000,0x5000,0x5000,0x5000,0x5000,0x5000,0x7000,0x0000,0x0000};
-
-const uint16_t ASCII8x12_Table [] = {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,
- 0x00,0x00,0x00,0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x14,0x14,0x3e,0x14,0x28,0x7c,0x28,0x28,0x00,
- 0x00,0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x14,0x54,0x38,0x10,
- 0x00,0x00,0x00,0x44,0xa8,0xa8,0x50,0x14,0x1a,0x2a,0x24,0x00,
- 0x00,0x00,0x00,0x20,0x50,0x50,0x20,0xe8,0x98,0x98,0x60,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x00,0x00,0x00,0x40,0xe0,0x40,0xa0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0xf8,0x20,0x20,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
- 0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x20,0x00,
- 0x00,0x00,0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x80,0xf0,0x00,
- 0x00,0x00,0x00,0x60,0x90,0x10,0x60,0x10,0x10,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x10,0x30,0x50,0x50,0x90,0xf8,0x10,0x10,0x00,
- 0x00,0x00,0x00,0x70,0x40,0x80,0xe0,0x10,0x10,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x60,0x90,0x80,0xa0,0xd0,0x90,0x90,0x60,0x00,
- 0x00,0x00,0x00,0xf0,0x10,0x20,0x20,0x20,0x40,0x40,0x40,0x00,
- 0x00,0x00,0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x60,0x90,0x90,0xb0,0x50,0x10,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x40,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x40,0x40,
- 0x00,0x00,0x00,0x00,0x00,0x10,0x60,0x80,0x60,0x10,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xf0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x10,0x60,0x80,0x00,0x00,
- 0x00,0x00,0x00,0x60,0x90,0x10,0x20,0x40,0x40,0x00,0x40,0x00,
- 0x00,0x00,0x00,0x1c,0x22,0x5b,0xa5,0xa5,0xa5,0xa5,0x9e,0x41,
- 0x00,0x00,0x00,0x20,0x50,0x50,0x50,0x50,0x70,0x88,0x88,0x00,
- 0x00,0x00,0x00,0xf0,0x88,0x88,0xf0,0x88,0x88,0x88,0xf0,0x00,
- 0x00,0x00,0x00,0x38,0x44,0x84,0x80,0x80,0x84,0x44,0x38,0x00,
- 0x00,0x00,0x00,0xe0,0x90,0x88,0x88,0x88,0x88,0x90,0xe0,0x00,
- 0x00,0x00,0x00,0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,0xf8,0x00,
- 0x00,0x00,0x00,0x78,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x00,
- 0x00,0x00,0x00,0x38,0x44,0x84,0x80,0x9c,0x84,0x44,0x38,0x00,
- 0x00,0x00,0x00,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x90,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x88,0x90,0xa0,0xe0,0xa0,0x90,0x90,0x88,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,0x00,
- 0x00,0x00,0x00,0x82,0xc6,0xc6,0xaa,0xaa,0xaa,0xaa,0x92,0x00,
- 0x00,0x00,0x00,0x84,0xc4,0xa4,0xa4,0x94,0x94,0x8c,0x84,0x00,
- 0x00,0x00,0x00,0x30,0x48,0x84,0x84,0x84,0x84,0x48,0x30,0x00,
- 0x00,0x00,0x00,0xf0,0x88,0x88,0x88,0xf0,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x30,0x48,0x84,0x84,0x84,0x84,0x58,0x34,0x04,
- 0x00,0x00,0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x42,0x00,
- 0x00,0x00,0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x88,0x70,0x00,
- 0x00,0x00,0x00,0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- 0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x48,0x30,0x00,
- 0x00,0x00,0x00,0x88,0x88,0x50,0x50,0x50,0x50,0x50,0x20,0x00,
- 0x00,0x00,0x00,0x92,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x44,0x00,
- 0x00,0x00,0x00,0x84,0x48,0x48,0x30,0x30,0x48,0x48,0x84,0x00,
- 0x00,0x00,0x00,0x88,0x50,0x50,0x20,0x20,0x20,0x20,0x20,0x00,
- 0x00,0x00,0x00,0xf8,0x08,0x10,0x20,0x20,0x40,0x80,0xf8,0x00,
- 0x00,0x00,0x00,0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x20,0x20,0x00,
- 0x00,0x00,0x00,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x00,0x00,0x00,0x40,0xa0,0xa0,0xa0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,
- 0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xe0,0x10,0x70,0x90,0x90,0x70,0x00,
- 0x00,0x00,0x00,0x80,0x80,0xa0,0xd0,0x90,0x90,0xd0,0xa0,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x10,0x10,0x50,0xb0,0x90,0x90,0xb0,0x50,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x60,0x90,0xf0,0x80,0x90,0x60,0x00,
- 0x00,0x00,0x00,0xc0,0x80,0xc0,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x50,0xb0,0x90,0x90,0xb0,0x50,0x10,
- 0x00,0x00,0x00,0x80,0x80,0xa0,0xd0,0x90,0x90,0x90,0x90,0x00,
- 0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x00,0x00,0x00,0x80,0x80,0x90,0xa0,0xc0,0xa0,0x90,0x90,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xa6,0xda,0x92,0x92,0x92,0x92,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xa0,0xd0,0x90,0x90,0x90,0x90,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xa0,0xd0,0x90,0x90,0xd0,0xa0,0x80,
- 0x00,0x00,0x00,0x00,0x00,0x50,0xb0,0x90,0x90,0xb0,0x50,0x10,
- 0x00,0x00,0x00,0x00,0x00,0xa0,0xc0,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xe0,0x90,0x40,0x20,0x90,0x60,0x00,
- 0x00,0x00,0x00,0x80,0x80,0xc0,0x80,0x80,0x80,0x80,0xc0,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x90,0x90,0x90,0x90,0xb0,0x50,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x50,0x50,0x50,0x20,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x92,0xaa,0xaa,0xaa,0xaa,0x44,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x88,0x50,0x20,0x20,0x50,0x88,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x88,0x50,0x50,0x50,0x20,0x20,0x20,
- 0x00,0x00,0x00,0x00,0x00,0xf0,0x10,0x20,0x40,0x80,0xf0,0x00,
- 0x00,0x00,0x00,0xc0,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x00,0x00,0x00,0xc0,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x40,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0xb0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xe0,0xa0,0xa0,0xa0,0xa0,0xa0,0xe0,0x00};
-
-const uint16_t ASCII8x8_Table [] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40,
- 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x24, 0x24, 0xfe, 0x48, 0xfc, 0x48, 0x48,
- 0x38, 0x54, 0x50, 0x38, 0x14, 0x14, 0x54, 0x38,
- 0x44, 0xa8, 0xa8, 0x50, 0x14, 0x1a, 0x2a, 0x24,
- 0x10, 0x28, 0x28, 0x10, 0x74, 0x4c, 0x4c, 0x30,
- 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08,
- 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10,
- 0x00, 0x00, 0x24, 0x18, 0x3c, 0x18, 0x24, 0x00,
- 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
- 0x08, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x20,
- 0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x18,
- 0x08, 0x18, 0x28, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x38, 0x44, 0x00, 0x04, 0x08, 0x10, 0x20, 0x7c,
- 0x18, 0x24, 0x04, 0x18, 0x04, 0x04, 0x24, 0x18,
- 0x04, 0x0c, 0x14, 0x24, 0x44, 0x7e, 0x04, 0x04,
- 0x3c, 0x20, 0x20, 0x38, 0x04, 0x04, 0x24, 0x18,
- 0x18, 0x24, 0x20, 0x38, 0x24, 0x24, 0x24, 0x18,
- 0x3c, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10,
- 0x18, 0x24, 0x24, 0x18, 0x24, 0x24, 0x24, 0x18,
- 0x18, 0x24, 0x24, 0x24, 0x1c, 0x04, 0x24, 0x18,
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x10, 0x00,
- 0x00, 0x00, 0x04, 0x18, 0x20, 0x18, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x18, 0x04, 0x18, 0x20, 0x00,
- 0x18, 0x24, 0x04, 0x08, 0x10, 0x10, 0x00, 0x10,
- 0x3c, 0x42, 0x99, 0xa5, 0xa5, 0x9d, 0x42, 0x38,
- 0x38, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44,
- 0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x44, 0x78,
- 0x1c, 0x22, 0x42, 0x40, 0x40, 0x42, 0x22, 0x1c,
- 0x70, 0x48, 0x44, 0x44, 0x44, 0x44, 0x48, 0x70,
- 0x7c, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x7c,
- 0x3c, 0x20, 0x20, 0x38, 0x20, 0x20, 0x20, 0x20,
- 0x1c, 0x22, 0x42, 0x40, 0x4e, 0x42, 0x22, 0x1c,
- 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x44,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x04, 0x04, 0x04, 0x04, 0x04, 0x24, 0x24, 0x18,
- 0x44, 0x48, 0x50, 0x70, 0x50, 0x48, 0x48, 0x44,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
- 0x82, 0xc6, 0xc6, 0xaa, 0xaa, 0xaa, 0xaa, 0x92,
- 0x42, 0x62, 0x52, 0x52, 0x4a, 0x4a, 0x46, 0x42,
- 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18,
- 0x78, 0x44, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40,
- 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x2c, 0x1a,
- 0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 0x42,
- 0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x44, 0x38,
- 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18,
- 0x44, 0x44, 0x28, 0x28, 0x28, 0x28, 0x28, 0x10,
- 0x92, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x44,
- 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42,
- 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x7c, 0x04, 0x08, 0x10, 0x10, 0x20, 0x40, 0x7c,
- 0x1c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1c,
- 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
- 0x1c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1c,
- 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x04, 0x1c, 0x24, 0x24, 0x1c,
- 0x20, 0x20, 0x28, 0x34, 0x24, 0x24, 0x34, 0x28,
- 0x00, 0x00, 0x18, 0x24, 0x20, 0x20, 0x24, 0x18,
- 0x04, 0x04, 0x14, 0x2c, 0x24, 0x24, 0x2c, 0x14,
- 0x00, 0x00, 0x18, 0x24, 0x3c, 0x20, 0x24, 0x18,
- 0x00, 0x18, 0x10, 0x10, 0x18, 0x10, 0x10, 0x10,
- 0x00, 0x18, 0x24, 0x24, 0x18, 0x04, 0x24, 0x18,
- 0x20, 0x20, 0x28, 0x34, 0x24, 0x24, 0x24, 0x24,
- 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x28, 0x10,
- 0x20, 0x20, 0x24, 0x28, 0x30, 0x28, 0x24, 0x24,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x00, 0x00, 0xa6, 0xda, 0x92, 0x92, 0x92, 0x92,
- 0x00, 0x00, 0x28, 0x34, 0x24, 0x24, 0x24, 0x24,
- 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x18,
- 0x00, 0x28, 0x34, 0x24, 0x38, 0x20, 0x20, 0x20,
- 0x00, 0x14, 0x2c, 0x24, 0x1c, 0x04, 0x04, 0x04,
- 0x00, 0x00, 0x2c, 0x30, 0x20, 0x20, 0x20, 0x20,
- 0x00, 0x00, 0x18, 0x24, 0x10, 0x08, 0x24, 0x18,
- 0x00, 0x10, 0x38, 0x10, 0x10, 0x10, 0x10, 0x18,
- 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x2c, 0x14,
- 0x00, 0x00, 0x44, 0x44, 0x28, 0x28, 0x28, 0x10,
- 0x00, 0x00, 0x92, 0xaa, 0xaa, 0xaa, 0xaa, 0x44,
- 0x00, 0x00, 0x44, 0x28, 0x10, 0x10, 0x28, 0x44,
- 0x00, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10,
- 0x00, 0x00, 0x3c, 0x04, 0x08, 0x10, 0x20, 0x3c,
- 0x00, 0x08, 0x10, 0x10, 0x20, 0x10, 0x10, 0x08,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x00, 0x10, 0x08, 0x08, 0x04, 0x08, 0x08, 0x10,
- 0x00, 0x00, 0x00, 0x60, 0x92, 0x0c, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-
-sFONT Font16x24 = {
- ASCII16x24_Table,
- 16, /* Width */
- 24, /* Height */
-};
-
-sFONT Font12x12 = {
- ASCII12x12_Table,
- 12, /* Width */
- 12, /* Height */
-};
-
-sFONT Font8x12 = {
- ASCII8x12_Table,
- 8, /* Width */
- 12, /* Height */
-};
-
-
-sFONT Font8x8 = {
- ASCII8x8_Table,
- 8, /* Width */
- 8, /* Height */
-};
-
-/**
- * @}
- */
-
-
-/** @defgroup FONTS_Private_Function_Prototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup FONTS_Private_Functions
- * @{
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/fonts.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/fonts.h
deleted file mode 100644
index f6ca7ce..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/fonts.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- ******************************************************************************
- * @file fonts.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief Header for fonts.c
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __FONTS_H
-#define __FONTS_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup FONTS
- * @{
- */
-
-/** @defgroup FONTS_Exported_Types
- * @{
- */
-typedef struct _tFont
-{
- const uint16_t *table;
- uint16_t Width;
- uint16_t Height;
-
-} sFONT;
-
-extern sFONT Font16x24;
-extern sFONT Font12x12;
-extern sFONT Font8x12;
-extern sFONT Font8x8;
-
-/**
- * @}
- */
-
-/** @defgroup FONTS_Exported_Constants
- * @{
- */
-#define LINE(x) ((x) * (((sFONT *)LCD_GetFont())->Height))
-
-/**
- * @}
- */
-
-/** @defgroup FONTS_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup FONTS_Exported_Functions
- * @{
- */
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __FONTS_H */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_ee.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_ee.c
deleted file mode 100644
index 027653d..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_ee.c
+++ /dev/null
@@ -1,854 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_i2c_ee.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides a set of functions needed to manage the I2C M24CXX
- * EEPROM memory mounted on STM32xx-EVAL board (refer to stm32_eval.h
- * to know about the boards supporting this memory).
- *
- * ===================================================================
- * Note: This driver is intended for STM32F10x families devices only.
- * ===================================================================
- *
- * It implements a high level communication layer for read and write
- * from/to this memory. The needed STM32 hardware resources (I2C and
- * GPIO) are defined in stm32xx_eval.h file, and the initialization is
- * performed in sEE_LowLevel_Init() function declared in stm32xx_eval.c
- * file.
- * You can easily tailor this driver to any other development board,
- * by just adapting the defines for hardware resources and
- * sEE_LowLevel_Init() function.
- *
- * @note In this driver, basic read and write functions (sEE_ReadBuffer()
- * and sEE_WritePage()) use the DMA to perform the data transfer
- * to/from EEPROM memory (except when number of requested data is
- * equal to 1). Thus, after calling these two functions, user
- * application may perform other tasks while DMA is transferring
- * data. The application should then monitor the variable holding
- * the number of data in order to determine when the transfer is
- * completed (variable decremented to 0). Stopping transfer tasks
- * are performed into DMA interrupt handlers (which are integrated
- * into this driver).
- *
- * +-----------------------------------------------------------------+
- * | Pin assignment |
- * +---------------------------------------+-----------+-------------+
- * | STM32 I2C Pins | sEE | Pin |
- * +---------------------------------------+-----------+-------------+
- * | . | E0(GND) | 1 (0V) |
- * | . | E1(GND) | 2 (0V) |
- * | . | E2(GND) | 3 (0V) |
- * | . | E0(VSS) | 4 (0V) |
- * | sEE_I2C_SDA_PIN/ SDA | SDA | 5 |
- * | sEE_I2C_SCL_PIN/ SCL | SCL | 6 |
- * | . | /WC(VDD)| 7 (3.3V) |
- * | . | VDD | 8 (3.3V) |
- * +---------------------------------------+-----------+-------------+
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval_i2c_ee.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_I2C_EE
- * @brief This file includes the I2C EEPROM driver of STM32-EVAL boards.
- * @{
- */
-
-/** @defgroup STM32_EVAL_I2C_EE_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_I2C_EE_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_I2C_EE_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_I2C_EE_Private_Variables
- * @{
- */
-__IO uint16_t sEEAddress = 0;
-__IO uint32_t sEETimeout = sEE_LONG_TIMEOUT;
-__IO uint16_t* sEEDataReadPointer;
-__IO uint8_t* sEEDataWritePointer;
-__IO uint8_t sEEDataNum;
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_I2C_EE_Private_Function_Prototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_I2C_EE_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_DeInit(void)
-{
- sEE_LowLevel_DeInit();
-}
-
-/**
- * @brief Initializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_Init(void)
-{
- I2C_InitTypeDef I2C_InitStructure;
-
- sEE_LowLevel_Init();
-
- /*!< I2C configuration */
- /* sEE_I2C configuration */
- I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
- I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
- I2C_InitStructure.I2C_OwnAddress1 = I2C_SLAVE_ADDRESS7;
- I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
- I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
- I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
-
- /* sEE_I2C Peripheral Enable */
- I2C_Cmd(sEE_I2C, ENABLE);
- /* Apply sEE_I2C configuration after enabling it */
- I2C_Init(sEE_I2C, &I2C_InitStructure);
-
- /* Enable the sEE_I2C peripheral DMA requests */
- I2C_DMACmd(sEE_I2C, ENABLE);
-
-#if defined (sEE_M24C64_32)
- /*!< Select the EEPROM address according to the state of E0, E1, E2 pins */
- sEEAddress = sEE_HW_ADDRESS;
-#elif defined (sEE_M24C08)
- /*!< depending on the sEE Address selected in the i2c_ee.h file */
- #ifdef sEE_Block0_ADDRESS
- /*!< Select the sEE Block0 to write on */
- sEEAddress = sEE_Block0_ADDRESS;
- #endif
-
- #ifdef sEE_Block1_ADDRESS
- /*!< Select the sEE Block1 to write on */
- sEEAddress = sEE_Block1_ADDRESS;
- #endif
-
- #ifdef sEE_Block2_ADDRESS
- /*!< Select the sEE Block2 to write on */
- sEEAddress = sEE_Block2_ADDRESS;
- #endif
-
- #ifdef sEE_Block3_ADDRESS
- /*!< Select the sEE Block3 to write on */
- sEEAddress = sEE_Block3_ADDRESS;
- #endif
-#endif /*!< sEE_M24C64_32 */
-}
-
-/**
- * @brief Reads a block of data from the EEPROM.
- * @param pBuffer : pointer to the buffer that receives the data read from
- * the EEPROM.
- * @param ReadAddr : EEPROM's internal address to start reading from.
- * @param NumByteToRead : pointer to the variable holding number of bytes to
- * be read from the EEPROM.
- *
- * @note The variable pointed by NumByteToRead is reset to 0 when all the
- * data are read from the EEPROM. Application should monitor this
- * variable in order know when the transfer is complete.
- *
- * @note When number of data to be read is higher than 1, this function just
- * configures the communication and enable the DMA channel to transfer data.
- * Meanwhile, the user application may perform other tasks.
- * When number of data to be read is 1, then the DMA is not used. The byte
- * is read in polling mode.
- *
- * @retval sEE_OK (0) if operation is correctly performed, else return value
- * different from sEE_OK (0) or the timeout user callback.
- */
-uint32_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead)
-{
- /* Set the pointer to the Number of data to be read. This pointer will be used
- by the DMA Transfer Completer interrupt Handler in order to reset the
- variable to 0. User should check on this variable in order to know if the
- DMA transfer has been complete or not. */
- sEEDataReadPointer = NumByteToRead;
-
- /*!< While the bus is busy */
- sEETimeout = sEE_LONG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send START condition */
- I2C_GenerateSTART(sEE_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send EEPROM address for write */
- I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter);
-
- /*!< Test on EV6 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
-#ifdef sEE_M24C08
-
- /*!< Send the EEPROM's internal address to read from: Only one byte address */
- I2C_SendData(sEE_I2C, ReadAddr);
-
-#elif defined (sEE_M24C64_32)
-
- /*!< Send the EEPROM's internal address to read from: MSB of the address first */
- I2C_SendData(sEE_I2C, (uint8_t)((ReadAddr & 0xFF00) >> 8));
-
- /*!< Test on EV8 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send the EEPROM's internal address to read from: LSB of the address */
- I2C_SendData(sEE_I2C, (uint8_t)(ReadAddr & 0x00FF));
-
-#endif /*!< sEE_M24C08 */
-
- /*!< Test on EV8 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BTF) == RESET)
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send STRAT condition a second time */
- I2C_GenerateSTART(sEE_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send EEPROM address for read */
- I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Receiver);
-
- /* If number of data to be read is 1, then DMA couldn't be used */
- /* One Byte Master Reception procedure (POLLING) ---------------------------*/
- if ((uint16_t)(*NumByteToRead) < 2)
- {
- /* Wait on ADDR flag to be set (ADDR is still not cleared at this level */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_ADDR) == RESET)
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Disable Acknowledgement */
- I2C_AcknowledgeConfig(sEE_I2C, DISABLE);
-
- /* Call User callback for critical section start (should typically disable interrupts) */
- sEE_EnterCriticalSection_UserCallback();
-
- /* Clear ADDR register by reading SR1 then SR2 register (SR1 has already been read) */
- (void)sEE_I2C->SR2;
-
- /*!< Send STOP Condition */
- I2C_GenerateSTOP(sEE_I2C, ENABLE);
-
- /* Call User callback for critical section end (should typically re-enable interrupts) */
- sEE_ExitCriticalSection_UserCallback();
-
- /* Wait for the byte to be received */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_RXNE) == RESET)
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Read the byte received from the EEPROM */
- *pBuffer = I2C_ReceiveData(sEE_I2C);
-
- /*!< Decrement the read bytes counter */
- (uint16_t)(*NumByteToRead)--;
-
- /* Wait to make sure that STOP control bit has been cleared */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(sEE_I2C->CR1 & I2C_CR1_STOP)
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Re-Enable Acknowledgement to be ready for another reception */
- I2C_AcknowledgeConfig(sEE_I2C, ENABLE);
- }
- else/* More than one Byte Master Reception procedure (DMA) -----------------*/
- {
- /*!< Test on EV6 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /* Configure the DMA Rx Channel with the buffer address and the buffer size */
- sEE_LowLevel_DMAConfig((uint32_t)pBuffer, (uint16_t)(*NumByteToRead), sEE_DIRECTION_RX);
-
- /* Inform the DMA that the next End Of Transfer Signal will be the last one */
- I2C_DMALastTransferCmd(sEE_I2C, ENABLE);
-
- /* Enable the DMA Rx Channel */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_RX, ENABLE);
- }
-
- /* If all operations OK, return sEE_OK (0) */
- return sEE_OK;
-}
-
-/**
- * @brief Writes more than one byte to the EEPROM with a single WRITE cycle.
- *
- * @note The number of bytes (combined to write start address) must not
- * cross the EEPROM page boundary. This function can only write into
- * the boundaries of an EEPROM page.
- * This function doesn't check on boundaries condition (in this driver
- * the function sEE_WriteBuffer() which calls sEE_WritePage() is
- * responsible of checking on Page boundaries).
- *
- * @param pBuffer : pointer to the buffer containing the data to be written to
- * the EEPROM.
- * @param WriteAddr : EEPROM's internal address to write to.
- * @param NumByteToWrite : pointer to the variable holding number of bytes to
- * be written into the EEPROM.
- *
- * @note The variable pointed by NumByteToWrite is reset to 0 when all the
- * data are written to the EEPROM. Application should monitor this
- * variable in order know when the transfer is complete.
- *
- * @note This function just configure the communication and enable the DMA
- * channel to transfer data. Meanwhile, the user application may perform
- * other tasks in parallel.
- *
- * @retval sEE_OK (0) if operation is correctly performed, else return value
- * different from sEE_OK (0) or the timeout user callback.
- */
-uint32_t sEE_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite)
-{
- /* Set the pointer to the Number of data to be written. This pointer will be used
- by the DMA Transfer Completer interrupt Handler in order to reset the
- variable to 0. User should check on this variable in order to know if the
- DMA transfer has been complete or not. */
- sEEDataWritePointer = NumByteToWrite;
-
- /*!< While the bus is busy */
- sEETimeout = sEE_LONG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send START condition */
- I2C_GenerateSTART(sEE_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send EEPROM address for write */
- sEETimeout = sEE_FLAG_TIMEOUT;
- I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter);
-
- /*!< Test on EV6 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
-#ifdef sEE_M24C08
-
- /*!< Send the EEPROM's internal address to write to : only one byte Address */
- I2C_SendData(sEE_I2C, WriteAddr);
-
-#elif defined(sEE_M24C64_32)
-
- /*!< Send the EEPROM's internal address to write to : MSB of the address first */
- I2C_SendData(sEE_I2C, (uint8_t)((WriteAddr & 0xFF00) >> 8));
-
- /*!< Test on EV8 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send the EEPROM's internal address to write to : LSB of the address */
- I2C_SendData(sEE_I2C, (uint8_t)(WriteAddr & 0x00FF));
-
-#endif /*!< sEE_M24C08 */
-
- /*!< Test on EV8 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /* Configure the DMA Tx Channel with the buffer address and the buffer size */
- sEE_LowLevel_DMAConfig((uint32_t)pBuffer, (uint8_t)(*NumByteToWrite), sEE_DIRECTION_TX);
-
- /* Enable the DMA Tx Channel */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_TX, ENABLE);
-
- /* If all operations OK, return sEE_OK (0) */
- return sEE_OK;
-}
-
-/**
- * @brief Writes buffer of data to the I2C EEPROM.
- * @param pBuffer : pointer to the buffer containing the data to be written
- * to the EEPROM.
- * @param WriteAddr : EEPROM's internal address to write to.
- * @param NumByteToWrite : number of bytes to write to the EEPROM.
- * @retval None
- */
-void sEE_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite)
-{
- uint8_t NumOfPage = 0, NumOfSingle = 0, count = 0;
- uint16_t Addr = 0;
-
- Addr = WriteAddr % sEE_PAGESIZE;
- count = sEE_PAGESIZE - Addr;
- NumOfPage = NumByteToWrite / sEE_PAGESIZE;
- NumOfSingle = NumByteToWrite % sEE_PAGESIZE;
-
- /*!< If WriteAddr is sEE_PAGESIZE aligned */
- if(Addr == 0)
- {
- /*!< If NumByteToWrite < sEE_PAGESIZE */
- if(NumOfPage == 0)
- {
- /* Store the number of data to be written */
- sEEDataNum = NumOfSingle;
- /* Start writing data */
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- /*!< If NumByteToWrite > sEE_PAGESIZE */
- else
- {
- while(NumOfPage--)
- {
- /* Store the number of data to be written */
- sEEDataNum = sEE_PAGESIZE;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- WriteAddr += sEE_PAGESIZE;
- pBuffer += sEE_PAGESIZE;
- }
-
- if(NumOfSingle!=0)
- {
- /* Store the number of data to be written */
- sEEDataNum = NumOfSingle;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- }
- }
- /*!< If WriteAddr is not sEE_PAGESIZE aligned */
- else
- {
- /*!< If NumByteToWrite < sEE_PAGESIZE */
- if(NumOfPage== 0)
- {
- /*!< If the number of data to be written is more than the remaining space
- in the current page: */
- if (NumByteToWrite > count)
- {
- /* Store the number of data to be written */
- sEEDataNum = count;
- /*!< Write the data conained in same page */
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
-
- /* Store the number of data to be written */
- sEEDataNum = (NumByteToWrite - count);
- /*!< Write the remaining data in the following page */
- sEE_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- else
- {
- /* Store the number of data to be written */
- sEEDataNum = NumOfSingle;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- }
- /*!< If NumByteToWrite > sEE_PAGESIZE */
- else
- {
- NumByteToWrite -= count;
- NumOfPage = NumByteToWrite / sEE_PAGESIZE;
- NumOfSingle = NumByteToWrite % sEE_PAGESIZE;
-
- if(count != 0)
- {
- /* Store the number of data to be written */
- sEEDataNum = count;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- WriteAddr += count;
- pBuffer += count;
- }
-
- while(NumOfPage--)
- {
- /* Store the number of data to be written */
- sEEDataNum = sEE_PAGESIZE;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- WriteAddr += sEE_PAGESIZE;
- pBuffer += sEE_PAGESIZE;
- }
- if(NumOfSingle != 0)
- {
- /* Store the number of data to be written */
- sEEDataNum = NumOfSingle;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- }
- }
-}
-
-/**
- * @brief Wait for EEPROM Standby state.
- *
- * @note This function allows to wait and check that EEPROM has finished the
- * last Write operation. It is mostly used after Write operation: after
- * receiving the buffer to be written, the EEPROM may need additional
- * time to actually perform the write operation. During this time, it
- * doesn't answer to I2C packets addressed to it. Once the write operation
- * is complete the EEPROM responds to its address.
- *
- * @note It is not necessary to call this function after sEE_WriteBuffer()
- * function (sEE_WriteBuffer() already calls this function after each
- * write page operation).
- *
- * @param None
- * @retval sEE_OK (0) if operation is correctly performed, else return value
- * different from sEE_OK (0) or the timeout user callback.
- */
-uint32_t sEE_WaitEepromStandbyState(void)
-{
- __IO uint16_t tmpSR1 = 0;
- __IO uint32_t sEETrials = 0;
-
- /*!< While the bus is busy */
- sEETimeout = sEE_LONG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /* Keep looping till the slave acknowledge his address or maximum number
- of trials is reached (this number is defined by sEE_MAX_TRIALS_NUMBER define
- in stm32_eval_i2c_ee.h file) */
- while (1)
- {
- /*!< Send START condition */
- I2C_GenerateSTART(sEE_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send EEPROM address for write */
- I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter);
-
- /* Wait for ADDR flag to be set (Slave acknowledged his address) */
- sEETimeout = sEE_LONG_TIMEOUT;
- do
- {
- /* Get the current value of the SR1 register */
- tmpSR1 = sEE_I2C->SR1;
-
- /* Update the timeout value and exit if it reach 0 */
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
- /* Keep looping till the Address is acknowledged or the AF flag is
- set (address not acknowledged at time) */
- while((tmpSR1 & (I2C_SR1_ADDR | I2C_SR1_AF)) == 0);
-
- /* Check if the ADDR flag has been set */
- if (tmpSR1 & I2C_SR1_ADDR)
- {
- /* Clear ADDR Flag by reading SR1 then SR2 registers (SR1 have already
- been read) */
- (void)sEE_I2C->SR2;
-
- /*!< STOP condition */
- I2C_GenerateSTOP(sEE_I2C, ENABLE);
-
- /* Exit the function */
- return sEE_OK;
- }
- else
- {
- /*!< Clear AF flag */
- I2C_ClearFlag(sEE_I2C, I2C_FLAG_AF);
- }
-
- /* Check if the maximum allowed numbe of trials has bee reached */
- if (sEETrials++ == sEE_MAX_TRIALS_NUMBER)
- {
- /* If the maximum number of trials has been reached, exit the function */
- return sEE_TIMEOUT_UserCallback();
- }
- }
-}
-
-/**
- * @brief This function handles the DMA Tx Channel interrupt Handler.
- * @param None
- * @retval None
- */
-void sEE_I2C_DMA_TX_IRQHandler(void)
-{
- /* Check if the DMA transfer is complete */
- if(DMA_GetFlagStatus(sEE_I2C_DMA_FLAG_TX_TC) != RESET)
- {
- /* Disable the DMA Tx Channel and Clear all its Flags */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_TX, DISABLE);
- DMA_ClearFlag(sEE_I2C_DMA_FLAG_TX_GL);
-
- /*!< Wait till all data have been physically transferred on the bus */
- sEETimeout = sEE_LONG_TIMEOUT;
- while(!I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BTF))
- {
- if((sEETimeout--) == 0) sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send STOP condition */
- I2C_GenerateSTOP(sEE_I2C, ENABLE);
-
- /* Perform a read on SR1 and SR2 register to clear eventualaly pending flags */
- (void)sEE_I2C->SR1;
- (void)sEE_I2C->SR2;
-
- /* Reset the variable holding the number of data to be written */
- *sEEDataWritePointer = 0;
- }
-}
-
-/**
- * @brief This function handles the DMA Rx Channel interrupt Handler.
- * @param None
- * @retval None
- */
-void sEE_I2C_DMA_RX_IRQHandler(void)
-{
- /* Check if the DMA transfer is complete */
- if(DMA_GetFlagStatus(sEE_I2C_DMA_FLAG_RX_TC) != RESET)
- {
- /*!< Send STOP Condition */
- I2C_GenerateSTOP(sEE_I2C, ENABLE);
-
- /* Disable the DMA Rx Channel and Clear all its Flags */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_RX, DISABLE);
- DMA_ClearFlag(sEE_I2C_DMA_FLAG_RX_GL);
-
- /* Reset the variable holding the number of data to be read */
- *sEEDataReadPointer = 0;
- }
-}
-
-#ifdef USE_DEFAULT_TIMEOUT_CALLBACK
-/**
- * @brief Basic management of the timeout situation.
- * @param None.
- * @retval None.
- */
-uint32_t sEE_TIMEOUT_UserCallback(void)
-{
- /* Block communication and all processes */
- while (1)
- {
- }
-}
-#endif /* USE_DEFAULT_TIMEOUT_CALLBACK */
-
-#ifdef USE_DEFAULT_CRITICAL_CALLBACK
-/**
- * @brief Start critical section: these callbacks should be typically used
- * to disable interrupts when entering a critical section of I2C communication
- * You may use default callbacks provided into this driver by uncommenting the
- * define USE_DEFAULT_CRITICAL_CALLBACK.
- * Or you can comment that line and implement these callbacks into your
- * application.
- * @param None.
- * @retval None.
- */
-void sEE_EnterCriticalSection_UserCallback(void)
-{
- __disable_irq();
-}
-
-/**
- * @brief Start and End of critical section: these callbacks should be typically used
- * to re-enable interrupts when exiting a critical section of I2C communication
- * You may use default callbacks provided into this driver by uncommenting the
- * define USE_DEFAULT_CRITICAL_CALLBACK.
- * Or you can comment that line and implement these callbacks into your
- * application.
- * @param None.
- * @retval None.
- */
-void sEE_ExitCriticalSection_UserCallback(void)
-{
- __enable_irq();
-}
-#endif /* USE_DEFAULT_CRITICAL_CALLBACK */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_ee.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_ee.h
deleted file mode 100644
index fa00fb7..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_ee.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_i2c_ee.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm32_eval_i2c_ee
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32_EVAL_I2C_EE_H
-#define __STM32_EVAL_I2C_EE_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_I2C_EE
- * @{
- */
-
-/** @defgroup STM32_EVAL_I2C_EE_Exported_Types
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_I2C_EE_Exported_Constants
- * @{
- */
-
-/* Uncomment this line to use the default start and end of critical section
- callbacks (it disables then enabled all interrupts) */
-#define USE_DEFAULT_CRITICAL_CALLBACK
-/* Start and End of critical section: these callbacks should be typically used
- to disable interrupts when entering a critical section of I2C communication
- You may use default callbacks provided into this driver by uncommenting the
- define USE_DEFAULT_CRITICAL_CALLBACK.
- Or you can comment that line and implement these callbacks into your
- application */
-
-/* Uncomment the following line to use the default sEE_TIMEOUT_UserCallback()
- function implemented in stm32_evel_i2c_ee.c file.
- sEE_TIMEOUT_UserCallback() function is called whenever a timeout condition
- occure during communication (waiting on an event that doesn't occur, bus
- errors, busy devices ...). */
-/* #define USE_DEFAULT_TIMEOUT_CALLBACK */
-
-#if !defined (sEE_M24C08) && !defined (sEE_M24C64_32)
-/* Use the defines below the choose the EEPROM type */
-/* #define sEE_M24C08*/ /* Support the device: M24C08. */
-/* note: Could support: M24C01, M24C02, M24C04 and M24C16 if the blocks and
- HW address are correctly defined*/
-#define sEE_M24C64_32 /* Support the devices: M24C32 and M24C64 */
-#endif
-
-#ifdef sEE_M24C64_32
-/* For M24C32 and M24C64 devices, E0,E1 and E2 pins are all used for device
- address selection (ne need for additional address lines). According to the
- Harware connection on the board (on STM3210C-EVAL board E0 = E1 = E2 = 0) */
-
- #define sEE_HW_ADDRESS 0xA0 /* E0 = E1 = E2 = 0 */
-
-#elif defined (sEE_M24C08)
-/* The M24C08W contains 4 blocks (128byte each) with the adresses below: E2 = 0
- EEPROM Addresses defines */
- #define sEE_Block0_ADDRESS 0xA0 /* E2 = 0 */
- /*#define sEE_Block1_ADDRESS 0xA2*/ /* E2 = 0 */
- /*#define sEE_Block2_ADDRESS 0xA4*/ /* E2 = 0 */
- /*#define sEE_Block3_ADDRESS 0xA6*/ /* E2 = 0 */
-
-#endif /* sEE_M24C64_32 */
-
-#define I2C_SPEED 300000
-#define I2C_SLAVE_ADDRESS7 0xA0
-
-#if defined (sEE_M24C08)
- #define sEE_PAGESIZE 16
-#elif defined (sEE_M24C64_32)
- #define sEE_PAGESIZE 32
-#endif
-
-/* Maximum Timeout values for flags and events waiting loops. These timeouts are
- not based on accurate values, they just guarantee that the application will
- not remain stuck if the I2C communication is corrupted.
- You may modify these timeout values depending on CPU frequency and application
- conditions (interrupts routines ...). */
-#define sEE_FLAG_TIMEOUT ((uint32_t)0x1000)
-#define sEE_LONG_TIMEOUT ((uint32_t)(10 * sEE_FLAG_TIMEOUT))
-
-/* Maximum number of trials for sEE_WaitEepromStandbyState() function */
-#define sEE_MAX_TRIALS_NUMBER 150
-
-/* Defintions for the state of the DMA transfer */
-#define sEE_STATE_READY 0
-#define sEE_STATE_BUSY 1
-#define sEE_STATE_ERROR 2
-
-#define sEE_OK 0
-#define sEE_FAIL 1
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_I2C_EE_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_I2C_EE_Exported_Functions
- * @{
- */
-void sEE_DeInit(void);
-void sEE_Init(void);
-uint32_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead);
-uint32_t sEE_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite);
-void sEE_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite);
-uint32_t sEE_WaitEepromStandbyState(void);
-
-/* USER Callbacks: These are functions for which prototypes only are declared in
- EEPROM driver and that should be implemented into user applicaiton. */
-/* sEE_TIMEOUT_UserCallback() function is called whenever a timeout condition
- occure during communication (waiting on an event that doesn't occur, bus
- errors, busy devices ...).
- You can use the default timeout callback implementation by uncommenting the
- define USE_DEFAULT_TIMEOUT_CALLBACK in stm32_evel_i2c_ee.h file.
- Typically the user implementation of this callback should reset I2C peripheral
- and re-initialize communication or in worst case reset all the application. */
-uint32_t sEE_TIMEOUT_UserCallback(void);
-
-/* Start and End of critical section: these callbacks should be typically used
- to disable interrupts when entering a critical section of I2C communication
- You may use default callbacks provided into this driver by uncommenting the
- define USE_DEFAULT_CRITICAL_CALLBACK in stm32_evel_i2c_ee.h file..
- Or you can comment that line and implement these callbacks into your
- application */
-void sEE_EnterCriticalSection_UserCallback(void);
-void sEE_ExitCriticalSection_UserCallback(void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32_EVAL_I2C_EE_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
-
-
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_tsensor.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_tsensor.c
deleted file mode 100644
index 2db762e..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_i2c_tsensor.c
+++ /dev/null
@@ -1,977 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_i2c_tsensor.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides a set of functions needed to manage the I2C LM75
- * temperature sensor mounted on STM32xx-EVAL board (refer to stm32_eval.h
- * to know about the boards supporting this sensor).
- * It implements a high level communication layer for read and write
- * from/to this sensor. The needed STM32 hardware resources (I2C and
- * GPIO) are defined in stm32xx_eval.h file, and the initialization is
- * performed in LM75_LowLevel_Init() function declared in stm32xx_eval.c
- * file.
- *
- * Note:
- * -----
- * This driver uses the DMA method to send and receive data on I2C bus,
- * which allows higher efficiency and reliability of the communication.
- *
- * You can easily tailor this driver to any other development board,
- * by just adapting the defines for hardware resources and
- * LM75_LowLevel_Init() function.
- *
- * +-----------------------------------------------------------------+
- * | Pin assignment |
- * +---------------------------------------+-----------+-------------+
- * | STM32 I2C Pins | STLM75 | Pin |
- * +---------------------------------------+-----------+-------------+
- * | LM75_I2C_SDA_PIN/ SDA | SDA | 1 |
- * | LM75_I2C_SCL_PIN/ SCL | SCL | 2 |
- * | LM75_I2C_SMBUSALERT_PIN/ SMBUS ALERT | OS/INT | 3 |
- * | . | GND | 4 (0V) |
- * | . | GND | 5 (0V) |
- * | . | GND | 6 (0V) |
- * | . | GND | 7 (0V) |
- * | . | VDD | 8 (3.3V)|
- * +---------------------------------------+-----------+-------------+
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval_i2c_tsensor.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_I2C_TSENSOR
- * @brief This file includes the LM75 Temperature Sensor driver of
- * STM32-EVAL boards.
- * @{
- */
-
-/** @defgroup STM32_EVAL_I2C_TSENSOR_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_I2C_TSENSOR_Private_Defines
- * @{
- */
-#define LM75_SD_SET 0x01 /*!< Set SD bit in the configuration register */
-#define LM75_SD_RESET 0xFE /*!< Reset SD bit in the configuration register */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_I2C_TSENSOR_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_I2C_TSENSOR_Private_Variables
- * @{
- */
-
-__IO uint32_t LM75_Timeout = LM75_LONG_TIMEOUT;
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_I2C_TSENSOR_Private_Function_Prototypes
- * @{
- */
-static void LM75_DMA_Config(LM75_DMADirection_TypeDef Direction, uint8_t* buffer, uint8_t NumData);
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_I2C_TSENSOR_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the LM75_I2C.
- * @param None
- * @retval None
- */
-void LM75_DeInit(void)
-{
- LM75_LowLevel_DeInit();
-}
-
-/**
- * @brief Initializes the LM75_I2C.
- * @param None
- * @retval None
- */
-void LM75_Init(void)
-{
- I2C_InitTypeDef I2C_InitStructure;
-
- LM75_LowLevel_Init();
-
- I2C_DeInit(LM75_I2C);
-
- /*!< LM75_I2C Init */
- I2C_InitStructure.I2C_Mode = I2C_Mode_SMBusHost;
- I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
- I2C_InitStructure.I2C_OwnAddress1 = 0x00;
- I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
- I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
- I2C_InitStructure.I2C_ClockSpeed = LM75_I2C_SPEED;
- I2C_Init(LM75_I2C, &I2C_InitStructure);
-
- /*!< Enable SMBus Alert interrupt */
- I2C_ITConfig(LM75_I2C, I2C_IT_ERR, ENABLE);
-
- /*!< LM75_I2C Init */
- I2C_Cmd(LM75_I2C, ENABLE);
-}
-
-
-/**
- * @brief Configure the DMA Peripheral used to handle communication via I2C.
- * @param None
- * @retval None
- */
-
-static void LM75_DMA_Config(LM75_DMADirection_TypeDef Direction, uint8_t* buffer, uint8_t NumData)
-{
- DMA_InitTypeDef DMA_InitStructure;
-
- RCC_AHBPeriphClockCmd(LM75_DMA_CLK, ENABLE);
-
- /* Initialize the DMA_PeripheralBaseAddr member */
- DMA_InitStructure.DMA_PeripheralBaseAddr = LM75_I2C_DR;
- /* Initialize the DMA_MemoryBaseAddr member */
- DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)buffer;
- /* Initialize the DMA_PeripheralInc member */
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- /* Initialize the DMA_MemoryInc member */
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- /* Initialize the DMA_PeripheralDataSize member */
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
- /* Initialize the DMA_MemoryDataSize member */
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- /* Initialize the DMA_Mode member */
- DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
- /* Initialize the DMA_Priority member */
- DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
- /* Initialize the DMA_M2M member */
- DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
-
- /* If using DMA for Reception */
- if (Direction == LM75_DMA_RX)
- {
- /* Initialize the DMA_DIR member */
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
-
- /* Initialize the DMA_BufferSize member */
- DMA_InitStructure.DMA_BufferSize = NumData;
-
- DMA_DeInit(LM75_DMA_RX_CHANNEL);
-
- DMA_Init(LM75_DMA_RX_CHANNEL, &DMA_InitStructure);
- }
- /* If using DMA for Transmission */
- else if (Direction == LM75_DMA_TX)
- {
- /* Initialize the DMA_DIR member */
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
-
- /* Initialize the DMA_BufferSize member */
- DMA_InitStructure.DMA_BufferSize = NumData;
-
- DMA_DeInit(LM75_DMA_TX_CHANNEL);
-
- DMA_Init(LM75_DMA_TX_CHANNEL, &DMA_InitStructure);
- }
-}
-
-
-/**
- * @brief Checks the LM75 status.
- * @param None
- * @retval ErrorStatus: LM75 Status (ERROR or SUCCESS).
- */
-ErrorStatus LM75_GetStatus(void)
-{
- uint32_t I2C_TimeOut = I2C_TIMEOUT;
-
- /*!< Clear the LM75_I2C AF flag */
- I2C_ClearFlag(LM75_I2C, I2C_FLAG_AF);
-
- /*!< Enable LM75_I2C acknowledgement if it is already disabled by other function */
- I2C_AcknowledgeConfig(LM75_I2C, ENABLE);
-
- /*---------------------------- Transmission Phase ---------------------------*/
-
- /*!< Send LM75_I2C START condition */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /*!< Test on LM75_I2C EV5 and clear it */
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB)) && I2C_TimeOut) /*!< EV5 */
- {
- I2C_TimeOut--;
- }
- if (I2C_TimeOut == 0)
- {
- return ERROR;
- }
-
- I2C_TimeOut = I2C_TIMEOUT;
-
- /*!< Send STLM75 slave address for write */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
-
- while ((!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) && I2C_TimeOut)/* EV6 */
- {
- I2C_TimeOut--;
- }
-
- if ((I2C_GetFlagStatus(LM75_I2C, I2C_FLAG_AF) != 0x00) || (I2C_TimeOut == 0))
- {
- return ERROR;
- }
- else
- {
- return SUCCESS;
- }
-}
-/**
- * @brief Read the specified register from the LM75.
- * @param RegName: specifies the LM75 register to be read.
- * This member can be one of the following values:
- * - LM75_REG_TEMP: temperature register
- * - LM75_REG_TOS: Over-limit temperature register
- * - LM75_REG_THYS: Hysteresis temperature register
- * @retval LM75 register value.
- */
-uint16_t LM75_ReadReg(uint8_t RegName)
-{
- uint8_t LM75_BufferRX[2] ={0,0};
- uint16_t tmp = 0;
-
- /* Test on BUSY Flag */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Configure DMA Peripheral */
- LM75_DMA_Config(LM75_DMA_RX, (uint8_t*)LM75_BufferRX, 2);
-
- /* Enable DMA NACK automatic generation */
- I2C_DMALastTransferCmd(LM75_I2C, ENABLE);
-
- /* Enable the I2C peripheral */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send device address for write */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send the device's internal address to write to */
- I2C_SendData(LM75_I2C, RegName);
-
- /* Test on TXE FLag (data sent) */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send START condition a second time */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send LM75 address for read */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Receiver);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Enable I2C DMA request */
- I2C_DMACmd(LM75_I2C,ENABLE);
-
- /* Enable DMA RX Channel */
- DMA_Cmd(LM75_DMA_RX_CHANNEL, ENABLE);
-
- /* Wait until DMA Transfer Complete */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (!DMA_GetFlagStatus(LM75_DMA_RX_TCFLAG))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(LM75_I2C, ENABLE);
-
- /* Disable DMA RX Channel */
- DMA_Cmd(LM75_DMA_RX_CHANNEL, DISABLE);
-
- /* Disable I2C DMA request */
- I2C_DMACmd(LM75_I2C,DISABLE);
-
- /* Clear DMA RX Transfer Complete Flag */
- DMA_ClearFlag(LM75_DMA_RX_TCFLAG);
-
- /*!< Store LM75_I2C received data */
- tmp = (uint16_t)(LM75_BufferRX[0] << 8);
- tmp |= LM75_BufferRX[1];
-
- /* return a Reg value */
- return (uint16_t)tmp;
-}
-
-/**
- * @brief Write to the specified register of the LM75.
- * @param RegName: specifies the LM75 register to be written.
- * This member can be one of the following values:
- * - LM75_REG_TOS: Over-limit temperature register
- * - LM75_REG_THYS: Hysteresis temperature register
- * @param RegValue: value to be written to LM75 register.
- * @retval None
- */
-uint8_t LM75_WriteReg(uint8_t RegName, uint16_t RegValue)
-{
- uint8_t LM75_BufferTX[2] ={0,0};
- LM75_BufferTX[0] = (uint8_t)(RegValue >> 8);
- LM75_BufferTX[1] = (uint8_t)(RegValue);
-
- /* Test on BUSY Flag */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Configure DMA Peripheral */
- LM75_DMA_Config(LM75_DMA_TX, (uint8_t*)LM75_BufferTX, 2);
-
- /* Enable the I2C peripheral */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB) == RESET)
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Transmit the slave address and enable writing operation */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Transmit the first address for r/w operations */
- I2C_SendData(LM75_I2C, RegName);
-
- /* Test on TXE FLag (data sent) */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Enable I2C DMA request */
- I2C_DMACmd(LM75_I2C,ENABLE);
-
- /* Enable DMA TX Channel */
- DMA_Cmd(LM75_DMA_TX_CHANNEL, ENABLE);
-
- /* Wait until DMA Transfer Complete */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (!DMA_GetFlagStatus(LM75_DMA_TX_TCFLAG))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Wait until BTF Flag is set before generating STOP */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(LM75_I2C, ENABLE);
-
- /* Disable DMA TX Channel */
- DMA_Cmd(LM75_DMA_TX_CHANNEL, DISABLE);
-
- /* Disable I2C DMA request */
- I2C_DMACmd(LM75_I2C,DISABLE);
-
- /* Clear DMA TX Transfer Complete Flag */
- DMA_ClearFlag(LM75_DMA_TX_TCFLAG);
-
- return LM75_OK;
-}
-
-/**
- * @brief Read Temperature register of LM75: double temperature value.
- * @param None
- * @retval LM75 measured temperature value.
- */
-uint16_t LM75_ReadTemp(void)
-{
- uint8_t LM75_BufferRX[2] ={0,0};
- uint16_t tmp = 0;
-
- /* Test on BUSY Flag */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Configure DMA Peripheral */
- LM75_DMA_Config(LM75_DMA_RX, (uint8_t*)LM75_BufferRX, 2);
-
- /* Enable DMA NACK automatic generation */
- I2C_DMALastTransferCmd(LM75_I2C, ENABLE);
-
- /* Enable the I2C peripheral */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send device address for write */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send the device's internal address to write to */
- I2C_SendData(LM75_I2C, LM75_REG_TEMP);
-
- /* Test on TXE FLag (data sent) */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send START condition a second time */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send LM75 address for read */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Receiver);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Enable I2C DMA request */
- I2C_DMACmd(LM75_I2C,ENABLE);
-
- /* Enable DMA RX Channel */
- DMA_Cmd(LM75_DMA_RX_CHANNEL, ENABLE);
-
- /* Wait until DMA Transfer Complete */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (!DMA_GetFlagStatus(LM75_DMA_RX_TCFLAG))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(LM75_I2C, ENABLE);
-
- /* Disable DMA RX Channel */
- DMA_Cmd(LM75_DMA_RX_CHANNEL, DISABLE);
-
- /* Disable I2C DMA request */
- I2C_DMACmd(LM75_I2C,DISABLE);
-
- /* Clear DMA RX Transfer Complete Flag */
- DMA_ClearFlag(LM75_DMA_RX_TCFLAG);
-
- /*!< Store LM75_I2C received data */
- tmp = (uint16_t)(LM75_BufferRX[0] << 8);
- tmp |= LM75_BufferRX[1];
-
- /*!< Return Temperature value */
- return (uint16_t)(tmp >> 7);
-}
-
-/**
- * @brief Read the configuration register from the LM75.
- * @param None
- * @retval LM75 configuration register value.
- */
-uint8_t LM75_ReadConfReg(void)
-{
- uint8_t LM75_BufferRX[2] ={0,0};
-
- /* Test on BUSY Flag */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Configure DMA Peripheral */
- LM75_DMA_Config(LM75_DMA_RX, (uint8_t*)LM75_BufferRX, 2);
-
- /* Enable DMA NACK automatic generation */
- I2C_DMALastTransferCmd(LM75_I2C, ENABLE);
-
- /* Enable the I2C peripheral */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send device address for write */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send the device's internal address to write to */
- I2C_SendData(LM75_I2C, LM75_REG_CONF);
-
- /* Test on TXE FLag (data sent) */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send START condition a second time */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send LM75 address for read */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Receiver);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Enable I2C DMA request */
- I2C_DMACmd(LM75_I2C,ENABLE);
-
- /* Enable DMA RX Channel */
- DMA_Cmd(LM75_DMA_RX_CHANNEL, ENABLE);
-
- /* Wait until DMA Transfer Complete */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (!DMA_GetFlagStatus(LM75_DMA_RX_TCFLAG))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(LM75_I2C, ENABLE);
-
- /* Disable DMA RX Channel */
- DMA_Cmd(LM75_DMA_RX_CHANNEL, DISABLE);
-
- /* Disable I2C DMA request */
- I2C_DMACmd(LM75_I2C,DISABLE);
-
- /* Clear DMA RX Transfer Complete Flag */
- DMA_ClearFlag(LM75_DMA_RX_TCFLAG);
-
- /*!< Return Temperature value */
- return (uint8_t)LM75_BufferRX[0];
-}
-
-/**
- * @brief Write to the configuration register of the LM75.
- * @param RegValue: sepecifies the value to be written to LM75 configuration
- * register.
- * @retval None
- */
-uint8_t LM75_WriteConfReg(uint8_t RegValue)
-{
- uint8_t LM75_BufferTX = 0;
- LM75_BufferTX = (uint8_t)(RegValue);
-
- /* Test on BUSY Flag */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Configure DMA Peripheral */
- LM75_DMA_Config(LM75_DMA_TX, (uint8_t*)(&LM75_BufferTX), 1);
-
- /* Enable the I2C peripheral */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB) == RESET)
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Transmit the slave address and enable writing operation */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Transmit the first address for r/w operations */
- I2C_SendData(LM75_I2C, LM75_REG_CONF);
-
- /* Test on TXE FLag (data sent) */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Enable I2C DMA request */
- I2C_DMACmd(LM75_I2C,ENABLE);
-
- /* Enable DMA TX Channel */
- DMA_Cmd(LM75_DMA_TX_CHANNEL, ENABLE);
-
- /* Wait until DMA Transfer Complete */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (!DMA_GetFlagStatus(LM75_DMA_TX_TCFLAG))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Wait until BTF Flag is set before generating STOP */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(LM75_I2C, ENABLE);
-
- /* Disable DMA TX Channel */
- DMA_Cmd(LM75_DMA_TX_CHANNEL, DISABLE);
-
- /* Disable I2C DMA request */
- I2C_DMACmd(LM75_I2C,DISABLE);
-
- /* Clear DMA TX Transfer Complete Flag */
- DMA_ClearFlag(LM75_DMA_TX_TCFLAG);
-
- return LM75_OK;
-
-}
-
-/**
- * @brief Enables or disables the LM75.
- * @param NewState: specifies the LM75 new status. This parameter can be ENABLE
- * or DISABLE.
- * @retval None
- */
-uint8_t LM75_ShutDown(FunctionalState NewState)
-{
- uint8_t LM75_BufferRX[2] ={0,0};
- uint8_t LM75_BufferTX = 0;
- __IO uint8_t RegValue = 0;
-
- /* Test on BUSY Flag */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Configure DMA Peripheral */
- LM75_DMA_Config(LM75_DMA_RX, (uint8_t*)LM75_BufferRX, 2);
-
- /* Enable DMA NACK automatic generation */
- I2C_DMALastTransferCmd(LM75_I2C, ENABLE);
-
- /* Enable the I2C peripheral */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send device address for write */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send the device's internal address to write to */
- I2C_SendData(LM75_I2C, LM75_REG_CONF);
-
- /* Test on TXE FLag (data sent) */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send START condition a second time */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send LM75 address for read */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Receiver);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Enable I2C DMA request */
- I2C_DMACmd(LM75_I2C,ENABLE);
-
- /* Enable DMA RX Channel */
- DMA_Cmd(LM75_DMA_RX_CHANNEL, ENABLE);
-
- /* Wait until DMA Transfer Complete */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (!DMA_GetFlagStatus(LM75_DMA_RX_TCFLAG))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(LM75_I2C, ENABLE);
-
- /* Disable DMA RX Channel */
- DMA_Cmd(LM75_DMA_RX_CHANNEL, DISABLE);
-
- /* Disable I2C DMA request */
- I2C_DMACmd(LM75_I2C,DISABLE);
-
- /* Clear DMA RX Transfer Complete Flag */
- DMA_ClearFlag(LM75_DMA_RX_TCFLAG);
-
- /*!< Get received data */
- RegValue = (uint8_t)LM75_BufferRX[0];
-
- /*---------------------------- Transmission Phase ---------------------------*/
-
- /*!< Enable or disable SD bit */
- if (NewState != DISABLE)
- {
- /*!< Enable LM75 */
- LM75_BufferTX = RegValue & LM75_SD_RESET;
- }
- else
- {
- /*!< Disable LM75 */
- LM75_BufferTX = RegValue | LM75_SD_SET;
- }
-
- /* Test on BUSY Flag */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Configure DMA Peripheral */
- LM75_DMA_Config(LM75_DMA_TX, (uint8_t*)(&LM75_BufferTX), 1);
-
- /* Enable the I2C peripheral */
- I2C_GenerateSTART(LM75_I2C, ENABLE);
-
- /* Test on SB Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB) == RESET)
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Transmit the slave address and enable writing operation */
- I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
-
- /* Test on ADDR Flag */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Transmit the first address for r/w operations */
- I2C_SendData(LM75_I2C, LM75_REG_CONF);
-
- /* Test on TXE FLag (data sent) */
- LM75_Timeout = LM75_FLAG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Enable I2C DMA request */
- I2C_DMACmd(LM75_I2C,ENABLE);
-
- /* Enable DMA TX Channel */
- DMA_Cmd(LM75_DMA_TX_CHANNEL, ENABLE);
-
- /* Wait until DMA Transfer Complete */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while (!DMA_GetFlagStatus(LM75_DMA_TX_TCFLAG))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Wait until BTF Flag is set before generating STOP */
- LM75_Timeout = LM75_LONG_TIMEOUT;
- while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
- {
- if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
- }
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(LM75_I2C, ENABLE);
-
- /* Disable DMA TX Channel */
- DMA_Cmd(LM75_DMA_TX_CHANNEL, DISABLE);
-
- /* Disable I2C DMA request */
- I2C_DMACmd(LM75_I2C,DISABLE);
-
- /* Clear DMA TX Transfer Complete Flag */
- DMA_ClearFlag(LM75_DMA_TX_TCFLAG);
-
- return LM75_OK;
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_sdio_sd.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_sdio_sd.c
deleted file mode 100644
index 424d2d3..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_sdio_sd.c
+++ /dev/null
@@ -1,2502 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_sdio_sd.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides a set of functions needed to manage the SDIO SD
- * Card memory mounted on STM32xx-EVAL board (refer to stm32_eval.h
- * to know about the boards supporting this memory).
- *
- *
- * @verbatim
- *
- * ===================================================================
- * How to use this driver
- * ===================================================================
- * It implements a high level communication layer for read and write
- * from/to this memory. The needed STM32 hardware resources (SDIO and
- * GPIO) are defined in stm32xx_eval.h file, and the initialization is
- * performed in SD_LowLevel_Init() function declared in stm32xx_eval.c
- * file.
- * You can easily tailor this driver to any other development board,
- * by just adapting the defines for hardware resources and
- * SD_LowLevel_Init() function.
- *
- * A - SD Card Initialization and configuration
- * ============================================
- * - To initialize the SD Card, use the SD_Init() function. It
- * Initializes the SD Card and put it into StandBy State (Ready
- * for data transfer). This function provide the following operations:
- *
- * 1 - Apply the SD Card initialization process at 400KHz and check
- * the SD Card type (Standard Capacity or High Capacity). You
- * can change or adapt this frequency by adjusting the
- * "SDIO_INIT_CLK_DIV" define inside the stm32xx_eval.h file.
- * The SD Card frequency (SDIO_CK) is computed as follows:
- *
- * +---------------------------------------------+
- * | SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) |
- * +---------------------------------------------+
- *
- * In initialization mode and according to the SD Card standard,
- * make sure that the SDIO_CK frequency don't exceed 400KHz.
- *
- * 2 - Get the SD CID and CSD data. All these information are
- * managed by the SDCardInfo structure. This structure provide
- * also ready computed SD Card capacity and Block size.
- *
- * 3 - Configure the SD Card Data transfer frequency. By Default,
- * the card transfer frequency is set to 24MHz. You can change
- * or adapt this frequency by adjusting the "SDIO_TRANSFER_CLK_DIV"
- * define inside the stm32xx_eval.h file.
- * The SD Card frequency (SDIO_CK) is computed as follows:
- *
- * +---------------------------------------------+
- * | SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) |
- * +---------------------------------------------+
- *
- * In transfer mode and according to the SD Card standard,
- * make sure that the SDIO_CK frequency don't exceed 25MHz
- * and 50MHz in High-speed mode switch.
- * To be able to use a frequency higher than 24MHz, you should
- * use the SDIO peripheral in bypass mode. Refer to the
- * corresponding reference manual for more details.
- *
- * 4 - Select the corresponding SD Card according to the address
- * read with the step 2.
- *
- * 5 - Configure the SD Card in wide bus mode: 4-bits data.
- *
- * B - SD Card Read operation
- * ==========================
- * - You can read SD card by using two function: SD_ReadBlock() and
- * SD_ReadMultiBlocks() functions. These functions support only
- * 512-byte block length.
- * - The SD_ReadBlock() function read only one block (512-byte). This
- * function can transfer the data using DMA controller or using
- * polling mode. To select between DMA or polling mode refer to
- * "SD_DMA_MODE" or "SD_POLLING_MODE" inside the stm32_eval_sdio_sd.h
- * file and uncomment the corresponding line. By default the SD DMA
- * mode is selected
- * - The SD_ReadMultiBlocks() function read only mutli blocks (multiple
- * of 512-byte).
- * - Any read operation should be followed by two functions to check
- * if the DMA Controller and SD Card status.
- * - SD_ReadWaitOperation(): this function insure that the DMA
- * controller has finished all data transfer.
- * - SD_GetStatus(): to check that the SD Card has finished the
- * data transfer and it is ready for data.
- *
- * - The DMA transfer is finished by the SDIO Data End interrupt. User
- * has to call the SD_ProcessIRQ() function inside the SDIO_IRQHandler().
- * Don't forget to enable the SDIO_IRQn interrupt using the NVIC controller.
- *
- * C - SD Card Write operation
- * ===========================
- * - You can write SD card by using two function: SD_WriteBlock() and
- * SD_WriteMultiBlocks() functions. These functions support only
- * 512-byte block length.
- * - The SD_WriteBlock() function write only one block (512-byte). This
- * function can transfer the data using DMA controller or using
- * polling mode. To select between DMA or polling mode refer to
- * "SD_DMA_MODE" or "SD_POLLING_MODE" inside the stm32_eval_sdio_sd.h
- * file and uncomment the corresponding line. By default the SD DMA
- * mode is selected
- * - The SD_WriteMultiBlocks() function write only mutli blocks (multiple
- * of 512-byte).
- * - Any write operation should be followed by two functions to check
- * if the DMA Controller and SD Card status.
- * - SD_ReadWaitOperation(): this function insure that the DMA
- * controller has finished all data transfer.
- * - SD_GetStatus(): to check that the SD Card has finished the
- * data transfer and it is ready for data.
- *
- * - The DMA transfer is finished by the SDIO Data End interrupt. User
- * has to call the SD_ProcessIRQ() function inside the SDIO_IRQHandler().
- * Don't forget to enable the SDIO_IRQn interrupt using the NVIC controller.
-
- *
- * D - SD card status
- * ==================
- * - At any time, you can check the SD Card status and get the SD card
- * state by using the SD_GetStatus() function. This function checks
- * first if the SD card is still connected and then get the internal
- * SD Card transfer state.
- * - You can also get the SD card SD Status register by using the
- * SD_SendSDStatus() function.
- *
- * E - Programming Model
- * =====================
- * Status = SD_Init(); // Initialization Step as described in section A
- *
- * // SDIO Interrupt ENABLE
- * NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
- * NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- * NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- * NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- * NVIC_Init(&NVIC_InitStructure);
- *
- * // Write operation as described in Section C
- * Status = SD_WriteBlock(buffer, address, 512);
- * Status = SD_WaitWriteOperation();
- * while(SD_GetStatus() != SD_TRANSFER_OK);
- *
- * Status = SD_WriteMultiBlocks(buffer, address, 512, NUMBEROFBLOCKS);
- * Status = SD_WaitWriteOperation();
- * while(SD_GetStatus() != SD_TRANSFER_OK);
- *
- * // Read operation as described in Section B
- * Status = SD_ReadBlock(buffer, address, 512);
- * Status = SD_WaitReadOperation();
- * while(SD_GetStatus() != SD_TRANSFER_OK);
- *
- * Status = SD_ReadMultiBlocks(buffer, address, 512, NUMBEROFBLOCKS);
- * Status = SD_WaitReadOperation();
- * while(SD_GetStatus() != SD_TRANSFER_OK);
- *
- *
- * STM32 SDIO Pin assignment
- * =========================
- * +-----------------------------------------------------------+
- * | Pin assignment |
- * +-----------------------------+---------------+-------------+
- * | STM32 SDIO Pins | SD | Pin |
- * +-----------------------------+---------------+-------------+
- * | SDIO D2 | D2 | 1 |
- * | SDIO D3 | D3 | 2 |
- * | SDIO CMD | CMD | 3 |
- * | | VCC | 4 (3.3 V)|
- * | SDIO CLK | CLK | 5 |
- * | | GND | 6 (0 V) |
- * | SDIO D0 | D0 | 7 |
- * | SDIO D1 | D1 | 8 |
- * +-----------------------------+---------------+-------------+
- *
- * @endverbatim
- *
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval_sdio_sd.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_SDIO_SD
- * @brief This file provides all the SD Card driver firmware functions.
- * @{
- */
-
-/** @defgroup STM32_EVAL_SDIO_SD_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SDIO_SD_Private_Defines
- * @{
- */
-/**
- * @brief SDIO Static flags, TimeOut, FIFO Address
- */
-#define NULL 0
-#define SDIO_STATIC_FLAGS ((uint32_t)0x000005FF)
-#define SDIO_CMD0TIMEOUT ((uint32_t)0x00010000)
-
-/**
- * @brief Mask for errors Card Status R1 (OCR Register)
- */
-#define SD_OCR_ADDR_OUT_OF_RANGE ((uint32_t)0x80000000)
-#define SD_OCR_ADDR_MISALIGNED ((uint32_t)0x40000000)
-#define SD_OCR_BLOCK_LEN_ERR ((uint32_t)0x20000000)
-#define SD_OCR_ERASE_SEQ_ERR ((uint32_t)0x10000000)
-#define SD_OCR_BAD_ERASE_PARAM ((uint32_t)0x08000000)
-#define SD_OCR_WRITE_PROT_VIOLATION ((uint32_t)0x04000000)
-#define SD_OCR_LOCK_UNLOCK_FAILED ((uint32_t)0x01000000)
-#define SD_OCR_COM_CRC_FAILED ((uint32_t)0x00800000)
-#define SD_OCR_ILLEGAL_CMD ((uint32_t)0x00400000)
-#define SD_OCR_CARD_ECC_FAILED ((uint32_t)0x00200000)
-#define SD_OCR_CC_ERROR ((uint32_t)0x00100000)
-#define SD_OCR_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00080000)
-#define SD_OCR_STREAM_READ_UNDERRUN ((uint32_t)0x00040000)
-#define SD_OCR_STREAM_WRITE_OVERRUN ((uint32_t)0x00020000)
-#define SD_OCR_CID_CSD_OVERWRIETE ((uint32_t)0x00010000)
-#define SD_OCR_WP_ERASE_SKIP ((uint32_t)0x00008000)
-#define SD_OCR_CARD_ECC_DISABLED ((uint32_t)0x00004000)
-#define SD_OCR_ERASE_RESET ((uint32_t)0x00002000)
-#define SD_OCR_AKE_SEQ_ERROR ((uint32_t)0x00000008)
-#define SD_OCR_ERRORBITS ((uint32_t)0xFDFFE008)
-
-/**
- * @brief Masks for R6 Response
- */
-#define SD_R6_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00002000)
-#define SD_R6_ILLEGAL_CMD ((uint32_t)0x00004000)
-#define SD_R6_COM_CRC_FAILED ((uint32_t)0x00008000)
-
-#define SD_VOLTAGE_WINDOW_SD ((uint32_t)0x80100000)
-#define SD_HIGH_CAPACITY ((uint32_t)0x40000000)
-#define SD_STD_CAPACITY ((uint32_t)0x00000000)
-#define SD_CHECK_PATTERN ((uint32_t)0x000001AA)
-
-#define SD_MAX_VOLT_TRIAL ((uint32_t)0x0000FFFF)
-#define SD_ALLZERO ((uint32_t)0x00000000)
-
-#define SD_WIDE_BUS_SUPPORT ((uint32_t)0x00040000)
-#define SD_SINGLE_BUS_SUPPORT ((uint32_t)0x00010000)
-#define SD_CARD_LOCKED ((uint32_t)0x02000000)
-
-#define SD_DATATIMEOUT ((uint32_t)0xFFFFFFFF)
-#define SD_0TO7BITS ((uint32_t)0x000000FF)
-#define SD_8TO15BITS ((uint32_t)0x0000FF00)
-#define SD_16TO23BITS ((uint32_t)0x00FF0000)
-#define SD_24TO31BITS ((uint32_t)0xFF000000)
-#define SD_MAX_DATA_LENGTH ((uint32_t)0x01FFFFFF)
-
-#define SD_HALFFIFO ((uint32_t)0x00000008)
-#define SD_HALFFIFOBYTES ((uint32_t)0x00000020)
-
-/**
- * @brief Command Class Supported
- */
-#define SD_CCCC_LOCK_UNLOCK ((uint32_t)0x00000080)
-#define SD_CCCC_WRITE_PROT ((uint32_t)0x00000040)
-#define SD_CCCC_ERASE ((uint32_t)0x00000020)
-
-/**
- * @brief Following commands are SD Card Specific commands.
- * SDIO_APP_CMD should be sent before sending these commands.
- */
-#define SDIO_SEND_IF_COND ((uint32_t)0x00000008)
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SDIO_SD_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SDIO_SD_Private_Variables
- * @{
- */
-static uint32_t CardType = SDIO_STD_CAPACITY_SD_CARD_V1_1;
-static uint32_t CSD_Tab[4], CID_Tab[4], RCA = 0;
-static uint8_t SDSTATUS_Tab[16];
-__IO uint32_t StopCondition = 0;
-__IO SD_Error TransferError = SD_OK;
-__IO uint32_t TransferEnd = 0;
-SD_CardInfo SDCardInfo;
-
-SDIO_InitTypeDef SDIO_InitStructure;
-SDIO_CmdInitTypeDef SDIO_CmdInitStructure;
-SDIO_DataInitTypeDef SDIO_DataInitStructure;
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SDIO_SD_Private_Function_Prototypes
- * @{
- */
-static SD_Error CmdError(void);
-static SD_Error CmdResp1Error(uint8_t cmd);
-static SD_Error CmdResp7Error(void);
-static SD_Error CmdResp3Error(void);
-static SD_Error CmdResp2Error(void);
-static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca);
-static SD_Error SDEnWideBus(FunctionalState NewState);
-static SD_Error IsCardProgramming(uint8_t *pstatus);
-static SD_Error FindSCR(uint16_t rca, uint32_t *pscr);
-uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes);
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SDIO_SD_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the SDIO interface.
- * @param None
- * @retval None
- */
-void SD_DeInit(void)
-{
- SD_LowLevel_DeInit();
-}
-
-/**
- * @brief Initializes the SD Card and put it into StandBy State (Ready for data
- * transfer).
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_Init(void)
-{
- SD_Error errorstatus = SD_OK;
-
- /* SDIO Peripheral Low Level Init */
- SD_LowLevel_Init();
-
- SDIO_DeInit();
-
- errorstatus = SD_PowerON();
-
- if (errorstatus != SD_OK)
- {
- /*!< CMD Response TimeOut (wait for CMDSENT flag) */
- return(errorstatus);
- }
-
- errorstatus = SD_InitializeCards();
-
- if (errorstatus != SD_OK)
- {
- /*!< CMD Response TimeOut (wait for CMDSENT flag) */
- return(errorstatus);
- }
-
- /*!< Configure the SDIO peripheral */
- /*!< SDIOCLK = HCLK, SDIO_CK = HCLK/(2 + SDIO_TRANSFER_CLK_DIV) */
- /*!< on STM32F2xx devices, SDIOCLK is fixed to 48MHz */
- SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
- SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
- SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
- SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
- SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
- SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
- SDIO_Init(&SDIO_InitStructure);
-
- if (errorstatus == SD_OK)
- {
- /*----------------- Read CSD/CID MSD registers ------------------*/
- errorstatus = SD_GetCardInfo(&SDCardInfo);
- }
-
- if (errorstatus == SD_OK)
- {
- /*----------------- Select Card --------------------------------*/
- errorstatus = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16));
- }
-
- if (errorstatus == SD_OK)
- {
- errorstatus = SD_EnableWideBusOperation(SDIO_BusWide_4b);
- }
-
- return(errorstatus);
-}
-
-/**
- * @brief Gets the cuurent sd card data transfer status.
- * @param None
- * @retval SDTransferState: Data Transfer state.
- * This value can be:
- * - SD_TRANSFER_OK: No data transfer is acting
- * - SD_TRANSFER_BUSY: Data transfer is acting
- */
-SDTransferState SD_GetStatus(void)
-{
- SDCardState cardstate = SD_CARD_TRANSFER;
-
- cardstate = SD_GetState();
-
- if (cardstate == SD_CARD_TRANSFER)
- {
- return(SD_TRANSFER_OK);
- }
- else if(cardstate == SD_CARD_ERROR)
- {
- return (SD_TRANSFER_ERROR);
- }
- else
- {
- return(SD_TRANSFER_BUSY);
- }
-}
-
-/**
- * @brief Returns the current card's state.
- * @param None
- * @retval SDCardState: SD Card Error or SD Card Current State.
- */
-SDCardState SD_GetState(void)
-{
- uint32_t resp1 = 0;
-
- if(SD_Detect()== SD_PRESENT)
- {
- if (SD_SendStatus(&resp1) != SD_OK)
- {
- return SD_CARD_ERROR;
- }
- else
- {
- return (SDCardState)((resp1 >> 9) & 0x0F);
- }
- }
- else
- {
- return SD_CARD_ERROR;
- }
-}
-
-/**
- * @brief Detect if SD card is correctly plugged in the memory slot.
- * @param None
- * @retval Return if SD is detected or not
- */
-uint8_t SD_Detect(void)
-{
- __IO uint8_t status = SD_PRESENT;
-
- /*!< Check GPIO to detect SD */
- if (GPIO_ReadInputDataBit(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != Bit_RESET)
- {
- status = SD_NOT_PRESENT;
- }
- return status;
-}
-
-/**
- * @brief Enquires cards about their operating voltage and configures
- * clock controls.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_PowerON(void)
-{
- SD_Error errorstatus = SD_OK;
- uint32_t response = 0, count = 0, validvoltage = 0;
- uint32_t SDType = SD_STD_CAPACITY;
-
- /*!< Power ON Sequence -----------------------------------------------------*/
- /*!< Configure the SDIO peripheral */
- /*!< SDIOCLK = HCLK, SDIO_CK = HCLK/(2 + SDIO_INIT_CLK_DIV) */
- /*!< on STM32F2xx devices, SDIOCLK is fixed to 48MHz */
- /*!< SDIO_CK for initialization should not exceed 400 KHz */
- SDIO_InitStructure.SDIO_ClockDiv = SDIO_INIT_CLK_DIV;
- SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
- SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
- SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
- SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
- SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
- SDIO_Init(&SDIO_InitStructure);
-
- /*!< Set Power State to ON */
- SDIO_SetPowerState(SDIO_PowerState_ON);
-
- /*!< Enable SDIO Clock */
- SDIO_ClockCmd(ENABLE);
-
- /*!< CMD0: GO_IDLE_STATE ---------------------------------------------------*/
- /*!< No CMD response required */
- SDIO_CmdInitStructure.SDIO_Argument = 0x0;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_GO_IDLE_STATE;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_No;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdError();
-
- if (errorstatus != SD_OK)
- {
- /*!< CMD Response TimeOut (wait for CMDSENT flag) */
- return(errorstatus);
- }
-
- /*!< CMD8: SEND_IF_COND ----------------------------------------------------*/
- /*!< Send CMD8 to verify SD card interface operating condition */
- /*!< Argument: - [31:12]: Reserved (shall be set to '0')
- - [11:8]: Supply Voltage (VHS) 0x1 (Range: 2.7-3.6 V)
- - [7:0]: Check Pattern (recommended 0xAA) */
- /*!< CMD Response: R7 */
- SDIO_CmdInitStructure.SDIO_Argument = SD_CHECK_PATTERN;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SEND_IF_COND;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp7Error();
-
- if (errorstatus == SD_OK)
- {
- CardType = SDIO_STD_CAPACITY_SD_CARD_V2_0; /*!< SD Card 2.0 */
- SDType = SD_HIGH_CAPACITY;
- }
- else
- {
- /*!< CMD55 */
- SDIO_CmdInitStructure.SDIO_Argument = 0x00;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
- errorstatus = CmdResp1Error(SD_CMD_APP_CMD);
- }
- /*!< CMD55 */
- SDIO_CmdInitStructure.SDIO_Argument = 0x00;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
- errorstatus = CmdResp1Error(SD_CMD_APP_CMD);
-
- /*!< If errorstatus is Command TimeOut, it is a MMC card */
- /*!< If errorstatus is SD_OK it is a SD card: SD card 2.0 (voltage range mismatch)
- or SD card 1.x */
- if (errorstatus == SD_OK)
- {
- /*!< SD CARD */
- /*!< Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */
- while ((!validvoltage) && (count < SD_MAX_VOLT_TRIAL))
- {
-
- /*!< SEND CMD55 APP_CMD with RCA as 0 */
- SDIO_CmdInitStructure.SDIO_Argument = 0x00;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_APP_CMD);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
- SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SDType;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_OP_COND;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp3Error();
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- response = SDIO_GetResponse(SDIO_RESP1);
- validvoltage = (((response >> 31) == 1) ? 1 : 0);
- count++;
- }
- if (count >= SD_MAX_VOLT_TRIAL)
- {
- errorstatus = SD_INVALID_VOLTRANGE;
- return(errorstatus);
- }
-
- if (response &= SD_HIGH_CAPACITY)
- {
- CardType = SDIO_HIGH_CAPACITY_SD_CARD;
- }
-
- }/*!< else MMC Card */
-
- return(errorstatus);
-}
-
-/**
- * @brief Turns the SDIO output signals off.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_PowerOFF(void)
-{
- SD_Error errorstatus = SD_OK;
-
- /*!< Set Power State to OFF */
- SDIO_SetPowerState(SDIO_PowerState_OFF);
-
- return(errorstatus);
-}
-
-/**
- * @brief Intialises all cards or single card as the case may be Card(s) come
- * into standby state.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_InitializeCards(void)
-{
- SD_Error errorstatus = SD_OK;
- uint16_t rca = 0x01;
-
- if (SDIO_GetPowerState() == SDIO_PowerState_OFF)
- {
- errorstatus = SD_REQUEST_NOT_APPLICABLE;
- return(errorstatus);
- }
-
- if (SDIO_SECURE_DIGITAL_IO_CARD != CardType)
- {
- /*!< Send CMD2 ALL_SEND_CID */
- SDIO_CmdInitStructure.SDIO_Argument = 0x0;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ALL_SEND_CID;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Long;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp2Error();
-
- if (SD_OK != errorstatus)
- {
- return(errorstatus);
- }
-
- CID_Tab[0] = SDIO_GetResponse(SDIO_RESP1);
- CID_Tab[1] = SDIO_GetResponse(SDIO_RESP2);
- CID_Tab[2] = SDIO_GetResponse(SDIO_RESP3);
- CID_Tab[3] = SDIO_GetResponse(SDIO_RESP4);
- }
- if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_SECURE_DIGITAL_IO_COMBO_CARD == CardType)
- || (SDIO_HIGH_CAPACITY_SD_CARD == CardType))
- {
- /*!< Send CMD3 SET_REL_ADDR with argument 0 */
- /*!< SD Card publishes its RCA. */
- SDIO_CmdInitStructure.SDIO_Argument = 0x00;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_REL_ADDR;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp6Error(SD_CMD_SET_REL_ADDR, &rca);
-
- if (SD_OK != errorstatus)
- {
- return(errorstatus);
- }
- }
-
- if (SDIO_SECURE_DIGITAL_IO_CARD != CardType)
- {
- RCA = rca;
-
- /*!< Send CMD9 SEND_CSD with argument as card's RCA */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)(rca << 16);
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_CSD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Long;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp2Error();
-
- if (SD_OK != errorstatus)
- {
- return(errorstatus);
- }
-
- CSD_Tab[0] = SDIO_GetResponse(SDIO_RESP1);
- CSD_Tab[1] = SDIO_GetResponse(SDIO_RESP2);
- CSD_Tab[2] = SDIO_GetResponse(SDIO_RESP3);
- CSD_Tab[3] = SDIO_GetResponse(SDIO_RESP4);
- }
-
- errorstatus = SD_OK; /*!< All cards get intialized */
-
- return(errorstatus);
-}
-
-/**
- * @brief Returns information about specific card.
- * @param cardinfo: pointer to a SD_CardInfo structure that contains all SD card
- * information.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo)
-{
- SD_Error errorstatus = SD_OK;
- uint8_t tmp = 0;
-
- cardinfo->CardType = (uint8_t)CardType;
- cardinfo->RCA = (uint16_t)RCA;
-
- /*!< Byte 0 */
- tmp = (uint8_t)((CSD_Tab[0] & 0xFF000000) >> 24);
- cardinfo->SD_csd.CSDStruct = (tmp & 0xC0) >> 6;
- cardinfo->SD_csd.SysSpecVersion = (tmp & 0x3C) >> 2;
- cardinfo->SD_csd.Reserved1 = tmp & 0x03;
-
- /*!< Byte 1 */
- tmp = (uint8_t)((CSD_Tab[0] & 0x00FF0000) >> 16);
- cardinfo->SD_csd.TAAC = tmp;
-
- /*!< Byte 2 */
- tmp = (uint8_t)((CSD_Tab[0] & 0x0000FF00) >> 8);
- cardinfo->SD_csd.NSAC = tmp;
-
- /*!< Byte 3 */
- tmp = (uint8_t)(CSD_Tab[0] & 0x000000FF);
- cardinfo->SD_csd.MaxBusClkFrec = tmp;
-
- /*!< Byte 4 */
- tmp = (uint8_t)((CSD_Tab[1] & 0xFF000000) >> 24);
- cardinfo->SD_csd.CardComdClasses = tmp << 4;
-
- /*!< Byte 5 */
- tmp = (uint8_t)((CSD_Tab[1] & 0x00FF0000) >> 16);
- cardinfo->SD_csd.CardComdClasses |= (tmp & 0xF0) >> 4;
- cardinfo->SD_csd.RdBlockLen = tmp & 0x0F;
-
- /*!< Byte 6 */
- tmp = (uint8_t)((CSD_Tab[1] & 0x0000FF00) >> 8);
- cardinfo->SD_csd.PartBlockRead = (tmp & 0x80) >> 7;
- cardinfo->SD_csd.WrBlockMisalign = (tmp & 0x40) >> 6;
- cardinfo->SD_csd.RdBlockMisalign = (tmp & 0x20) >> 5;
- cardinfo->SD_csd.DSRImpl = (tmp & 0x10) >> 4;
- cardinfo->SD_csd.Reserved2 = 0; /*!< Reserved */
-
- if ((CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1) || (CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0))
- {
- cardinfo->SD_csd.DeviceSize = (tmp & 0x03) << 10;
-
- /*!< Byte 7 */
- tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF);
- cardinfo->SD_csd.DeviceSize |= (tmp) << 2;
-
- /*!< Byte 8 */
- tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24);
- cardinfo->SD_csd.DeviceSize |= (tmp & 0xC0) >> 6;
-
- cardinfo->SD_csd.MaxRdCurrentVDDMin = (tmp & 0x38) >> 3;
- cardinfo->SD_csd.MaxRdCurrentVDDMax = (tmp & 0x07);
-
- /*!< Byte 9 */
- tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16);
- cardinfo->SD_csd.MaxWrCurrentVDDMin = (tmp & 0xE0) >> 5;
- cardinfo->SD_csd.MaxWrCurrentVDDMax = (tmp & 0x1C) >> 2;
- cardinfo->SD_csd.DeviceSizeMul = (tmp & 0x03) << 1;
- /*!< Byte 10 */
- tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8);
- cardinfo->SD_csd.DeviceSizeMul |= (tmp & 0x80) >> 7;
-
- cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) ;
- cardinfo->CardCapacity *= (1 << (cardinfo->SD_csd.DeviceSizeMul + 2));
- cardinfo->CardBlockSize = 1 << (cardinfo->SD_csd.RdBlockLen);
- cardinfo->CardCapacity *= cardinfo->CardBlockSize;
- }
- else if (CardType == SDIO_HIGH_CAPACITY_SD_CARD)
- {
- /*!< Byte 7 */
- tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF);
- cardinfo->SD_csd.DeviceSize = (tmp & 0x3F) << 16;
-
- /*!< Byte 8 */
- tmp = (uint8_t)((CSD_Tab[2] & 0xFF000000) >> 24);
-
- cardinfo->SD_csd.DeviceSize |= (tmp << 8);
-
- /*!< Byte 9 */
- tmp = (uint8_t)((CSD_Tab[2] & 0x00FF0000) >> 16);
-
- cardinfo->SD_csd.DeviceSize |= (tmp);
-
- /*!< Byte 10 */
- tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8);
-
- cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024;
- cardinfo->CardBlockSize = 512;
- }
-
-
- cardinfo->SD_csd.EraseGrSize = (tmp & 0x40) >> 6;
- cardinfo->SD_csd.EraseGrMul = (tmp & 0x3F) << 1;
-
- /*!< Byte 11 */
- tmp = (uint8_t)(CSD_Tab[2] & 0x000000FF);
- cardinfo->SD_csd.EraseGrMul |= (tmp & 0x80) >> 7;
- cardinfo->SD_csd.WrProtectGrSize = (tmp & 0x7F);
-
- /*!< Byte 12 */
- tmp = (uint8_t)((CSD_Tab[3] & 0xFF000000) >> 24);
- cardinfo->SD_csd.WrProtectGrEnable = (tmp & 0x80) >> 7;
- cardinfo->SD_csd.ManDeflECC = (tmp & 0x60) >> 5;
- cardinfo->SD_csd.WrSpeedFact = (tmp & 0x1C) >> 2;
- cardinfo->SD_csd.MaxWrBlockLen = (tmp & 0x03) << 2;
-
- /*!< Byte 13 */
- tmp = (uint8_t)((CSD_Tab[3] & 0x00FF0000) >> 16);
- cardinfo->SD_csd.MaxWrBlockLen |= (tmp & 0xC0) >> 6;
- cardinfo->SD_csd.WriteBlockPaPartial = (tmp & 0x20) >> 5;
- cardinfo->SD_csd.Reserved3 = 0;
- cardinfo->SD_csd.ContentProtectAppli = (tmp & 0x01);
-
- /*!< Byte 14 */
- tmp = (uint8_t)((CSD_Tab[3] & 0x0000FF00) >> 8);
- cardinfo->SD_csd.FileFormatGrouop = (tmp & 0x80) >> 7;
- cardinfo->SD_csd.CopyFlag = (tmp & 0x40) >> 6;
- cardinfo->SD_csd.PermWrProtect = (tmp & 0x20) >> 5;
- cardinfo->SD_csd.TempWrProtect = (tmp & 0x10) >> 4;
- cardinfo->SD_csd.FileFormat = (tmp & 0x0C) >> 2;
- cardinfo->SD_csd.ECC = (tmp & 0x03);
-
- /*!< Byte 15 */
- tmp = (uint8_t)(CSD_Tab[3] & 0x000000FF);
- cardinfo->SD_csd.CSD_CRC = (tmp & 0xFE) >> 1;
- cardinfo->SD_csd.Reserved4 = 1;
-
-
- /*!< Byte 0 */
- tmp = (uint8_t)((CID_Tab[0] & 0xFF000000) >> 24);
- cardinfo->SD_cid.ManufacturerID = tmp;
-
- /*!< Byte 1 */
- tmp = (uint8_t)((CID_Tab[0] & 0x00FF0000) >> 16);
- cardinfo->SD_cid.OEM_AppliID = tmp << 8;
-
- /*!< Byte 2 */
- tmp = (uint8_t)((CID_Tab[0] & 0x000000FF00) >> 8);
- cardinfo->SD_cid.OEM_AppliID |= tmp;
-
- /*!< Byte 3 */
- tmp = (uint8_t)(CID_Tab[0] & 0x000000FF);
- cardinfo->SD_cid.ProdName1 = tmp << 24;
-
- /*!< Byte 4 */
- tmp = (uint8_t)((CID_Tab[1] & 0xFF000000) >> 24);
- cardinfo->SD_cid.ProdName1 |= tmp << 16;
-
- /*!< Byte 5 */
- tmp = (uint8_t)((CID_Tab[1] & 0x00FF0000) >> 16);
- cardinfo->SD_cid.ProdName1 |= tmp << 8;
-
- /*!< Byte 6 */
- tmp = (uint8_t)((CID_Tab[1] & 0x0000FF00) >> 8);
- cardinfo->SD_cid.ProdName1 |= tmp;
-
- /*!< Byte 7 */
- tmp = (uint8_t)(CID_Tab[1] & 0x000000FF);
- cardinfo->SD_cid.ProdName2 = tmp;
-
- /*!< Byte 8 */
- tmp = (uint8_t)((CID_Tab[2] & 0xFF000000) >> 24);
- cardinfo->SD_cid.ProdRev = tmp;
-
- /*!< Byte 9 */
- tmp = (uint8_t)((CID_Tab[2] & 0x00FF0000) >> 16);
- cardinfo->SD_cid.ProdSN = tmp << 24;
-
- /*!< Byte 10 */
- tmp = (uint8_t)((CID_Tab[2] & 0x0000FF00) >> 8);
- cardinfo->SD_cid.ProdSN |= tmp << 16;
-
- /*!< Byte 11 */
- tmp = (uint8_t)(CID_Tab[2] & 0x000000FF);
- cardinfo->SD_cid.ProdSN |= tmp << 8;
-
- /*!< Byte 12 */
- tmp = (uint8_t)((CID_Tab[3] & 0xFF000000) >> 24);
- cardinfo->SD_cid.ProdSN |= tmp;
-
- /*!< Byte 13 */
- tmp = (uint8_t)((CID_Tab[3] & 0x00FF0000) >> 16);
- cardinfo->SD_cid.Reserved1 |= (tmp & 0xF0) >> 4;
- cardinfo->SD_cid.ManufactDate = (tmp & 0x0F) << 8;
-
- /*!< Byte 14 */
- tmp = (uint8_t)((CID_Tab[3] & 0x0000FF00) >> 8);
- cardinfo->SD_cid.ManufactDate |= tmp;
-
- /*!< Byte 15 */
- tmp = (uint8_t)(CID_Tab[3] & 0x000000FF);
- cardinfo->SD_cid.CID_CRC = (tmp & 0xFE) >> 1;
- cardinfo->SD_cid.Reserved2 = 1;
-
- return(errorstatus);
-}
-
-/**
- * @brief Enables wide bus opeartion for the requeseted card if supported by
- * card.
- * @param WideMode: Specifies the SD card wide bus mode.
- * This parameter can be one of the following values:
- * @arg SDIO_BusWide_8b: 8-bit data transfer (Only for MMC)
- * @arg SDIO_BusWide_4b: 4-bit data transfer
- * @arg SDIO_BusWide_1b: 1-bit data transfer
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_GetCardStatus(SD_CardStatus *cardstatus)
-{
- SD_Error errorstatus = SD_OK;
- uint8_t tmp = 0;
-
- errorstatus = SD_SendSDStatus((uint32_t *)SDSTATUS_Tab);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- /*!< Byte 0 */
- tmp = (uint8_t)((SDSTATUS_Tab[0] & 0xC0) >> 6);
- cardstatus->DAT_BUS_WIDTH = tmp;
-
- /*!< Byte 0 */
- tmp = (uint8_t)((SDSTATUS_Tab[0] & 0x20) >> 5);
- cardstatus->SECURED_MODE = tmp;
-
- /*!< Byte 2 */
- tmp = (uint8_t)((SDSTATUS_Tab[2] & 0xFF));
- cardstatus->SD_CARD_TYPE = tmp << 8;
-
- /*!< Byte 3 */
- tmp = (uint8_t)((SDSTATUS_Tab[3] & 0xFF));
- cardstatus->SD_CARD_TYPE |= tmp;
-
- /*!< Byte 4 */
- tmp = (uint8_t)(SDSTATUS_Tab[4] & 0xFF);
- cardstatus->SIZE_OF_PROTECTED_AREA = tmp << 24;
-
- /*!< Byte 5 */
- tmp = (uint8_t)(SDSTATUS_Tab[5] & 0xFF);
- cardstatus->SIZE_OF_PROTECTED_AREA |= tmp << 16;
-
- /*!< Byte 6 */
- tmp = (uint8_t)(SDSTATUS_Tab[6] & 0xFF);
- cardstatus->SIZE_OF_PROTECTED_AREA |= tmp << 8;
-
- /*!< Byte 7 */
- tmp = (uint8_t)(SDSTATUS_Tab[7] & 0xFF);
- cardstatus->SIZE_OF_PROTECTED_AREA |= tmp;
-
- /*!< Byte 8 */
- tmp = (uint8_t)((SDSTATUS_Tab[8] & 0xFF));
- cardstatus->SPEED_CLASS = tmp;
-
- /*!< Byte 9 */
- tmp = (uint8_t)((SDSTATUS_Tab[9] & 0xFF));
- cardstatus->PERFORMANCE_MOVE = tmp;
-
- /*!< Byte 10 */
- tmp = (uint8_t)((SDSTATUS_Tab[10] & 0xF0) >> 4);
- cardstatus->AU_SIZE = tmp;
-
- /*!< Byte 11 */
- tmp = (uint8_t)(SDSTATUS_Tab[11] & 0xFF);
- cardstatus->ERASE_SIZE = tmp << 8;
-
- /*!< Byte 12 */
- tmp = (uint8_t)(SDSTATUS_Tab[12] & 0xFF);
- cardstatus->ERASE_SIZE |= tmp;
-
- /*!< Byte 13 */
- tmp = (uint8_t)((SDSTATUS_Tab[13] & 0xFC) >> 2);
- cardstatus->ERASE_TIMEOUT = tmp;
-
- /*!< Byte 13 */
- tmp = (uint8_t)((SDSTATUS_Tab[13] & 0x3));
- cardstatus->ERASE_OFFSET = tmp;
-
- return(errorstatus);
-}
-
-/**
- * @brief Enables wide bus opeartion for the requeseted card if supported by
- * card.
- * @param WideMode: Specifies the SD card wide bus mode.
- * This parameter can be one of the following values:
- * @arg SDIO_BusWide_8b: 8-bit data transfer (Only for MMC)
- * @arg SDIO_BusWide_4b: 4-bit data transfer
- * @arg SDIO_BusWide_1b: 1-bit data transfer
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_EnableWideBusOperation(uint32_t WideMode)
-{
- SD_Error errorstatus = SD_OK;
-
- /*!< MMC Card doesn't support this feature */
- if (SDIO_MULTIMEDIA_CARD == CardType)
- {
- errorstatus = SD_UNSUPPORTED_FEATURE;
- return(errorstatus);
- }
- else if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType))
- {
- if (SDIO_BusWide_8b == WideMode)
- {
- errorstatus = SD_UNSUPPORTED_FEATURE;
- return(errorstatus);
- }
- else if (SDIO_BusWide_4b == WideMode)
- {
- errorstatus = SDEnWideBus(ENABLE);
-
- if (SD_OK == errorstatus)
- {
- /*!< Configure the SDIO peripheral */
- SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
- SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
- SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
- SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
- SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_4b;
- SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
- SDIO_Init(&SDIO_InitStructure);
- }
- }
- else
- {
- errorstatus = SDEnWideBus(DISABLE);
-
- if (SD_OK == errorstatus)
- {
- /*!< Configure the SDIO peripheral */
- SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
- SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
- SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
- SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
- SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
- SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
- SDIO_Init(&SDIO_InitStructure);
- }
- }
- }
-
- return(errorstatus);
-}
-
-/**
- * @brief Selects od Deselects the corresponding card.
- * @param addr: Address of the Card to be selected.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_SelectDeselect(uint32_t addr)
-{
- SD_Error errorstatus = SD_OK;
-
- /*!< Send CMD7 SDIO_SEL_DESEL_CARD */
- SDIO_CmdInitStructure.SDIO_Argument = addr;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEL_DESEL_CARD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_SEL_DESEL_CARD);
-
- return(errorstatus);
-}
-
-/**
- * @brief Allows to read one block from a specified address in a card. The Data
- * transfer can be managed by DMA mode or Polling mode.
- * @note This operation should be followed by two functions to check if the
- * DMA Controller and SD Card status.
- * - SD_ReadWaitOperation(): this function insure that the DMA
- * controller has finished all data transfer.
- * - SD_GetStatus(): to check that the SD Card has finished the
- * data transfer and it is ready for data.
- * @param readbuff: pointer to the buffer that will contain the received data
- * @param ReadAddr: Address from where data are to be read.
- * @param BlockSize: the SD card Data block size. The Block size should be 512.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize)
-{
- SD_Error errorstatus = SD_OK;
-#if defined (SD_POLLING_MODE)
- uint32_t count = 0, *tempbuff = (uint32_t *)readbuff;
-#endif
-
- TransferError = SD_OK;
- TransferEnd = 0;
- StopCondition = 0;
-
- SDIO->DCTRL = 0x0;
-
-
- if (CardType == SDIO_HIGH_CAPACITY_SD_CARD)
- {
- BlockSize = 512;
- ReadAddr /= 512;
- }
-
- SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;
- SDIO_DataInitStructure.SDIO_DataLength = BlockSize;
- SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4;
- SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO;
- SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;
- SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
- SDIO_DataConfig(&SDIO_DataInitStructure);
-
- /*!< Send CMD17 READ_SINGLE_BLOCK */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)ReadAddr;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_READ_SINGLE_BLOCK;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_READ_SINGLE_BLOCK);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
-#if defined (SD_POLLING_MODE)
- /*!< In case of single block transfer, no need of stop transfer at all.*/
- /*!< Polling mode */
- while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
- {
- if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET)
- {
- for (count = 0; count < 8; count++)
- {
- *(tempbuff + count) = SDIO_ReadData();
- }
- tempbuff += 8;
- }
- }
-
- if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT);
- errorstatus = SD_DATA_TIMEOUT;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL);
- errorstatus = SD_DATA_CRC_FAIL;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_RXOVERR);
- errorstatus = SD_RX_OVERRUN;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_STBITERR);
- errorstatus = SD_START_BIT_ERR;
- return(errorstatus);
- }
- while (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
- {
- *tempbuff = SDIO_ReadData();
- tempbuff++;
- }
-
- /*!< Clear all the static flags */
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
-
-#elif defined (SD_DMA_MODE)
- SDIO_ITConfig(SDIO_IT_DATAEND, ENABLE);
- SDIO_DMACmd(ENABLE);
- SD_LowLevel_DMA_RxConfig((uint32_t *)readbuff, BlockSize);
-#endif
-
- return(errorstatus);
-}
-
-/**
- * @brief Allows to read blocks from a specified address in a card. The Data
- * transfer can be managed by DMA mode or Polling mode.
- * @note This operation should be followed by two functions to check if the
- * DMA Controller and SD Card status.
- * - SD_ReadWaitOperation(): this function insure that the DMA
- * controller has finished all data transfer.
- * - SD_GetStatus(): to check that the SD Card has finished the
- * data transfer and it is ready for data.
- * @param readbuff: pointer to the buffer that will contain the received data.
- * @param ReadAddr: Address from where data are to be read.
- * @param BlockSize: the SD card Data block size. The Block size should be 512.
- * @param NumberOfBlocks: number of blocks to be read.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks)
-{
- SD_Error errorstatus = SD_OK;
- TransferError = SD_OK;
- TransferEnd = 0;
- StopCondition = 1;
-
- SDIO->DCTRL = 0x0;
-
- if (CardType == SDIO_HIGH_CAPACITY_SD_CARD)
- {
- BlockSize = 512;
- ReadAddr /= 512;
- }
-
- /*!< Set Block Size for Card */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN);
-
- if (SD_OK != errorstatus)
- {
- return(errorstatus);
- }
-
- SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;
- SDIO_DataInitStructure.SDIO_DataLength = NumberOfBlocks * BlockSize;
- SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4;
- SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO;
- SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;
- SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
- SDIO_DataConfig(&SDIO_DataInitStructure);
-
- /*!< Send CMD18 READ_MULT_BLOCK with argument data address */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)ReadAddr;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_READ_MULT_BLOCK;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_READ_MULT_BLOCK);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- SDIO_ITConfig(SDIO_IT_DATAEND, ENABLE);
- SDIO_DMACmd(ENABLE);
- SD_LowLevel_DMA_RxConfig((uint32_t *)readbuff, (NumberOfBlocks * BlockSize));
-
- return(errorstatus);
-}
-
-/**
- * @brief This function waits until the SDIO DMA data transfer is finished.
- * This function should be called after SDIO_ReadMultiBlocks() function
- * to insure that all data sent by the card are already transferred by
- * the DMA controller.
- * @param None.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_WaitReadOperation(void)
-{
- SD_Error errorstatus = SD_OK;
-
- while ((SD_DMAEndOfTransferStatus() == RESET) && (TransferEnd == 0) && (TransferError == SD_OK))
- {}
-
- if (TransferError != SD_OK)
- {
- return(TransferError);
- }
-
- return(errorstatus);
-}
-
-/**
- * @brief Allows to write one block starting from a specified address in a card.
- * The Data transfer can be managed by DMA mode or Polling mode.
- * @note This operation should be followed by two functions to check if the
- * DMA Controller and SD Card status.
- * - SD_ReadWaitOperation(): this function insure that the DMA
- * controller has finished all data transfer.
- * - SD_GetStatus(): to check that the SD Card has finished the
- * data transfer and it is ready for data.
- * @param writebuff: pointer to the buffer that contain the data to be transferred.
- * @param WriteAddr: Address from where data are to be read.
- * @param BlockSize: the SD card Data block size. The Block size should be 512.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize)
-{
- SD_Error errorstatus = SD_OK;
-
-#if defined (SD_POLLING_MODE)
- uint32_t bytestransferred = 0, count = 0, restwords = 0;
- uint32_t *tempbuff = (uint32_t *)writebuff;
-#endif
-
- TransferError = SD_OK;
- TransferEnd = 0;
- StopCondition = 0;
-
- SDIO->DCTRL = 0x0;
-
-
- if (CardType == SDIO_HIGH_CAPACITY_SD_CARD)
- {
- BlockSize = 512;
- WriteAddr /= 512;
- }
-
- /*!< Send CMD24 WRITE_SINGLE_BLOCK */
- SDIO_CmdInitStructure.SDIO_Argument = WriteAddr;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_WRITE_SINGLE_BLOCK;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_WRITE_SINGLE_BLOCK);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;
- SDIO_DataInitStructure.SDIO_DataLength = BlockSize;
- SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4;
- SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard;
- SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;
- SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
- SDIO_DataConfig(&SDIO_DataInitStructure);
-
- /*!< In case of single data block transfer no need of stop command at all */
-#if defined (SD_POLLING_MODE)
- while (!(SDIO->STA & (SDIO_FLAG_DBCKEND | SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_STBITERR)))
- {
- if (SDIO_GetFlagStatus(SDIO_FLAG_TXFIFOHE) != RESET)
- {
- if ((512 - bytestransferred) < 32)
- {
- restwords = ((512 - bytestransferred) % 4 == 0) ? ((512 - bytestransferred) / 4) : (( 512 - bytestransferred) / 4 + 1);
- for (count = 0; count < restwords; count++, tempbuff++, bytestransferred += 4)
- {
- SDIO_WriteData(*tempbuff);
- }
- }
- else
- {
- for (count = 0; count < 8; count++)
- {
- SDIO_WriteData(*(tempbuff + count));
- }
- tempbuff += 8;
- bytestransferred += 32;
- }
- }
- }
- if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT);
- errorstatus = SD_DATA_TIMEOUT;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL);
- errorstatus = SD_DATA_CRC_FAIL;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_TXUNDERR) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_TXUNDERR);
- errorstatus = SD_TX_UNDERRUN;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_STBITERR);
- errorstatus = SD_START_BIT_ERR;
- return(errorstatus);
- }
-#elif defined (SD_DMA_MODE)
- SDIO_ITConfig(SDIO_IT_DATAEND, ENABLE);
- SD_LowLevel_DMA_TxConfig((uint32_t *)writebuff, BlockSize);
- SDIO_DMACmd(ENABLE);
-#endif
-
- return(errorstatus);
-}
-
-/**
- * @brief Allows to write blocks starting from a specified address in a card.
- * The Data transfer can be managed by DMA mode only.
- * @note This operation should be followed by two functions to check if the
- * DMA Controller and SD Card status.
- * - SD_ReadWaitOperation(): this function insure that the DMA
- * controller has finished all data transfer.
- * - SD_GetStatus(): to check that the SD Card has finished the
- * data transfer and it is ready for data.
- * @param WriteAddr: Address from where data are to be read.
- * @param writebuff: pointer to the buffer that contain the data to be transferred.
- * @param BlockSize: the SD card Data block size. The Block size should be 512.
- * @param NumberOfBlocks: number of blocks to be written.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks)
-{
- SD_Error errorstatus = SD_OK;
- __IO uint32_t count = 0;
-
- TransferError = SD_OK;
- TransferEnd = 0;
- StopCondition = 1;
-
- SDIO->DCTRL = 0x0;
-
- if (CardType == SDIO_HIGH_CAPACITY_SD_CARD)
- {
- BlockSize = 512;
- WriteAddr /= 512;
- }
-
- /*!< To improve performance */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) (RCA << 16);
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
-
- errorstatus = CmdResp1Error(SD_CMD_APP_CMD);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
- /*!< To improve performance */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)NumberOfBlocks;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCK_COUNT;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_SET_BLOCK_COUNT);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
-
- /*!< Send CMD25 WRITE_MULT_BLOCK with argument data address */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)WriteAddr;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_WRITE_MULT_BLOCK;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_WRITE_MULT_BLOCK);
-
- if (SD_OK != errorstatus)
- {
- return(errorstatus);
- }
-
- SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;
- SDIO_DataInitStructure.SDIO_DataLength = NumberOfBlocks * BlockSize;
- SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4;
- SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard;
- SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;
- SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
- SDIO_DataConfig(&SDIO_DataInitStructure);
-
- SDIO_ITConfig(SDIO_IT_DATAEND, ENABLE);
- SDIO_DMACmd(ENABLE);
- SD_LowLevel_DMA_TxConfig((uint32_t *)writebuff, (NumberOfBlocks * BlockSize));
-
- return(errorstatus);
-}
-
-/**
- * @brief This function waits until the SDIO DMA data transfer is finished.
- * This function should be called after SDIO_WriteBlock() and
- * SDIO_WriteMultiBlocks() function to insure that all data sent by the
- * card are already transferred by the DMA controller.
- * @param None.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_WaitWriteOperation(void)
-{
- SD_Error errorstatus = SD_OK;
-
- while ((SD_DMAEndOfTransferStatus() == RESET) && (TransferEnd == 0) && (TransferError == SD_OK))
- {}
-
- if (TransferError != SD_OK)
- {
- return(TransferError);
- }
-
- /*!< Clear all the static flags */
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
-
- return(errorstatus);
-}
-
-/**
- * @brief Gets the cuurent data transfer state.
- * @param None
- * @retval SDTransferState: Data Transfer state.
- * This value can be:
- * - SD_TRANSFER_OK: No data transfer is acting
- * - SD_TRANSFER_BUSY: Data transfer is acting
- */
-SDTransferState SD_GetTransferState(void)
-{
- if (SDIO->STA & (SDIO_FLAG_TXACT | SDIO_FLAG_RXACT))
- {
- return(SD_TRANSFER_BUSY);
- }
- else
- {
- return(SD_TRANSFER_OK);
- }
-}
-
-/**
- * @brief Aborts an ongoing data transfer.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_StopTransfer(void)
-{
- SD_Error errorstatus = SD_OK;
-
- /*!< Send CMD12 STOP_TRANSMISSION */
- SDIO->ARG = 0x0;
- SDIO->CMD = 0x44C;
- errorstatus = CmdResp1Error(SD_CMD_STOP_TRANSMISSION);
-
- return(errorstatus);
-}
-
-/**
- * @brief Allows to erase memory area specified for the given card.
- * @param startaddr: the start address.
- * @param endaddr: the end address.
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr)
-{
- SD_Error errorstatus = SD_OK;
- uint32_t delay = 0;
- __IO uint32_t maxdelay = 0;
- uint8_t cardstate = 0;
-
- /*!< Check if the card coomnd class supports erase command */
- if (((CSD_Tab[1] >> 20) & SD_CCCC_ERASE) == 0)
- {
- errorstatus = SD_REQUEST_NOT_APPLICABLE;
- return(errorstatus);
- }
-
- maxdelay = 120000 / ((SDIO->CLKCR & 0xFF) + 2);
-
- if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED)
- {
- errorstatus = SD_LOCK_UNLOCK_FAILED;
- return(errorstatus);
- }
-
- if (CardType == SDIO_HIGH_CAPACITY_SD_CARD)
- {
- startaddr /= 512;
- endaddr /= 512;
- }
-
- /*!< According to sd-card spec 1.0 ERASE_GROUP_START (CMD32) and erase_group_end(CMD33) */
- if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType))
- {
- /*!< Send CMD32 SD_ERASE_GRP_START with argument as addr */
- SDIO_CmdInitStructure.SDIO_Argument = startaddr;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_START;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_START);
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- /*!< Send CMD33 SD_ERASE_GRP_END with argument as addr */
- SDIO_CmdInitStructure.SDIO_Argument = endaddr;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_END;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_END);
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
- }
-
- /*!< Send CMD38 ERASE */
- SDIO_CmdInitStructure.SDIO_Argument = 0;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ERASE;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_ERASE);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- for (delay = 0; delay < maxdelay; delay++)
- {}
-
- /*!< Wait till the card is in programming state */
- errorstatus = IsCardProgramming(&cardstate);
-
- while ((errorstatus == SD_OK) && ((SD_CARD_PROGRAMMING == cardstate) || (SD_CARD_RECEIVING == cardstate)))
- {
- errorstatus = IsCardProgramming(&cardstate);
- }
-
- return(errorstatus);
-}
-
-/**
- * @brief Returns the current card's status.
- * @param pcardstatus: pointer to the buffer that will contain the SD card
- * status (Card Status register).
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_SendStatus(uint32_t *pcardstatus)
-{
- SD_Error errorstatus = SD_OK;
-
- SDIO->ARG = (uint32_t) RCA << 16;
- SDIO->CMD = 0x44D;
-
- errorstatus = CmdResp1Error(SD_CMD_SEND_STATUS);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- *pcardstatus = SDIO->RESP1;
- return(errorstatus);
-}
-
-/**
- * @brief Returns the current SD card's status.
- * @param psdstatus: pointer to the buffer that will contain the SD card status
- * (SD Status register).
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_SendSDStatus(uint32_t *psdstatus)
-{
- SD_Error errorstatus = SD_OK;
- uint32_t count = 0;
-
- if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED)
- {
- errorstatus = SD_LOCK_UNLOCK_FAILED;
- return(errorstatus);
- }
-
- /*!< Set block size for card if it is not equal to current block size for card. */
- SDIO_CmdInitStructure.SDIO_Argument = 64;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- /*!< CMD55 */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
- errorstatus = CmdResp1Error(SD_CMD_APP_CMD);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;
- SDIO_DataInitStructure.SDIO_DataLength = 64;
- SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_64b;
- SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO;
- SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;
- SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
- SDIO_DataConfig(&SDIO_DataInitStructure);
-
- /*!< Send ACMD13 SD_APP_STAUS with argument as card's RCA.*/
- SDIO_CmdInitStructure.SDIO_Argument = 0;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_STAUS;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
- errorstatus = CmdResp1Error(SD_CMD_SD_APP_STAUS);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
- {
- if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET)
- {
- for (count = 0; count < 8; count++)
- {
- *(psdstatus + count) = SDIO_ReadData();
- }
- psdstatus += 8;
- }
- }
-
- if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT);
- errorstatus = SD_DATA_TIMEOUT;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL);
- errorstatus = SD_DATA_CRC_FAIL;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_RXOVERR);
- errorstatus = SD_RX_OVERRUN;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_STBITERR);
- errorstatus = SD_START_BIT_ERR;
- return(errorstatus);
- }
-
- while (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
- {
- *psdstatus = SDIO_ReadData();
- psdstatus++;
- }
-
- /*!< Clear all the static status flags*/
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
-
- return(errorstatus);
-}
-
-/**
- * @brief Allows to process all the interrupts that are high.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-SD_Error SD_ProcessIRQSrc(void)
-{
- if (StopCondition == 1)
- {
- SDIO->ARG = 0x0;
- SDIO->CMD = 0x44C;
- TransferError = CmdResp1Error(SD_CMD_STOP_TRANSMISSION);
- }
- else
- {
- TransferError = SD_OK;
- }
- SDIO_ClearITPendingBit(SDIO_IT_DATAEND);
- SDIO_ITConfig(SDIO_IT_DATAEND, DISABLE);
- TransferEnd = 1;
- return(TransferError);
-}
-
-/**
- * @brief Checks for error conditions for CMD0.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error CmdError(void)
-{
- SD_Error errorstatus = SD_OK;
- uint32_t timeout;
-
- timeout = SDIO_CMD0TIMEOUT; /*!< 10000 */
-
- while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET))
- {
- timeout--;
- }
-
- if (timeout == 0)
- {
- errorstatus = SD_CMD_RSP_TIMEOUT;
- return(errorstatus);
- }
-
- /*!< Clear all the static flags */
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
-
- return(errorstatus);
-}
-
-/**
- * @brief Checks for error conditions for R7 response.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error CmdResp7Error(void)
-{
- SD_Error errorstatus = SD_OK;
- uint32_t status;
- uint32_t timeout = SDIO_CMD0TIMEOUT;
-
- status = SDIO->STA;
-
- while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)) && (timeout > 0))
- {
- timeout--;
- status = SDIO->STA;
- }
-
- if ((timeout == 0) || (status & SDIO_FLAG_CTIMEOUT))
- {
- /*!< Card is not V2.0 complient or card does not support the set voltage range */
- errorstatus = SD_CMD_RSP_TIMEOUT;
- SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
- return(errorstatus);
- }
-
- if (status & SDIO_FLAG_CMDREND)
- {
- /*!< Card is SD V2.0 compliant */
- errorstatus = SD_OK;
- SDIO_ClearFlag(SDIO_FLAG_CMDREND);
- return(errorstatus);
- }
- return(errorstatus);
-}
-
-/**
- * @brief Checks for error conditions for R1 response.
- * @param cmd: The sent command index.
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error CmdResp1Error(uint8_t cmd)
-{
- while (!(SDIO->STA & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
- {
- }
-
- SDIO->ICR = SDIO_STATIC_FLAGS;
-
- return (SD_Error)(SDIO->RESP1 & SD_OCR_ERRORBITS);
-}
-
-/**
- * @brief Checks for error conditions for R3 (OCR) response.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error CmdResp3Error(void)
-{
- SD_Error errorstatus = SD_OK;
- uint32_t status;
-
- status = SDIO->STA;
-
- while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
- {
- status = SDIO->STA;
- }
-
- if (status & SDIO_FLAG_CTIMEOUT)
- {
- errorstatus = SD_CMD_RSP_TIMEOUT;
- SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
- return(errorstatus);
- }
- /*!< Clear all the static flags */
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
- return(errorstatus);
-}
-
-/**
- * @brief Checks for error conditions for R2 (CID or CSD) response.
- * @param None
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error CmdResp2Error(void)
-{
- SD_Error errorstatus = SD_OK;
- uint32_t status;
-
- status = SDIO->STA;
-
- while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND)))
- {
- status = SDIO->STA;
- }
-
- if (status & SDIO_FLAG_CTIMEOUT)
- {
- errorstatus = SD_CMD_RSP_TIMEOUT;
- SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
- return(errorstatus);
- }
- else if (status & SDIO_FLAG_CCRCFAIL)
- {
- errorstatus = SD_CMD_CRC_FAIL;
- SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
- return(errorstatus);
- }
-
- /*!< Clear all the static flags */
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
-
- return(errorstatus);
-}
-
-/**
- * @brief Checks for error conditions for R6 (RCA) response.
- * @param cmd: The sent command index.
- * @param prca: pointer to the variable that will contain the SD card relative
- * address RCA.
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca)
-{
- SD_Error errorstatus = SD_OK;
- uint32_t status;
- uint32_t response_r1;
-
- status = SDIO->STA;
-
- while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND)))
- {
- status = SDIO->STA;
- }
-
- if (status & SDIO_FLAG_CTIMEOUT)
- {
- errorstatus = SD_CMD_RSP_TIMEOUT;
- SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
- return(errorstatus);
- }
- else if (status & SDIO_FLAG_CCRCFAIL)
- {
- errorstatus = SD_CMD_CRC_FAIL;
- SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
- return(errorstatus);
- }
-
- /*!< Check response received is of desired command */
- if (SDIO_GetCommandResponse() != cmd)
- {
- errorstatus = SD_ILLEGAL_CMD;
- return(errorstatus);
- }
-
- /*!< Clear all the static flags */
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
-
- /*!< We have received response, retrieve it. */
- response_r1 = SDIO_GetResponse(SDIO_RESP1);
-
- if (SD_ALLZERO == (response_r1 & (SD_R6_GENERAL_UNKNOWN_ERROR | SD_R6_ILLEGAL_CMD | SD_R6_COM_CRC_FAILED)))
- {
- *prca = (uint16_t) (response_r1 >> 16);
- return(errorstatus);
- }
-
- if (response_r1 & SD_R6_GENERAL_UNKNOWN_ERROR)
- {
- return(SD_GENERAL_UNKNOWN_ERROR);
- }
-
- if (response_r1 & SD_R6_ILLEGAL_CMD)
- {
- return(SD_ILLEGAL_CMD);
- }
-
- if (response_r1 & SD_R6_COM_CRC_FAILED)
- {
- return(SD_COM_CRC_FAILED);
- }
-
- return(errorstatus);
-}
-
-/**
- * @brief Enables or disables the SDIO wide bus mode.
- * @param NewState: new state of the SDIO wide bus mode.
- * This parameter can be: ENABLE or DISABLE.
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error SDEnWideBus(FunctionalState NewState)
-{
- SD_Error errorstatus = SD_OK;
-
- uint32_t scr[2] = {0, 0};
-
- if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED)
- {
- errorstatus = SD_LOCK_UNLOCK_FAILED;
- return(errorstatus);
- }
-
- /*!< Get SCR Register */
- errorstatus = FindSCR(RCA, scr);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- /*!< If wide bus operation to be enabled */
- if (NewState == ENABLE)
- {
- /*!< If requested card supports wide bus operation */
- if ((scr[1] & SD_WIDE_BUS_SUPPORT) != SD_ALLZERO)
- {
- /*!< Send CMD55 APP_CMD with argument as card's RCA.*/
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_APP_CMD);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- /*!< Send ACMD6 APP_CMD with argument as 2 for wide bus mode */
- SDIO_CmdInitStructure.SDIO_Argument = 0x2;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_SD_SET_BUSWIDTH;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_APP_SD_SET_BUSWIDTH);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
- return(errorstatus);
- }
- else
- {
- errorstatus = SD_REQUEST_NOT_APPLICABLE;
- return(errorstatus);
- }
- } /*!< If wide bus operation to be disabled */
- else
- {
- /*!< If requested card supports 1 bit mode operation */
- if ((scr[1] & SD_SINGLE_BUS_SUPPORT) != SD_ALLZERO)
- {
- /*!< Send CMD55 APP_CMD with argument as card's RCA.*/
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
-
- errorstatus = CmdResp1Error(SD_CMD_APP_CMD);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- /*!< Send ACMD6 APP_CMD with argument as 2 for wide bus mode */
- SDIO_CmdInitStructure.SDIO_Argument = 0x00;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_SD_SET_BUSWIDTH;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_APP_SD_SET_BUSWIDTH);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- return(errorstatus);
- }
- else
- {
- errorstatus = SD_REQUEST_NOT_APPLICABLE;
- return(errorstatus);
- }
- }
-}
-
-/**
- * @brief Checks if the SD card is in programming state.
- * @param pstatus: pointer to the variable that will contain the SD card state.
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error IsCardProgramming(uint8_t *pstatus)
-{
- SD_Error errorstatus = SD_OK;
- __IO uint32_t respR1 = 0, status = 0;
-
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_STATUS;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- status = SDIO->STA;
- while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
- {
- status = SDIO->STA;
- }
-
- if (status & SDIO_FLAG_CTIMEOUT)
- {
- errorstatus = SD_CMD_RSP_TIMEOUT;
- SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
- return(errorstatus);
- }
- else if (status & SDIO_FLAG_CCRCFAIL)
- {
- errorstatus = SD_CMD_CRC_FAIL;
- SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
- return(errorstatus);
- }
-
- status = (uint32_t)SDIO_GetCommandResponse();
-
- /*!< Check response received is of desired command */
- if (status != SD_CMD_SEND_STATUS)
- {
- errorstatus = SD_ILLEGAL_CMD;
- return(errorstatus);
- }
-
- /*!< Clear all the static flags */
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
-
-
- /*!< We have received response, retrieve it for analysis */
- respR1 = SDIO_GetResponse(SDIO_RESP1);
-
- /*!< Find out card status */
- *pstatus = (uint8_t) ((respR1 >> 9) & 0x0000000F);
-
- if ((respR1 & SD_OCR_ERRORBITS) == SD_ALLZERO)
- {
- return(errorstatus);
- }
-
- if (respR1 & SD_OCR_ADDR_OUT_OF_RANGE)
- {
- return(SD_ADDR_OUT_OF_RANGE);
- }
-
- if (respR1 & SD_OCR_ADDR_MISALIGNED)
- {
- return(SD_ADDR_MISALIGNED);
- }
-
- if (respR1 & SD_OCR_BLOCK_LEN_ERR)
- {
- return(SD_BLOCK_LEN_ERR);
- }
-
- if (respR1 & SD_OCR_ERASE_SEQ_ERR)
- {
- return(SD_ERASE_SEQ_ERR);
- }
-
- if (respR1 & SD_OCR_BAD_ERASE_PARAM)
- {
- return(SD_BAD_ERASE_PARAM);
- }
-
- if (respR1 & SD_OCR_WRITE_PROT_VIOLATION)
- {
- return(SD_WRITE_PROT_VIOLATION);
- }
-
- if (respR1 & SD_OCR_LOCK_UNLOCK_FAILED)
- {
- return(SD_LOCK_UNLOCK_FAILED);
- }
-
- if (respR1 & SD_OCR_COM_CRC_FAILED)
- {
- return(SD_COM_CRC_FAILED);
- }
-
- if (respR1 & SD_OCR_ILLEGAL_CMD)
- {
- return(SD_ILLEGAL_CMD);
- }
-
- if (respR1 & SD_OCR_CARD_ECC_FAILED)
- {
- return(SD_CARD_ECC_FAILED);
- }
-
- if (respR1 & SD_OCR_CC_ERROR)
- {
- return(SD_CC_ERROR);
- }
-
- if (respR1 & SD_OCR_GENERAL_UNKNOWN_ERROR)
- {
- return(SD_GENERAL_UNKNOWN_ERROR);
- }
-
- if (respR1 & SD_OCR_STREAM_READ_UNDERRUN)
- {
- return(SD_STREAM_READ_UNDERRUN);
- }
-
- if (respR1 & SD_OCR_STREAM_WRITE_OVERRUN)
- {
- return(SD_STREAM_WRITE_OVERRUN);
- }
-
- if (respR1 & SD_OCR_CID_CSD_OVERWRIETE)
- {
- return(SD_CID_CSD_OVERWRITE);
- }
-
- if (respR1 & SD_OCR_WP_ERASE_SKIP)
- {
- return(SD_WP_ERASE_SKIP);
- }
-
- if (respR1 & SD_OCR_CARD_ECC_DISABLED)
- {
- return(SD_CARD_ECC_DISABLED);
- }
-
- if (respR1 & SD_OCR_ERASE_RESET)
- {
- return(SD_ERASE_RESET);
- }
-
- if (respR1 & SD_OCR_AKE_SEQ_ERROR)
- {
- return(SD_AKE_SEQ_ERROR);
- }
-
- return(errorstatus);
-}
-
-/**
- * @brief Find the SD card SCR register value.
- * @param rca: selected card address.
- * @param pscr: pointer to the buffer that will contain the SCR value.
- * @retval SD_Error: SD Card Error code.
- */
-static SD_Error FindSCR(uint16_t rca, uint32_t *pscr)
-{
- uint32_t index = 0;
- SD_Error errorstatus = SD_OK;
- uint32_t tempscr[2] = {0, 0};
-
- /*!< Set Block Size To 8 Bytes */
- /*!< Send CMD55 APP_CMD with argument as card's RCA */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)8;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- /*!< Send CMD55 APP_CMD with argument as card's RCA */
- SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_APP_CMD);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
- SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;
- SDIO_DataInitStructure.SDIO_DataLength = 8;
- SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_8b;
- SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO;
- SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;
- SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
- SDIO_DataConfig(&SDIO_DataInitStructure);
-
-
- /*!< Send ACMD51 SD_APP_SEND_SCR with argument as 0 */
- SDIO_CmdInitStructure.SDIO_Argument = 0x0;
- SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_SEND_SCR;
- SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
- SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
- SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
- SDIO_SendCommand(&SDIO_CmdInitStructure);
-
- errorstatus = CmdResp1Error(SD_CMD_SD_APP_SEND_SCR);
-
- if (errorstatus != SD_OK)
- {
- return(errorstatus);
- }
-
- while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
- {
- if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
- {
- *(tempscr + index) = SDIO_ReadData();
- index++;
- }
- }
-
- if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT);
- errorstatus = SD_DATA_TIMEOUT;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL);
- errorstatus = SD_DATA_CRC_FAIL;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_RXOVERR);
- errorstatus = SD_RX_OVERRUN;
- return(errorstatus);
- }
- else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET)
- {
- SDIO_ClearFlag(SDIO_FLAG_STBITERR);
- errorstatus = SD_START_BIT_ERR;
- return(errorstatus);
- }
-
- /*!< Clear all the static flags */
- SDIO_ClearFlag(SDIO_STATIC_FLAGS);
-
- *(pscr + 1) = ((tempscr[0] & SD_0TO7BITS) << 24) | ((tempscr[0] & SD_8TO15BITS) << 8) | ((tempscr[0] & SD_16TO23BITS) >> 8) | ((tempscr[0] & SD_24TO31BITS) >> 24);
-
- *(pscr) = ((tempscr[1] & SD_0TO7BITS) << 24) | ((tempscr[1] & SD_8TO15BITS) << 8) | ((tempscr[1] & SD_16TO23BITS) >> 8) | ((tempscr[1] & SD_24TO31BITS) >> 24);
-
- return(errorstatus);
-}
-
-/**
- * @brief Converts the number of bytes in power of two and returns the power.
- * @param NumberOfBytes: number of bytes.
- * @retval None
- */
-uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes)
-{
- uint8_t count = 0;
-
- while (NumberOfBytes != 1)
- {
- NumberOfBytes >>= 1;
- count++;
- }
- return(count);
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_sdio_sd.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_sdio_sd.h
deleted file mode 100644
index d673165..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_sdio_sd.h
+++ /dev/null
@@ -1,397 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_sdio_sd.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the SD Card
- * stm32_eval_sdio_sd driver firmware library.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32_EVAL_SDIO_SD_H
-#define __STM32_EVAL_SDIO_SD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_SDIO_SD
- * @{
- */
-
-/** @defgroup STM32_EVAL_SDIO_SD_Exported_Types
- * @{
- */
-typedef enum
-{
-/**
- * @brief SDIO specific error defines
- */
- SD_CMD_CRC_FAIL = (1), /*!< Command response received (but CRC check failed) */
- SD_DATA_CRC_FAIL = (2), /*!< Data bock sent/received (CRC check Failed) */
- SD_CMD_RSP_TIMEOUT = (3), /*!< Command response timeout */
- SD_DATA_TIMEOUT = (4), /*!< Data time out */
- SD_TX_UNDERRUN = (5), /*!< Transmit FIFO under-run */
- SD_RX_OVERRUN = (6), /*!< Receive FIFO over-run */
- SD_START_BIT_ERR = (7), /*!< Start bit not detected on all data signals in widE bus mode */
- SD_CMD_OUT_OF_RANGE = (8), /*!< CMD's argument was out of range.*/
- SD_ADDR_MISALIGNED = (9), /*!< Misaligned address */
- SD_BLOCK_LEN_ERR = (10), /*!< Transferred block length is not allowed for the card or the number of transferred bytes does not match the block length */
- SD_ERASE_SEQ_ERR = (11), /*!< An error in the sequence of erase command occurs.*/
- SD_BAD_ERASE_PARAM = (12), /*!< An Invalid selection for erase groups */
- SD_WRITE_PROT_VIOLATION = (13), /*!< Attempt to program a write protect block */
- SD_LOCK_UNLOCK_FAILED = (14), /*!< Sequence or password error has been detected in unlock command or if there was an attempt to access a locked card */
- SD_COM_CRC_FAILED = (15), /*!< CRC check of the previous command failed */
- SD_ILLEGAL_CMD = (16), /*!< Command is not legal for the card state */
- SD_CARD_ECC_FAILED = (17), /*!< Card internal ECC was applied but failed to correct the data */
- SD_CC_ERROR = (18), /*!< Internal card controller error */
- SD_GENERAL_UNKNOWN_ERROR = (19), /*!< General or Unknown error */
- SD_STREAM_READ_UNDERRUN = (20), /*!< The card could not sustain data transfer in stream read operation. */
- SD_STREAM_WRITE_OVERRUN = (21), /*!< The card could not sustain data programming in stream mode */
- SD_CID_CSD_OVERWRITE = (22), /*!< CID/CSD overwrite error */
- SD_WP_ERASE_SKIP = (23), /*!< only partial address space was erased */
- SD_CARD_ECC_DISABLED = (24), /*!< Command has been executed without using internal ECC */
- SD_ERASE_RESET = (25), /*!< Erase sequence was cleared before executing because an out of erase sequence command was received */
- SD_AKE_SEQ_ERROR = (26), /*!< Error in sequence of authentication. */
- SD_INVALID_VOLTRANGE = (27),
- SD_ADDR_OUT_OF_RANGE = (28),
- SD_SWITCH_ERROR = (29),
- SD_SDIO_DISABLED = (30),
- SD_SDIO_FUNCTION_BUSY = (31),
- SD_SDIO_FUNCTION_FAILED = (32),
- SD_SDIO_UNKNOWN_FUNCTION = (33),
-
-/**
- * @brief Standard error defines
- */
- SD_INTERNAL_ERROR,
- SD_NOT_CONFIGURED,
- SD_REQUEST_PENDING,
- SD_REQUEST_NOT_APPLICABLE,
- SD_INVALID_PARAMETER,
- SD_UNSUPPORTED_FEATURE,
- SD_UNSUPPORTED_HW,
- SD_ERROR,
- SD_OK = 0
-} SD_Error;
-
-/**
- * @brief SDIO Transfer state
- */
-typedef enum
-{
- SD_TRANSFER_OK = 0,
- SD_TRANSFER_BUSY = 1,
- SD_TRANSFER_ERROR
-} SDTransferState;
-
-/**
- * @brief SD Card States
- */
-typedef enum
-{
- SD_CARD_READY = ((uint32_t)0x00000001),
- SD_CARD_IDENTIFICATION = ((uint32_t)0x00000002),
- SD_CARD_STANDBY = ((uint32_t)0x00000003),
- SD_CARD_TRANSFER = ((uint32_t)0x00000004),
- SD_CARD_SENDING = ((uint32_t)0x00000005),
- SD_CARD_RECEIVING = ((uint32_t)0x00000006),
- SD_CARD_PROGRAMMING = ((uint32_t)0x00000007),
- SD_CARD_DISCONNECTED = ((uint32_t)0x00000008),
- SD_CARD_ERROR = ((uint32_t)0x000000FF)
-}SDCardState;
-
-
-/**
- * @brief Card Specific Data: CSD Register
- */
-typedef struct
-{
- __IO uint8_t CSDStruct; /*!< CSD structure */
- __IO uint8_t SysSpecVersion; /*!< System specification version */
- __IO uint8_t Reserved1; /*!< Reserved */
- __IO uint8_t TAAC; /*!< Data read access-time 1 */
- __IO uint8_t NSAC; /*!< Data read access-time 2 in CLK cycles */
- __IO uint8_t MaxBusClkFrec; /*!< Max. bus clock frequency */
- __IO uint16_t CardComdClasses; /*!< Card command classes */
- __IO uint8_t RdBlockLen; /*!< Max. read data block length */
- __IO uint8_t PartBlockRead; /*!< Partial blocks for read allowed */
- __IO uint8_t WrBlockMisalign; /*!< Write block misalignment */
- __IO uint8_t RdBlockMisalign; /*!< Read block misalignment */
- __IO uint8_t DSRImpl; /*!< DSR implemented */
- __IO uint8_t Reserved2; /*!< Reserved */
- __IO uint32_t DeviceSize; /*!< Device Size */
- __IO uint8_t MaxRdCurrentVDDMin; /*!< Max. read current @ VDD min */
- __IO uint8_t MaxRdCurrentVDDMax; /*!< Max. read current @ VDD max */
- __IO uint8_t MaxWrCurrentVDDMin; /*!< Max. write current @ VDD min */
- __IO uint8_t MaxWrCurrentVDDMax; /*!< Max. write current @ VDD max */
- __IO uint8_t DeviceSizeMul; /*!< Device size multiplier */
- __IO uint8_t EraseGrSize; /*!< Erase group size */
- __IO uint8_t EraseGrMul; /*!< Erase group size multiplier */
- __IO uint8_t WrProtectGrSize; /*!< Write protect group size */
- __IO uint8_t WrProtectGrEnable; /*!< Write protect group enable */
- __IO uint8_t ManDeflECC; /*!< Manufacturer default ECC */
- __IO uint8_t WrSpeedFact; /*!< Write speed factor */
- __IO uint8_t MaxWrBlockLen; /*!< Max. write data block length */
- __IO uint8_t WriteBlockPaPartial; /*!< Partial blocks for write allowed */
- __IO uint8_t Reserved3; /*!< Reserded */
- __IO uint8_t ContentProtectAppli; /*!< Content protection application */
- __IO uint8_t FileFormatGrouop; /*!< File format group */
- __IO uint8_t CopyFlag; /*!< Copy flag (OTP) */
- __IO uint8_t PermWrProtect; /*!< Permanent write protection */
- __IO uint8_t TempWrProtect; /*!< Temporary write protection */
- __IO uint8_t FileFormat; /*!< File Format */
- __IO uint8_t ECC; /*!< ECC code */
- __IO uint8_t CSD_CRC; /*!< CSD CRC */
- __IO uint8_t Reserved4; /*!< always 1*/
-} SD_CSD;
-
-/**
- * @brief Card Identification Data: CID Register
- */
-typedef struct
-{
- __IO uint8_t ManufacturerID; /*!< ManufacturerID */
- __IO uint16_t OEM_AppliID; /*!< OEM/Application ID */
- __IO uint32_t ProdName1; /*!< Product Name part1 */
- __IO uint8_t ProdName2; /*!< Product Name part2*/
- __IO uint8_t ProdRev; /*!< Product Revision */
- __IO uint32_t ProdSN; /*!< Product Serial Number */
- __IO uint8_t Reserved1; /*!< Reserved1 */
- __IO uint16_t ManufactDate; /*!< Manufacturing Date */
- __IO uint8_t CID_CRC; /*!< CID CRC */
- __IO uint8_t Reserved2; /*!< always 1 */
-} SD_CID;
-
-/**
- * @brief SD Card Status
- */
-typedef struct
-{
- __IO uint8_t DAT_BUS_WIDTH;
- __IO uint8_t SECURED_MODE;
- __IO uint16_t SD_CARD_TYPE;
- __IO uint32_t SIZE_OF_PROTECTED_AREA;
- __IO uint8_t SPEED_CLASS;
- __IO uint8_t PERFORMANCE_MOVE;
- __IO uint8_t AU_SIZE;
- __IO uint16_t ERASE_SIZE;
- __IO uint8_t ERASE_TIMEOUT;
- __IO uint8_t ERASE_OFFSET;
-} SD_CardStatus;
-
-
-/**
- * @brief SD Card information
- */
-typedef struct
-{
- SD_CSD SD_csd;
- SD_CID SD_cid;
- uint32_t CardCapacity; /*!< Card Capacity */
- uint32_t CardBlockSize; /*!< Card Block Size */
- uint16_t RCA;
- uint8_t CardType;
-} SD_CardInfo;
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SDIO_SD_Exported_Constants
- * @{
- */
-
-/**
- * @brief SDIO Commands Index
- */
-#define SD_CMD_GO_IDLE_STATE ((uint8_t)0)
-#define SD_CMD_SEND_OP_COND ((uint8_t)1)
-#define SD_CMD_ALL_SEND_CID ((uint8_t)2)
-#define SD_CMD_SET_REL_ADDR ((uint8_t)3) /*!< SDIO_SEND_REL_ADDR for SD Card */
-#define SD_CMD_SET_DSR ((uint8_t)4)
-#define SD_CMD_SDIO_SEN_OP_COND ((uint8_t)5)
-#define SD_CMD_HS_SWITCH ((uint8_t)6)
-#define SD_CMD_SEL_DESEL_CARD ((uint8_t)7)
-#define SD_CMD_HS_SEND_EXT_CSD ((uint8_t)8)
-#define SD_CMD_SEND_CSD ((uint8_t)9)
-#define SD_CMD_SEND_CID ((uint8_t)10)
-#define SD_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11) /*!< SD Card doesn't support it */
-#define SD_CMD_STOP_TRANSMISSION ((uint8_t)12)
-#define SD_CMD_SEND_STATUS ((uint8_t)13)
-#define SD_CMD_HS_BUSTEST_READ ((uint8_t)14)
-#define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15)
-#define SD_CMD_SET_BLOCKLEN ((uint8_t)16)
-#define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17)
-#define SD_CMD_READ_MULT_BLOCK ((uint8_t)18)
-#define SD_CMD_HS_BUSTEST_WRITE ((uint8_t)19)
-#define SD_CMD_WRITE_DAT_UNTIL_STOP ((uint8_t)20) /*!< SD Card doesn't support it */
-#define SD_CMD_SET_BLOCK_COUNT ((uint8_t)23) /*!< SD Card doesn't support it */
-#define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24)
-#define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25)
-#define SD_CMD_PROG_CID ((uint8_t)26) /*!< reserved for manufacturers */
-#define SD_CMD_PROG_CSD ((uint8_t)27)
-#define SD_CMD_SET_WRITE_PROT ((uint8_t)28)
-#define SD_CMD_CLR_WRITE_PROT ((uint8_t)29)
-#define SD_CMD_SEND_WRITE_PROT ((uint8_t)30)
-#define SD_CMD_SD_ERASE_GRP_START ((uint8_t)32) /*!< To set the address of the first write
- block to be erased. (For SD card only) */
-#define SD_CMD_SD_ERASE_GRP_END ((uint8_t)33) /*!< To set the address of the last write block of the
- continuous range to be erased. (For SD card only) */
-#define SD_CMD_ERASE_GRP_START ((uint8_t)35) /*!< To set the address of the first write block to be erased.
- (For MMC card only spec 3.31) */
-
-#define SD_CMD_ERASE_GRP_END ((uint8_t)36) /*!< To set the address of the last write block of the
- continuous range to be erased. (For MMC card only spec 3.31) */
-
-#define SD_CMD_ERASE ((uint8_t)38)
-#define SD_CMD_FAST_IO ((uint8_t)39) /*!< SD Card doesn't support it */
-#define SD_CMD_GO_IRQ_STATE ((uint8_t)40) /*!< SD Card doesn't support it */
-#define SD_CMD_LOCK_UNLOCK ((uint8_t)42)
-#define SD_CMD_APP_CMD ((uint8_t)55)
-#define SD_CMD_GEN_CMD ((uint8_t)56)
-#define SD_CMD_NO_CMD ((uint8_t)64)
-
-/**
- * @brief Following commands are SD Card Specific commands.
- * SDIO_APP_CMD should be sent before sending these commands.
- */
-#define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6) /*!< For SD Card only */
-#define SD_CMD_SD_APP_STAUS ((uint8_t)13) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22) /*!< For SD Card only */
-#define SD_CMD_SD_APP_OP_COND ((uint8_t)41) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51) /*!< For SD Card only */
-#define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52) /*!< For SD I/O Card only */
-#define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53) /*!< For SD I/O Card only */
-
-/**
- * @brief Following commands are SD Card Specific security commands.
- * SDIO_APP_CMD should be sent before sending these commands.
- */
-#define SD_CMD_SD_APP_GET_MKB ((uint8_t)43) /*!< For SD Card only */
-#define SD_CMD_SD_APP_GET_MID ((uint8_t)44) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SET_CER_RN1 ((uint8_t)45) /*!< For SD Card only */
-#define SD_CMD_SD_APP_GET_CER_RN2 ((uint8_t)46) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SET_CER_RES2 ((uint8_t)47) /*!< For SD Card only */
-#define SD_CMD_SD_APP_GET_CER_RES1 ((uint8_t)48) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK ((uint8_t)18) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK ((uint8_t)25) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SECURE_ERASE ((uint8_t)38) /*!< For SD Card only */
-#define SD_CMD_SD_APP_CHANGE_SECURE_AREA ((uint8_t)49) /*!< For SD Card only */
-#define SD_CMD_SD_APP_SECURE_WRITE_MKB ((uint8_t)48) /*!< For SD Card only */
-
-/* Uncomment the following line to select the SDIO Data transfer mode */
-#define SD_DMA_MODE ((uint32_t)0x00000000)
-/*#define SD_POLLING_MODE ((uint32_t)0x00000002)*/
-
-/**
- * @brief SD detection on its memory slot
- */
-#define SD_PRESENT ((uint8_t)0x01)
-#define SD_NOT_PRESENT ((uint8_t)0x00)
-
-/**
- * @brief Supported SD Memory Cards
- */
-#define SDIO_STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000)
-#define SDIO_STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001)
-#define SDIO_HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002)
-#define SDIO_MULTIMEDIA_CARD ((uint32_t)0x00000003)
-#define SDIO_SECURE_DIGITAL_IO_CARD ((uint32_t)0x00000004)
-#define SDIO_HIGH_SPEED_MULTIMEDIA_CARD ((uint32_t)0x00000005)
-#define SDIO_SECURE_DIGITAL_IO_COMBO_CARD ((uint32_t)0x00000006)
-#define SDIO_HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007)
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SDIO_SD_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SDIO_SD_Exported_Functions
- * @{
- */
-void SD_DeInit(void);
-SD_Error SD_Init(void);
-SDTransferState SD_GetStatus(void);
-SDCardState SD_GetState(void);
-uint8_t SD_Detect(void);
-SD_Error SD_PowerON(void);
-SD_Error SD_PowerOFF(void);
-SD_Error SD_InitializeCards(void);
-SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo);
-SD_Error SD_GetCardStatus(SD_CardStatus *cardstatus);
-SD_Error SD_EnableWideBusOperation(uint32_t WideMode);
-SD_Error SD_SelectDeselect(uint32_t addr);
-SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize);
-SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks);
-SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize);
-SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks);
-SDTransferState SD_GetTransferState(void);
-SD_Error SD_StopTransfer(void);
-SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr);
-SD_Error SD_SendStatus(uint32_t *pcardstatus);
-SD_Error SD_SendSDStatus(uint32_t *psdstatus);
-SD_Error SD_ProcessIRQSrc(void);
-SD_Error SD_WaitReadOperation(void);
-SD_Error SD_WaitWriteOperation(void);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32_EVAL_SDIO_SD_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_flash.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_flash.c
deleted file mode 100644
index 878144d..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_flash.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_spi_flash.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides a set of functions needed to manage the SPI M25Pxxx
- * FLASH memory mounted on STM32xx-EVAL board (refer to stm32_eval.h
- * to know about the boards supporting this memory).
- * It implements a high level communication layer for read and write
- * from/to this memory. The needed STM32 hardware resources (SPI and
- * GPIO) are defined in stm32xx_eval.h file, and the initialization is
- * performed in sFLASH_LowLevel_Init() function declared in stm32xx_eval.c
- * file.
- * You can easily tailor this driver to any other development board,
- * by just adapting the defines for hardware resources and
- * sFLASH_LowLevel_Init() function.
- *
- * +-----------------------------------------------------------+
- * | Pin assignment |
- * +-----------------------------+---------------+-------------+
- * | STM32 SPI Pins | sFLASH | Pin |
- * +-----------------------------+---------------+-------------+
- * | sFLASH_CS_PIN | ChipSelect(/S)| 1 |
- * | sFLASH_SPI_MISO_PIN / MISO | DataOut(Q) | 2 |
- * | | VCC | 3 (3.3 V)|
- * | | GND | 4 (0 V) |
- * | sFLASH_SPI_MOSI_PIN / MOSI | DataIn(D) | 5 |
- * | sFLASH_SPI_SCK_PIN / SCLK | Clock(C) | 6 |
- * | | VCC | 7 (3.3 V)|
- * | | VCC | 8 (3.3 V)|
- * +-----------------------------+---------------+-------------+
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval_spi_flash.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_SPI_FLASH
- * @brief This file includes the M25Pxxx SPI FLASH driver of STM32-EVAL boards.
- * @{
- */
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Private_Variables
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Private_Function_Prototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the peripherals used by the SPI FLASH driver.
- * @param None
- * @retval None
- */
-void sFLASH_DeInit(void)
-{
- sFLASH_LowLevel_DeInit();
-}
-
-/**
- * @brief Initializes the peripherals used by the SPI FLASH driver.
- * @param None
- * @retval None
- */
-void sFLASH_Init(void)
-{
- SPI_InitTypeDef SPI_InitStructure;
-
- sFLASH_LowLevel_Init();
-
- /*!< Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
-
- /*!< SPI configuration */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
-#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
-#else
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
-#endif
-
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_CRCPolynomial = 7;
- SPI_Init(sFLASH_SPI, &SPI_InitStructure);
-
- /*!< Enable the sFLASH_SPI */
- SPI_Cmd(sFLASH_SPI, ENABLE);
-}
-
-/**
- * @brief Erases the specified FLASH sector.
- * @param SectorAddr: address of the sector to erase.
- * @retval None
- */
-void sFLASH_EraseSector(uint32_t SectorAddr)
-{
- /*!< Send write enable instruction */
- sFLASH_WriteEnable();
-
- /*!< Sector Erase */
- /*!< Select the FLASH: Chip Select low */
- sFLASH_CS_LOW();
- /*!< Send Sector Erase instruction */
- sFLASH_SendByte(sFLASH_CMD_SE);
- /*!< Send SectorAddr high nibble address byte */
- sFLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
- /*!< Send SectorAddr medium nibble address byte */
- sFLASH_SendByte((SectorAddr & 0xFF00) >> 8);
- /*!< Send SectorAddr low nibble address byte */
- sFLASH_SendByte(SectorAddr & 0xFF);
- /*!< Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
-
- /*!< Wait the end of Flash writing */
- sFLASH_WaitForWriteEnd();
-}
-
-/**
- * @brief Erases the entire FLASH.
- * @param None
- * @retval None
- */
-void sFLASH_EraseBulk(void)
-{
- /*!< Send write enable instruction */
- sFLASH_WriteEnable();
-
- /*!< Bulk Erase */
- /*!< Select the FLASH: Chip Select low */
- sFLASH_CS_LOW();
- /*!< Send Bulk Erase instruction */
- sFLASH_SendByte(sFLASH_CMD_BE);
- /*!< Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
-
- /*!< Wait the end of Flash writing */
- sFLASH_WaitForWriteEnd();
-}
-
-/**
- * @brief Writes more than one byte to the FLASH with a single WRITE cycle
- * (Page WRITE sequence).
- * @note The number of byte can't exceed the FLASH page size.
- * @param pBuffer: pointer to the buffer containing the data to be written
- * to the FLASH.
- * @param WriteAddr: FLASH's internal address to write to.
- * @param NumByteToWrite: number of bytes to write to the FLASH, must be equal
- * or less than "sFLASH_PAGESIZE" value.
- * @retval None
- */
-void sFLASH_WritePage(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
-{
- /*!< Enable the write access to the FLASH */
- sFLASH_WriteEnable();
-
- /*!< Select the FLASH: Chip Select low */
- sFLASH_CS_LOW();
- /*!< Send "Write to Memory " instruction */
- sFLASH_SendByte(sFLASH_CMD_WRITE);
- /*!< Send WriteAddr high nibble address byte to write to */
- sFLASH_SendByte((WriteAddr & 0xFF0000) >> 16);
- /*!< Send WriteAddr medium nibble address byte to write to */
- sFLASH_SendByte((WriteAddr & 0xFF00) >> 8);
- /*!< Send WriteAddr low nibble address byte to write to */
- sFLASH_SendByte(WriteAddr & 0xFF);
-
- /*!< while there is data to be written on the FLASH */
- while (NumByteToWrite--)
- {
- /*!< Send the current byte */
- sFLASH_SendByte(*pBuffer);
- /*!< Point on the next byte to be written */
- pBuffer++;
- }
-
- /*!< Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
-
- /*!< Wait the end of Flash writing */
- sFLASH_WaitForWriteEnd();
-}
-
-/**
- * @brief Writes block of data to the FLASH. In this function, the number of
- * WRITE cycles are reduced, using Page WRITE sequence.
- * @param pBuffer: pointer to the buffer containing the data to be written
- * to the FLASH.
- * @param WriteAddr: FLASH's internal address to write to.
- * @param NumByteToWrite: number of bytes to write to the FLASH.
- * @retval None
- */
-void sFLASH_WriteBuffer(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
-{
- uint8_t NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;
-
- Addr = WriteAddr % sFLASH_SPI_PAGESIZE;
- count = sFLASH_SPI_PAGESIZE - Addr;
- NumOfPage = NumByteToWrite / sFLASH_SPI_PAGESIZE;
- NumOfSingle = NumByteToWrite % sFLASH_SPI_PAGESIZE;
-
- if (Addr == 0) /*!< WriteAddr is sFLASH_PAGESIZE aligned */
- {
- if (NumOfPage == 0) /*!< NumByteToWrite < sFLASH_PAGESIZE */
- {
- sFLASH_WritePage(pBuffer, WriteAddr, NumByteToWrite);
- }
- else /*!< NumByteToWrite > sFLASH_PAGESIZE */
- {
- while (NumOfPage--)
- {
- sFLASH_WritePage(pBuffer, WriteAddr, sFLASH_SPI_PAGESIZE);
- WriteAddr += sFLASH_SPI_PAGESIZE;
- pBuffer += sFLASH_SPI_PAGESIZE;
- }
-
- sFLASH_WritePage(pBuffer, WriteAddr, NumOfSingle);
- }
- }
- else /*!< WriteAddr is not sFLASH_PAGESIZE aligned */
- {
- if (NumOfPage == 0) /*!< NumByteToWrite < sFLASH_PAGESIZE */
- {
- if (NumOfSingle > count) /*!< (NumByteToWrite + WriteAddr) > sFLASH_PAGESIZE */
- {
- temp = NumOfSingle - count;
-
- sFLASH_WritePage(pBuffer, WriteAddr, count);
- WriteAddr += count;
- pBuffer += count;
-
- sFLASH_WritePage(pBuffer, WriteAddr, temp);
- }
- else
- {
- sFLASH_WritePage(pBuffer, WriteAddr, NumByteToWrite);
- }
- }
- else /*!< NumByteToWrite > sFLASH_PAGESIZE */
- {
- NumByteToWrite -= count;
- NumOfPage = NumByteToWrite / sFLASH_SPI_PAGESIZE;
- NumOfSingle = NumByteToWrite % sFLASH_SPI_PAGESIZE;
-
- sFLASH_WritePage(pBuffer, WriteAddr, count);
- WriteAddr += count;
- pBuffer += count;
-
- while (NumOfPage--)
- {
- sFLASH_WritePage(pBuffer, WriteAddr, sFLASH_SPI_PAGESIZE);
- WriteAddr += sFLASH_SPI_PAGESIZE;
- pBuffer += sFLASH_SPI_PAGESIZE;
- }
-
- if (NumOfSingle != 0)
- {
- sFLASH_WritePage(pBuffer, WriteAddr, NumOfSingle);
- }
- }
- }
-}
-
-/**
- * @brief Reads a block of data from the FLASH.
- * @param pBuffer: pointer to the buffer that receives the data read from the FLASH.
- * @param ReadAddr: FLASH's internal address to read from.
- * @param NumByteToRead: number of bytes to read from the FLASH.
- * @retval None
- */
-void sFLASH_ReadBuffer(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead)
-{
- /*!< Select the FLASH: Chip Select low */
- sFLASH_CS_LOW();
-
- /*!< Send "Read from Memory " instruction */
- sFLASH_SendByte(sFLASH_CMD_READ);
-
- /*!< Send ReadAddr high nibble address byte to read from */
- sFLASH_SendByte((ReadAddr & 0xFF0000) >> 16);
- /*!< Send ReadAddr medium nibble address byte to read from */
- sFLASH_SendByte((ReadAddr& 0xFF00) >> 8);
- /*!< Send ReadAddr low nibble address byte to read from */
- sFLASH_SendByte(ReadAddr & 0xFF);
-
- while (NumByteToRead--) /*!< while there is data to be read */
- {
- /*!< Read a byte from the FLASH */
- *pBuffer = sFLASH_SendByte(sFLASH_DUMMY_BYTE);
- /*!< Point to the next location where the byte read will be saved */
- pBuffer++;
- }
-
- /*!< Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
-}
-
-/**
- * @brief Reads FLASH identification.
- * @param None
- * @retval FLASH identification
- */
-uint32_t sFLASH_ReadID(void)
-{
- uint32_t Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0;
-
- /*!< Select the FLASH: Chip Select low */
- sFLASH_CS_LOW();
-
- /*!< Send "RDID " instruction */
- sFLASH_SendByte(0x9F);
-
- /*!< Read a byte from the FLASH */
- Temp0 = sFLASH_SendByte(sFLASH_DUMMY_BYTE);
-
- /*!< Read a byte from the FLASH */
- Temp1 = sFLASH_SendByte(sFLASH_DUMMY_BYTE);
-
- /*!< Read a byte from the FLASH */
- Temp2 = sFLASH_SendByte(sFLASH_DUMMY_BYTE);
-
- /*!< Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
-
- Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2;
-
- return Temp;
-}
-
-/**
- * @brief Initiates a read data byte (READ) sequence from the Flash.
- * This is done by driving the /CS line low to select the device, then the READ
- * instruction is transmitted followed by 3 bytes address. This function exit
- * and keep the /CS line low, so the Flash still being selected. With this
- * technique the whole content of the Flash is read with a single READ instruction.
- * @param ReadAddr: FLASH's internal address to read from.
- * @retval None
- */
-void sFLASH_StartReadSequence(uint32_t ReadAddr)
-{
- /*!< Select the FLASH: Chip Select low */
- sFLASH_CS_LOW();
-
- /*!< Send "Read from Memory " instruction */
- sFLASH_SendByte(sFLASH_CMD_READ);
-
- /*!< Send the 24-bit address of the address to read from -------------------*/
- /*!< Send ReadAddr high nibble address byte */
- sFLASH_SendByte((ReadAddr & 0xFF0000) >> 16);
- /*!< Send ReadAddr medium nibble address byte */
- sFLASH_SendByte((ReadAddr& 0xFF00) >> 8);
- /*!< Send ReadAddr low nibble address byte */
- sFLASH_SendByte(ReadAddr & 0xFF);
-}
-
-/**
- * @brief Reads a byte from the SPI Flash.
- * @note This function must be used only if the Start_Read_Sequence function
- * has been previously called.
- * @param None
- * @retval Byte Read from the SPI Flash.
- */
-uint8_t sFLASH_ReadByte(void)
-{
- return (sFLASH_SendByte(sFLASH_DUMMY_BYTE));
-}
-
-/**
- * @brief Sends a byte through the SPI interface and return the byte received
- * from the SPI bus.
- * @param byte: byte to send.
- * @retval The value of the received byte.
- */
-uint8_t sFLASH_SendByte(uint8_t byte)
-{
- /*!< Loop while DR register in not emplty */
- while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET);
-
- /*!< Send byte through the SPI1 peripheral */
- SPI_I2S_SendData(sFLASH_SPI, byte);
-
- /*!< Wait to receive a byte */
- while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET);
-
- /*!< Return the byte read from the SPI bus */
- return SPI_I2S_ReceiveData(sFLASH_SPI);
-}
-
-/**
- * @brief Sends a Half Word through the SPI interface and return the Half Word
- * received from the SPI bus.
- * @param HalfWord: Half Word to send.
- * @retval The value of the received Half Word.
- */
-uint16_t sFLASH_SendHalfWord(uint16_t HalfWord)
-{
- /*!< Loop while DR register in not emplty */
- while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET);
-
- /*!< Send Half Word through the sFLASH peripheral */
- SPI_I2S_SendData(sFLASH_SPI, HalfWord);
-
- /*!< Wait to receive a Half Word */
- while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET);
-
- /*!< Return the Half Word read from the SPI bus */
- return SPI_I2S_ReceiveData(sFLASH_SPI);
-}
-
-/**
- * @brief Enables the write access to the FLASH.
- * @param None
- * @retval None
- */
-void sFLASH_WriteEnable(void)
-{
- /*!< Select the FLASH: Chip Select low */
- sFLASH_CS_LOW();
-
- /*!< Send "Write Enable" instruction */
- sFLASH_SendByte(sFLASH_CMD_WREN);
-
- /*!< Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
-}
-
-/**
- * @brief Polls the status of the Write In Progress (WIP) flag in the FLASH's
- * status register and loop until write opertaion has completed.
- * @param None
- * @retval None
- */
-void sFLASH_WaitForWriteEnd(void)
-{
- uint8_t flashstatus = 0;
-
- /*!< Select the FLASH: Chip Select low */
- sFLASH_CS_LOW();
-
- /*!< Send "Read Status Register" instruction */
- sFLASH_SendByte(sFLASH_CMD_RDSR);
-
- /*!< Loop as long as the memory is busy with a write cycle */
- do
- {
- /*!< Send a dummy byte to generate the clock needed by the FLASH
- and put the value of the status register in FLASH_Status variable */
- flashstatus = sFLASH_SendByte(sFLASH_DUMMY_BYTE);
-
- }
- while ((flashstatus & sFLASH_WIP_FLAG) == SET); /* Write in progress */
-
- /*!< Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_flash.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_flash.h
deleted file mode 100644
index 74a10a3..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_flash.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_spi_flash.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm32_eval_spi_flash
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32_EVAL_SPI_FLASH_H
-#define __STM32_EVAL_SPI_FLASH_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_SPI_FLASH
- * @{
- */
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Exported_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Exported_Constants
- * @{
- */
-/**
- * @brief M25P SPI Flash supported commands
- */
-#define sFLASH_CMD_WRITE 0x02 /*!< Write to Memory instruction */
-#define sFLASH_CMD_WRSR 0x01 /*!< Write Status Register instruction */
-#define sFLASH_CMD_WREN 0x06 /*!< Write enable instruction */
-#define sFLASH_CMD_READ 0x03 /*!< Read from Memory instruction */
-#define sFLASH_CMD_RDSR 0x05 /*!< Read Status Register instruction */
-#define sFLASH_CMD_RDID 0x9F /*!< Read identification */
-#define sFLASH_CMD_SE 0xD8 /*!< Sector Erase instruction */
-#define sFLASH_CMD_BE 0xC7 /*!< Bulk Erase instruction */
-
-#define sFLASH_WIP_FLAG 0x01 /*!< Write In Progress (WIP) flag */
-
-#define sFLASH_DUMMY_BYTE 0xA5
-#define sFLASH_SPI_PAGESIZE 0x100
-
-#define sFLASH_M25P128_ID 0x202018
-#define sFLASH_M25P64_ID 0x202017
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Exported_Macros
- * @{
- */
-/**
- * @brief Select sFLASH: Chip Select pin low
- */
-#define sFLASH_CS_LOW() GPIO_ResetBits(sFLASH_CS_GPIO_PORT, sFLASH_CS_PIN)
-/**
- * @brief Deselect sFLASH: Chip Select pin high
- */
-#define sFLASH_CS_HIGH() GPIO_SetBits(sFLASH_CS_GPIO_PORT, sFLASH_CS_PIN)
-/**
- * @}
- */
-
-
-
-/** @defgroup STM32_EVAL_SPI_FLASH_Exported_Functions
- * @{
- */
-/**
- * @brief High layer functions
- */
-void sFLASH_DeInit(void);
-void sFLASH_Init(void);
-void sFLASH_EraseSector(uint32_t SectorAddr);
-void sFLASH_EraseBulk(void);
-void sFLASH_WritePage(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite);
-void sFLASH_WriteBuffer(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite);
-void sFLASH_ReadBuffer(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead);
-uint32_t sFLASH_ReadID(void);
-void sFLASH_StartReadSequence(uint32_t ReadAddr);
-
-/**
- * @brief Low layer functions
- */
-uint8_t sFLASH_ReadByte(void);
-uint8_t sFLASH_SendByte(uint8_t byte);
-uint16_t sFLASH_SendHalfWord(uint16_t HalfWord);
-void sFLASH_WriteEnable(void);
-void sFLASH_WaitForWriteEnd(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32_EVAL_SPI_FLASH_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_sd.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_sd.c
deleted file mode 100644
index f652e71..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_sd.c
+++ /dev/null
@@ -1,901 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_spi_sd.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides a set of functions needed to manage the SPI SD
- * Card memory mounted on STM32xx-EVAL board (refer to stm32_eval.h
- * to know about the boards supporting this memory).
- * It implements a high level communication layer for read and write
- * from/to this memory. The needed STM32 hardware resources (SPI and
- * GPIO) are defined in stm32xx_eval.h file, and the initialization is
- * performed in SD_LowLevel_Init() function declared in stm32xx_eval.c
- * file.
- * You can easily tailor this driver to any other development board,
- * by just adapting the defines for hardware resources and
- * SD_LowLevel_Init() function.
- *
- * +-------------------------------------------------------+
- * | Pin assignment |
- * +-------------------------+---------------+-------------+
- * | STM32 SPI Pins | SD | Pin |
- * +-------------------------+---------------+-------------+
- * | SD_SPI_CS_PIN | ChipSelect | 1 |
- * | SD_SPI_MOSI_PIN / MOSI | DataIn | 2 |
- * | | GND | 3 (0 V) |
- * | | VDD | 4 (3.3 V)|
- * | SD_SPI_SCK_PIN / SCLK | Clock | 5 |
- * | | GND | 6 (0 V) |
- * | SD_SPI_MISO_PIN / MISO | DataOut | 7 |
- * +-------------------------+---------------+-------------+
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval_spi_sd.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_SPI_SD
- * @brief This file includes the SD card driver of STM32-EVAL boards.
- * @{
- */
-
-/** @defgroup STM32_EVAL_SPI_SD_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SPI_SD_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SPI_SD_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SPI_SD_Private_Variables
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SPI_SD_Private_Function_Prototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_SPI_SD_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the SD/SD communication.
- * @param None
- * @retval None
- */
-void SD_DeInit(void)
-{
- SD_LowLevel_DeInit();
-}
-
-/**
- * @brief Initializes the SD/SD communication.
- * @param None
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_Init(void)
-{
- uint32_t i = 0;
-
- /*!< Initialize SD_SPI */
- SD_LowLevel_Init();
-
- /*!< SD chip select high */
- SD_CS_HIGH();
-
- /*!< Send dummy byte 0xFF, 10 times with CS high */
- /*!< Rise CS and MOSI for 80 clocks cycles */
- for (i = 0; i <= 9; i++)
- {
- /*!< Send dummy byte 0xFF */
- SD_WriteByte(SD_DUMMY_BYTE);
- }
- /*------------Put SD in SPI mode--------------*/
- /*!< SD initialized and set to SPI mode properly */
- return (SD_GoIdleState());
-}
-
-/**
- * @brief Detect if SD card is correctly plugged in the memory slot.
- * @param None
- * @retval Return if SD is detected or not
- */
-uint8_t SD_Detect(void)
-{
- __IO uint8_t status = SD_PRESENT;
-
- /*!< Check GPIO to detect SD */
- if (GPIO_ReadInputData(SD_DETECT_GPIO_PORT) & SD_DETECT_PIN)
- {
- status = SD_NOT_PRESENT;
- }
- return status;
-}
-
-/**
- * @brief Returns information about specific card.
- * @param cardinfo: pointer to a SD_CardInfo structure that contains all SD
- * card information.
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo)
-{
- SD_Error status = SD_RESPONSE_FAILURE;
-
- status = SD_GetCSDRegister(&(cardinfo->SD_csd));
- status = SD_GetCIDRegister(&(cardinfo->SD_cid));
- cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) ;
- cardinfo->CardCapacity *= (1 << (cardinfo->SD_csd.DeviceSizeMul + 2));
- cardinfo->CardBlockSize = 1 << (cardinfo->SD_csd.RdBlockLen);
- cardinfo->CardCapacity *= cardinfo->CardBlockSize;
-
- /*!< Returns the reponse */
- return status;
-}
-
-/**
- * @brief Reads a block of data from the SD.
- * @param pBuffer: pointer to the buffer that receives the data read from the
- * SD.
- * @param ReadAddr: SD's internal address to read from.
- * @param BlockSize: the SD card Data block size.
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_ReadBlock(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t BlockSize)
-{
- uint32_t i = 0;
- SD_Error rvalue = SD_RESPONSE_FAILURE;
-
- /*!< SD chip select low */
- SD_CS_LOW();
-
- /*!< Send CMD17 (SD_CMD_READ_SINGLE_BLOCK) to read one block */
- SD_SendCmd(SD_CMD_READ_SINGLE_BLOCK, ReadAddr, 0xFF);
-
- /*!< Check if the SD acknowledged the read block command: R1 response (0x00: no errors) */
- if (!SD_GetResponse(SD_RESPONSE_NO_ERROR))
- {
- /*!< Now look for the data token to signify the start of the data */
- if (!SD_GetResponse(SD_START_DATA_SINGLE_BLOCK_READ))
- {
- /*!< Read the SD block data : read NumByteToRead data */
- for (i = 0; i < BlockSize; i++)
- {
- /*!< Save the received data */
- *pBuffer = SD_ReadByte();
-
- /*!< Point to the next location where the byte read will be saved */
- pBuffer++;
- }
- /*!< Get CRC bytes (not really needed by us, but required by SD) */
- SD_ReadByte();
- SD_ReadByte();
- /*!< Set response value to success */
- rvalue = SD_RESPONSE_NO_ERROR;
- }
- }
- /*!< SD chip select high */
- SD_CS_HIGH();
-
- /*!< Send dummy byte: 8 Clock pulses of delay */
- SD_WriteByte(SD_DUMMY_BYTE);
-
- /*!< Returns the reponse */
- return rvalue;
-}
-
-/**
- * @brief Reads multiple block of data from the SD.
- * @param pBuffer: pointer to the buffer that receives the data read from the
- * SD.
- * @param ReadAddr: SD's internal address to read from.
- * @param BlockSize: the SD card Data block size.
- * @param NumberOfBlocks: number of blocks to be read.
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_ReadMultiBlocks(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks)
-{
- uint32_t i = 0, Offset = 0;
- SD_Error rvalue = SD_RESPONSE_FAILURE;
-
- /*!< SD chip select low */
- SD_CS_LOW();
- /*!< Data transfer */
- while (NumberOfBlocks--)
- {
- /*!< Send CMD17 (SD_CMD_READ_SINGLE_BLOCK) to read one block */
- SD_SendCmd (SD_CMD_READ_SINGLE_BLOCK, ReadAddr + Offset, 0xFF);
- /*!< Check if the SD acknowledged the read block command: R1 response (0x00: no errors) */
- if (SD_GetResponse(SD_RESPONSE_NO_ERROR))
- {
- return SD_RESPONSE_FAILURE;
- }
- /*!< Now look for the data token to signify the start of the data */
- if (!SD_GetResponse(SD_START_DATA_SINGLE_BLOCK_READ))
- {
- /*!< Read the SD block data : read NumByteToRead data */
- for (i = 0; i < BlockSize; i++)
- {
- /*!< Read the pointed data */
- *pBuffer = SD_ReadByte();
- /*!< Point to the next location where the byte read will be saved */
- pBuffer++;
- }
- /*!< Set next read address*/
- Offset += 512;
- /*!< get CRC bytes (not really needed by us, but required by SD) */
- SD_ReadByte();
- SD_ReadByte();
- /*!< Set response value to success */
- rvalue = SD_RESPONSE_NO_ERROR;
- }
- else
- {
- /*!< Set response value to failure */
- rvalue = SD_RESPONSE_FAILURE;
- }
- }
- /*!< SD chip select high */
- SD_CS_HIGH();
- /*!< Send dummy byte: 8 Clock pulses of delay */
- SD_WriteByte(SD_DUMMY_BYTE);
- /*!< Returns the reponse */
- return rvalue;
-}
-
-/**
- * @brief Writes a block on the SD
- * @param pBuffer: pointer to the buffer containing the data to be written on
- * the SD.
- * @param WriteAddr: address to write on.
- * @param BlockSize: the SD card Data block size.
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_WriteBlock(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t BlockSize)
-{
- uint32_t i = 0;
- SD_Error rvalue = SD_RESPONSE_FAILURE;
-
- /*!< SD chip select low */
- SD_CS_LOW();
-
- /*!< Send CMD24 (SD_CMD_WRITE_SINGLE_BLOCK) to write multiple block */
- SD_SendCmd(SD_CMD_WRITE_SINGLE_BLOCK, WriteAddr, 0xFF);
-
- /*!< Check if the SD acknowledged the write block command: R1 response (0x00: no errors) */
- if (!SD_GetResponse(SD_RESPONSE_NO_ERROR))
- {
- /*!< Send a dummy byte */
- SD_WriteByte(SD_DUMMY_BYTE);
-
- /*!< Send the data token to signify the start of the data */
- SD_WriteByte(0xFE);
-
- /*!< Write the block data to SD : write count data by block */
- for (i = 0; i < BlockSize; i++)
- {
- /*!< Send the pointed byte */
- SD_WriteByte(*pBuffer);
- /*!< Point to the next location where the byte read will be saved */
- pBuffer++;
- }
- /*!< Put CRC bytes (not really needed by us, but required by SD) */
- SD_ReadByte();
- SD_ReadByte();
-
- /*!< Read data response */
- if (SD_GetDataResponse() == SD_DATA_OK)
- {
- rvalue = SD_RESPONSE_NO_ERROR;
- }
- }
- /*!< SD chip select high */
- SD_CS_HIGH();
- /*!< Send dummy byte: 8 Clock pulses of delay */
- SD_WriteByte(SD_DUMMY_BYTE);
-
- /*!< Returns the reponse */
- return rvalue;
-}
-
-/**
- * @brief Writes many blocks on the SD
- * @param pBuffer: pointer to the buffer containing the data to be written on
- * the SD.
- * @param WriteAddr: address to write on.
- * @param BlockSize: the SD card Data block size.
- * @param NumberOfBlocks: number of blocks to be written.
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_WriteMultiBlocks(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks)
-{
- uint32_t i = 0, Offset = 0;
- SD_Error rvalue = SD_RESPONSE_FAILURE;
-
- /*!< SD chip select low */
- SD_CS_LOW();
- /*!< Data transfer */
- while (NumberOfBlocks--)
- {
- /*!< Send CMD24 (SD_CMD_WRITE_SINGLE_BLOCK) to write blocks */
- SD_SendCmd(SD_CMD_WRITE_SINGLE_BLOCK, WriteAddr + Offset, 0xFF);
- /*!< Check if the SD acknowledged the write block command: R1 response (0x00: no errors) */
- if (SD_GetResponse(SD_RESPONSE_NO_ERROR))
- {
- return SD_RESPONSE_FAILURE;
- }
- /*!< Send dummy byte */
- SD_WriteByte(SD_DUMMY_BYTE);
- /*!< Send the data token to signify the start of the data */
- SD_WriteByte(SD_START_DATA_SINGLE_BLOCK_WRITE);
- /*!< Write the block data to SD : write count data by block */
- for (i = 0; i < BlockSize; i++)
- {
- /*!< Send the pointed byte */
- SD_WriteByte(*pBuffer);
- /*!< Point to the next location where the byte read will be saved */
- pBuffer++;
- }
- /*!< Set next write address */
- Offset += 512;
- /*!< Put CRC bytes (not really needed by us, but required by SD) */
- SD_ReadByte();
- SD_ReadByte();
- /*!< Read data response */
- if (SD_GetDataResponse() == SD_DATA_OK)
- {
- /*!< Set response value to success */
- rvalue = SD_RESPONSE_NO_ERROR;
- }
- else
- {
- /*!< Set response value to failure */
- rvalue = SD_RESPONSE_FAILURE;
- }
- }
- /*!< SD chip select high */
- SD_CS_HIGH();
- /*!< Send dummy byte: 8 Clock pulses of delay */
- SD_WriteByte(SD_DUMMY_BYTE);
- /*!< Returns the reponse */
- return rvalue;
-}
-
-/**
- * @brief Read the CSD card register.
- * Reading the contents of the CSD register in SPI mode is a simple
- * read-block transaction.
- * @param SD_csd: pointer on an SCD register structure
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_GetCSDRegister(SD_CSD* SD_csd)
-{
- uint32_t i = 0;
- SD_Error rvalue = SD_RESPONSE_FAILURE;
- uint8_t CSD_Tab[16];
-
- /*!< SD chip select low */
- SD_CS_LOW();
- /*!< Send CMD9 (CSD register) or CMD10(CSD register) */
- SD_SendCmd(SD_CMD_SEND_CSD, 0, 0xFF);
- /*!< Wait for response in the R1 format (0x00 is no errors) */
- if (!SD_GetResponse(SD_RESPONSE_NO_ERROR))
- {
- if (!SD_GetResponse(SD_START_DATA_SINGLE_BLOCK_READ))
- {
- for (i = 0; i < 16; i++)
- {
- /*!< Store CSD register value on CSD_Tab */
- CSD_Tab[i] = SD_ReadByte();
- }
- }
- /*!< Get CRC bytes (not really needed by us, but required by SD) */
- SD_WriteByte(SD_DUMMY_BYTE);
- SD_WriteByte(SD_DUMMY_BYTE);
- /*!< Set response value to success */
- rvalue = SD_RESPONSE_NO_ERROR;
- }
- /*!< SD chip select high */
- SD_CS_HIGH();
- /*!< Send dummy byte: 8 Clock pulses of delay */
- SD_WriteByte(SD_DUMMY_BYTE);
-
- /*!< Byte 0 */
- SD_csd->CSDStruct = (CSD_Tab[0] & 0xC0) >> 6;
- SD_csd->SysSpecVersion = (CSD_Tab[0] & 0x3C) >> 2;
- SD_csd->Reserved1 = CSD_Tab[0] & 0x03;
-
- /*!< Byte 1 */
- SD_csd->TAAC = CSD_Tab[1];
-
- /*!< Byte 2 */
- SD_csd->NSAC = CSD_Tab[2];
-
- /*!< Byte 3 */
- SD_csd->MaxBusClkFrec = CSD_Tab[3];
-
- /*!< Byte 4 */
- SD_csd->CardComdClasses = CSD_Tab[4] << 4;
-
- /*!< Byte 5 */
- SD_csd->CardComdClasses |= (CSD_Tab[5] & 0xF0) >> 4;
- SD_csd->RdBlockLen = CSD_Tab[5] & 0x0F;
-
- /*!< Byte 6 */
- SD_csd->PartBlockRead = (CSD_Tab[6] & 0x80) >> 7;
- SD_csd->WrBlockMisalign = (CSD_Tab[6] & 0x40) >> 6;
- SD_csd->RdBlockMisalign = (CSD_Tab[6] & 0x20) >> 5;
- SD_csd->DSRImpl = (CSD_Tab[6] & 0x10) >> 4;
- SD_csd->Reserved2 = 0; /*!< Reserved */
-
- SD_csd->DeviceSize = (CSD_Tab[6] & 0x03) << 10;
-
- /*!< Byte 7 */
- SD_csd->DeviceSize |= (CSD_Tab[7]) << 2;
-
- /*!< Byte 8 */
- SD_csd->DeviceSize |= (CSD_Tab[8] & 0xC0) >> 6;
-
- SD_csd->MaxRdCurrentVDDMin = (CSD_Tab[8] & 0x38) >> 3;
- SD_csd->MaxRdCurrentVDDMax = (CSD_Tab[8] & 0x07);
-
- /*!< Byte 9 */
- SD_csd->MaxWrCurrentVDDMin = (CSD_Tab[9] & 0xE0) >> 5;
- SD_csd->MaxWrCurrentVDDMax = (CSD_Tab[9] & 0x1C) >> 2;
- SD_csd->DeviceSizeMul = (CSD_Tab[9] & 0x03) << 1;
- /*!< Byte 10 */
- SD_csd->DeviceSizeMul |= (CSD_Tab[10] & 0x80) >> 7;
-
- SD_csd->EraseGrSize = (CSD_Tab[10] & 0x40) >> 6;
- SD_csd->EraseGrMul = (CSD_Tab[10] & 0x3F) << 1;
-
- /*!< Byte 11 */
- SD_csd->EraseGrMul |= (CSD_Tab[11] & 0x80) >> 7;
- SD_csd->WrProtectGrSize = (CSD_Tab[11] & 0x7F);
-
- /*!< Byte 12 */
- SD_csd->WrProtectGrEnable = (CSD_Tab[12] & 0x80) >> 7;
- SD_csd->ManDeflECC = (CSD_Tab[12] & 0x60) >> 5;
- SD_csd->WrSpeedFact = (CSD_Tab[12] & 0x1C) >> 2;
- SD_csd->MaxWrBlockLen = (CSD_Tab[12] & 0x03) << 2;
-
- /*!< Byte 13 */
- SD_csd->MaxWrBlockLen |= (CSD_Tab[13] & 0xC0) >> 6;
- SD_csd->WriteBlockPaPartial = (CSD_Tab[13] & 0x20) >> 5;
- SD_csd->Reserved3 = 0;
- SD_csd->ContentProtectAppli = (CSD_Tab[13] & 0x01);
-
- /*!< Byte 14 */
- SD_csd->FileFormatGrouop = (CSD_Tab[14] & 0x80) >> 7;
- SD_csd->CopyFlag = (CSD_Tab[14] & 0x40) >> 6;
- SD_csd->PermWrProtect = (CSD_Tab[14] & 0x20) >> 5;
- SD_csd->TempWrProtect = (CSD_Tab[14] & 0x10) >> 4;
- SD_csd->FileFormat = (CSD_Tab[14] & 0x0C) >> 2;
- SD_csd->ECC = (CSD_Tab[14] & 0x03);
-
- /*!< Byte 15 */
- SD_csd->CSD_CRC = (CSD_Tab[15] & 0xFE) >> 1;
- SD_csd->Reserved4 = 1;
-
- /*!< Return the reponse */
- return rvalue;
-}
-
-/**
- * @brief Read the CID card register.
- * Reading the contents of the CID register in SPI mode is a simple
- * read-block transaction.
- * @param SD_cid: pointer on an CID register structure
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_GetCIDRegister(SD_CID* SD_cid)
-{
- uint32_t i = 0;
- SD_Error rvalue = SD_RESPONSE_FAILURE;
- uint8_t CID_Tab[16];
-
- /*!< SD chip select low */
- SD_CS_LOW();
-
- /*!< Send CMD10 (CID register) */
- SD_SendCmd(SD_CMD_SEND_CID, 0, 0xFF);
-
- /*!< Wait for response in the R1 format (0x00 is no errors) */
- if (!SD_GetResponse(SD_RESPONSE_NO_ERROR))
- {
- if (!SD_GetResponse(SD_START_DATA_SINGLE_BLOCK_READ))
- {
- /*!< Store CID register value on CID_Tab */
- for (i = 0; i < 16; i++)
- {
- CID_Tab[i] = SD_ReadByte();
- }
- }
- /*!< Get CRC bytes (not really needed by us, but required by SD) */
- SD_WriteByte(SD_DUMMY_BYTE);
- SD_WriteByte(SD_DUMMY_BYTE);
- /*!< Set response value to success */
- rvalue = SD_RESPONSE_NO_ERROR;
- }
- /*!< SD chip select high */
- SD_CS_HIGH();
- /*!< Send dummy byte: 8 Clock pulses of delay */
- SD_WriteByte(SD_DUMMY_BYTE);
-
- /*!< Byte 0 */
- SD_cid->ManufacturerID = CID_Tab[0];
-
- /*!< Byte 1 */
- SD_cid->OEM_AppliID = CID_Tab[1] << 8;
-
- /*!< Byte 2 */
- SD_cid->OEM_AppliID |= CID_Tab[2];
-
- /*!< Byte 3 */
- SD_cid->ProdName1 = CID_Tab[3] << 24;
-
- /*!< Byte 4 */
- SD_cid->ProdName1 |= CID_Tab[4] << 16;
-
- /*!< Byte 5 */
- SD_cid->ProdName1 |= CID_Tab[5] << 8;
-
- /*!< Byte 6 */
- SD_cid->ProdName1 |= CID_Tab[6];
-
- /*!< Byte 7 */
- SD_cid->ProdName2 = CID_Tab[7];
-
- /*!< Byte 8 */
- SD_cid->ProdRev = CID_Tab[8];
-
- /*!< Byte 9 */
- SD_cid->ProdSN = CID_Tab[9] << 24;
-
- /*!< Byte 10 */
- SD_cid->ProdSN |= CID_Tab[10] << 16;
-
- /*!< Byte 11 */
- SD_cid->ProdSN |= CID_Tab[11] << 8;
-
- /*!< Byte 12 */
- SD_cid->ProdSN |= CID_Tab[12];
-
- /*!< Byte 13 */
- SD_cid->Reserved1 |= (CID_Tab[13] & 0xF0) >> 4;
- SD_cid->ManufactDate = (CID_Tab[13] & 0x0F) << 8;
-
- /*!< Byte 14 */
- SD_cid->ManufactDate |= CID_Tab[14];
-
- /*!< Byte 15 */
- SD_cid->CID_CRC = (CID_Tab[15] & 0xFE) >> 1;
- SD_cid->Reserved2 = 1;
-
- /*!< Return the reponse */
- return rvalue;
-}
-
-/**
- * @brief Send 5 bytes command to the SD card.
- * @param Cmd: The user expected command to send to SD card.
- * @param Arg: The command argument.
- * @param Crc: The CRC.
- * @retval None
- */
-void SD_SendCmd(uint8_t Cmd, uint32_t Arg, uint8_t Crc)
-{
- uint32_t i = 0x00;
-
- uint8_t Frame[6];
-
- Frame[0] = (Cmd | 0x40); /*!< Construct byte 1 */
-
- Frame[1] = (uint8_t)(Arg >> 24); /*!< Construct byte 2 */
-
- Frame[2] = (uint8_t)(Arg >> 16); /*!< Construct byte 3 */
-
- Frame[3] = (uint8_t)(Arg >> 8); /*!< Construct byte 4 */
-
- Frame[4] = (uint8_t)(Arg); /*!< Construct byte 5 */
-
- Frame[5] = (Crc); /*!< Construct CRC: byte 6 */
-
- for (i = 0; i < 6; i++)
- {
- SD_WriteByte(Frame[i]); /*!< Send the Cmd bytes */
- }
-}
-
-/**
- * @brief Get SD card data response.
- * @param None
- * @retval The SD status: Read data response xxx0<status>1
- * - status 010: Data accecpted
- * - status 101: Data rejected due to a crc error
- * - status 110: Data rejected due to a Write error.
- * - status 111: Data rejected due to other error.
- */
-uint8_t SD_GetDataResponse(void)
-{
- uint32_t i = 0;
- uint8_t response, rvalue;
-
- while (i <= 64)
- {
- /*!< Read resonse */
- response = SD_ReadByte();
- /*!< Mask unused bits */
- response &= 0x1F;
- switch (response)
- {
- case SD_DATA_OK:
- {
- rvalue = SD_DATA_OK;
- break;
- }
- case SD_DATA_CRC_ERROR:
- return SD_DATA_CRC_ERROR;
- case SD_DATA_WRITE_ERROR:
- return SD_DATA_WRITE_ERROR;
- default:
- {
- rvalue = SD_DATA_OTHER_ERROR;
- break;
- }
- }
- /*!< Exit loop in case of data ok */
- if (rvalue == SD_DATA_OK)
- break;
- /*!< Increment loop counter */
- i++;
- }
-
- /*!< Wait null data */
- while (SD_ReadByte() == 0);
-
- /*!< Return response */
- return response;
-}
-
-/**
- * @brief Returns the SD response.
- * @param None
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_GetResponse(uint8_t Response)
-{
- uint32_t Count = 0xFFF;
-
- /*!< Check if response is got or a timeout is happen */
- while ((SD_ReadByte() != Response) && Count)
- {
- Count--;
- }
- if (Count == 0)
- {
- /*!< After time out */
- return SD_RESPONSE_FAILURE;
- }
- else
- {
- /*!< Right response got */
- return SD_RESPONSE_NO_ERROR;
- }
-}
-
-/**
- * @brief Returns the SD status.
- * @param None
- * @retval The SD status.
- */
-uint16_t SD_GetStatus(void)
-{
- uint16_t Status = 0;
-
- /*!< SD chip select low */
- SD_CS_LOW();
-
- /*!< Send CMD13 (SD_SEND_STATUS) to get SD status */
- SD_SendCmd(SD_CMD_SEND_STATUS, 0, 0xFF);
-
- Status = SD_ReadByte();
- Status |= (uint16_t)(SD_ReadByte() << 8);
-
- /*!< SD chip select high */
- SD_CS_HIGH();
-
- /*!< Send dummy byte 0xFF */
- SD_WriteByte(SD_DUMMY_BYTE);
-
- return Status;
-}
-
-/**
- * @brief Put SD in Idle state.
- * @param None
- * @retval The SD Response:
- * - SD_RESPONSE_FAILURE: Sequence failed
- * - SD_RESPONSE_NO_ERROR: Sequence succeed
- */
-SD_Error SD_GoIdleState(void)
-{
- /*!< SD chip select low */
- SD_CS_LOW();
-
- /*!< Send CMD0 (SD_CMD_GO_IDLE_STATE) to put SD in SPI mode */
- SD_SendCmd(SD_CMD_GO_IDLE_STATE, 0, 0x95);
-
- /*!< Wait for In Idle State Response (R1 Format) equal to 0x01 */
- if (SD_GetResponse(SD_IN_IDLE_STATE))
- {
- /*!< No Idle State Response: return response failue */
- return SD_RESPONSE_FAILURE;
- }
- /*----------Activates the card initialization process-----------*/
- do
- {
- /*!< SD chip select high */
- SD_CS_HIGH();
-
- /*!< Send Dummy byte 0xFF */
- SD_WriteByte(SD_DUMMY_BYTE);
-
- /*!< SD chip select low */
- SD_CS_LOW();
-
- /*!< Send CMD1 (Activates the card process) until response equal to 0x0 */
- SD_SendCmd(SD_CMD_SEND_OP_COND, 0, 0xFF);
- /*!< Wait for no error Response (R1 Format) equal to 0x00 */
- }
- while (SD_GetResponse(SD_RESPONSE_NO_ERROR));
-
- /*!< SD chip select high */
- SD_CS_HIGH();
-
- /*!< Send dummy byte 0xFF */
- SD_WriteByte(SD_DUMMY_BYTE);
-
- return SD_RESPONSE_NO_ERROR;
-}
-
-/**
- * @brief Write a byte on the SD.
- * @param Data: byte to send.
- * @retval None
- */
-uint8_t SD_WriteByte(uint8_t Data)
-{
- /*!< Wait until the transmit buffer is empty */
- while(SPI_I2S_GetFlagStatus(SD_SPI, SPI_I2S_FLAG_TXE) == RESET)
- {
- }
-
- /*!< Send the byte */
- SPI_I2S_SendData(SD_SPI, Data);
-
- /*!< Wait to receive a byte*/
- while(SPI_I2S_GetFlagStatus(SD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
-
- /*!< Return the byte read from the SPI bus */
- return SPI_I2S_ReceiveData(SD_SPI);
-}
-
-/**
- * @brief Read a byte from the SD.
- * @param None
- * @retval The received byte.
- */
-uint8_t SD_ReadByte(void)
-{
- uint8_t Data = 0;
-
- /*!< Wait until the transmit buffer is empty */
- while (SPI_I2S_GetFlagStatus(SD_SPI, SPI_I2S_FLAG_TXE) == RESET)
- {
- }
- /*!< Send the byte */
- SPI_I2S_SendData(SD_SPI, SD_DUMMY_BYTE);
-
- /*!< Wait until a data is received */
- while (SPI_I2S_GetFlagStatus(SD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
- /*!< Get the received data */
- Data = SPI_I2S_ReceiveData(SD_SPI);
-
- /*!< Return the shifted data */
- return Data;
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_sd.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_sd.h
deleted file mode 100644
index 4a63f3a..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Common/stm32_eval_spi_sd.h
+++ /dev/null
@@ -1,280 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval_spi_sd.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm32_eval_spi_sd
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32_EVAL_SPI_SD_H
-#define __STM32_EVAL_SPI_SD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup Common
- * @{
- */
-
-/** @addtogroup STM32_EVAL_SPI_SD
- * @{
- */
-
-/** @defgroup STM32_EVAL_SPI_SD_Exported_Types
- * @{
- */
-
-typedef enum
-{
-/**
- * @brief SD reponses and error flags
- */
- SD_RESPONSE_NO_ERROR = (0x00),
- SD_IN_IDLE_STATE = (0x01),
- SD_ERASE_RESET = (0x02),
- SD_ILLEGAL_COMMAND = (0x04),
- SD_COM_CRC_ERROR = (0x08),
- SD_ERASE_SEQUENCE_ERROR = (0x10),
- SD_ADDRESS_ERROR = (0x20),
- SD_PARAMETER_ERROR = (0x40),
- SD_RESPONSE_FAILURE = (0xFF),
-
-/**
- * @brief Data response error
- */
- SD_DATA_OK = (0x05),
- SD_DATA_CRC_ERROR = (0x0B),
- SD_DATA_WRITE_ERROR = (0x0D),
- SD_DATA_OTHER_ERROR = (0xFF)
-} SD_Error;
-
-/**
- * @brief Card Specific Data: CSD Register
- */
-typedef struct
-{
- __IO uint8_t CSDStruct; /*!< CSD structure */
- __IO uint8_t SysSpecVersion; /*!< System specification version */
- __IO uint8_t Reserved1; /*!< Reserved */
- __IO uint8_t TAAC; /*!< Data read access-time 1 */
- __IO uint8_t NSAC; /*!< Data read access-time 2 in CLK cycles */
- __IO uint8_t MaxBusClkFrec; /*!< Max. bus clock frequency */
- __IO uint16_t CardComdClasses; /*!< Card command classes */
- __IO uint8_t RdBlockLen; /*!< Max. read data block length */
- __IO uint8_t PartBlockRead; /*!< Partial blocks for read allowed */
- __IO uint8_t WrBlockMisalign; /*!< Write block misalignment */
- __IO uint8_t RdBlockMisalign; /*!< Read block misalignment */
- __IO uint8_t DSRImpl; /*!< DSR implemented */
- __IO uint8_t Reserved2; /*!< Reserved */
- __IO uint32_t DeviceSize; /*!< Device Size */
- __IO uint8_t MaxRdCurrentVDDMin; /*!< Max. read current @ VDD min */
- __IO uint8_t MaxRdCurrentVDDMax; /*!< Max. read current @ VDD max */
- __IO uint8_t MaxWrCurrentVDDMin; /*!< Max. write current @ VDD min */
- __IO uint8_t MaxWrCurrentVDDMax; /*!< Max. write current @ VDD max */
- __IO uint8_t DeviceSizeMul; /*!< Device size multiplier */
- __IO uint8_t EraseGrSize; /*!< Erase group size */
- __IO uint8_t EraseGrMul; /*!< Erase group size multiplier */
- __IO uint8_t WrProtectGrSize; /*!< Write protect group size */
- __IO uint8_t WrProtectGrEnable; /*!< Write protect group enable */
- __IO uint8_t ManDeflECC; /*!< Manufacturer default ECC */
- __IO uint8_t WrSpeedFact; /*!< Write speed factor */
- __IO uint8_t MaxWrBlockLen; /*!< Max. write data block length */
- __IO uint8_t WriteBlockPaPartial; /*!< Partial blocks for write allowed */
- __IO uint8_t Reserved3; /*!< Reserded */
- __IO uint8_t ContentProtectAppli; /*!< Content protection application */
- __IO uint8_t FileFormatGrouop; /*!< File format group */
- __IO uint8_t CopyFlag; /*!< Copy flag (OTP) */
- __IO uint8_t PermWrProtect; /*!< Permanent write protection */
- __IO uint8_t TempWrProtect; /*!< Temporary write protection */
- __IO uint8_t FileFormat; /*!< File Format */
- __IO uint8_t ECC; /*!< ECC code */
- __IO uint8_t CSD_CRC; /*!< CSD CRC */
- __IO uint8_t Reserved4; /*!< always 1*/
-} SD_CSD;
-
-/**
- * @brief Card Identification Data: CID Register
- */
-typedef struct
-{
- __IO uint8_t ManufacturerID; /*!< ManufacturerID */
- __IO uint16_t OEM_AppliID; /*!< OEM/Application ID */
- __IO uint32_t ProdName1; /*!< Product Name part1 */
- __IO uint8_t ProdName2; /*!< Product Name part2*/
- __IO uint8_t ProdRev; /*!< Product Revision */
- __IO uint32_t ProdSN; /*!< Product Serial Number */
- __IO uint8_t Reserved1; /*!< Reserved1 */
- __IO uint16_t ManufactDate; /*!< Manufacturing Date */
- __IO uint8_t CID_CRC; /*!< CID CRC */
- __IO uint8_t Reserved2; /*!< always 1 */
-} SD_CID;
-
-/**
- * @brief SD Card information
- */
-typedef struct
-{
- SD_CSD SD_csd;
- SD_CID SD_cid;
- uint32_t CardCapacity; /*!< Card Capacity */
- uint32_t CardBlockSize; /*!< Card Block Size */
-} SD_CardInfo;
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SPI_SD_Exported_Constants
- * @{
- */
-
-/**
- * @brief Block Size
- */
-#define SD_BLOCK_SIZE 0x200
-
-/**
- * @brief Dummy byte
- */
-#define SD_DUMMY_BYTE 0xFF
-
-/**
- * @brief Start Data tokens:
- * Tokens (necessary because at nop/idle (and CS active) only 0xff is
- * on the data/command line)
- */
-#define SD_START_DATA_SINGLE_BLOCK_READ 0xFE /*!< Data token start byte, Start Single Block Read */
-#define SD_START_DATA_MULTIPLE_BLOCK_READ 0xFE /*!< Data token start byte, Start Multiple Block Read */
-#define SD_START_DATA_SINGLE_BLOCK_WRITE 0xFE /*!< Data token start byte, Start Single Block Write */
-#define SD_START_DATA_MULTIPLE_BLOCK_WRITE 0xFD /*!< Data token start byte, Start Multiple Block Write */
-#define SD_STOP_DATA_MULTIPLE_BLOCK_WRITE 0xFD /*!< Data toke stop byte, Stop Multiple Block Write */
-
-/**
- * @brief SD detection on its memory slot
- */
-#define SD_PRESENT ((uint8_t)0x01)
-#define SD_NOT_PRESENT ((uint8_t)0x00)
-
-
-/**
- * @brief Commands: CMDxx = CMD-number | 0x40
- */
-#define SD_CMD_GO_IDLE_STATE 0 /*!< CMD0 = 0x40 */
-#define SD_CMD_SEND_OP_COND 1 /*!< CMD1 = 0x41 */
-#define SD_CMD_SEND_CSD 9 /*!< CMD9 = 0x49 */
-#define SD_CMD_SEND_CID 10 /*!< CMD10 = 0x4A */
-#define SD_CMD_STOP_TRANSMISSION 12 /*!< CMD12 = 0x4C */
-#define SD_CMD_SEND_STATUS 13 /*!< CMD13 = 0x4D */
-#define SD_CMD_SET_BLOCKLEN 16 /*!< CMD16 = 0x50 */
-#define SD_CMD_READ_SINGLE_BLOCK 17 /*!< CMD17 = 0x51 */
-#define SD_CMD_READ_MULT_BLOCK 18 /*!< CMD18 = 0x52 */
-#define SD_CMD_SET_BLOCK_COUNT 23 /*!< CMD23 = 0x57 */
-#define SD_CMD_WRITE_SINGLE_BLOCK 24 /*!< CMD24 = 0x58 */
-#define SD_CMD_WRITE_MULT_BLOCK 25 /*!< CMD25 = 0x59 */
-#define SD_CMD_PROG_CSD 27 /*!< CMD27 = 0x5B */
-#define SD_CMD_SET_WRITE_PROT 28 /*!< CMD28 = 0x5C */
-#define SD_CMD_CLR_WRITE_PROT 29 /*!< CMD29 = 0x5D */
-#define SD_CMD_SEND_WRITE_PROT 30 /*!< CMD30 = 0x5E */
-#define SD_CMD_SD_ERASE_GRP_START 32 /*!< CMD32 = 0x60 */
-#define SD_CMD_SD_ERASE_GRP_END 33 /*!< CMD33 = 0x61 */
-#define SD_CMD_UNTAG_SECTOR 34 /*!< CMD34 = 0x62 */
-#define SD_CMD_ERASE_GRP_START 35 /*!< CMD35 = 0x63 */
-#define SD_CMD_ERASE_GRP_END 36 /*!< CMD36 = 0x64 */
-#define SD_CMD_UNTAG_ERASE_GROUP 37 /*!< CMD37 = 0x65 */
-#define SD_CMD_ERASE 38 /*!< CMD38 = 0x66 */
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SPI_SD_Exported_Macros
- * @{
- */
-/**
- * @brief Select SD Card: ChipSelect pin low
- */
-#define SD_CS_LOW() GPIO_ResetBits(SD_CS_GPIO_PORT, SD_CS_PIN)
-/**
- * @brief Deselect SD Card: ChipSelect pin high
- */
-#define SD_CS_HIGH() GPIO_SetBits(SD_CS_GPIO_PORT, SD_CS_PIN)
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_SPI_SD_Exported_Functions
- * @{
- */
-void SD_DeInit(void);
-SD_Error SD_Init(void);
-uint8_t SD_Detect(void);
-SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo);
-SD_Error SD_ReadBlock(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t BlockSize);
-SD_Error SD_ReadMultiBlocks(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks);
-SD_Error SD_WriteBlock(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t BlockSize);
-SD_Error SD_WriteMultiBlocks(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks);
-SD_Error SD_GetCSDRegister(SD_CSD* SD_csd);
-SD_Error SD_GetCIDRegister(SD_CID* SD_cid);
-
-void SD_SendCmd(uint8_t Cmd, uint32_t Arg, uint8_t Crc);
-SD_Error SD_GetResponse(uint8_t Response);
-uint8_t SD_GetDataResponse(void);
-SD_Error SD_GoIdleState(void);
-uint16_t SD_GetStatus(void);
-
-uint8_t SD_WriteByte(uint8_t byte);
-uint8_t SD_ReadByte(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32_EVAL_SPI_SD_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Release_Notes.html b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Release_Notes.html
deleted file mode 100644
index 430a05b..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/Release_Notes.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head>
-
-
-
-
-
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-
-
- <link rel="File-List" href="Library_files/filelist.xml">
-
-
- <link rel="Edit-Time-Data" href="Library_files/editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><title>Release Notes for STM32 Standard Peripherals Library Utilities</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>STMicroelectronics</o:Author> <o:LastAuthor>STMicroelectronics</o:LastAuthor> <o:Revision>37</o:Revision> <o:TotalTime>136</o:TotalTime> <o:Created>2009-02-27T19:26:00Z</o:Created> <o:LastSaved>2009-03-01T17:56:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>522</o:Words> <o:Characters>2977</o:Characters> <o:Company>STMicroelectronics</o:Company> <o:Lines>24</o:Lines> <o:Paragraphs>6</o:Paragraphs> <o:CharactersWithSpaces>3493</o:CharactersWithSpaces> <o:Version>11.6568</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>110</w:Zoom> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]-->
-
-
-
-
-
-
-
- <style>
-<!--
-/* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-{mso-style-parent:"";
-margin:0in;
-margin-bottom:.0001pt;
-mso-pagination:widow-orphan;
-font-size:12.0pt;
-font-family:"Times New Roman";
-mso-fareast-font-family:"Times New Roman";}
-h2
-{mso-style-next:Normal;
-margin-top:12.0pt;
-margin-right:0in;
-margin-bottom:3.0pt;
-margin-left:0in;
-mso-pagination:widow-orphan;
-page-break-after:avoid;
-mso-outline-level:2;
-font-size:14.0pt;
-font-family:Arial;
-font-weight:bold;
-font-style:italic;}
-a:link, span.MsoHyperlink
-{color:blue;
-text-decoration:underline;
-text-underline:single;}
-a:visited, span.MsoHyperlinkFollowed
-{color:blue;
-text-decoration:underline;
-text-underline:single;}
-p
-{mso-margin-top-alt:auto;
-margin-right:0in;
-mso-margin-bottom-alt:auto;
-margin-left:0in;
-mso-pagination:widow-orphan;
-font-size:12.0pt;
-font-family:"Times New Roman";
-mso-fareast-font-family:"Times New Roman";}
-@page Section1
-{size:8.5in 11.0in;
-margin:1.0in 1.25in 1.0in 1.25in;
-mso-header-margin:.5in;
-mso-footer-margin:.5in;
-mso-paper-source:0;}
-div.Section1
-{page:Section1;}
--->
- </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="5122"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]-->
- <meta content="MCD Application Team" name="author"></head>
-<body link="blue" vlink="blue">
-<div class="Section1">
-<p class="MsoNormal"><span style="font-family: Arial;"><o:p><br>
-</o:p></span></p>
-<div align="center">
-<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900">
- <tbody>
- <tr>
- <td style="padding: 0cm;" valign="top">
- <table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900">
- <tbody>
- <tr>
- <td style="vertical-align: top;">
- <p class="MsoNormal"><span style="font-size: 8pt; font-family: Arial; color: blue;"><a href="../Release_Notes.html">Back to Release page</a><o:p></o:p></span></p>
- </td>
- </tr>
- <tr style="">
- <td style="padding: 1.5pt;">
- <h1 style="margin-bottom: 18pt; text-align: center;" align="center"><span style="font-size: 20pt; font-family: Verdana; color: rgb(51, 102, 255);">Release
-Notes for STM32 Standard Peripherals Library Utilities (Utilities)</span><span style="font-size: 20pt; font-family: Verdana;"><o:p></o:p></span></h1>
- <p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;">Copyright
-2011 STMicroelectronics</span><span style="color: black;"><u1:p></u1:p><o:p></o:p></span></p>
- <p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;"><img alt="" id="_x0000_i1025" src="../../_htmresc/logo.bmp" style="border: 0px solid ; width: 86px; height: 65px;"></span><span style="font-size: 10pt;"><o:p></o:p></span></p>
- </td>
- </tr>
- </tbody>
- </table>
- <p class="MsoNormal"><span style="font-family: Arial; display: none;"><o:p>&nbsp;</o:p></span></p>
- <table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" width="900">
- <tbody>
- <tr style="">
- <td style="padding: 0cm;" valign="top">
- <h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><span style="font-size: 12pt; color: white;">Contents<o:p></o:p></span></h2>
- <ol style="margin-top: 0cm;" start="1" type="1">
- <li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;"><a href="#History">STM32 Standard Peripherals Library Utilities
-update History</a><o:p></o:p></span></li>
- <li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;"><a href="#License">License</a><o:p></o:p></span></li>
- </ol>
- <span style="font-family: &quot;Times New Roman&quot;;">
- </span>
- <h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="History"></a><span style="font-size: 12pt; color: white;">STM32
-Standard
-Peripherals Library Utilities update History</span></h2><br><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 167px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V4.5.0 / 07-March-2011<o:p></o:p></span></h3>
- <p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main
-Changes<o:p></o:p></span></u></b></p>
-
- <ul style="margin-top: 0cm;" type="square"><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32_eval_sdio_sd.c\.h: driver improvement</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">SD Clock increased to 24MHz to improve the data transfer performance.</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add
-new functions to check the SDIO peripheral and SD Card status at any
-time:&nbsp;SD_WaitReadOperation(), SD_WaitWriteOperation(). The
-software sequence is little bit changed&nbsp;but without any impact on
-driver API. For more details, refer to the stm32_eval_sdio_sd.c
-driver&nbsp;description.</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add
-new structure containing the SD Status register parameters. This
-structure is called by the
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;SD_SendSDStatus() function.</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Transfers mode updated</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Read/Write Block using Polling and DMA modes</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Read/Write Multi Blocks using DMA mode only</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Interrupt mode removed</span></li></ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Data transfer functions are managing only fixed Block size (512-byte)&nbsp;</span></li></ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">STM32100B-EVAL</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32100b_eval_cec.c: fix some strict ANSI-C errors</span><span style="font-size: 10pt; font-family: Verdana;"></span></li></ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">STM32100E-EVAL</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32100e_eval_cec.c: fix some strict ANSI-C errors<br></span></li></ul></ul>
- <h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 167px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V4.4.0 / 31-December-2010<o:p></o:p></span></h3>
- <p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main
-Changes<o:p></o:p></span></u></b></p>
-
- <ul style="margin-top: 0cm;" type="square">
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add new directory for STM32L152-EVAL board containing the following files:</span></li>
- <ul>
-<li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32l152_eval.h/.c, </span><span style="font-size: 10pt; font-family: Verdana;">stm32l152</span><span style="font-size: 10pt; font-family: Verdana;">_eval_lcd.h/.c, stm32l152_eval_glass_lcd.h</span><span style="font-size: 10pt; font-family: Verdana;">/.c, </span><span style="font-size: 10pt; font-family: Verdana;">stm32l152_eval_i2c_ee</span><span style="font-size: 10pt; font-family: Verdana;">.h/.c</span></li>
- </ul>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add support for the STM32100E-EVAL Rev B: SPI FLASH CS pin "sFLASH_CS_PIN" changed from PB.02 to PE.06.</span></li>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32100e_eval_lcd.h/.c: Add support for "LCD_ILI9325" LCD controller.</span></li>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32100e_eval_fsmc_onenand.h/.c driver updated to correct asynchronous and synchronous read operations procedures.<br>
- </span></li>
- </ul>
-
- <h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 558.05pt;"><span style="font-size: 10pt; font-family: Arial; color: white;">4.3.0
-- 10/15/2010</span></h3>
- <ol style="margin-top: 0in;" start="1" type="1">
- <li class="MsoNormal" style=""><b><i><span style="font-size: 10pt; font-family: Verdana;">General</span></i></b><i><span style="font-size: 10pt; font-family: Verdana;"> </span></i><i><span style="font-size: 10pt;"><o:p></o:p></span></i></li>
- </ol>
-
- <ul style="margin-top: 0in;" type="disc">
-
-
-
-
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;">I2C EEPROM,&nbsp;</span><span style="font-size: 10pt; font-family: Verdana;">Temperature Sensor and&nbsp;</span><span style="font-size: 10pt; font-family: Verdana;">IOE Expander</span><span style="font-size: 10pt; font-family: Verdana;"> drivers&nbsp;updated to&nbsp;</span><span style="font-size: 10pt; font-family: Verdana;">use the DMA for read/write transfer and add more robustness</span></li>
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;">SD Card (SDIO) driver updated to&nbsp;</span><span style="font-size: 10pt; font-family: Verdana;">add more robustness</span></li><li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;">SPI Flash and </span><span style="font-size: 10pt; font-family: Verdana;">SD Card (SPI) drivers: SPI MISO pin configuration changed to Input Floating&nbsp;</span></li>
- </ul>
-
-
-
- <ol style="margin-top: 0in;" start="2" type="1">
-<li class="MsoNormal" style=""><b><i><span style="font-size: 10pt; font-family: Verdana;">Utilities</span></i></b><b><i><span style="font-size: 10pt;"><o:p></o:p></span></i></b></li>
- </ol>
-
-
-
-
-
- <ul style="margin-top: 0in;" type="circle">
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add new directory for STM32100E-EVAL board containing the following files:</span></li>
- <ul>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32100e_eval.h/.c,
-stm32100e_eval_lcd.h/.c, stm32100e_eval_cec.h/.c,
-stm32100e_eval_fsmc_onenand.h/.c, stm32100e_eval_fsmc_sram.h/.c,
-stm32100e_eval_ioe.h/.c</span><br>
-<span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;"></span></span></li>
- </ul>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Common</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32_eval_sdio_sd.c:
-Update the DMA End of Transfer Check loop inside the SD_ReadBlock(),
-SD_WriteBlock(), SD_ReadMultiBlocks() and SD_Write MultiBlocks().</span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">stm32_eval_i2c_ee.c/.h</span> <br>
- </span></li></ul>
- <ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Enhanced sEE_WaitEepromStandbyState() function for more robustness.</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Enhanced Read and Write operations to manage I2C limitations.</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add Timeout management with user callback implementation which allows recovering from I2C bus errors.</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add
-critical sections user callbacks allowing to disable then enable
-interrupts when I2C operation require to be not interrupted.</span></li></ul></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">stm32_eval_i2c_tsensor.c/.h</span> <br>
- </span></li></ul>
- <ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Enhanced I2C communication functions by using DMA for registers Read and Write operations.</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add Timeout management with user callback implementation which allows recovering from I2C bus errors.</span></li></ul></ul>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">STM32100B_EVAL</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32100b_eval.h: Add LM75 DMA defines.</span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32100b_eval_lcd.c: </span><span style="font-size: 10pt; font-family: Verdana;">Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.</span></li></ul>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">STM3210B_EVAL</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210b_eval.h: Add LM75 DMA defines.</span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210b_eval_lcd.c: </span><span style="font-size: 10pt; font-family: Verdana;">Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.</span></li></ul>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">STM3210C_EVAL</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210c_eval.h: Add EEPROM driver Timeout define.</span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210c_eval_lcd.c: </span><span style="font-size: 10pt; font-family: Verdana;">Change "SPI_FLASH" by "sFLASH" in LCD_DrawBMP() function.</span></li></ul><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210c_eval_i2c_ioe.c</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Enhanced I2C communication functions by using DMA for registers Read and Write operations.</span></li></ul><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add Timeout management with user callback implementation which allows recovering from I2C bus errors.</span></li><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">change IOE_I2C_SPEED from "400000" to "300000".</span></li></ul></ul>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">STM3210E_EVAL</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval.c: change "void SD_WaitForDMAEndOfTransfer(void)" to "uint32_t SD_DMAEndOfTransferStatus(void)".</span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval.h: Add LM75 DMA defines.</span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval_fsmc_nand.h: remove "NAND_CMD_AREA_TRUE1" define.</span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval_fsmc_nand.c: Update FSMC timing in NAND_Init() function to be aligned with AN2784 application note.</span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval_fsmc_nor.c</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">NOR</span><span style="font-size: 10pt; font-family: Verdana;">_Init()&nbsp;function: add FSMC_AsynchronousWait&nbsp;field&nbsp;to FSMC_NORSRAMInitStructure&nbsp;</span></li></ul></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval_fsmc_sram.c<br>
- </span></li></ul>
- <ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Update FSMC timing in SRAM_Init() function to be aligned with AN2784 application note.</span><br>
- <span style="font-size: 10pt; font-family: Verdana;"></span></li></ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">SRAM_Init()&nbsp;function: add FSMC_AsynchronousWait&nbsp;field&nbsp;to FSMC_NORSRAMInitStructure&nbsp;</span></li></ul>
- </ul>
- <ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval_lcd.c</span></li><ul><li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">LCD_FSMCConfig() function: add FSMC_AsynchronousWait&nbsp;field&nbsp;to FSMC_NORSRAMInitStructure&nbsp;</span></li></ul></ul></ul>
- <ul style="margin-top: 0in;" type="disc">
-
-
- </ul>
-
- <h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 558.05pt;"><span style="font-size: 10pt; font-family: Arial; color: white;">4.2.0
-- 04/16/2010</span></h3>
- <ol style="margin-top: 0in;" start="1" type="1">
- <li class="MsoNormal" style=""><b><i><span style="font-size: 10pt; font-family: Verdana;">General</span></i></b><i><span style="font-size: 10pt; font-family: Verdana;"> </span></i><i><span style="font-size: 10pt;"><o:p></o:p></span></i></li>
- </ol>
-
- <ul style="margin-top: 0in;" type="disc">
-
-
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;">I2C EEPROM driver
-update to&nbsp;</span><span style="font-size: 10pt; font-family: Verdana;">use the DMA to
-perform&nbsp;data transfer&nbsp;to/from EEPROM memory.</span><span style="font-size: 10pt; font-family: Verdana;"> </span><span style="font-size: 10pt;"><o:p></o:p></span></li>
-
-
- </ul>
-
- <ol style="margin-top: 0in;" start="2" type="1">
- <li class="MsoNormal" style=""><b><i><span style="font-size: 10pt; font-family: Verdana;">Utilities</span></i></b><b><i><span style="font-size: 10pt;"><o:p></o:p></span></i></b></li>
- </ol>
- <ul style="margin-top: 0in;" type="disc">
- <li class="MsoNormal" style=""><i><u><span style="font-size: 10pt; font-family: Verdana;">STM32_EVAL</span></u></i><u><span style="font-size: 10pt;"><o:p></o:p></span></u></li>
- </ul>
- <ul style="margin-top: 0in;" type="disc">
- <ul style="margin-top: 0in;" type="circle">
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">stm32_eval_i2c_ee.c</span>:
-updated to use the DMA to perform&nbsp;data transfer&nbsp;to/from
-EEPROM memory. For more details, refer to the description provided
-within this file.</span></li>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">stm3210c_eval.c</span>: add low level
-functions to configure the DMA (needed for I2C EEPROM driver)<br>
- </span></li>
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">stm3210c_eval_ioe.c</span>: add a delay
-in&nbsp;IOE_TS_GetState() function to wait till the end of ADC
-conversion</span></li>
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">stm3210e_eval_fsmc_nor.c</span>: add </span><span style="font-size: 10pt; font-family: Verdana;">PD6 pin </span><span style="font-size: 10pt; font-family: Verdana;">configuration&nbsp;in
-NOR_Init() function</span></li>
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">stm3210b_eval_lcd.c</span>: remove the
-second ";" from "static void PutPixel(int16_t x, int16_t y);;"&nbsp;</span><span style="font-size: 10pt; font-family: Verdana;"></span></li>
- </ul>
- </ul>
- <h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 558.05pt;"><span style="font-size: 10pt; font-family: Arial; color: white;">4.1.0
-- 03/01/2010</span></h3>
- <ol style="margin-top: 0in;" start="1" type="1">
- <li class="MsoNormal" style=""><b><i><span style="font-size: 10pt; font-family: Verdana;">General</span></i></b><i><span style="font-size: 10pt; font-family: Verdana;"> </span></i><i><span style="font-size: 10pt;"><o:p></o:p></span></i></li>
- </ol>
- <ul style="margin-top: 0in;" type="disc">
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;">Add support
-for&nbsp;<b>STM32 Low-density Value line (STM32F100x4/6) and
-Medium-density Value line (STM32F100x8/B) devices</b>.</span></li>
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;">Add support for the
-STMicroelectronics STM32100B-EVAL evaluation board. </span><span style="font-size: 10pt;"><o:p></o:p></span></li>
- </ul>
- <ol style="margin-top: 0in;" start="2" type="1">
- <li class="MsoNormal" style=""><b><i><span style="font-size: 10pt; font-family: Verdana;">Utilities</span></i></b><b><i><span style="font-size: 10pt;"><o:p></o:p></span></i></b></li>
- </ol>
- <ul style="margin-top: 0in;" type="disc">
- <li class="MsoNormal" style=""><i><u><span style="font-size: 10pt; font-family: Verdana;">STM32_EVAL</span></u></i><u><span style="font-size: 10pt;"><o:p></o:p></span></u></li>
- </ul>
- <ul style="margin-top: 0in;" type="disc">
- <ul style="margin-top: 0in;" type="circle">
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">Add new directory
-"Common" containing a common drivers for all STM32 evaluation boards:
-fonts.h/.c, stm32_eval_i2c_ee.h/.c, </span><span style="font-size: 10pt; font-family: Verdana;">stm32_eval_spi_flash.h/.c,
- </span><span style="font-size: 10pt; font-family: Verdana;">stm32_eval_i2c_tsensor.h/.c,
- </span><span style="font-size: 10pt; font-family: Verdana;">stm32_eval_spi_sd.h/.c
-and </span><span style="font-size: 10pt; font-family: Verdana;">stm32_eval_sdio_sd.h/.c</span></li>
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;">Add new driver for the
-STM32100B-EVAL managing Leds, push button and COM ports.</span></li>
- <li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">New HDMI CEC High level
-driver.</span><br>
- </li>
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;"></span>For all LCD drivers new fonts has
-been added.</span></li>
- <li class="MsoNormal" style=""><span style="font-size: 10pt; font-family: Verdana;">New FSMC memories
-drivers for STM3210E-EVAL board: stm3210e_eval_fsmc_sram.h/.c, </span><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval_fsmc_nor.h/.c
-and </span><span style="font-size: 10pt; font-family: Verdana;">stm3210e_eval_fsmc_nand.h/.c.</span></li>
- </ul>
- </ul>
- <h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="License"></a><span style="font-size: 12pt; color: white;">License<o:p></o:p></span></h2>
- <p class="MsoNormal" style="margin: 4.5pt 0cm;"><span style="font-size: 10pt; font-family: Verdana; color: black;">The
-enclosed firmware and all the related documentation are not covered by
-a License Agreement, if you need such License you can contact your
-local STMicroelectronics office.<u1:p></u1:p><o:p></o:p></span></p>
-
- <b><span style="font-size: 10pt; font-family: Verdana; color: black;">THE
-PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO
-SAVE TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR
-ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY
-CLAIMS ARISING FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY
-CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH
-THEIR PRODUCTS.</span></b>
-
- <div class="MsoNormal" style="text-align: center;" align="center"><span style="color: black;">
- <hr align="center" size="2" width="100%"></span></div>
- <p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt; text-align: center;" align="center"><span style="font-size: 10pt; font-family: Verdana; color: black;">For
-complete documentation on </span><span style="font-size: 10pt; font-family: Verdana;">STMicroelectronics<span style="color: black;"> Microcontrollers visit </span><a target="_blank" href="http://www.st.com/internet/mcu/family/141.jsp"><u><span style="color: blue;">www.st.com</span></u></a></span><span style="font-size: 10pt; font-family: Verdana;"><u><span style="color: blue;"><a href="http://www.st.com/stm32l" target="_blank"></a></span></u></span><span style="color: black;"><o:p></o:p></span></p>
- </td>
- </tr>
- </tbody>
- </table>
- <p class="MsoNormal"><span style="font-size: 10pt;"><o:p></o:p></span></p>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
-</div>
-
-</body></html> \ No newline at end of file
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval.c
deleted file mode 100644
index 947329d..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval.c
+++ /dev/null
@@ -1,624 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100b_eval.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides
- * - set of firmware functions to manage Leds, push-button and COM ports
- * - low level initialization functions for SD card (on SPI), SPI serial
- * flash (sFLASH) and temperature sensor (LM75)
- * available on STM32100B-EVAL evaluation board from STMicroelectronics.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32100b_eval.h"
-#include "stm32f10x_spi.h"
-#include "stm32f10x_i2c.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100B_EVAL
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL
- * @brief This file provides firmware functions to manage Leds, push-buttons,
- * COM ports, SD card on SPI, serial flash (sFLASH) and temperature
- * sensor (LM75) available on STM32100B-EVAL evaluation board from
- * STMicroelectronics.
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Private_Variables
- * @{
- */
-GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT,
- LED4_GPIO_PORT};
-const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN,
- LED4_PIN};
-const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK,
- LED4_GPIO_CLK};
-
-GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, TAMPER_BUTTON_GPIO_PORT,
- KEY_BUTTON_GPIO_PORT, RIGHT_BUTTON_GPIO_PORT,
- LEFT_BUTTON_GPIO_PORT, UP_BUTTON_GPIO_PORT,
- DOWN_BUTTON_GPIO_PORT, SEL_BUTTON_GPIO_PORT};
-
-const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, TAMPER_BUTTON_PIN,
- KEY_BUTTON_PIN, RIGHT_BUTTON_PIN,
- LEFT_BUTTON_PIN, UP_BUTTON_PIN,
- DOWN_BUTTON_PIN, SEL_BUTTON_PIN};
-
-const uint32_t BUTTON_CLK[BUTTONn] = {WAKEUP_BUTTON_GPIO_CLK, TAMPER_BUTTON_GPIO_CLK,
- KEY_BUTTON_GPIO_CLK, RIGHT_BUTTON_GPIO_CLK,
- LEFT_BUTTON_GPIO_CLK, UP_BUTTON_GPIO_CLK,
- DOWN_BUTTON_GPIO_CLK, SEL_BUTTON_GPIO_CLK};
-
-const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {WAKEUP_BUTTON_EXTI_LINE,
- TAMPER_BUTTON_EXTI_LINE,
- KEY_BUTTON_EXTI_LINE,
- RIGHT_BUTTON_EXTI_LINE,
- LEFT_BUTTON_EXTI_LINE,
- UP_BUTTON_EXTI_LINE,
- DOWN_BUTTON_EXTI_LINE,
- SEL_BUTTON_EXTI_LINE};
-
-const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PORT_SOURCE,
- TAMPER_BUTTON_EXTI_PORT_SOURCE,
- KEY_BUTTON_EXTI_PORT_SOURCE,
- RIGHT_BUTTON_EXTI_PORT_SOURCE,
- LEFT_BUTTON_EXTI_PORT_SOURCE,
- UP_BUTTON_EXTI_PORT_SOURCE,
- DOWN_BUTTON_EXTI_PORT_SOURCE,
- SEL_BUTTON_EXTI_PORT_SOURCE};
-
-const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PIN_SOURCE,
- TAMPER_BUTTON_EXTI_PIN_SOURCE,
- KEY_BUTTON_EXTI_PIN_SOURCE,
- RIGHT_BUTTON_EXTI_PIN_SOURCE,
- LEFT_BUTTON_EXTI_PIN_SOURCE,
- UP_BUTTON_EXTI_PIN_SOURCE,
- DOWN_BUTTON_EXTI_PIN_SOURCE,
- SEL_BUTTON_EXTI_PIN_SOURCE};
-
-const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, TAMPER_BUTTON_EXTI_IRQn,
- KEY_BUTTON_EXTI_IRQn, RIGHT_BUTTON_EXTI_IRQn,
- LEFT_BUTTON_EXTI_IRQn, UP_BUTTON_EXTI_IRQn,
- DOWN_BUTTON_EXTI_IRQn, SEL_BUTTON_EXTI_IRQn};
-
-USART_TypeDef* COM_USART[COMn] = {EVAL_COM1, EVAL_COM2};
-
-GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT, EVAL_COM2_TX_GPIO_PORT};
-
-GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT, EVAL_COM2_RX_GPIO_PORT};
-
-const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK, EVAL_COM2_CLK};
-
-const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK, EVAL_COM2_TX_GPIO_CLK};
-
-const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK, EVAL_COM2_RX_GPIO_CLK};
-
-const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN, EVAL_COM2_TX_PIN};
-
-const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN};
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Private_Functions
- * @{
- */
-
-/**
- * @brief Configures LED GPIO.
- * @param Led: Specifies the Led to be configured.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIO_LED Clock */
- RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);
-
- /* Configure the GPIO_LED pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);
-}
-
-/**
- * @brief Turns selected LED On.
- * @param Led: Specifies the Led to be set on.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOn(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];
-}
-
-/**
- * @brief Turns selected LED Off.
- * @param Led: Specifies the Led to be set off.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOff(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BRR = GPIO_PIN[Led];
-}
-
-/**
- * @brief Toggles the selected LED.
- * @param Led: Specifies the Led to be toggled.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDToggle(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];
-}
-
-/**
- * @brief Configures Button GPIO and EXTI Line.
- * @param Button: Specifies the Button to be configured.
- * This parameter can be one of following parameters:
- * @arg BUTTON_WAKEUP: Wakeup Push Button
- * @arg BUTTON_TAMPER: Tamper Push Button
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @param Button_Mode: Specifies Button mode.
- * This parameter can be one of following parameters:
- * @arg BUTTON_MODE_GPIO: Button will be used as simple IO
- * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt
- * generation capability
- * @retval None
- */
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* Enable the BUTTON Clock */
- RCC_APB2PeriphClockCmd(BUTTON_CLK[Button] | RCC_APB2Periph_AFIO, ENABLE);
-
- /* Configure Button pin as input floating */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button];
- GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);
-
-
- if (Button_Mode == BUTTON_MODE_EXTI)
- {
- /* Connect Button EXTI Line to Button GPIO Pin */
- GPIO_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);
-
- /* Configure Button EXTI line */
- EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button];
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
-
- if(Button != BUTTON_WAKEUP)
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- }
- else
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- }
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /* Enable and set Button EXTI Interrupt to the lowest priority */
- NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button];
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
- NVIC_Init(&NVIC_InitStructure);
- }
-}
-
-/**
- * @brief Returns the selected Button state.
- * @param Button: Specifies the Button to be checked.
- * This parameter can be one of following parameters:
- * @arg BUTTON_WAKEUP: Wakeup Push Button
- * @arg BUTTON_TAMPER: Tamper Push Button
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @retval The Button GPIO pin value.
- */
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button)
-{
- return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);
-}
-
-
-/**
- * @brief Configures COM port.
- * @param COM: Specifies the COM port to be configured.
- * This parameter can be one of following parameters:
- * @arg COM1
- * @arg COM2
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that
- * contains the configuration information for the specified USART peripheral.
- * @retval None
- */
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM] | RCC_APB2Periph_AFIO, ENABLE);
-
-
- /* Enable UART clock */
- if (COM == COM1)
- {
- RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
- }
- else
- {
- /* Enable the USART2 Pins Software Remapping */
- GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
- RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
- }
-
- /* Configure USART Tx as alternate function push-pull */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);
-
- /* Configure USART Rx as input floating */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];
- GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);
-
- /* USART configuration */
- USART_Init(COM_USART[COM], USART_InitStruct);
-
- /* Enable USART */
- USART_Cmd(COM_USART[COM], ENABLE);
-}
-
-/**
- * @brief DeInitializes the SD/SD communication.
- * @param None
- * @retval None
- */
-void SD_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- SPI_Cmd(SD_SPI, DISABLE); /*!< SD_SPI disable */
- SPI_I2S_DeInit(SD_SPI); /*!< DeInitializes the SD_SPI */
-
- /*!< SD_SPI Periph clock disable */
- RCC_APB2PeriphClockCmd(SD_SPI_CLK, DISABLE);
-
- /*!< Configure SD_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
- GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
- GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
- GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
- GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the SD_SPI and CS pins.
- * @param None
- * @retval None
- */
-void SD_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- SPI_InitTypeDef SPI_InitStructure;
-
- /*!< SD_SPI_CS_GPIO, SD_SPI_MOSI_GPIO, SD_SPI_MISO_GPIO, SD_SPI_DETECT_GPIO
- and SD_SPI_SCK_GPIO Periph clock enable */
- RCC_APB2PeriphClockCmd(SD_CS_GPIO_CLK | SD_SPI_MOSI_GPIO_CLK | SD_SPI_MISO_GPIO_CLK |
- SD_SPI_SCK_GPIO_CLK | SD_DETECT_GPIO_CLK, ENABLE);
-
- /*!< SD_SPI Periph clock enable */
- RCC_APB2PeriphClockCmd(SD_SPI_CLK, ENABLE);
-
-
- /*!< Configure SD_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
- GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
- GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< SD_SPI Config */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
-
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_CRCPolynomial = 7;
- SPI_Init(SD_SPI, &SPI_InitStructure);
-
- SPI_Cmd(SD_SPI, ENABLE); /*!< SD_SPI enable */
-}
-
-/**
- * @brief DeInitializes the peripherals used by the SPI FLASH driver.
- * @param None
- * @retval None
- */
-void sFLASH_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< Disable the sFLASH_SPI */
- SPI_Cmd(sFLASH_SPI, DISABLE);
-
- /*!< DeInitializes the sFLASH_SPI */
- SPI_I2S_DeInit(sFLASH_SPI);
-
- /*!< sFLASH_SPI Periph clock disable */
- RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, DISABLE);
-
- /*!< Configure sFLASH_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;
- GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;
- GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
- GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
- GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the peripherals used by the SPI FLASH driver.
- * @param None
- * @retval None
- */
-void sFLASH_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< sFLASH_SPI_CS_GPIO, sFLASH_SPI_MOSI_GPIO, sFLASH_SPI_MISO_GPIO
- and sFLASH_SPI_SCK_GPIO Periph clock enable */
- RCC_APB2PeriphClockCmd(sFLASH_CS_GPIO_CLK | sFLASH_SPI_MOSI_GPIO_CLK | sFLASH_SPI_MISO_GPIO_CLK |
- sFLASH_SPI_SCK_GPIO_CLK, ENABLE);
-
- /*!< sFLASH_SPI Periph clock enable */
- RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, ENABLE);
-
- /*!< Configure sFLASH_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;
- GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
- GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief DeInitializes the LM75_I2C.
- * @param None
- * @retval None
- */
-void LM75_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< Disable LM75_I2C */
- I2C_Cmd(LM75_I2C, DISABLE);
- /*!< DeInitializes the LM75_I2C */
- I2C_DeInit(LM75_I2C);
-
- /*!< LM75_I2C Periph clock disable */
- RCC_APB1PeriphClockCmd(LM75_I2C_CLK, DISABLE);
-
- /*!< Configure LM75_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;
- GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pin: SMBUS ALERT */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;
- GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the LM75_I2C..
- * @param None
- * @retval None
- */
-void LM75_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LM75_I2C Periph clock enable */
- RCC_APB1PeriphClockCmd(LM75_I2C_CLK, ENABLE);
-
- /*!< LM75_I2C_SCL_GPIO_CLK, LM75_I2C_SDA_GPIO_CLK
- and LM75_I2C_SMBUSALERT_GPIO_CLK Periph clock enable */
- RCC_APB2PeriphClockCmd(LM75_I2C_SCL_GPIO_CLK | LM75_I2C_SDA_GPIO_CLK |
- LM75_I2C_SMBUSALERT_GPIO_CLK, ENABLE);
-
- /*!< Configure LM75_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
- GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;
- GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pin: SMBUS ALERT */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval.h
deleted file mode 100644
index b6c4ccb..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval.h
+++ /dev/null
@@ -1,341 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100b_eval.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains definitions for STM32100B_EVAL's Leds, push-buttons
- * COM ports, SD Card on SPI, sFLASH on SPI and Temperature Sensor LM75 on I2C
- * hardware resources.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32100B_EVAL_H
-#define __STM32100B_EVAL_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100B_EVAL
- * @{
- */
-
-/** @addtogroup STM32100B_EVAL_LOW_LEVEL
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Exported_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Exported_Constants
- * @{
- */
-/** @addtogroup STM32100B_EVAL_LOW_LEVEL_LED
- * @{
- */
-#define LEDn 4
-#define LED1_PIN GPIO_Pin_6
-#define LED1_GPIO_PORT GPIOC
-#define LED1_GPIO_CLK RCC_APB2Periph_GPIOC
-
-#define LED2_PIN GPIO_Pin_7
-#define LED2_GPIO_PORT GPIOC
-#define LED2_GPIO_CLK RCC_APB2Periph_GPIOC
-
-#define LED3_PIN GPIO_Pin_8
-#define LED3_GPIO_PORT GPIOC
-#define LED3_GPIO_CLK RCC_APB2Periph_GPIOC
-
-#define LED4_PIN GPIO_Pin_9
-#define LED4_GPIO_PORT GPIOC
-#define LED4_GPIO_CLK RCC_APB2Periph_GPIOC
-
-/**
- * @}
- */
-
-/** @addtogroup STM32100B_EVAL_LOW_LEVEL_BUTTON
- * @{
- */
-#define BUTTONn 8
-
-/**
- * @brief Wakeup push-button
- */
-#define WAKEUP_BUTTON_PIN GPIO_Pin_0
-#define WAKEUP_BUTTON_GPIO_PORT GPIOA
-#define WAKEUP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOA
-#define WAKEUP_BUTTON_EXTI_LINE EXTI_Line0
-#define WAKEUP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOA
-#define WAKEUP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource0
-#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn
-/**
- * @brief Tamper push-button
- */
-#define TAMPER_BUTTON_PIN GPIO_Pin_13
-#define TAMPER_BUTTON_GPIO_PORT GPIOC
-#define TAMPER_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOC
-#define TAMPER_BUTTON_EXTI_LINE EXTI_Line13
-#define TAMPER_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOC
-#define TAMPER_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource13
-#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Key push-button
- */
-#define KEY_BUTTON_PIN GPIO_Pin_9
-#define KEY_BUTTON_GPIO_PORT GPIOB
-#define KEY_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOB
-#define KEY_BUTTON_EXTI_LINE EXTI_Line9
-#define KEY_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOB
-#define KEY_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource9
-#define KEY_BUTTON_EXTI_IRQn EXTI9_5_IRQn
-/**
- * @brief Joystick Right push-button
- */
-#define RIGHT_BUTTON_PIN GPIO_Pin_1
-#define RIGHT_BUTTON_GPIO_PORT GPIOE
-#define RIGHT_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOE
-#define RIGHT_BUTTON_EXTI_LINE EXTI_Line1
-#define RIGHT_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOE
-#define RIGHT_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource1
-#define RIGHT_BUTTON_EXTI_IRQn EXTI1_IRQn
-/**
- * @brief Joystick Left push-button
- */
-#define LEFT_BUTTON_PIN GPIO_Pin_0
-#define LEFT_BUTTON_GPIO_PORT GPIOE
-#define LEFT_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOE
-#define LEFT_BUTTON_EXTI_LINE EXTI_Line0
-#define LEFT_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOE
-#define LEFT_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource0
-#define LEFT_BUTTON_EXTI_IRQn EXTI0_IRQn
-/**
- * @brief Joystick Up push-button
- */
-#define UP_BUTTON_PIN GPIO_Pin_8
-#define UP_BUTTON_GPIO_PORT GPIOD
-#define UP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOD
-#define UP_BUTTON_EXTI_LINE EXTI_Line8
-#define UP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOD
-#define UP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource8
-#define UP_BUTTON_EXTI_IRQn EXTI9_5_IRQn
-/**
- * @brief Joystick Down push-button
- */
-#define DOWN_BUTTON_PIN GPIO_Pin_14
-#define DOWN_BUTTON_GPIO_PORT GPIOD
-#define DOWN_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOD
-#define DOWN_BUTTON_EXTI_LINE EXTI_Line14
-#define DOWN_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOD
-#define DOWN_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource14
-#define DOWN_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Joystick Sel push-button
- */
-#define SEL_BUTTON_PIN GPIO_Pin_12
-#define SEL_BUTTON_GPIO_PORT GPIOD
-#define SEL_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOD
-#define SEL_BUTTON_EXTI_LINE EXTI_Line12
-#define SEL_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOD
-#define SEL_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource12
-#define SEL_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @}
- */
-
-/** @addtogroup STM32100B_EVAL_LOW_LEVEL_COM
- * @{
- */
-#define COMn 2
-
-/**
- * @brief Definition for COM port1, connected to USART1
- */
-#define EVAL_COM1 USART1
-#define EVAL_COM1_CLK RCC_APB2Periph_USART1
-#define EVAL_COM1_TX_PIN GPIO_Pin_9
-#define EVAL_COM1_TX_GPIO_PORT GPIOA
-#define EVAL_COM1_TX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM1_RX_PIN GPIO_Pin_10
-#define EVAL_COM1_RX_GPIO_PORT GPIOA
-#define EVAL_COM1_RX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM1_IRQn USART1_IRQn
-
-/**
- * @brief Definition for COM port2, connected to USART2 (USART2 pins remapped on GPIOD)
- */
-#define EVAL_COM2 USART2
-#define EVAL_COM2_CLK RCC_APB1Periph_USART2
-#define EVAL_COM2_TX_PIN GPIO_Pin_5
-#define EVAL_COM2_TX_GPIO_PORT GPIOD
-#define EVAL_COM2_TX_GPIO_CLK RCC_APB2Periph_GPIOD
-#define EVAL_COM2_RX_PIN GPIO_Pin_6
-#define EVAL_COM2_RX_GPIO_PORT GPIOD
-#define EVAL_COM2_RX_GPIO_CLK RCC_APB2Periph_GPIOD
-#define EVAL_COM2_IRQn USART2_IRQn
-
-/**
- * @}
- */
-
-/** @addtogroup STM32100B_EVAL_LOW_LEVEL_SD_SPI
- * @{
- */
-/**
- * @brief SD SPI Interface pins
- */
-#define SD_SPI SPI1
-#define SD_SPI_CLK RCC_APB2Periph_SPI1
-#define SD_SPI_SCK_PIN GPIO_Pin_5 /* PA.05 */
-#define SD_SPI_SCK_GPIO_PORT GPIOA /* GPIOA */
-#define SD_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOA
-#define SD_SPI_MISO_PIN GPIO_Pin_6 /* PA.06 */
-#define SD_SPI_MISO_GPIO_PORT GPIOA /* GPIOA */
-#define SD_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOA
-#define SD_SPI_MOSI_PIN GPIO_Pin_7 /* PA.07 */
-#define SD_SPI_MOSI_GPIO_PORT GPIOA /* GPIOA */
-#define SD_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOA
-#define SD_CS_PIN GPIO_Pin_12 /* PC.12 */
-#define SD_CS_GPIO_PORT GPIOC /* GPIOC */
-#define SD_CS_GPIO_CLK RCC_APB2Periph_GPIOC
-#define SD_DETECT_PIN GPIO_Pin_7 /* PE.07 */
-#define SD_DETECT_GPIO_PORT GPIOE /* GPIOE */
-#define SD_DETECT_GPIO_CLK RCC_APB2Periph_GPIOE
-
-/**
- * @}
- */
-
-/** @addtogroup STM32100B_EVAL_LOW_LEVEL_M25P_FLASH_SPI
- * @{
- */
-/**
- * @brief M25P FLASH SPI Interface pins
- */
-#define sFLASH_SPI SPI1
-#define sFLASH_SPI_CLK RCC_APB2Periph_SPI1
-#define sFLASH_SPI_SCK_PIN GPIO_Pin_5 /* PA.05 */
-#define sFLASH_SPI_SCK_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_SPI_MISO_PIN GPIO_Pin_6 /* PA.06 */
-#define sFLASH_SPI_MISO_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_SPI_MOSI_PIN GPIO_Pin_7 /* PA.07 */
-#define sFLASH_SPI_MOSI_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_CS_PIN GPIO_Pin_9 /* PD.09 */
-#define sFLASH_CS_GPIO_PORT GPIOD /* GPIOD */
-#define sFLASH_CS_GPIO_CLK RCC_APB2Periph_GPIOD
-
-/**
- * @}
- */
-
-/** @addtogroup STM32100B_EVAL_LOW_LEVEL_TSENSOR_I2C
- * @{
- */
-/**
- * @brief LM75 Temperature Sensor I2C Interface pins
- */
-#define LM75_I2C I2C1
-#define LM75_I2C_CLK RCC_APB1Periph_I2C1
-#define LM75_I2C_SCL_PIN GPIO_Pin_6 /* PB.06 */
-#define LM75_I2C_SCL_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SCL_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_SDA_PIN GPIO_Pin_7 /* PB.07 */
-#define LM75_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SDA_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_SMBUSALERT_PIN GPIO_Pin_5 /* PB.05 */
-#define LM75_I2C_SMBUSALERT_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SMBUSALERT_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_DR ((uint32_t)0x40005410)
-
-#define LM75_DMA_CLK RCC_AHBPeriph_DMA1
-#define LM75_DMA_TX_CHANNEL DMA1_Channel6
-#define LM75_DMA_RX_CHANNEL DMA1_Channel7
-#define LM75_DMA_TX_TCFLAG DMA1_FLAG_TC6
-#define LM75_DMA_RX_TCFLAG DMA1_FLAG_TC7
-/**
- * @}
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LOW_LEVEL_Exported_Functions
- * @{
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led);
-void STM_EVAL_LEDOn(Led_TypeDef Led);
-void STM_EVAL_LEDOff(Led_TypeDef Led);
-void STM_EVAL_LEDToggle(Led_TypeDef Led);
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode);
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button);
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct);
-void SD_LowLevel_DeInit(void);
-void SD_LowLevel_Init(void);
-void sFLASH_LowLevel_DeInit(void);
-void sFLASH_LowLevel_Init(void);
-void LM75_LowLevel_DeInit(void);
-void LM75_LowLevel_Init(void);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32100B_EVAL_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_cec.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_cec.c
deleted file mode 100644
index 3172b63..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_cec.c
+++ /dev/null
@@ -1,1722 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100b_eval_cec.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides all the STM32100B-EVAL HDMI-CEC firmware functions.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32100b_eval_cec.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100B_EVAL
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_CEC
- * @brief This file includes the CEC Stack driver for HDMI-CEC Module
- * of STM32100B-EVAL board.
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_CEC_Private_Types
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_CEC_Private_Defines
- * @{
- */
-
-
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_CEC_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_CEC_Private_Variables
- * @{
- */
-
-__IO uint32_t ReceivedFrame = 0;
-__IO uint32_t SendFrame = 0;
-__IO uint32_t BufferCount = 0, TxCounter = 0, RxCounter = 0;
-__IO uint8_t BufferPointer[15];
-__IO uint32_t ReceiveStatus = 0;
-__IO uint32_t SendStatus = 0;
-__IO uint8_t TransErrorCode = 0;
-__IO uint8_t RecepErrorCode = 0;
-__IO uint8_t MyLogicalAddress = 0;
-__IO uint16_t MyPhysicalAddress = 0;
-__IO uint8_t DeviceType = 0;
-#ifdef HDMI_CEC_USE_DDC
-__IO uint8_t pBuffer[256];
-__IO uint16_t NumByteToRead = 255;
-#endif
-__IO uint8_t CECDevicesNumber = 0;
-
-HDMI_CEC_Message HDMI_CEC_TX_MessageStructPrivate;
-HDMI_CEC_Message HDMI_CEC_RX_MessageStructPrivate;
-HDMI_CEC_Message HDMI_CEC_TX_MessageStructure;
-
-__IO uint8_t FeatureOpcode = 0;
-__IO uint8_t AbortReason = 0;
-__IO uint8_t DeviceCount = 0;
-
-HDMI_CEC_Map HDMI_CEC_MapStruct;
-HDMI_CEC_Map HDMI_CEC_DeviceMap[14];
-
-/* CEC follower addresses */
-uint8_t* HDMI_CEC_Follower_String[13][2] =
- {
- {(uint8_t *)" TV ", (uint8_t *)"0"},
- {(uint8_t *)"Recording Device 1 ", (uint8_t *)"0"},
- {(uint8_t *)"Recording Device 2 ", (uint8_t *)"0"},
- {(uint8_t *)" Tuner 1 ", (uint8_t *)"0"},
- {(uint8_t *)" Playback Device 1 ", (uint8_t *)"0"},
- {(uint8_t *)" Audio System ", (uint8_t *)"0"},
- {(uint8_t *)" Tuner 2 ", (uint8_t *)"0"},
- {(uint8_t *)" Tuner 3 ", (uint8_t *)"0"},
- {(uint8_t *)" Playback Device 2 ", (uint8_t *)"0"},
- {(uint8_t *)"Recording Device 3 ", (uint8_t *)"0"},
- {(uint8_t *)" Tuner 4 ", (uint8_t *)"0"},
- {(uint8_t *)" Playback Device 3 ", (uint8_t *)"0"},
- {(uint8_t *)" Broadcast ", (uint8_t *)"1"}
- };
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32100B_EVAL_CEC_Private_Function_Prototypes
- * @{
- */
-static HDMI_CEC_Error PhysicalAddressDiscovery(void);
-static HDMI_CEC_Error LogicalAddressAllocation(void);
-
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32100B_EVAL_CEC_Private_Functions
- * @{
- */
-
-/**
- * @brief Initializes the HDMI CEC.
- * @param None
- * @retval HDMI_CEC_Error: CEC Error code
- */
-HDMI_CEC_Error HDMI_CEC_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- CEC_InitTypeDef CEC_InitStructure;
- HDMI_CEC_Error errorstatus = HDMI_CEC_OK;
- uint8_t sendcount = 0;
-
-#ifdef HDMI_CEC_USE_DDC
- I2C_InitTypeDef I2C_InitStructure;
- /* Enable CEC_I2C clocks */
- RCC_APB1PeriphClockCmd(HDMI_CEC_I2C_CLK, ENABLE);
-
- /* Enable CEC_I2C_GPIO and CEC_HPD_GPIO clocks */
- RCC_APB2PeriphClockCmd(HDMI_CEC_I2C_GPIO_CLK | HDMI_CEC_HPD_GPIO_CLK, ENABLE);
-#endif
-
- /* Enable CEC clocks */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_CEC, ENABLE);
-
- /* Enable CEC_LINE_GPIO clocks */
- RCC_APB2PeriphClockCmd(HDMI_CEC_LINE_GPIO_CLK, ENABLE);
-
- /* Configure CEC_LINE_GPIO as Output open drain */
- GPIO_InitStructure.GPIO_Pin = HDMI_CEC_LINE_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
- GPIO_Init(HDMI_CEC_LINE_GPIO_PORT, &GPIO_InitStructure);
-
-#ifdef HDMI_CEC_USE_DDC
- /* Configure CEC_I2C_SCL_PIN and CEC_I2C_SDA_PIN as Output open drain */
- GPIO_InitStructure.GPIO_Pin = HDMI_CEC_I2C_SCL_PIN | HDMI_CEC_I2C_SDA_PIN;
- GPIO_Init(HDMI_CEC_I2C_GPIO_PORT, &GPIO_InitStructure);
-
-/* This configuration is only when the HDMI CEC is configured as source.
- The HDMI source has to provide the +5V Power signal to the sink.
- On STM32100B-EVAL borad, you have to solder the SB4 Solder bridge.
- Then, the source will wait for HPD signal to be asserted from the sink.
- Once the HPD signal is detected the source shall read the EDID structure
- throuhgh the DDC channel. */
- /* Configure CEC_HPD_GPIO as Input pull down */
- GPIO_InitStructure.GPIO_Pin = HDMI_CEC_HPD_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_Init(HDMI_CEC_HPD_GPIO_PORT, &GPIO_InitStructure);
-
-
-/* This configuration is only when the HDMI CEC is configured as sink.
- The HDMI sink has to wait for the +5V Power signal from the source.
- On STM32100B-EVAL borad, SB4 Solder bridge should be open (default configuration).
- Then, the sink will assert the HPD signal to inform the source that the EDID
- is ready for read through DDC channel. In this implementation, the EDID structure
- is not implemented. */
-/* GPIO_InitStructure.GPIO_Pin = HDMI_CEC_HPD_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(HDMI_CEC_HPD_GPIO_PORT, &GPIO_InitStructure);
-
- HDMI_CEC_HPD_HIGH(); // Set the Hot plug detect signal */
-
- /* Enable CEC_I2C */
- I2C_Cmd(HDMI_CEC_I2C, ENABLE);
-
- /* I2C configuration */
- I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
- I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
- I2C_InitStructure.I2C_OwnAddress1 = HDMI_CEC_I2C_SLAVE_ADDRESS7;
- I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
- I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
- I2C_InitStructure.I2C_ClockSpeed = HDMI_CEC_I2C_CLOCK_SPEED;
- I2C_Init(HDMI_CEC_I2C, &I2C_InitStructure);
-#endif
-
- /* Physical Address discovery */
- errorstatus = PhysicalAddressDiscovery();
-
- if (errorstatus != HDMI_CEC_OK)
- {
- /* Device not connected (Physical Address lost) */
- return(errorstatus);
- }
-
-
- /* CEC DeInit */
- CEC_DeInit();
-
- /* Configure CEC */
- CEC_InitStructure.CEC_BitTimingMode = CEC_BitTimingStdMode;
- CEC_InitStructure.CEC_BitPeriodMode = CEC_BitPeriodStdMode;
- CEC_Init(&CEC_InitStructure);
-
- /* Set Prescaler value for APB1 clock = 24MHz */
- CEC_SetPrescaler(0x4AF);
-
- /* Enable CEC */
- CEC_Cmd(ENABLE);
-
- /* Logical Address Allocation */
- sendcount = 0;
- errorstatus = LogicalAddressAllocation();
-
- while ((errorstatus != HDMI_CEC_OK) && sendcount < 0x5)
- {
- sendcount++;
- errorstatus = LogicalAddressAllocation();
- }
-
- if (errorstatus != HDMI_CEC_OK)
- {
- /* Device Unregistred */
- return(errorstatus);
- }
-
- HDMI_CEC_CheckConnectedDevices();
-
- /* Set the CEC initiator address */
- CEC_OwnAddressConfig(MyLogicalAddress);
-
- /* Activate CEC interrupts associated to the set of RBTF,RERR, TBTF, TERR flags */
- CEC_ITConfig(ENABLE);
-
- /* Report physical address*/
- errorstatus = HDMI_CEC_ReportPhysicalAddress();
- sendcount = 0;
-
- while ((errorstatus != HDMI_CEC_OK) && sendcount < 0x5)
- {
- sendcount++;
- errorstatus = HDMI_CEC_ReportPhysicalAddress();
- }
-
- if (errorstatus != HDMI_CEC_OK)
- {
- /* Device Unregistred */
- return(errorstatus);
- }
-
- return errorstatus;
-}
-
-/**
- * @brief Transmit message by taking data from typedef struct CEC_Meassage
- * @param CEC_TX_MessageStructure: pointer to an CEC_Message structure that contains
- * the message to be sent.
- * @retval HDMI_CEC_Error: CEC Error code
- */
-HDMI_CEC_Error HDMI_CEC_TransmitMessage(HDMI_CEC_Message *HDMI_CEC_TX_MessageStructure)
-{
- HDMI_CEC_Error errorstatus = HDMI_CEC_OK;
- __IO uint32_t count = 0, j = 0;
-
- SendFrame = 0;
- SendStatus = 0;
- TxCounter = 0;
- BufferCount = 0;
-
- HDMI_CEC_TX_MessageStructPrivate = *HDMI_CEC_TX_MessageStructure;
-
- /* Initialize BufferPointer */
- for (j = 0; j < 15; j++)
- {
- BufferPointer[j] = 0;
- }
-
- BufferPointer[0] = HDMI_CEC_TX_MessageStructPrivate.Opcode;
-
- for (BufferCount = 1; BufferCount < HDMI_CEC_TX_MessageStructPrivate.TxMessageLength + 1; BufferCount++)
- {
- BufferPointer[BufferCount] = HDMI_CEC_TX_MessageStructPrivate.Operande[BufferCount-1];
- }
-
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
-
- /* Write single Data in the TX Buffer to Transmit through the CEC peripheral */
- CEC_SendDataByte(HDMI_CEC_TX_MessageStructPrivate.Header);
-
- /* Initiate Message Transmission */
- CEC_StartOfMessage();
-
- while ((SendFrame == 0) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- if (SendStatus == 0)
- {
- errorstatus = (HDMI_CEC_Error) TransErrorCode;
- }
-
- return errorstatus;
-}
-
-
-/**
- * @brief Get the ESR register status.
- * @param None
- * @retval HDMI_CEC_Error: CEC Error code
- */
-HDMI_CEC_Error HDMI_CEC_GetErrorStatus (void)
-{
- HDMI_CEC_Error errorstatus = HDMI_CEC_OK;
-
- /* Bit timing error case*/
- if (CEC_GetFlagStatus(CEC_FLAG_BTE) != RESET)
- {
- errorstatus = HDMI_CEC_BIT_TIMING;
- }
- /* Bit period error case */
- if (CEC_GetFlagStatus(CEC_FLAG_BPE) != RESET)
- {
- errorstatus = HDMI_CEC_BIT_PERIOD;
- }
- /* Recieve error case */
- if (CEC_GetFlagStatus(CEC_FLAG_RBTFE) != RESET)
- {
- errorstatus = HDMI_CEC_RX_BLOCK_FINISHED;
- }
- /* Start bit error case*/
- if (CEC_GetFlagStatus(CEC_FLAG_SBE) != RESET)
- {
- errorstatus = HDMI_CEC_START_BIT;
- }
- /* Acknowledge error case*/
- if (CEC_GetFlagStatus(CEC_FLAG_ACKE) != RESET)
- {
- errorstatus = HDMI_CEC_BLOCK_ACKNOWLEDGE;
- }
- /* Line error case */
- if (CEC_GetFlagStatus(CEC_FLAG_LINE) != RESET)
- {
- errorstatus = HDMI_CEC_LINE;
- }
- /* Transfert error case*/
- if (CEC_GetFlagStatus(CEC_FLAG_TBTFE) != RESET)
- {
- errorstatus = HDMI_CEC_TX_BLOCK_FINISHED;
- }
- /* Clear All errors */
- CEC_ClearFlag(CEC_FLAG_RERR);
- CEC_ClearFlag(CEC_FLAG_TERR);
- return errorstatus;
-}
-
-/**
- * @brief Allows to process all the interrupts that are high.
- * @param None
- * @retval None
- */
-void HDMI_CEC_ProcessIRQSrc(void)
-{
- /********************** Reception *********************************************/
- /* Check if a reception error occured */
- if (CEC_GetFlagStatus(CEC_FLAG_RERR))
- {
- /* Set receive status bit (Error) */
- ReceiveStatus = 0;
- ReceivedFrame = 1;
- RecepErrorCode = HDMI_CEC_GetErrorStatus();
- CEC_ClearFlag(CEC_FLAG_RERR | CEC_FLAG_RSOM | CEC_FLAG_REOM | CEC_FLAG_RBTF);
- }
- else if (CEC_GetFlagStatus(CEC_FLAG_RBTF))
- {
- /* Check if the byte received is the last one of the message */
- if (CEC_GetFlagStatus(CEC_FLAG_REOM))
- {
- HDMI_CEC_RX_MessageStructPrivate.Operande[RxCounter-1] = CEC_ReceiveDataByte();
- HDMI_CEC_RX_MessageStructPrivate.RxMessageLength = RxCounter;
- ReceiveStatus = SUCCESS;
- ReceivedFrame = 1;
- }
- /* Check if the byte received is a Header */
- else if (CEC_GetFlagStatus(CEC_FLAG_RSOM))
- {
- ReceiveStatus = 0;
- HDMI_CEC_RX_MessageStructPrivate.Header = CEC_ReceiveDataByte();
- RxCounter = 0;
- }
- /* Receive each byte except header in the reception buffer */
- else
- {
- if (RxCounter != 0)
- {
- HDMI_CEC_RX_MessageStructPrivate.Operande[RxCounter-1] = CEC_ReceiveDataByte();
- RxCounter++;
- }
- else
- {
- HDMI_CEC_RX_MessageStructPrivate.Opcode = CEC_ReceiveDataByte();
- RxCounter++;
- }
-
- }
- /* Clear all reception flags */
- CEC_ClearFlag(CEC_FLAG_RSOM | CEC_FLAG_REOM | CEC_FLAG_RBTF);
- }
-
- /********************** Transmission ******************************************/
- /* Check if a transmission error occured */
- if (CEC_GetFlagStatus(CEC_FLAG_TERR))
- {
- TransErrorCode = HDMI_CEC_GetErrorStatus();
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
- SendFrame = 1;
- SendStatus = 0;
- }
- /* Check if end of message bit is set in the data to be transmitted */
- else if (CEC_GetFlagStatus(CEC_FLAG_TEOM))
- {
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_RBTF);
- CEC_EndOfMessageCmd(DISABLE);
- SendFrame = 1;
- SendStatus = SUCCESS;
- }
- /* Check if data byte has been sent */
- else if (CEC_GetFlagStatus(CEC_FLAG_TBTRF))
- {
- /* Set EOM bit if the byte to be transmitted is the last one of the TransmitBuffer */
- if (TxCounter == (HDMI_CEC_TX_MessageStructPrivate.TxMessageLength))
- {
- CEC_SendDataByte(BufferPointer[TxCounter]);
- TxCounter++;
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(ENABLE);
- }
- else
- {
- /* Put the byte in the TX Buffer */
- CEC_SendDataByte(BufferPointer[TxCounter]);
- TxCounter++;
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- }
- }
-}
-
-/**
- * @brief Report physical address to all other devices thus allowing any
- device to create a map of the network.
- * @param None
- * @retval HDMI_CEC_Error: CEC Error code.
- */
-HDMI_CEC_Error HDMI_CEC_ReportPhysicalAddress(void)
-{
- HDMI_CEC_Error errorstatus = HDMI_CEC_OK;
- HDMI_CEC_Message HDMI_CEC_TX_Message;
-
- HDMI_CEC_TX_Message.Header = ((MyLogicalAddress << 4) | 0xF);
- HDMI_CEC_TX_Message.Opcode = HDMI_CEC_OPCODE_REPORT_PHYSICAL_ADDRESS;
- HDMI_CEC_TX_Message.Operande[0] = MyPhysicalAddress >> 8;
- HDMI_CEC_TX_Message.Operande[1] = MyPhysicalAddress & 0xFF;
- HDMI_CEC_TX_Message.Operande[2] = DeviceType;
- HDMI_CEC_TX_Message.TxMessageLength = 0x03;
-
- errorstatus = HDMI_CEC_TransmitMessage(&HDMI_CEC_TX_Message);
-
- return errorstatus;
-}
-
-/**
- * @brief Handle CEC command receive callback.
- * When receiving the STANDBY Opcode commande, the system is entred in
- * Stop mode and when wakeup, the PLL is configured as system clock and
- * the HSI is selected as PLL source.
- * @param None
- * @retval None
- */
-void HDMI_CEC_CommandCallBack(void)
-{
- uint8_t i = 0, sendcount = 0;
- HDMI_CEC_Error errorstatus = HDMI_CEC_OK;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- switch (HDMI_CEC_RX_MessageStructPrivate.Opcode)
- {
- case HDMI_CEC_OPCODE_REPORT_PHYSICAL_ADDRESS:
- HDMI_CEC_MapStruct.PhysicalAddress_A = HDMI_CEC_RX_MessageStructPrivate.Operande[1] >> 4;
- HDMI_CEC_MapStruct.PhysicalAddress_B = HDMI_CEC_RX_MessageStructPrivate.Operande[1] & 0x0F;
- HDMI_CEC_MapStruct.PhysicalAddress_C = HDMI_CEC_RX_MessageStructPrivate.Operande[0] >> 4;
- HDMI_CEC_MapStruct.PhysicalAddress_D = HDMI_CEC_RX_MessageStructPrivate.Operande[0] & 0x0F;
- HDMI_CEC_MapStruct.LogicalAddress = (HDMI_CEC_RX_MessageStructPrivate.Header >> 0x4) & 0x0F;
- HDMI_CEC_MapStruct.DeviceType = HDMI_CEC_RX_MessageStructPrivate.Operande[2];
- HDMI_CEC_DeviceMap[DeviceCount] = HDMI_CEC_MapStruct;
- HDMI_CEC_Follower_String[(HDMI_CEC_DeviceMap[DeviceCount].LogicalAddress)][1] = (uint8_t *)"1";
- DeviceCount++;
- break;
-
- case HDMI_CEC_OPCODE_STANDBY:
- /* CEC Line */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
- /* Configure the CEC Line as EXTI Line on Falling Edge */
- EXTI_ClearITPendingBit(EXTI_Line8);
- EXTI_InitStructure.EXTI_Line = EXTI_Line8;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
- /* Request to enter Stop mode */
- PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);
-
- /* Disable the CEC EXTI Line */
- EXTI_InitStructure.EXTI_LineCmd = DISABLE;
- EXTI_Init(&EXTI_InitStructure);
- /* Configure the PLL Source */
- RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_6);
-
- /* Enable PLL */
- RCC_PLLCmd(ENABLE);
-
- /* Wait till PLL is ready */
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
- {
- }
-
- /* Select PLL as system clock source */
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
-
- /* Wait till PLL is used as system clock source */
- while(RCC_GetSYSCLKSource() != 0x08)
- {
- }
- break;
-
- case HDMI_CEC_OPCODE_GET_CEC_VERSION:
- /* Send the Used CEC version */
- HDMI_CEC_TX_MessageStructPrivate.Header = ((MyLogicalAddress << 4) | HDMI_CEC_RX_MessageStructPrivate.Header >> 4);
- HDMI_CEC_TX_MessageStructPrivate.Opcode = HDMI_CEC_OPCODE_CEC_VERSION;
- HDMI_CEC_TX_MessageStructPrivate.Operande[0] = HDMI_CEC_VERSION; /* CEC Version */
- HDMI_CEC_TX_MessageStructPrivate.TxMessageLength = 0x01;
- errorstatus = HDMI_CEC_TransmitMessage(&HDMI_CEC_TX_MessageStructPrivate);
-
- /* Retransmit message until 5 time */
- while ((errorstatus != HDMI_CEC_OK) && sendcount < 0x5)
- {
- sendcount++;
- errorstatus = HDMI_CEC_TransmitMessage(&HDMI_CEC_TX_MessageStructPrivate);
- }
- break;
-
- case HDMI_CEC_OPCODE_GIVE_PHYSICAL_ADDRESS:
- /* Send the Physical address */
- errorstatus = HDMI_CEC_ReportPhysicalAddress();
- sendcount = 0;
- /* Retransmit message until 5 time */
- while ((errorstatus != HDMI_CEC_OK) && sendcount < 0x5)
- {
- sendcount++;
- errorstatus = HDMI_CEC_ReportPhysicalAddress();
- }
- break;
-
- case HDMI_CEC_OPCODE_FEATURE_ABORT:
- /* The device doesn't support the requested message type, or that it cannot
- execute it at the present time. */
- FeatureOpcode = HDMI_CEC_RX_MessageStructPrivate.Operande[0];
- AbortReason = HDMI_CEC_RX_MessageStructPrivate.Operande[1];
- break;
-
- case HDMI_CEC_OPCODE_GIVE_OSD_NAME:
- /* Send the OSD name = STM32100B CEC*/
- HDMI_CEC_TX_MessageStructPrivate.Header = ((MyLogicalAddress << 4) | HDMI_CEC_RX_MessageStructPrivate.Header >> 4);
- HDMI_CEC_TX_MessageStructPrivate.Opcode = HDMI_CEC_OPCODE_SET_OSD_NAME;
- /* STM32100B*/
- HDMI_CEC_TX_MessageStructPrivate.Operande[0] = 0x53;
- HDMI_CEC_TX_MessageStructPrivate.Operande[1] = 0x54;
- HDMI_CEC_TX_MessageStructPrivate.Operande[2] = 0x4D;
- HDMI_CEC_TX_MessageStructPrivate.Operande[3] = 0x33;
- HDMI_CEC_TX_MessageStructPrivate.Operande[4] = 0x32;
- HDMI_CEC_TX_MessageStructPrivate.Operande[5] = 0x31;
- HDMI_CEC_TX_MessageStructPrivate.Operande[6] = 0x30;
- HDMI_CEC_TX_MessageStructPrivate.Operande[7] = 0x30;
- HDMI_CEC_TX_MessageStructPrivate.Operande[8] = 0x42;
- HDMI_CEC_TX_MessageStructPrivate.Operande[9] = 0x20;
- /* CEC */
- HDMI_CEC_TX_MessageStructPrivate.Operande[10] = 0x43;
- HDMI_CEC_TX_MessageStructPrivate.Operande[11] = 0x45;
- HDMI_CEC_TX_MessageStructPrivate.Operande[12] = 0x43;
- HDMI_CEC_TX_MessageStructPrivate.TxMessageLength = 13;
- errorstatus = HDMI_CEC_TransmitMessage(&HDMI_CEC_TX_MessageStructPrivate);
- sendcount = 0;
- /* Retransmit message until 5 time */
- while ((errorstatus != HDMI_CEC_OK) && sendcount < 0x5)
- {
- sendcount++;
- errorstatus = HDMI_CEC_TransmitMessage(&HDMI_CEC_TX_MessageStructPrivate);
- }
- break;
-
- case HDMI_CEC_OPCODE_ROUTING_CHANGE:
- for (i = 0;i < 0x14;i++)
- {
- if ((HDMI_CEC_DeviceMap[i].PhysicalAddress_A == HDMI_CEC_RX_MessageStructPrivate.Operande[1] >> 4) &&
- (HDMI_CEC_DeviceMap[i].PhysicalAddress_B == HDMI_CEC_RX_MessageStructPrivate.Operande[1]&0x0F) &&
- (HDMI_CEC_DeviceMap[i].PhysicalAddress_C == HDMI_CEC_RX_MessageStructPrivate.Operande[0] >> 4) &&
- (HDMI_CEC_DeviceMap[i].PhysicalAddress_D == HDMI_CEC_RX_MessageStructPrivate.Operande[0]&0x0F))
- {
- HDMI_CEC_MapStruct.LogicalAddress = (HDMI_CEC_RX_MessageStructPrivate.Header >> 0x4) & 0x0F;
- HDMI_CEC_MapStruct.DeviceType = HDMI_CEC_RX_MessageStructPrivate.Operande[2];
- HDMI_CEC_DeviceMap[i] = HDMI_CEC_MapStruct;
- }
- }
- break;
-
- default:
- /* Send Abort feature*/
- HDMI_CEC_TX_MessageStructPrivate.Header = ((MyLogicalAddress << 4) | HDMI_CEC_RX_MessageStructPrivate.Header >> 4);
- HDMI_CEC_TX_MessageStructPrivate.Opcode = HDMI_CEC_OPCODE_FEATURE_ABORT;
- HDMI_CEC_TX_MessageStructPrivate.Operande[0] = 0x02; /* defines command to be performed */
- HDMI_CEC_TX_MessageStructPrivate.Operande[1] = HDMI_CEC_REFUSED; /* Reason for abort feature */
- HDMI_CEC_TX_MessageStructPrivate.TxMessageLength = 0x02;
- errorstatus = HDMI_CEC_TransmitMessage(&HDMI_CEC_TX_MessageStructPrivate);
- sendcount = 0;
- /* Retransmit message until 5 time */
- while ((errorstatus != HDMI_CEC_OK) && sendcount < 0x5)
- {
- sendcount++;
- errorstatus = HDMI_CEC_TransmitMessage(&HDMI_CEC_TX_MessageStructPrivate);
- }
- break;
-
- }
-}
-
-/**
- * @brief Check the connected CEC devices.
- * @param None
- * @retval HDMI_CEC_Error
- */
-HDMI_CEC_Error HDMI_CEC_CheckConnectedDevices(void)
-{
- HDMI_CEC_Error errorstatus = HDMI_CEC_OK;
- uint32_t count = 0, i = 1;
-
- /*----------------------------- TV device ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x0);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[0][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
-
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
-
- /*----------------------------- Recording device 1 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x1);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[1][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
-
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
- /*----------------------------- Recording device 2 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x2);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[2][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
-
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
-
- /*----------------------------- Tuner 1 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x3);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[3][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
- /*----------------------------- Playback device 1 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x4);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[4][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
-
- /*----------------------------- Audio system ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x5);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[5][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
-
- /*----------------------------- Tuner 2 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x6);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[6][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
-
- /*----------------------------- Tuner 3 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x7);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[7][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
-
- /*----------------------------- Playback device 2 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x8);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[8][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
-
- /*----------------------------- Recording device 3 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0x9);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[9][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
- /*----------------------------- Tuner 4 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0xA);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[10][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
- /*----------------------------- Playback device 3 ---------------------------*/
- CEC_OwnAddressConfig(MyLogicalAddress); /* Own address = MyLogicalAddress */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte((MyLogicalAddress << 4) | 0xB);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_OK)
- {
- HDMI_CEC_Follower_String[11][1] = (uint8_t *)"1";
- i++;
- errorstatus = HDMI_CEC_OK;
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
-
- CECDevicesNumber = i - 1;
-
- return errorstatus;
-}
-
-/**
- * @brief Physical address discovery.
- * @param None
- * @retval HDMI_CEC_Error: CEC Error code.
- */
-static HDMI_CEC_Error PhysicalAddressDiscovery(void)
-{
- HDMI_CEC_Error errorstatus = HDMI_CEC_OK;
-#ifdef HDMI_CEC_USE_DDC
- uint32_t index = 0, i = 0;
-#endif
-
- /*------------------------------ Physical address discovery -----------------*/
- if (HDMI_CEC_ROOT == 0x1)
- {
- MyPhysicalAddress = 0x0000;
- /* The HDMI-CEC here is configured as sink or as a repeater. The configuration
- of the +5V power signal and the HPD should be well configured.
- Implement here the EDID Structure to be sent to the HDMI source.
- For more details please refer to the HDMI specification.
- The EDID structure should be sent to the device source using the DDC Channel
- and using the HPD signal. */
- }
- else
- {
-
-#ifdef HDMI_CEC_USE_DDC
- /* The HDMI-CEC here is configured as source or as a repeater. The configuration
- of the +5V power signal and the HPD should be well configured.
- The source should wait for HPD and then read the EDID structure. */
- while(GPIO_ReadInputDataBit(HDMI_CEC_HPD_GPIO_PORT, HDMI_CEC_HPD_PIN) == RESET)
- {
- }
- /* Wait for 100 ms after HPD was received */
- for(i = 0; i < 0x5FFFF; i++)
- {
- }
-
- /* Return the physical address using the I2C by reading the 2 bytes 24 and
- 25 form the EDID */
- /* Read the EDID Block 0 and EDID Block 1 at address 0xA0 */
- /*!< While the bus is busy */
- while(I2C_GetFlagStatus(HDMI_CEC_I2C, I2C_FLAG_BUSY))
- {
- }
-
- /*!< Send START condition */
- I2C_GenerateSTART(HDMI_CEC_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it */
- while(!I2C_CheckEvent(HDMI_CEC_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- }
-
- /*!< Send EEPROM address for write */
- I2C_Send7bitAddress(HDMI_CEC_I2C, 0xA0, I2C_Direction_Transmitter);
-
-
- /*!< Test on EV6 and clear it */
- while(!I2C_CheckEvent(HDMI_CEC_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- }
-
- /*!< Send the EEPROM's internal address to read from: Only one byte address */
- I2C_SendData(HDMI_CEC_I2C, 0x00);
-
- /*!< Test on EV8 and clear it */
- while(!I2C_CheckEvent(HDMI_CEC_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
- {
- }
-
- /*!< Send STRAT condition a second time */
- I2C_GenerateSTART(HDMI_CEC_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it */
- while(!I2C_CheckEvent(HDMI_CEC_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- }
-
- /*!< Send EEPROM address for read */
- I2C_Send7bitAddress(HDMI_CEC_I2C, 0xA1, I2C_Direction_Receiver);
-
- /*!< Test on EV6 and clear it */
- while(!I2C_CheckEvent(HDMI_CEC_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
- {
- }
-
- /* While there is data to be read */
- while (NumByteToRead-- > 1)
- {
- while(I2C_CheckEvent(HDMI_CEC_I2C, I2C_EVENT_MASTER_BYTE_RECEIVED))
- {
- }
- for(i = 0; i < 0xFFF; i++)
- {
- }
- pBuffer[index++] = I2C_ReceiveData(HDMI_CEC_I2C);
- }
-
- /* Disable Acknowledgement */
- I2C_AcknowledgeConfig(HDMI_CEC_I2C, DISABLE);
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(HDMI_CEC_I2C, ENABLE);
-
- while(I2C_CheckEvent(HDMI_CEC_I2C, I2C_EVENT_MASTER_BYTE_RECEIVED));
- pBuffer[index] = I2C_ReceiveData(HDMI_CEC_I2C);
-
- /* Enable Acknowledgement to be ready for another reception */
- I2C_AcknowledgeConfig(HDMI_CEC_I2C, ENABLE);
- MyPhysicalAddress = ((pBuffer[138] << 8) | pBuffer[137]);
-#else
- MyPhysicalAddress = 0x1000;
-#endif
- }
-
- return errorstatus;
-}
-/**
- * @brief Allocate the logical address.
- * @param None
- * @retval HDMI_CEC_Error: CEC Error code.
- */
-static HDMI_CEC_Error LogicalAddressAllocation(void)
-{
- HDMI_CEC_Error errorstatus = HDMI_CEC_OK;
- uint32_t count = 0;
-
- /*------------------ Logical address allocation -----------------------------*/
- /* Get the device type */
- /* Device type = CEC_TV */
- if (DeviceType == HDMI_CEC_TV)
- {
- if (HDMI_CEC_ROOT)
- {
- MyLogicalAddress = 0x00;
- }
- else
- {
- CEC_OwnAddressConfig(0xE); /* Own address = 0xE */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0xEE);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the polling message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x0E;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- MyLogicalAddress = 0x0F;
- errorstatus = HDMI_CEC_DEVICE_UNREGISTRED;
- }
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF);
- CEC_EndOfMessageCmd(DISABLE);
- }
-
- /* Device type = CEC_RECORDING */
- if (DeviceType == HDMI_CEC_RECORDING)
- {
- CEC_OwnAddressConfig(0x1); /* Own address = 0x1 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x11);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x01;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
-
- CEC_EndOfMessageCmd(DISABLE);
-
- CEC_OwnAddressConfig(0x2); /* Own address = 0x2 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x22);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x02;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
-
- CEC_EndOfMessageCmd(DISABLE);
-
- CEC_OwnAddressConfig(0x9); /* Own address = 0x9 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x99);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x09;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- MyLogicalAddress = 0x0F;
- errorstatus = HDMI_CEC_DEVICE_UNREGISTRED;
- }
- }
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
- CEC_EndOfMessageCmd(DISABLE);
- }
-
- /* Device type = CEC_TUNER */
- if (DeviceType == HDMI_CEC_TUNER)
- {
- CEC_OwnAddressConfig(0x3); /* Own address = 0x3 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x33);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x03;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
-
- CEC_EndOfMessageCmd(DISABLE);
-
- CEC_OwnAddressConfig(0x6); /* Own address = 0x6 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x66);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x06;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
-
- CEC_EndOfMessageCmd(DISABLE);
-
- CEC_OwnAddressConfig(0x7); /* Own address = 0x7 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x77);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x07;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
-
- CEC_EndOfMessageCmd(DISABLE);
-
- CEC_OwnAddressConfig(0xA); /* Own address = 0xA */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0xAA);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x0A;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- MyLogicalAddress = 0x0F;
- errorstatus = HDMI_CEC_DEVICE_UNREGISTRED;
- }
- }
- }
- }
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
- CEC_EndOfMessageCmd(DISABLE);
- }
-
- /* Device type = CEC_PLAYBACK */
- if (DeviceType == HDMI_CEC_PLAYBACK)
- {
- CEC_OwnAddressConfig(0x4); /* Own address = 0x4 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x44);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x04;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
-
- CEC_EndOfMessageCmd(DISABLE);
-
- CEC_OwnAddressConfig(0x8); /* Own address = 0x8 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x88);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x08;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
-
- CEC_EndOfMessageCmd(DISABLE);
-
- CEC_OwnAddressConfig(0xB); /* Own address = 0xBB */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0xBB);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x0B;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- MyLogicalAddress = 0x0F;
- errorstatus = HDMI_CEC_DEVICE_UNREGISTRED;
- }
- }
- }
-
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
- CEC_EndOfMessageCmd(DISABLE);
- }
-
- /* Device type = CEC Audio System */
- if (DeviceType == HDMI_CEC_AUDIOSYSTEM)
- {
- CEC_OwnAddressConfig(0x5); /* Own address = 0x5 */
-
- CEC_EndOfMessageCmd(ENABLE);
-
- CEC_SendDataByte(0x55);
-
- /* Start of message */
- CEC_StartOfMessage();
-
- count = 0;
-
- /* Wait till the header message is sent */
- while ((CEC_GetFlagStatus(CEC_FLAG_TBTRF) == RESET) && (CEC_GetFlagStatus(CEC_FLAG_TERR) == RESET) && (count < HDMI_CEC_TIMEOUT_VALUE))
- {
- count++;
- }
-
- if (count >= HDMI_CEC_TIMEOUT_VALUE)
- {
- errorstatus = HDMI_CEC_TIMEOUT;
- return(errorstatus);
- }
-
- errorstatus = HDMI_CEC_GetErrorStatus();
-
- if (errorstatus == HDMI_CEC_BLOCK_ACKNOWLEDGE)
- {
- MyLogicalAddress = 0x05;
- errorstatus = HDMI_CEC_OK;
- }
- else if (errorstatus == HDMI_CEC_OK)
- {
- MyLogicalAddress = 0x0F;
- errorstatus = HDMI_CEC_DEVICE_UNREGISTRED;
- }
-
- /* Clear CEC CSR register */
- CEC_ClearFlag(CEC_FLAG_TBTRF | CEC_FLAG_TERR);
- CEC_EndOfMessageCmd(DISABLE);
- }
-
- return errorstatus;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
-
-
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_cec.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_cec.h
deleted file mode 100644
index 4bec71a..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_cec.h
+++ /dev/null
@@ -1,290 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100b_eval_cec.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm32100b_eval_cec
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32100B_EVAL_CEC_H
-#define __STM32100B_EVAL_CEC_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
- /* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100B_EVAL
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_CEC
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_CEC_Exported_Types
- * @{
- */
-typedef enum
-{
- HDMI_CEC_BIT_TIMING = (1), /*!< CEC Bit Timing Error */
- HDMI_CEC_BIT_PERIOD = (2), /*!< CEC Bit Period Error */
- HDMI_CEC_RX_BLOCK_FINISHED = (3), /*!< CEC Receive Block finished Error */
- HDMI_CEC_START_BIT = (4), /*!< CEC Start Bit Error */
- HDMI_CEC_BLOCK_ACKNOWLEDGE = (5), /*!< CEC Block Acknowledge Error */
- HDMI_CEC_LINE = (6), /*!< CEC Line Error */
- HDMI_CEC_TX_BLOCK_FINISHED = (7), /*!< CEC Transmit Block Transfer finished Error */
- HDMI_CEC_DEVICE_UNREGISTRED = (8), /*!< CEC Device Unregistred */
- HDMI_CEC_TIMEOUT = (9), /*!< CEC TimeOut */
- HDMI_CEC_OK = (10) /*!< CEC OK */
-}HDMI_CEC_Error;
-
-typedef struct
-{
- __IO uint8_t PhysicalAddress_A;
- __IO uint8_t PhysicalAddress_B;
- __IO uint8_t PhysicalAddress_C;
- __IO uint8_t PhysicalAddress_D;
- __IO uint8_t LogicalAddress;
- __IO uint8_t DeviceType;
-}HDMI_CEC_Map;
-
-
-#define HDMI_CEC_TX_MESSAGE_LENGTH_MAX ((uint32_t)0x0000000E)
-#define HDMI_CEC_TIMEOUT_VALUE ((uint32_t)0x001FFFFF)
-
-/**
-* @brief CEC Init Structure definition
-*/
-typedef struct
-{
- __IO uint8_t Header;
- __IO uint8_t Opcode;
- __IO uint8_t Operande[HDMI_CEC_TX_MESSAGE_LENGTH_MAX];
- __IO uint8_t TxMessageLength;
- __IO uint8_t RxMessageLength;
-}HDMI_CEC_Message;
-
-/**
-* @}
-*/
-
-/** @defgroup STM32100B_EVAL_CEC_Exported_Constants
- * @{
- */
-
-/**
- * @brief CEC device types
- */
-#define HDMI_CEC_TV 0x00
-#define HDMI_CEC_RECORDING 0x01
-#define HDMI_CEC_TUNER 0x03
-#define HDMI_CEC_PLAYBACK 0x04
-#define HDMI_CEC_AUDIOSYSTEM 0x05
-
-
-/**
- * @brief HDMI CEC I2C Interface pins
- */
-#define HDMI_CEC_I2C_SCL_PIN GPIO_Pin_10
-#define HDMI_CEC_I2C_SDA_PIN GPIO_Pin_11
-#define HDMI_CEC_I2C_GPIO_PORT GPIOB
-#define HDMI_CEC_I2C_GPIO_CLK RCC_APB2Periph_GPIOB
-#define HDMI_CEC_I2C I2C2
-#define HDMI_CEC_I2C_CLK RCC_APB1Periph_I2C2
-
-/**
- * @brief HDMI CEC HPD (Hot Plug Detect) Interface pin
- */
-#define HDMI_CEC_HPD_PIN GPIO_Pin_12
-#define HDMI_CEC_HPD_GPIO_PORT GPIOB
-#define HDMI_CEC_HPD_GPIO_CLK RCC_APB2Periph_GPIOB
-
-/**
- * @brief HDMI CEC Interface pin
- */
-#define HDMI_CEC_LINE_PIN GPIO_Pin_8
-#define HDMI_CEC_LINE_GPIO_PORT GPIOB
-#define HDMI_CEC_LINE_GPIO_CLK RCC_APB2Periph_GPIOB
-
-#define HDMI_CEC_I2C_SLAVE_ADDRESS7 0xA0
-#define HDMI_CEC_I2C_CLOCK_SPEED 100000
-
-/**
- * @brief HDMI CEC Root (Mainly for TV with a fixed physical address (0.0.0.0))
- * If you want to configure the STM32100B-EVAL board as CEC Root (Sink)
- * change the following define to 0x1
- */
-#define HDMI_CEC_ROOT 0x00
-
-/**
- * @brief To select if the DDC Channel will be used for physical address discovery
- * or not. To use the DDC Channel to read the EDID structure uncomment
- * the following line.
- * If the device is configured as HMDI source it should read his own physical
- * address from the sink that is connected to.
- */
-/* #define HDMI_CEC_USE_DDC */
-
-/**
- * @brief CEC version: V1.3a
- */
-#define HDMI_CEC_VERSION 0x04
-
-/**
- * @brief Reason for Abort feature
- */
-#define HDMI_CEC_UNRECOGNIZED_OPCODE 0x00
-#define HDMI_CEC_NOT_CORRECT_MODETORESPOND 0x01
-#define HDMI_CEC_CANNOTPROVIDE_SOURCE 0x02
-#define HDMI_CEC_INVALID_OPERAND 0x03
-#define HDMI_CEC_REFUSED 0x04
-
-/**
- * @brief HDMI CEC specific commands
- */
-#define HDMI_CEC_OPCODE_ACTIVE_SOURCE ((uint8_t) 0x82)
-#define HDMI_CEC_OPCODE_IMAGE_VIEW_ON ((uint8_t) 0x04)
-#define HDMI_CEC_OPCODE_TEXT_VIEW_ON ((uint8_t) 0x0D)
-#define HDMI_CEC_OPCODE_INACTIVE_SOURCE ((uint8_t) 0x9D)
-#define HDMI_CEC_OPCODE_REQUEST_ACTIVE_SOURCE ((uint8_t) 0x85)
-#define HDMI_CEC_OPCODE_ROUTING_CHANGE ((uint8_t) 0x80)
-#define HDMI_CEC_OPCODE_ROUTING_INFORMATION ((uint8_t) 0x81)
-#define HDMI_CEC_OPCODE_SET_STREAM_PATH ((uint8_t) 0x86)
-#define HDMI_CEC_OPCODE_STANDBY ((uint8_t) 0x36)
-#define HDMI_CEC_OPCODE_RECORD_OFF ((uint8_t) 0x0B)
-#define HDMI_CEC_OPCODE_RECORD_ON ((uint8_t) 0x09)
-#define HDMI_CEC_OPCODE_RECORD_STATUS ((uint8_t) 0x0A)
-#define HDMI_CEC_OPCODE_RECORD_TV_SCREEN ((uint8_t) 0x0F)
-#define HDMI_CEC_OPCODE_CLEAR_ANALOGUE_TIMER ((uint8_t) 0x33)
-#define HDMI_CEC_OPCODE_CLEAR_DIGITAL_TIMER ((uint8_t) 0x99)
-#define HDMI_CEC_OPCODE_CLEAR_EXTERNAL_TIMER ((uint8_t) 0xA1)
-#define HDMI_CEC_OPCODE_SET_ANALOGUE_TIMER ((uint8_t) 0x34)
-#define HDMI_CEC_OPCODE_SET_DIGITAL_TIMER ((uint8_t) 0x97)
-#define HDMI_CEC_OPCODE_SET_EXTERNAL_TIMER ((uint8_t) 0xA2)
-#define HDMI_CEC_OPCODE_SET_TIMER_PROGRAM_TITLE ((uint8_t) 0x67)
-#define HDMI_CEC_OPCODE_TIMER_CLEARED_STATUS ((uint8_t) 0x43)
-#define HDMI_CEC_OPCODE_TIMER_STATUS ((uint8_t) 0x35)
-#define HDMI_CEC_OPCODE_CEC_VERSION ((uint8_t) 0x9E)
-#define HDMI_CEC_OPCODE_GET_CEC_VERSION ((uint8_t) 0x9F)
-#define HDMI_CEC_OPCODE_GIVE_PHYSICAL_ADDRESS ((uint8_t) 0x83)
-#define HDMI_CEC_OPCODE_GET_MENU_LANGUAGE ((uint8_t) 0x91)
-#define HDMI_CEC_OPCODE_REPORT_PHYSICAL_ADDRESS ((uint8_t) 0x84)
-#define HDMI_CEC_OPCODE_SET_MENU_LANGUAGE ((uint8_t) 0x32)
-#define HDMI_CEC_OPCODE_DECK_CONTROL ((uint8_t) 0x42)
-#define HDMI_CEC_OPCODE_DECK_STATUS ((uint8_t) 0x1B)
-#define HDMI_CEC_OPCODE_GIVE_DECK_STATUS ((uint8_t) 0x1A)
-#define HDMI_CEC_OPCODE_PLAY ((uint8_t) 0x41)
-#define HDMI_CEC_OPCODE_GIVE_TUNER_DEVICE_STATUS ((uint8_t) 0x08)
-#define HDMI_CEC_OPCODE_SELECT_ANALOGUE_SERVICE ((uint8_t) 0x92)
-#define HDMI_CEC_OPCODE_SELECT_DIGITAL_SERVICE ((uint8_t) 0x93)
-#define HDMI_CEC_OPCODE_TUNER_DEVICE_STATUS ((uint8_t) 0x07)
-#define HDMI_CEC_OPCODE_TUNER_STEP_DECREMENT ((uint8_t) 0x06)
-#define HDMI_CEC_OPCODE_TUNER_STEP_INCREMENT ((uint8_t) 0x05)
-#define HDMI_CEC_OPCODE_DEVICE_VENDOR_ID ((uint8_t) 0x87)
-#define HDMI_CEC_OPCODE_GIVE_DEVICE_VENDOR_ID ((uint8_t) 0x8C)
-#define HDMI_CEC_OPCODE_VENDOR_COMMAND ((uint8_t) 0x89)
-#define HDMI_CEC_OPCODE_VENDOR_COMMAND_WITH_ID ((uint8_t) 0xA0)
-#define HDMI_CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN ((uint8_t) 0x8A)
-#define HDMI_CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP ((uint8_t) 0x8B)
-#define HDMI_CEC_OPCODE_SET_OSD_STRING ((uint8_t) 0x64)
-#define HDMI_CEC_OPCODE_GIVE_OSD_NAME ((uint8_t) 0x46)
-#define HDMI_CEC_OPCODE_SET_OSD_NAME ((uint8_t) 0x47)
-#define HDMI_CEC_OPCODE_MENU_REQUEST ((uint8_t) 0x8D)
-#define HDMI_CEC_OPCODE_MENU_STATUS ((uint8_t) 0x8E)
-#define HDMI_CEC_OPCODE_USER_CONTROL_PRESSED ((uint8_t) 0x44)
-#define HDMI_CEC_OPCODE_USER_CONTROL_RELEASED ((uint8_t) 0x45)
-#define HDMI_CEC_OPCODE_GIVE_DEVICE_POWER_STATUS ((uint8_t) 0x8F)
-#define HDMI_CEC_OPCODE_REPORT_POWER_STATUS ((uint8_t) 0x90)
-#define HDMI_CEC_OPCODE_FEATURE_ABORT ((uint8_t) 0x00)
-#define HDMI_CEC_OPCODE_ABORT ((uint8_t) 0xFF)
-#define HDMI_CEC_OPCODE_GIVE_AUDIO_STATUS ((uint8_t) 0x71)
-#define HDMI_CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS ((uint8_t) 0x7D)
-#define HDMI_CEC_OPCODE_REPORT_AUDIO_STATUS ((uint8_t) 0x7A)
-#define HDMI_CEC_OPCODE_SET_SYSTEM_AUDIO_MODE ((uint8_t) 0x72)
-#define HDMI_CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST ((uint8_t) 0x70)
-#define HDMI_CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS ((uint8_t) 0x7E)
-#define HDMI_CEC_OPCODE_SET_AUDIO_RATE ((uint8_t) 0x9A)
-
-
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_CEC_Exported_Macros
- * @{
- */
-/* HDMI_CEC_HPD: HDMI HPD pin low */
-#define HDMI_CEC_HPD_LOW() GPIO_ResetBits(HDMI_CEC_HPD_GPIO_PORT, HDMI_CEC_HPD_PIN)
-/* HDMI_CEC_HPD: HDMI HPD pin high */
-#define HDMI_CEC_HPD_HIGH() GPIO_SetBits(HDMI_CEC_HPD_GPIO_PORT, HDMI_CEC_HPD_PIN)
-
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_CEC_Exported_Functions
- * @{
- */
-HDMI_CEC_Error HDMI_CEC_Init(void);
-HDMI_CEC_Error HDMI_CEC_TransmitMessage(HDMI_CEC_Message *HDMI_CEC_TX_MessageStructure);
-HDMI_CEC_Error HDMI_CEC_GetErrorStatus (void);
-void HDMI_CEC_ProcessIRQSrc(void);
-HDMI_CEC_Error HDMI_CEC_ReportPhysicalAddress(void);
-void HDMI_CEC_CommandCallBack(void);
-HDMI_CEC_Error HDMI_CEC_CheckConnectedDevices(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32100B_EVAL_CEC_H */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
-
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_lcd.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_lcd.c
deleted file mode 100644
index bbf774d..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_lcd.c
+++ /dev/null
@@ -1,1875 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100b_eval_lcd.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file includes the LCD driver for AM-240320LTNQW00H (LCD_HX8312),
- * AM-240320L8TNQW00H (LCD_ILI9320), AM-240320LDTNQW00H (LCD_SPFD5408B)
- * Liquid Crystal Display Module of STM32100B-EVAL board.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32100b_eval_lcd.h"
-#include "../Common/fonts.c"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100B_EVAL
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_LCD
- * @brief This file includes the LCD driver for AM-240320LTNQW00H (LCD_HX8312),
- * AM-240320L8TNQW00H (LCD_ILI9320), AM-240320LDTNQW00H (LCD_SPFD5408B)
- * Liquid Crystal Display Module of STM32100B-EVAL board.
- * @{
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Private_Defines
- * @{
- */
-#define LCD_ILI9320 0x9320
-#define LCD_HX8312 0x8312
-#define LCD_SPFD5408 0x5408
-#define START_BYTE 0x70
-#define SET_INDEX 0x00
-#define READ_STATUS 0x01
-#define LCD_WRITE_REG 0x02
-#define LCD_READ_REG 0x03
-#define MAX_POLY_CORNERS 200
-#define POLY_Y(Z) ((int32_t)((Points + Z)->X))
-#define POLY_X(Z) ((int32_t)((Points + Z)->Y))
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Private_Macros
- * @{
- */
-#define ABS(X) ((X) > 0 ? (X) : -(X))
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Private_Variables
- * @{
- */
-static sFONT *LCD_Currentfonts;
-/* Global variables to set the written text color */
-static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
-static __IO uint32_t LCDType = LCD_ILI9320;
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Private_Function_Prototypes
- * @{
- */
-#ifndef USE_Delay
-static void delay(vu32 nCount);
-#endif /* USE_Delay*/
-
-static void LCD_WriteRegHX8312(uint8_t LCD_Reg, uint8_t LCD_RegValue);
-static void LCD_WriteRegILI9320(uint8_t LCD_Reg, uint16_t LCD_RegValue);
-static void PutPixel(int16_t x, int16_t y);
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed);
-
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the LCD.
- * @param None
- * @retval None
- */
-void LCD_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LCD Display Off */
- LCD_DisplayOff();
-
- /*!< LCD_SPI disable */
- SPI_Cmd(LCD_SPI, DISABLE);
-
- /*!< LCD_SPI DeInit */
- SPI_I2S_DeInit(LCD_SPI);
-
- /*!< Disable SPI clock */
- RCC_APB1PeriphClockCmd(LCD_SPI_CLK, DISABLE);
-
- /* Configure NCS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure NWR(RNW), RS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_RS_PIN;
- GPIO_Init(LCD_RS_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_NWR_PIN;
- GPIO_Init(LCD_NWR_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure SPI pins: SCK, MISO and MOSI */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
- GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN;
- GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
- GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Setups the LCD.
- * @param None
- * @retval None
- */
-void LCD_Setup(void)
-{
-/* Configure the LCD Control pins --------------------------------------------*/
- LCD_CtrlLinesConfig();
-
-/* Configure the LCD_SPI interface ----------------------------------------------*/
- LCD_SPIConfig();
-
- if(LCDType == LCD_ILI9320)
- {
- _delay_(5); /* Delay 50 ms */
- /* Start Initial Sequence ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_229, 0x8000); /* Set the internal vcore voltage */
- LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
- /* Power On sequence -----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0006);
- LCD_WriteReg(LCD_REG_49, 0x0101);
- LCD_WriteReg(LCD_REG_50, 0x0003);
- LCD_WriteReg(LCD_REG_53, 0x0106);
- LCD_WriteReg(LCD_REG_54, 0x0b02);
- LCD_WriteReg(LCD_REG_55, 0x0302);
- LCD_WriteReg(LCD_REG_56, 0x0707);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0600);
- LCD_WriteReg(LCD_REG_61, 0x020b);
-
- /* Set GRAM area ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0x2700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
- /* Partial Display Control -----------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=01 (Horizontal : increment, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- }
- else if(LCDType == LCD_SPFD5408)
- {
- /* Start Initial Sequence --------------------------------------------------*/
- LCD_WriteReg(LCD_REG_227, 0x3008); /* Set internal timing */
- LCD_WriteReg(LCD_REG_231, 0x0012); /* Set internal timing */
- LCD_WriteReg(LCD_REG_239, 0x1231); /* Set internal timing */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* Set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* Set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
- /* Power On sequence -------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_17, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_16, 0x12B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x01BD); /* External reference voltage= Vci */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1400); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x000E); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x013F); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve --------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0007);
- LCD_WriteReg(LCD_REG_49, 0x0302);
- LCD_WriteReg(LCD_REG_50, 0x0105);
- LCD_WriteReg(LCD_REG_53, 0x0206);
- LCD_WriteReg(LCD_REG_54, 0x0808);
- LCD_WriteReg(LCD_REG_55, 0x0206);
- LCD_WriteReg(LCD_REG_56, 0x0504);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0105);
- LCD_WriteReg(LCD_REG_61, 0x0808);
- /* Set GRAM area -----------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* Set scrolling line */
- /* Partial Display Control -------------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control -----------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1
- I/D=01 (Horizontal : increment, Vertical : decrement)
- AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0112); /* 262K color and display ON */
- }
- else if(LCDType == LCD_HX8312)
- {
- /* Enable the LCD Oscillator ---------------------------------------------*/
- LCD_WriteReg(LCD_REG_1, 0x10);
- LCD_WriteReg(LCD_REG_0, 0xA0);
- LCD_WriteReg(LCD_REG_3, 0x01);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_3, 0x00);
- LCD_WriteReg(LCD_REG_43, 0x04);
-
- LCD_WriteReg(LCD_REG_40, 0x18);
- LCD_WriteReg(LCD_REG_26, 0x05);
- LCD_WriteReg(LCD_REG_37, 0x05);
- LCD_WriteReg(LCD_REG_25, 0x00);
-
- /* LCD Power On ----------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_28, 0x73);
- LCD_WriteReg(LCD_REG_36, 0x74);
- LCD_WriteReg(LCD_REG_30, 0x01);
- LCD_WriteReg(LCD_REG_24, 0xC1);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_24, 0xE1);
- LCD_WriteReg(LCD_REG_24, 0xF1);
- _delay_(6); /* Delay 60 ms */
- LCD_WriteReg(LCD_REG_24, 0xF5);
- _delay_(6); /* Delay 60 ms */
- LCD_WriteReg(LCD_REG_27, 0x09);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_31, 0x11);
- LCD_WriteReg(LCD_REG_32, 0x0E);
- LCD_WriteReg(LCD_REG_30, 0x81);
- _delay_(1); /* Delay 10 ms */
-
- /* Chip Set --------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_157, 0x00);
- LCD_WriteReg(LCD_REG_192, 0x00);
-
- LCD_WriteReg(LCD_REG_14, 0x00);
- LCD_WriteReg(LCD_REG_15, 0x00);
- LCD_WriteReg(LCD_REG_16, 0x00);
- LCD_WriteReg(LCD_REG_17, 0x00);
- LCD_WriteReg(LCD_REG_18, 0x00);
- LCD_WriteReg(LCD_REG_19, 0x00);
- LCD_WriteReg(LCD_REG_20, 0x00);
- LCD_WriteReg(LCD_REG_21, 0x00);
- LCD_WriteReg(LCD_REG_22, 0x00);
- LCD_WriteReg(LCD_REG_23, 0x00);
-
- LCD_WriteReg(LCD_REG_52, 0x01);
- LCD_WriteReg(LCD_REG_53, 0x00);
- LCD_WriteReg(LCD_REG_75, 0x00);
- LCD_WriteReg(LCD_REG_76, 0x00);
- LCD_WriteReg(LCD_REG_78, 0x00);
- LCD_WriteReg(LCD_REG_79, 0x00);
- LCD_WriteReg(LCD_REG_80, 0x00);
-
- LCD_WriteReg(LCD_REG_60, 0x00);
- LCD_WriteReg(LCD_REG_61, 0x00);
- LCD_WriteReg(LCD_REG_62, 0x01);
- LCD_WriteReg(LCD_REG_63, 0x3F);
- LCD_WriteReg(LCD_REG_64, 0x02);
- LCD_WriteReg(LCD_REG_65, 0x02);
- LCD_WriteReg(LCD_REG_66, 0x00);
- LCD_WriteReg(LCD_REG_67, 0x00);
- LCD_WriteReg(LCD_REG_68, 0x00);
- LCD_WriteReg(LCD_REG_69, 0x00);
- LCD_WriteReg(LCD_REG_70, 0xEF);
- LCD_WriteReg(LCD_REG_71, 0x00);
- LCD_WriteReg(LCD_REG_72, 0x00);
- LCD_WriteReg(LCD_REG_73, 0x01);
- LCD_WriteReg(LCD_REG_74, 0x3F);
-
- LCD_WriteReg(LCD_REG_29, 0x08); /* R29:Gate scan direction setting */
-
- LCD_WriteReg(LCD_REG_134, 0x00);
- LCD_WriteReg(LCD_REG_135, 0x30);
- LCD_WriteReg(LCD_REG_136, 0x02);
- LCD_WriteReg(LCD_REG_137, 0x05);
-
- LCD_WriteReg(LCD_REG_141, 0x01); /* R141:Register set-up mode for one line clock */
- LCD_WriteReg(LCD_REG_139, 0x20); /* R139:One line SYSCLK number in one-line */
- LCD_WriteReg(LCD_REG_51, 0x01); /* R51:N line inversion setting */
- LCD_WriteReg(LCD_REG_55, 0x01); /* R55:Scanning method setting */
- LCD_WriteReg(LCD_REG_118, 0x00);
-
- /* Gamma Set -------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_143, 0x10);
- LCD_WriteReg(LCD_REG_144, 0x67);
- LCD_WriteReg(LCD_REG_145, 0x07);
- LCD_WriteReg(LCD_REG_146, 0x65);
- LCD_WriteReg(LCD_REG_147, 0x07);
- LCD_WriteReg(LCD_REG_148, 0x01);
- LCD_WriteReg(LCD_REG_149, 0x76);
- LCD_WriteReg(LCD_REG_150, 0x56);
- LCD_WriteReg(LCD_REG_151, 0x00);
- LCD_WriteReg(LCD_REG_152, 0x06);
- LCD_WriteReg(LCD_REG_153, 0x03);
- LCD_WriteReg(LCD_REG_154, 0x00);
-
- /* Display On ------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_1, 0x50);
- LCD_WriteReg(LCD_REG_5, 0x04);
- LCD_WriteReg(LCD_REG_0, 0x80);
- LCD_WriteReg(LCD_REG_59, 0x01);
- _delay_(4); /* Delay 40 ms */
- LCD_WriteReg(LCD_REG_0, 0x20);
- }
-}
-
-
-/**
- * @brief Initializes the LCD.
- * @param None
- * @retval None
- */
-void STM32100B_LCD_Init(void)
-{
- /* Setups the LCD */
- LCD_Setup();
- /* Try to read new LCD controller ID 0x9320 */
- if (LCD_ReadReg(LCD_REG_0) == LCD_ILI9320)
- {
- LCDType = LCD_ILI9320;
- }
- else
- {
- LCDType = LCD_SPFD5408;
- /* Setups the LCD */
- LCD_Setup();
- /* Try to read new LCD controller ID 0x5408 */
- if (LCD_ReadReg(LCD_REG_0) != LCD_SPFD5408)
- {
- LCDType = LCD_HX8312;
- /* Setups the LCD */
- LCD_Setup();
- }
- }
- LCD_SetFont(&LCD_DEFAULT_FONT);
-}
-
-/**
- * @brief Sets the LCD Text and Background colors.
- * @param _TextColor: specifies the Text Color.
- * @param _BackColor: specifies the Background Color.
- * @retval None
- */
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
-{
- TextColor = _TextColor;
- BackColor = _BackColor;
-}
-
-/**
- * @brief Gets the LCD Text and Background colors.
- * @param _TextColor: pointer to the variable that will contain the Text
- Color.
- * @param _BackColor: pointer to the variable that will contain the Background
- Color.
- * @retval None
- */
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
-{
- *_TextColor = TextColor; *_BackColor = BackColor;
-}
-
-/**
- * @brief Sets the Text color.
- * @param Color: specifies the Text color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetTextColor(__IO uint16_t Color)
-{
- TextColor = Color;
-}
-
-
-/**
- * @brief Sets the Background color.
- * @param Color: specifies the Background color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetBackColor(__IO uint16_t Color)
-{
- BackColor = Color;
-}
-
-/**
- * @brief Sets the Text Font.
- * @param fonts: specifies the font to be used.
- * @retval None
- */
-void LCD_SetFont(sFONT *fonts)
-{
- LCD_Currentfonts = fonts;
-}
-
-/**
- * @brief Gets the Text Font.
- * @param None.
- * @retval the used font.
- */
-sFONT *LCD_GetFont(void)
-{
- return LCD_Currentfonts;
-}
-
-/**
- * @brief Clears the selected line.
- * @param Line: the Line to be cleared.
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..n
- * @retval None
- */
-void LCD_ClearLine(uint8_t Line)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
- /* Send the string character by character on lCD */
- while (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width)
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, ' ');
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- }
-}
-
-
-/**
- * @brief Clears the hole LCD.
- * @param Color: the color of the background.
- * @retval None
- */
-void LCD_Clear(uint16_t Color)
-{
- uint32_t index = 0;
-
- LCD_SetCursor(0x00, 0x013F);
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
- for(index = 0; index < 76800; index++)
- {
- LCD_WriteRAM(Color);
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-}
-
-
-/**
- * @brief Sets the cursor position.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @retval None
- */
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteReg(LCD_REG_32, Xpos);
- LCD_WriteReg(LCD_REG_33, Ypos);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteReg(LCD_REG_66, Xpos);
- LCD_WriteReg(LCD_REG_67, ((Ypos & 0x100)>> 8));
- LCD_WriteReg(LCD_REG_68, (Ypos & 0xFF));
- }
-}
-
-
-/**
- * @brief Draws a character on LCD.
- * @param Xpos: the Line where to display the character shape.
- * @param Ypos: start column address.
- * @param c: pointer to the character data.
- * @retval None
- */
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c)
-{
- uint32_t index = 0, i = 0;
- uint8_t Xaddress = 0;
-
- Xaddress = Xpos;
-
- LCD_SetCursor(Xaddress, Ypos);
-
- for(index = 0; index < LCD_Currentfonts->Height; index++)
- {
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
- for(i = 0; i < LCD_Currentfonts->Width; i++)
- {
- if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
- (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
-
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
- Xaddress++;
- LCD_SetCursor(Xaddress, Ypos);
- }
-}
-
-
-/**
- * @brief Displays one character (16dots width, 24dots height).
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param Column: start column address.
- * @param Ascii: character ascii code, must be between 0x20 and 0x7E.
- * @retval None
- */
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii)
-{
- Ascii -= 32;
- LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
-}
-
-
-/**
- * @brief Displays a maximum of 20 char on the LCD.
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param *ptr: pointer to string to display on LCD.
- * @retval None
- */
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
-
- /* Send the string character by character on lCD */
- while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width))
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, *ptr);
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- /* Point on the next character */
- ptr++;
- }
-}
-
-
-/**
- * @brief Sets a display window
- * @param Xpos: specifies the X buttom left position.
- * @param Ypos: specifies the Y buttom left position.
- * @param Height: display window height.
- * @param Width: display window width.
- * @retval None
- */
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Horizontal GRAM Start Address */
- if(Xpos >= Height)
- {
- LCD_WriteReg(LCD_REG_80, (Xpos - Height + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_80, 0);
- }
- /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_81, Xpos);
- /* Vertical GRAM Start Address */
- if(Ypos >= Width)
- {
- LCD_WriteReg(LCD_REG_82, (Ypos - Width + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_82, 0);
- }
- /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_83, Ypos);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteReg(LCD_REG_1, 0xD0);
- LCD_WriteReg(LCD_REG_5, 0x14);
-
- LCD_WriteReg(LCD_REG_69, (Xpos - Height + 1));
- LCD_WriteReg(LCD_REG_70, Xpos);
-
- LCD_WriteReg(LCD_REG_71, (((Ypos - Width + 1) & 0x100)>> 8));
- LCD_WriteReg(LCD_REG_72, ((Ypos - Width + 1) & 0xFF));
- LCD_WriteReg(LCD_REG_73, ((Ypos & 0x100)>> 8));
- LCD_WriteReg(LCD_REG_74, (Ypos & 0xFF));
- }
- LCD_SetCursor(Xpos, Ypos);
-}
-
-
-/**
- * @brief Disables LCD Window mode.
- * @param None
- * @retval None
- */
-void LCD_WindowModeDisable(void)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_SetDisplayWindow(239, 0x13F, 240, 320);
- LCD_WriteReg(LCD_REG_3, 0x1018);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteReg(LCD_REG_1, 0x50);
- LCD_WriteReg(LCD_REG_5, 0x04);
- }
-
-}
-
-/**
- * @brief Displays a line.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: line length.
- * @param Direction: line direction.
- * This parameter can be one of the following values: Vertical or Horizontal.
- * @retval None
- */
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction)
-{
- uint32_t i = 0;
-
- LCD_SetCursor(Xpos, Ypos);
- if(Direction == LCD_DIR_HORIZONTAL)
- {
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAM(TextColor);
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
- }
- else
- {
- for(i = 0; i < Length; i++)
- {
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- Xpos++;
- LCD_SetCursor(Xpos, Ypos);
- }
- }
-}
-
-
-/**
- * @brief Displays a rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: display rectangle height.
- * @param Width: display rectangle width.
- * @retval None
- */
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-}
-
-
-/**
- * @brief Displays a circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D;/* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
- CurX = 0;
- CurY = Radius;
-
- while (CurX <= CurY)
- {
- LCD_SetCursor(Xpos + CurX, Ypos + CurY);
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos + CurX, Ypos - CurY);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos - CurX, Ypos + CurY);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos - CurX, Ypos - CurY);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos + CurY, Ypos + CurX);
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos + CurY, Ypos - CurX);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos - CurY, Ypos + CurX);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos - CurY, Ypos - CurX);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-}
-
-
-/**
- * @brief Displays a monocolor picture.
- * @param Pict: pointer to the picture array.
- * @retval None
- */
-void LCD_DrawMonoPict(const uint32_t *Pict)
-{
- uint32_t index = 0, i = 0;
- LCD_SetCursor(0, (LCD_PIXEL_WIDTH - 1));
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
-
- for(index = 0; index < 2400; index++)
- {
- for(i = 0; i < 32; i++)
- {
- if((Pict[index] & (1 << i)) == 0x00)
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- }
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-}
-
-#ifdef USE_LCD_DrawBMP
-/**
- * @brief Displays a bitmap picture loaded in the SPI Flash.
- * @param BmpAddress: Bmp picture address in the SPI Flash.
- * @retval None
- */
-void LCD_DrawBMP(uint32_t BmpAddress)
-{
- uint32_t i = 0, size = 0;
- /* Read bitmap size */
- sFLASH_ReadBuffer((uint8_t*)&size, BmpAddress + 2, 4);
- /* get bitmap data address offset */
- sFLASH_ReadBuffer((uint8_t*)&i, BmpAddress + 10, 4);
-
- size = (size - i)/2;
- sFLASH_StartReadSequence(BmpAddress + i);
- /* Disable LCD_SPI */
- SPI_Cmd(LCD_SPI, DISABLE);
- /* SPI in 16-bit mode */
- SPI_DataSizeConfig(LCD_SPI, SPI_DataSize_16b);
- /* Enable LCD_SPI */
- SPI_Cmd(LCD_SPI, ENABLE);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1008);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
-
- /* Read bitmap data from SPI Flash and send them to LCD */
- for(i = 0; i < size; i++)
- {
- LCD_WriteRAM(__REV16(sFLASH_SendHalfWord(0xA5A5)));
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-
- /* Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
- /* Disable LCD_SPI */
- SPI_Cmd(LCD_SPI, DISABLE);
- /* SPI in 8-bit mode */
- SPI_DataSizeConfig(LCD_SPI, SPI_DataSize_8b);
- /* Enable LCD_SPI */
- SPI_Cmd(LCD_SPI, ENABLE);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Set GRAM write direction and BGR = 1 */
- /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
- /* AM = 1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- }
-}
-#endif /* USE_LCD_DrawBMP */
-
-/**
- * @brief Displays a full rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: rectangle height.
- * @param Width: rectangle width.
- * @retval None
- */
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
- LCD_SetTextColor(TextColor);
-
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-
- Width -= 2;
- Height--;
- Ypos--;
-
- LCD_SetTextColor(BackColor);
-
- while(Height--)
- {
- LCD_DrawLine(++Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- }
-
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Displays a full circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D; /* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
-
- CurX = 0;
- CurY = Radius;
-
- LCD_SetTextColor(BackColor);
-
- while (CurX <= CurY)
- {
- if(CurY > 0)
- {
- LCD_DrawLine(Xpos - CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- }
-
- if(CurX > 0)
- {
- LCD_DrawLine(Xpos - CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- }
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-
- LCD_SetTextColor(TextColor);
- LCD_DrawCircle(Xpos, Ypos, Radius);
-}
-
-/**
- * @brief Displays an uni line (between two points).
- * @param x1: specifies the point 1 x position.
- * @param y1: specifies the point 1 y position.
- * @param x2: specifies the point 2 x position.
- * @param y2: specifies the point 2 y position.
- * @retval None
- */
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
-{
- int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
- yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
- curpixel = 0;
-
- deltax = ABS(x2 - x1); /* The difference between the x's */
- deltay = ABS(y2 - y1); /* The difference between the y's */
- x = x1; /* Start x off at the first pixel */
- y = y1; /* Start y off at the first pixel */
-
- if (x2 >= x1) /* The x-values are increasing */
- {
- xinc1 = 1;
- xinc2 = 1;
- }
- else /* The x-values are decreasing */
- {
- xinc1 = -1;
- xinc2 = -1;
- }
-
- if (y2 >= y1) /* The y-values are increasing */
- {
- yinc1 = 1;
- yinc2 = 1;
- }
- else /* The y-values are decreasing */
- {
- yinc1 = -1;
- yinc2 = -1;
- }
-
- if (deltax >= deltay) /* There is at least one x-value for every y-value */
- {
- xinc1 = 0; /* Don't change the x when numerator >= denominator */
- yinc2 = 0; /* Don't change the y for every iteration */
- den = deltax;
- num = deltax / 2;
- numadd = deltay;
- numpixels = deltax; /* There are more x-values than y-values */
- }
- else /* There is at least one y-value for every x-value */
- {
- xinc2 = 0; /* Don't change the x for every iteration */
- yinc1 = 0; /* Don't change the y when numerator >= denominator */
- den = deltay;
- num = deltay / 2;
- numadd = deltax;
- numpixels = deltay; /* There are more y-values than x-values */
- }
-
- for (curpixel = 0; curpixel <= numpixels; curpixel++)
- {
- PutPixel(x, y); /* Draw the current pixel */
- num += numadd; /* Increase the numerator by the top of the fraction */
- if (num >= den) /* Check if numerator >= denominator */
- {
- num -= den; /* Calculate the new numerator value */
- x += xinc1; /* Change the x as appropriate */
- y += yinc1; /* Change the y as appropriate */
- }
- x += xinc2; /* Change the x as appropriate */
- y += yinc2; /* Change the y as appropriate */
- }
-}
-
-/**
- * @brief Displays an polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLine(pPoint Points, uint16_t PointCount)
-{
- int16_t X = 0, Y = 0;
-
- if(PointCount < 2)
- {
- return;
- }
-
- while(--PointCount)
- {
- X = Points->X;
- Y = Points->Y;
- Points++;
- LCD_DrawUniLine(X, Y, Points->X, Points->Y);
- }
-}
-
-/**
- * @brief Displays an relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @param Closed: specifies if the draw is closed or not.
- * 1: closed, 0 : not closed.
- * @retval None
- */
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed)
-{
- int16_t X = 0, Y = 0;
- pPoint First = Points;
-
- if(PointCount < 2)
- {
- return;
- }
- X = Points->X;
- Y = Points->Y;
- while(--PointCount)
- {
- Points++;
- LCD_DrawUniLine(X, Y, X + Points->X, Y + Points->Y);
- X = X + Points->X;
- Y = Y + Points->Y;
- }
- if(Closed)
- {
- LCD_DrawUniLine(First->X, First->Y, X, Y);
- }
-}
-
-/**
- * @brief Displays a closed polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLine(Points, PointCount);
- LCD_DrawUniLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
-}
-
-/**
- * @brief Displays a relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 0);
-}
-
-/**
- * @brief Displays a closed relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 1);
-}
-
-
-/**
- * @brief Displays a full polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount)
-{
- /* public-domain code by Darel Rex Finley, 2007 */
- uint16_t nodes = 0, nodeX[MAX_POLY_CORNERS], pixelX = 0, pixelY = 0, i = 0,
- j = 0, swap = 0;
- uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0;
-
- IMAGE_LEFT = IMAGE_RIGHT = Points->X;
- IMAGE_TOP= IMAGE_BOTTOM = Points->Y;
-
- for(i = 1; i < PointCount; i++)
- {
- pixelX = POLY_X(i);
- if(pixelX < IMAGE_LEFT)
- {
- IMAGE_LEFT = pixelX;
- }
- if(pixelX > IMAGE_RIGHT)
- {
- IMAGE_RIGHT = pixelX;
- }
-
- pixelY = POLY_Y(i);
- if(pixelY < IMAGE_TOP)
- {
- IMAGE_TOP = pixelY;
- }
- if(pixelY > IMAGE_BOTTOM)
- {
- IMAGE_BOTTOM = pixelY;
- }
- }
-
- LCD_SetTextColor(BackColor);
-
- /* Loop through the rows of the image. */
- for (pixelY = IMAGE_TOP; pixelY < IMAGE_BOTTOM; pixelY++)
- {
- /* Build a list of nodes. */
- nodes = 0; j = PointCount-1;
-
- for (i = 0; i < PointCount; i++)
- {
- if (POLY_Y(i)<(double) pixelY && POLY_Y(j)>=(double) pixelY || POLY_Y(j)<(double) pixelY && POLY_Y(i)>=(double) pixelY)
- {
- nodeX[nodes++]=(int) (POLY_X(i)+((pixelY-POLY_Y(i))*(POLY_X(j)-POLY_X(i)))/(POLY_Y(j)-POLY_Y(i)));
- }
- j = i;
- }
-
- /* Sort the nodes, via a simple "Bubble" sort. */
- i = 0;
- while (i < nodes-1)
- {
- if (nodeX[i]>nodeX[i+1])
- {
- swap = nodeX[i];
- nodeX[i] = nodeX[i+1];
- nodeX[i+1] = swap;
- if(i)
- {
- i--;
- }
- }
- else
- {
- i++;
- }
- }
-
- /* Fill the pixels between node pairs. */
- for (i = 0; i < nodes; i+=2)
- {
- if(nodeX[i] >= IMAGE_RIGHT)
- {
- break;
- }
- if(nodeX[i+1] > IMAGE_LEFT)
- {
- if (nodeX[i] < IMAGE_LEFT)
- {
- nodeX[i]=IMAGE_LEFT;
- }
- if(nodeX[i+1] > IMAGE_RIGHT)
- {
- nodeX[i+1] = IMAGE_RIGHT;
- }
- LCD_SetTextColor(BackColor);
- LCD_DrawLine(pixelY, nodeX[i+1], nodeX[i+1] - nodeX[i], LCD_DIR_HORIZONTAL);
- LCD_SetTextColor(TextColor);
- PutPixel(pixelY, nodeX[i+1]);
- PutPixel(pixelY, nodeX[i]);
- /* for (j=nodeX[i]; j<nodeX[i+1]; j++) PutPixel(j,pixelY); */
- }
- }
- }
-
- /* draw the edges */
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Reset LCD control line(/CS) and Send Start-Byte
- * @param Start_Byte: the Start-Byte to be sent
- * @retval None
- */
-void LCD_nCS_StartByte(uint8_t Start_Byte)
-{
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET);
-
- SPI_I2S_SendData(LCD_SPI, Start_Byte);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-}
-
-
-/**
- * @brief Writes index to select the LCD register.
- * @param LCD_Reg: address of the selected register.
- * @retval None
- */
-void LCD_WriteRegIndex(uint8_t LCD_Reg)
-{
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | SET_INDEX);
-
- /* Write 16-bit Reg Index (High Byte is 0) */
- SPI_I2S_SendData(LCD_SPI, 0x00);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- SPI_I2S_SendData(LCD_SPI, LCD_Reg);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the selected LCD ILI9320 register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-static void LCD_WriteRegILI9320(uint8_t LCD_Reg, uint16_t LCD_RegValue)
-{
- /* Write 16-bit Index (then Write Reg) */
- LCD_WriteRegIndex(LCD_Reg);
-
- /* Write 16-bit Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG);
-
- SPI_I2S_SendData(LCD_SPI, LCD_RegValue>>8);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- SPI_I2S_SendData(LCD_SPI, (LCD_RegValue & 0xFF));
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Reads the selected LCD Register.
- * @param LCD_Reg: address of the selected register.
- * @retval LCD Register Value.
- */
-uint16_t LCD_ReadReg(uint8_t LCD_Reg)
-{
- uint16_t tmp = 0;
- uint8_t i = 0;
-
- /* LCD_SPI prescaler: 4 */
- LCD_SPI->CR1 &= 0xFFC7;
- LCD_SPI->CR1 |= 0x0008;
- /* Write 16-bit Index (then Read Reg) */
- LCD_WriteRegIndex(LCD_Reg);
- /* Read 16-bit Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_READ_REG);
-
- for(i = 0; i < 5; i++)
- {
- SPI_I2S_SendData(LCD_SPI, 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- /* One byte of invalid dummy data read after the start byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
- SPI_I2S_ReceiveData(LCD_SPI);
- }
-
- SPI_I2S_SendData(LCD_SPI, 0xFF);
-
- /* Read upper byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- /* Read lower byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
- tmp = SPI_I2S_ReceiveData(LCD_SPI);
-
-
- SPI_I2S_SendData(LCD_SPI, 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- /* Read lower byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
-
- tmp = ((tmp & 0xFF) << 8) | SPI_I2S_ReceiveData(LCD_SPI);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-
- /* LCD_SPI prescaler: 2 */
- LCD_SPI->CR1 &= 0xFFC7;
-
- return tmp;
-}
-
-
-/**
- * @brief Prepare to write to the LCD RAM.
- * @param None
- * @retval None
- */
-void LCD_WriteRAM_Prepare(void)
-{
- LCD_WriteRegIndex(LCD_REG_34); /* Select GRAM Reg */
-
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG);
-}
-
-
-/**
- * @brief Writes 1 word to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAMWord(uint16_t RGB_Code)
-{
-
- LCD_WriteRAM_Prepare();
-
- LCD_WriteRAM(RGB_Code);
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the selected LCD HX8312 register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-static void LCD_WriteRegHX8312(uint8_t LCD_Reg, uint8_t LCD_RegValue)
-{
- uint16_t tmp = 0;
-
- LCD_CtrlLinesWrite(LCD_NWR_GPIO_PORT, LCD_NWR_PIN, Bit_RESET);
- LCD_CtrlLinesWrite(LCD_RS_GPIO_PORT, LCD_RS_PIN, Bit_RESET);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET);
-
- tmp = LCD_Reg << 8;
- tmp |= LCD_RegValue;
-
- SPI_I2S_SendData(LCD_SPI, tmp);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the selected LCD register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRegILI9320(LCD_Reg, LCD_RegValue);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRegHX8312(LCD_Reg, ((uint8_t)LCD_RegValue));
- }
-}
-
-
-/**
- * @brief Writes to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAM(uint16_t RGB_Code)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- SPI_I2S_SendData(LCD_SPI, RGB_Code >> 8);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- SPI_I2S_SendData(LCD_SPI, RGB_Code & 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- }
-
- if(LCDType == LCD_HX8312)
- {
- LCD_CtrlLinesWrite(LCD_NWR_GPIO_PORT, LCD_NWR_PIN, Bit_RESET);
- LCD_CtrlLinesWrite(LCD_RS_GPIO_PORT, LCD_RS_PIN, Bit_SET);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET);
- SPI_I2S_SendData(LCD_SPI, RGB_Code);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-}
-
-
-/**
- * @brief Power on the LCD.
- * @param None
- * @retval None
- */
-void LCD_PowerOn(void)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Power On sequence ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* delay 50 ms */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- }
- else if(LCDType == LCD_HX8312)
- {
- /* Power On Set */
- LCD_WriteReg(LCD_REG_28, 0x73);
- LCD_WriteReg(LCD_REG_36, 0x74);
- LCD_WriteReg(LCD_REG_30, 0x01);
- LCD_WriteReg(LCD_REG_24, 0xC1);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_24, 0xE1);
- LCD_WriteReg(LCD_REG_24, 0xF1);
- _delay_(6); /* Delay 60 ms */
- LCD_WriteReg(LCD_REG_24, 0xF5);
- _delay_(6); /* Delay 60 ms */
- LCD_WriteReg(LCD_REG_27, 0x09);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_31, 0x11);
- LCD_WriteReg(LCD_REG_32, 0x0E);
- LCD_WriteReg(LCD_REG_30, 0x81);
- _delay_(1); /* Delay 10 ms */
- }
-}
-
-
-/**
- * @brief Enables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOn(void)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Display On */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteReg(LCD_REG_1, 0x50);
- LCD_WriteReg(LCD_REG_5, 0x04);
- /* Display On */
- LCD_WriteReg(LCD_REG_0, 0x80);
- LCD_WriteReg(LCD_REG_59, 0x01);
- _delay_(4); /* Delay 40 ms */
- LCD_WriteReg(LCD_REG_0, 0x20);
- }
-}
-
-
-/**
- * @brief Disables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOff(void)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Display Off */
- LCD_WriteReg(LCD_REG_7, 0x0);
- }
- else if(LCDType == LCD_HX8312)
- {
- /* Display Off */
- LCD_WriteReg(LCD_REG_0, 0xA0);
- _delay_(4); /* Delay 40 ms */
- LCD_WriteReg(LCD_REG_59, 0x00);
- }
-}
-
-
-/**
- * @brief Configures LCD control lines in Output Push-Pull mode.
- * @param None
- * @retval None
- */
-void LCD_CtrlLinesConfig(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(LCD_NCS_GPIO_CLK | LCD_NWR_GPIO_CLK | LCD_RS_GPIO_CLK, ENABLE);
-
- /* Configure NCS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure NWR(RNW), RS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_RS_PIN;
- GPIO_Init(LCD_RS_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_NWR_PIN;
- GPIO_Init(LCD_NWR_GPIO_PORT, &GPIO_InitStructure);
-
- LCD_CtrlLinesWrite(LCD_NWR_GPIO_PORT, LCD_NWR_PIN, Bit_SET);
- LCD_CtrlLinesWrite(LCD_RS_GPIO_PORT, LCD_RS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Sets or reset LCD control lines.
- * @param GPIOx: where x can be B or D to select the GPIO peripheral.
- * @param CtrlPins: the Control line.
- * This parameter can be:
- * @arg LCD_NCS_PIN: Chip Select pin
- * @arg LCD_NWR_PIN: Read/Write Selection pin
- * @arg LCD_RS_PIN: Register/RAM Selection pin
- * @param BitVal: specifies the value to be written to the selected bit.
- * This parameter can be:
- * @arg Bit_RESET: to clear the port pin
- * @arg Bit_SET: to set the port pin
- * @retval None
- */
-void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, BitAction BitVal)
-{
- /* Set or Reset the control line */
- GPIO_WriteBit(GPIOx, CtrlPins, BitVal);
-}
-
-
-/**
- * @brief Configures the LCD_SPI interface.
- * @param None
- * @retval None
- */
-void LCD_SPIConfig(void)
-{
- SPI_InitTypeDef SPI_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(LCD_SPI_SCK_GPIO_CLK | LCD_SPI_MISO_GPIO_CLK | LCD_SPI_MOSI_GPIO_CLK, ENABLE);
-
- /* Enable SPI clock */
- RCC_APB1PeriphClockCmd(LCD_SPI_CLK, ENABLE);
-
- /* Configure SPI pins: SCK, MISO and MOSI */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN;
- GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
- GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- SPI_I2S_DeInit(LCD_SPI);
-
- /* SPI Config */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- }
- else if(LCDType == LCD_HX8312)
- {
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
- }
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
-
- SPI_Init(LCD_SPI, &SPI_InitStructure);
-
- /* SPI enable */
- SPI_Cmd(LCD_SPI, ENABLE);
-}
-
-/**
- * @brief Displays a pixel.
- * @param x: pixel x.
- * @param y: pixel y.
- * @retval None
- */
-static void PutPixel(int16_t x, int16_t y)
-{
- if(x < 0 || x > 239 || y < 0 || y > 319)
- {
- return;
- }
- LCD_DrawLine(x, y, 1, LCD_DIR_HORIZONTAL);
-}
-
-#ifndef USE_Delay
-/**
- * @brief Inserts a delay time.
- * @param nCount: specifies the delay time length.
- * @retval None
- */
-static void delay(vu32 nCount)
-{
- vu32 index = 0;
- for(index = (34000 * nCount); index != 0; index--)
- {
- }
-}
-#endif /* USE_Delay*/
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_lcd.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_lcd.h
deleted file mode 100644
index 638c9a0..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100B_EVAL/stm32100b_eval_lcd.h
+++ /dev/null
@@ -1,393 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100b_eval_lcd.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm32100b_eval_lcd
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32100B_EVAL_LCD_H
-#define __STM32100B_EVAL_LCD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-#include "../Common/fonts.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100B_EVAL
- * @{
- */
-
-/** @addtogroup STM32100B_EVAL_LCD
- * @{
- */
-
-
-/** @defgroup STM32100B_EVAL_LCD_Exported_Types
- * @{
- */
-typedef struct
-{
- int16_t X;
- int16_t Y;
-} Point, * pPoint;
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Exported_Constants
- * @{
- */
-
-/**
- * @brief Uncomment the line below if you want to use LCD_DrawBMP function to
- * display a bitmap picture on the LCD. This function assumes that the bitmap
- * file is loaded in the SPI Flash (mounted on STM32100B-EVAL board), however
- * user can tailor it according to his application hardware requirement.
- */
-/*#define USE_LCD_DrawBMP*/
-
-/**
- * @brief Uncomment the line below if you want to use user defined Delay function
- * (for precise timing), otherwise default _delay_ function defined within
- * this driver is used (less precise timing).
- */
-/* #define USE_Delay */
-
-#ifdef USE_Delay
-#include "main.h"
-
- #define _delay_ Delay /* !< User can provide more timing precise _delay_ function
- (with 10ms time base), using SysTick for example */
-#else
- #define _delay_ delay /* !< Default _delay_ function with less precise timing */
-#endif
-
-
-/**
- * @brief LCD Control pins
- */
-#define LCD_NCS_PIN GPIO_Pin_2
-#define LCD_NCS_GPIO_PORT GPIOB
-#define LCD_NCS_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LCD_NWR_PIN GPIO_Pin_15
-#define LCD_NWR_GPIO_PORT GPIOD
-#define LCD_NWR_GPIO_CLK RCC_APB2Periph_GPIOD
-#define LCD_RS_PIN GPIO_Pin_7
-#define LCD_RS_GPIO_PORT GPIOD
-#define LCD_RS_GPIO_CLK RCC_APB2Periph_GPIOD
-
-/**
- * @brief LCD SPI Interface pins
- */
-#define LCD_SPI SPI2
-#define LCD_SPI_CLK RCC_APB1Periph_SPI2
-#define LCD_SPI_SCK_PIN GPIO_Pin_13
-#define LCD_SPI_SCK_GPIO_PORT GPIOB
-#define LCD_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LCD_SPI_MISO_PIN GPIO_Pin_14
-#define LCD_SPI_MISO_GPIO_PORT GPIOB
-#define LCD_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LCD_SPI_MOSI_PIN GPIO_Pin_15
-#define LCD_SPI_MOSI_GPIO_PORT GPIOB
-#define LCD_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOB
-
-
-/**
- * @brief LCD Registers
- */
-#define LCD_REG_0 0x00
-#define LCD_REG_1 0x01
-#define LCD_REG_2 0x02
-#define LCD_REG_3 0x03
-#define LCD_REG_4 0x04
-#define LCD_REG_5 0x05
-#define LCD_REG_6 0x06
-#define LCD_REG_7 0x07
-#define LCD_REG_8 0x08
-#define LCD_REG_9 0x09
-#define LCD_REG_10 0x0A
-#define LCD_REG_12 0x0C
-#define LCD_REG_13 0x0D
-#define LCD_REG_14 0x0E
-#define LCD_REG_15 0x0F
-#define LCD_REG_16 0x10
-#define LCD_REG_17 0x11
-#define LCD_REG_18 0x12
-#define LCD_REG_19 0x13
-#define LCD_REG_20 0x14
-#define LCD_REG_21 0x15
-#define LCD_REG_22 0x16
-#define LCD_REG_23 0x17
-#define LCD_REG_24 0x18
-#define LCD_REG_25 0x19
-#define LCD_REG_26 0x1A
-#define LCD_REG_27 0x1B
-#define LCD_REG_28 0x1C
-#define LCD_REG_29 0x1D
-#define LCD_REG_30 0x1E
-#define LCD_REG_31 0x1F
-#define LCD_REG_32 0x20
-#define LCD_REG_33 0x21
-#define LCD_REG_34 0x22
-#define LCD_REG_36 0x24
-#define LCD_REG_37 0x25
-#define LCD_REG_40 0x28
-#define LCD_REG_41 0x29
-#define LCD_REG_43 0x2B
-#define LCD_REG_45 0x2D
-#define LCD_REG_48 0x30
-#define LCD_REG_49 0x31
-#define LCD_REG_50 0x32
-#define LCD_REG_51 0x33
-#define LCD_REG_52 0x34
-#define LCD_REG_53 0x35
-#define LCD_REG_54 0x36
-#define LCD_REG_55 0x37
-#define LCD_REG_56 0x38
-#define LCD_REG_57 0x39
-#define LCD_REG_59 0x3B
-#define LCD_REG_60 0x3C
-#define LCD_REG_61 0x3D
-#define LCD_REG_62 0x3E
-#define LCD_REG_63 0x3F
-#define LCD_REG_64 0x40
-#define LCD_REG_65 0x41
-#define LCD_REG_66 0x42
-#define LCD_REG_67 0x43
-#define LCD_REG_68 0x44
-#define LCD_REG_69 0x45
-#define LCD_REG_70 0x46
-#define LCD_REG_71 0x47
-#define LCD_REG_72 0x48
-#define LCD_REG_73 0x49
-#define LCD_REG_74 0x4A
-#define LCD_REG_75 0x4B
-#define LCD_REG_76 0x4C
-#define LCD_REG_77 0x4D
-#define LCD_REG_78 0x4E
-#define LCD_REG_79 0x4F
-#define LCD_REG_80 0x50
-#define LCD_REG_81 0x51
-#define LCD_REG_82 0x52
-#define LCD_REG_83 0x53
-#define LCD_REG_96 0x60
-#define LCD_REG_97 0x61
-#define LCD_REG_106 0x6A
-#define LCD_REG_118 0x76
-#define LCD_REG_128 0x80
-#define LCD_REG_129 0x81
-#define LCD_REG_130 0x82
-#define LCD_REG_131 0x83
-#define LCD_REG_132 0x84
-#define LCD_REG_133 0x85
-#define LCD_REG_134 0x86
-#define LCD_REG_135 0x87
-#define LCD_REG_136 0x88
-#define LCD_REG_137 0x89
-#define LCD_REG_139 0x8B
-#define LCD_REG_140 0x8C
-#define LCD_REG_141 0x8D
-#define LCD_REG_143 0x8F
-#define LCD_REG_144 0x90
-#define LCD_REG_145 0x91
-#define LCD_REG_146 0x92
-#define LCD_REG_147 0x93
-#define LCD_REG_148 0x94
-#define LCD_REG_149 0x95
-#define LCD_REG_150 0x96
-#define LCD_REG_151 0x97
-#define LCD_REG_152 0x98
-#define LCD_REG_153 0x99
-#define LCD_REG_154 0x9A
-#define LCD_REG_157 0x9D
-#define LCD_REG_192 0xC0
-#define LCD_REG_193 0xC1
-#define LCD_REG_227 0xE3
-#define LCD_REG_229 0xE5
-#define LCD_REG_231 0xE7
-#define LCD_REG_239 0xEF
-
-
-/**
- * @brief LCD color
- */
-#define LCD_COLOR_WHITE 0xFFFF
-#define LCD_COLOR_BLACK 0x0000
-#define LCD_COLOR_GREY 0xF7DE
-#define LCD_COLOR_BLUE 0x001F
-#define LCD_COLOR_BLUE2 0x051F
-#define LCD_COLOR_RED 0xF800
-#define LCD_COLOR_MAGENTA 0xF81F
-#define LCD_COLOR_GREEN 0x07E0
-#define LCD_COLOR_CYAN 0x7FFF
-#define LCD_COLOR_YELLOW 0xFFE0
-
-/**
- * @brief LCD Lines depending on the chosen fonts.
- */
-#define LCD_LINE_0 LINE(0)
-#define LCD_LINE_1 LINE(1)
-#define LCD_LINE_2 LINE(2)
-#define LCD_LINE_3 LINE(3)
-#define LCD_LINE_4 LINE(4)
-#define LCD_LINE_5 LINE(5)
-#define LCD_LINE_6 LINE(6)
-#define LCD_LINE_7 LINE(7)
-#define LCD_LINE_8 LINE(8)
-#define LCD_LINE_9 LINE(9)
-#define LCD_LINE_10 LINE(10)
-#define LCD_LINE_11 LINE(11)
-#define LCD_LINE_12 LINE(12)
-#define LCD_LINE_13 LINE(13)
-#define LCD_LINE_14 LINE(14)
-#define LCD_LINE_15 LINE(15)
-#define LCD_LINE_16 LINE(16)
-#define LCD_LINE_17 LINE(17)
-#define LCD_LINE_18 LINE(18)
-#define LCD_LINE_19 LINE(19)
-#define LCD_LINE_20 LINE(20)
-#define LCD_LINE_21 LINE(21)
-#define LCD_LINE_22 LINE(22)
-#define LCD_LINE_23 LINE(23)
-#define LCD_LINE_24 LINE(24)
-#define LCD_LINE_25 LINE(25)
-#define LCD_LINE_26 LINE(26)
-#define LCD_LINE_27 LINE(27)
-#define LCD_LINE_28 LINE(28)
-#define LCD_LINE_29 LINE(29)
-
-
-/**
- * @brief LCD default font
- */
-#define LCD_DEFAULT_FONT Font16x24
-
-/**
- * @brief LCD Direction
- */
-#define LCD_DIR_HORIZONTAL 0x0000
-#define LCD_DIR_VERTICAL 0x0001
-
-/**
- * @brief LCD Size (Width and Height)
- */
-#define LCD_PIXEL_WIDTH 0x0140
-#define LCD_PIXEL_HEIGHT 0x00F0
-
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Exported_Macros
- * @{
- */
-#define ASSEMBLE_RGB(R, G, B) ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3))
-
-/**
- * @}
- */
-
-/** @defgroup STM32100B_EVAL_LCD_Exported_Functions
- * @{
- */
-void LCD_DeInit(void);
-void LCD_Setup(void);
-void STM32100B_LCD_Init(void);
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
-void LCD_SetTextColor(__IO uint16_t Color);
-void LCD_SetBackColor(__IO uint16_t Color);
-void LCD_ClearLine(uint8_t Line);
-void LCD_Clear(uint16_t Color);
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos);
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c);
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii);
-void LCD_SetFont(sFONT *fonts);
-sFONT *LCD_GetFont(void);
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr);
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_WindowModeDisable(void);
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction);
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_DrawMonoPict(const uint32_t *Pict);
-void LCD_DrawBMP(uint32_t BmpAddress);
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_PolyLine(pPoint Points, uint16_t PointCount);
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount);
-void LCD_nCS_StartByte(uint8_t Start_Byte);
-void LCD_WriteRegIndex(uint8_t LCD_Reg);
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
-void LCD_WriteRAM_Prepare(void);
-void LCD_WriteRAMWord(uint16_t RGB_Code);
-uint16_t LCD_ReadReg(uint8_t LCD_Reg);
-void LCD_WriteRAM(uint16_t RGB_Code);
-void LCD_PowerOn(void);
-void LCD_DisplayOn(void);
-void LCD_DisplayOff(void);
-
-
-void LCD_CtrlLinesConfig(void);
-void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, BitAction BitVal);
-void LCD_SPIConfig(void);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32100B_EVAL_LCD_H */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval.c
deleted file mode 100644
index d2adb8c..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval.c
+++ /dev/null
@@ -1,762 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100e_eval.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides
- * - set of firmware functions to manage Leds, push-button and COM ports
- * - low level initialization functions for SD card (on SDIO), SPI serial
- * flash (sFLASH) and temperature sensor (LM75)
- * available on STM32100E-EVAL evaluation board from STMicroelectronics.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32100e_eval.h"
-#include "stm32f10x_spi.h"
-#include "stm32f10x_i2c.h"
-#include "stm32f10x_dma.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100E_EVAL
- * @{
- */
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL
- * @brief This file provides firmware functions to manage Leds, push-buttons,
- * COM ports, SD card on SDIO, serial flash (sFLASH), serial EEPROM (sEE)
- * and temperature sensor (LM75) available on STM32100E-EVAL evaluation
- * board from STMicroelectronics.
- * @{
- */
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_Variables
- * @{
- */
-GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT,
- LED4_GPIO_PORT};
-const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN,
- LED4_PIN};
-const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK,
- LED4_GPIO_CLK};
-
-GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, TAMPER_BUTTON_GPIO_PORT,
- KEY_BUTTON_GPIO_PORT, RIGHT_BUTTON_GPIO_PORT,
- LEFT_BUTTON_GPIO_PORT, UP_BUTTON_GPIO_PORT,
- DOWN_BUTTON_GPIO_PORT, SEL_BUTTON_GPIO_PORT};
-
-const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, TAMPER_BUTTON_PIN,
- KEY_BUTTON_PIN, RIGHT_BUTTON_PIN,
- LEFT_BUTTON_PIN, UP_BUTTON_PIN,
- DOWN_BUTTON_PIN, SEL_BUTTON_PIN};
-
-const uint32_t BUTTON_CLK[BUTTONn] = {WAKEUP_BUTTON_GPIO_CLK, TAMPER_BUTTON_GPIO_CLK,
- KEY_BUTTON_GPIO_CLK, RIGHT_BUTTON_GPIO_CLK,
- LEFT_BUTTON_GPIO_CLK, UP_BUTTON_GPIO_CLK,
- DOWN_BUTTON_GPIO_CLK, SEL_BUTTON_GPIO_CLK};
-
-const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {WAKEUP_BUTTON_EXTI_LINE,
- TAMPER_BUTTON_EXTI_LINE,
- KEY_BUTTON_EXTI_LINE,
- RIGHT_BUTTON_EXTI_LINE,
- LEFT_BUTTON_EXTI_LINE,
- UP_BUTTON_EXTI_LINE,
- DOWN_BUTTON_EXTI_LINE,
- SEL_BUTTON_EXTI_LINE};
-
-const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PORT_SOURCE,
- TAMPER_BUTTON_EXTI_PORT_SOURCE,
- KEY_BUTTON_EXTI_PORT_SOURCE,
- RIGHT_BUTTON_EXTI_PORT_SOURCE,
- LEFT_BUTTON_EXTI_PORT_SOURCE,
- UP_BUTTON_EXTI_PORT_SOURCE,
- DOWN_BUTTON_EXTI_PORT_SOURCE,
- SEL_BUTTON_EXTI_PORT_SOURCE};
-
-const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PIN_SOURCE,
- TAMPER_BUTTON_EXTI_PIN_SOURCE,
- KEY_BUTTON_EXTI_PIN_SOURCE,
- RIGHT_BUTTON_EXTI_PIN_SOURCE,
- LEFT_BUTTON_EXTI_PIN_SOURCE,
- UP_BUTTON_EXTI_PIN_SOURCE,
- DOWN_BUTTON_EXTI_PIN_SOURCE,
- SEL_BUTTON_EXTI_PIN_SOURCE};
-
-const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, TAMPER_BUTTON_EXTI_IRQn,
- KEY_BUTTON_EXTI_IRQn, RIGHT_BUTTON_EXTI_IRQn,
- LEFT_BUTTON_EXTI_IRQn, UP_BUTTON_EXTI_IRQn,
- DOWN_BUTTON_EXTI_IRQn, SEL_BUTTON_EXTI_IRQn};
-
-USART_TypeDef* COM_USART[COMn] = {EVAL_COM1, EVAL_COM2};
-
-GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT, EVAL_COM2_TX_GPIO_PORT};
-
-GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT, EVAL_COM2_RX_GPIO_PORT};
-
-const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK, EVAL_COM2_CLK};
-
-const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK, EVAL_COM2_TX_GPIO_CLK};
-
-const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK, EVAL_COM2_RX_GPIO_CLK};
-
-const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN, EVAL_COM2_TX_PIN};
-
-const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN};
-
-DMA_InitTypeDef sEEDMA_InitStructure;
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Private_Functions
- * @{
- */
-
-/**
- * @brief Configures LED GPIO.
- * @param Led: Specifies the Led to be configured.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIO_LED Clock */
- RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);
-
- /* Configure the GPIO_LED pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
- GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);
-}
-
-/**
- * @brief Turns selected LED On.
- * @param Led: Specifies the Led to be set on.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOn(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];
-}
-
-/**
- * @brief Turns selected LED Off.
- * @param Led: Specifies the Led to be set off.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOff(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BRR = GPIO_PIN[Led];
-}
-
-/**
- * @brief Toggles the selected LED.
- * @param Led: Specifies the Led to be toggled.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDToggle(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];
-}
-
-/**
- * @brief Configures Button GPIO and EXTI Line.
- * @param Button: Specifies the Button to be configured.
- * This parameter can be one of following parameters:
- * @arg BUTTON_WAKEUP: Wakeup Push Button
- * @arg BUTTON_TAMPER: Tamper Push Button
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @param Button_Mode: Specifies Button mode.
- * This parameter can be one of following parameters:
- * @arg BUTTON_MODE_GPIO: Button will be used as simple IO
- * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt
- * generation capability
- * @retval None
- */
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* Enable the BUTTON Clock */
- RCC_APB2PeriphClockCmd(BUTTON_CLK[Button] | RCC_APB2Periph_AFIO, ENABLE);
-
- /* Configure Button pin as input floating */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button];
- GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);
-
-
- if (Button_Mode == BUTTON_MODE_EXTI)
- {
- /* Connect Button EXTI Line to Button GPIO Pin */
- GPIO_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);
-
- /* Configure Button EXTI line */
- EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button];
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
-
- if(Button != BUTTON_WAKEUP)
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- }
- else
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- }
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /* Enable and set Button EXTI Interrupt to the lowest priority */
- NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button];
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
- NVIC_Init(&NVIC_InitStructure);
- }
-}
-
-/**
- * @brief Returns the selected Button state.
- * @param Button: Specifies the Button to be checked.
- * This parameter can be one of following parameters:
- * @arg BUTTON_WAKEUP: Wakeup Push Button
- * @arg BUTTON_TAMPER: Tamper Push Button
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @retval The Button GPIO pin value.
- */
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button)
-{
- return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);
-}
-
-/**
- * @brief Configures COM port.
- * @param COM: Specifies the COM port to be configured.
- * This parameter can be one of following parameters:
- * @arg COM1
- * @arg COM2
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that
- * contains the configuration information for the specified USART peripheral.
- * @retval None
- */
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM] | RCC_APB2Periph_AFIO, ENABLE);
-
- /* Enable UART clock */
- if (COM == COM1)
- {
- RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
- }
- else
- {
- RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
- }
-
- /* Configure USART Tx as alternate function push-pull */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);
-
- /* Configure USART Rx as input floating */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];
- GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);
-
- /* USART configuration */
- USART_Init(COM_USART[COM], USART_InitStruct);
-
- /* Enable USART */
- USART_Cmd(COM_USART[COM], ENABLE);
-}
-
-/**
- * @brief DeInitializes the SD/SD communication.
- * @param None
- * @retval None
- */
-void SD_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- SPI_Cmd(SD_SPI, DISABLE); /*!< SD_SPI disable */
- SPI_I2S_DeInit(SD_SPI); /*!< DeInitializes the SD_SPI */
-
- /*!< SD_SPI Periph clock disable */
- RCC_APB1PeriphClockCmd(SD_SPI_CLK, DISABLE);
-
- /*!< Configure SD_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
- GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
- GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
- GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
- GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the SD_SPI and CS pins.
- * @param None
- * @retval None
- */
-void SD_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- SPI_InitTypeDef SPI_InitStructure;
-
- /*!< SD_SPI_CS_GPIO, SD_SPI_MOSI_GPIO, SD_SPI_MISO_GPIO, SD_SPI_DETECT_GPIO
- and SD_SPI_SCK_GPIO Periph clock enable */
- RCC_APB2PeriphClockCmd(SD_CS_GPIO_CLK | SD_SPI_MOSI_GPIO_CLK | SD_SPI_MISO_GPIO_CLK |
- SD_SPI_SCK_GPIO_CLK | SD_DETECT_GPIO_CLK, ENABLE);
-
- /*!< SD_SPI Periph clock enable */
- RCC_APB1PeriphClockCmd(SD_SPI_CLK, ENABLE);
-
- /*!< Configure SD_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
- GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
- GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
- GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< SD_SPI Config */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_CRCPolynomial = 7;
- SPI_Init(SD_SPI, &SPI_InitStructure);
-
- SPI_Cmd(SD_SPI, ENABLE); /*!< SD_SPI enable */
-}
-
-/**
- * @brief DeInitializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* sEE_I2C Peripheral Disable */
- I2C_Cmd(sEE_I2C, DISABLE);
-
- /* sEE_I2C DeInit */
- I2C_DeInit(sEE_I2C);
-
- /*!< sEE_I2C Periph clock disable */
- RCC_APB1PeriphClockCmd(sEE_I2C_CLK, DISABLE);
-
- /*!< GPIO configuration */
- /*!< Configure sEE_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sEE_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;
- GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure and enable I2C DMA TX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_TX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Configure and enable I2C DMA RX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_RX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Disable and Deinitialize the DMA channels */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_TX, DISABLE);
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_RX, DISABLE);
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_TX);
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_RX);
-}
-
-/**
- * @brief Initializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /*!< sEE_I2C_SCL_GPIO_CLK and sEE_I2C_SDA_GPIO_CLK Periph clock enable */
- RCC_APB2PeriphClockCmd(sEE_I2C_SCL_GPIO_CLK | sEE_I2C_SDA_GPIO_CLK, ENABLE);
-
- /*!< sEE_I2C Periph clock enable */
- RCC_APB1PeriphClockCmd(sEE_I2C_CLK, ENABLE);
-
- /*!< GPIO configuration */
- /*!< Configure sEE_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
- GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sEE_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;
- GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure and enable I2C DMA TX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_TX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Configure and enable I2C DMA RX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_RX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_Init(&NVIC_InitStructure);
-
- /*!< I2C DMA TX and RX channels configuration */
- /* Enable the DMA clock */
- RCC_AHBPeriphClockCmd(sEE_I2C_DMA_CLK, ENABLE);
-
- /* I2C TX DMA Channel configuration */
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_TX);
- sEEDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)sEE_I2C_DR_Address;
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)0; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_BufferSize = 0xFFFF; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- sEEDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- sEEDMA_InitStructure.DMA_PeripheralDataSize = DMA_MemoryDataSize_Byte;
- sEEDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- sEEDMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
- sEEDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
- sEEDMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
- DMA_Init(sEE_I2C_DMA_CHANNEL_TX, &sEEDMA_InitStructure);
-
- /* I2C RX DMA Channel configuration */
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_RX);
- DMA_Init(sEE_I2C_DMA_CHANNEL_RX, &sEEDMA_InitStructure);
-
- /* Enable the DMA Channels Interrupts */
- DMA_ITConfig(sEE_I2C_DMA_CHANNEL_TX, DMA_IT_TC, ENABLE);
- DMA_ITConfig(sEE_I2C_DMA_CHANNEL_RX, DMA_IT_TC, ENABLE);
-}
-
-/**
- * @brief Initializes DMA channel used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_DMAConfig(uint32_t pBuffer, uint32_t BufferSize, uint32_t Direction)
-{
- /* Initialize the DMA with the new parameters */
- if (Direction == sEE_DIRECTION_TX)
- {
- /* Configure the DMA Tx Channel with the buffer address and the buffer size */
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pBuffer;
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
- sEEDMA_InitStructure.DMA_BufferSize = (uint32_t)BufferSize;
- DMA_Init(sEE_I2C_DMA_CHANNEL_TX, &sEEDMA_InitStructure);
- }
- else
- {
- /* Configure the DMA Rx Channel with the buffer address and the buffer size */
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pBuffer;
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
- sEEDMA_InitStructure.DMA_BufferSize = (uint32_t)BufferSize;
- DMA_Init(sEE_I2C_DMA_CHANNEL_RX, &sEEDMA_InitStructure);
- }
-}
-
-/**
- * @brief DeInitializes the peripherals used by the SPI FLASH driver.
- * @param None
- * @retval None
- */
-void sFLASH_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< Disable the sFLASH_SPI */
- SPI_Cmd(sFLASH_SPI, DISABLE);
-
- /*!< DeInitializes the sFLASH_SPI */
- SPI_I2S_DeInit(sFLASH_SPI);
-
- /*!< sFLASH_SPI Periph clock disable */
- RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, DISABLE);
-
- /*!< Configure sFLASH_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;
- GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;
- GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
- GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
- GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the peripherals used by the SPI FLASH driver.
- * @param None
- * @retval None
- */
-void sFLASH_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< sFLASH_SPI_CS_GPIO, sFLASH_SPI_MOSI_GPIO, sFLASH_SPI_MISO_GPIO
- and sFLASH_SPI_SCK_GPIO Periph clock enable */
- RCC_APB2PeriphClockCmd(sFLASH_CS_GPIO_CLK | sFLASH_SPI_MOSI_GPIO_CLK | sFLASH_SPI_MISO_GPIO_CLK |
- sFLASH_SPI_SCK_GPIO_CLK, ENABLE);
-
- /*!< sFLASH_SPI Periph clock enable */
- RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, ENABLE);
-
- /*!< Configure sFLASH_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;
- GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
- GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief DeInitializes the LM75_I2C.
- * @param None
- * @retval None
- */
-void LM75_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< Disable LM75_I2C */
- I2C_Cmd(LM75_I2C, DISABLE);
- /*!< DeInitializes the LM75_I2C */
- I2C_DeInit(LM75_I2C);
-
- /*!< LM75_I2C Periph clock disable */
- RCC_APB1PeriphClockCmd(LM75_I2C_CLK, DISABLE);
-
- /*!< Configure LM75_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;
- GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pin: SMBUS ALERT */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;
- GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the LM75_I2C..
- * @param None
- * @retval None
- */
-void LM75_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LM75_I2C Periph clock enable */
- RCC_APB1PeriphClockCmd(LM75_I2C_CLK, ENABLE);
-
- /*!< LM75_I2C_SCL_GPIO_CLK, LM75_I2C_SDA_GPIO_CLK
- and LM75_I2C_SMBUSALERT_GPIO_CLK Periph clock enable */
- RCC_APB2PeriphClockCmd(LM75_I2C_SCL_GPIO_CLK | LM75_I2C_SDA_GPIO_CLK |
- LM75_I2C_SMBUSALERT_GPIO_CLK, ENABLE);
-
- /*!< Configure LM75_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
- GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;
- GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pin: SMBUS ALERT */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval.h
deleted file mode 100644
index fc6bff2..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval.h
+++ /dev/null
@@ -1,393 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100e_eval.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains definitions for STM32100E_EVAL's Leds, push-buttons
- * COM ports, sFLASH (on SPI) and Temperature Sensor LM75 (on I2C)
- * hardware resources.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32100E_EVAL_H
-#define __STM32100E_EVAL_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100E_EVAL
- * @{
- */
-
-/** @addtogroup STM32100E_EVAL_LOW_LEVEL
- * @{
- */
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Exported_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Exported_Constants
- * @{
- */
-/** @addtogroup STM32100E_EVAL_LOW_LEVEL_LED
- * @{
- */
-#define LEDn 4
-
-#define LED1_PIN GPIO_Pin_6
-#define LED1_GPIO_PORT GPIOF
-#define LED1_GPIO_CLK RCC_APB2Periph_GPIOF
-
-#define LED2_PIN GPIO_Pin_7
-#define LED2_GPIO_PORT GPIOF
-#define LED2_GPIO_CLK RCC_APB2Periph_GPIOF
-
-#define LED3_PIN GPIO_Pin_8
-#define LED3_GPIO_PORT GPIOF
-#define LED3_GPIO_CLK RCC_APB2Periph_GPIOF
-
-#define LED4_PIN GPIO_Pin_9
-#define LED4_GPIO_PORT GPIOF
-#define LED4_GPIO_CLK RCC_APB2Periph_GPIOF
-
-/**
- * @}
- */
-
-/** @addtogroup STM32100E_EVAL_LOW_LEVEL_BUTTON
- * @{
- */
-#define BUTTONn 8
-
-/**
- * @brief Wakeup push-button
- */
-#define WAKEUP_BUTTON_PIN GPIO_Pin_0
-#define WAKEUP_BUTTON_GPIO_PORT GPIOA
-#define WAKEUP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOA
-#define WAKEUP_BUTTON_EXTI_LINE EXTI_Line0
-#define WAKEUP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOA
-#define WAKEUP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource0
-#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn
-/**
- * @brief Tamper push-button
- */
-#define TAMPER_BUTTON_PIN GPIO_Pin_13
-#define TAMPER_BUTTON_GPIO_PORT GPIOC
-#define TAMPER_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOC
-#define TAMPER_BUTTON_EXTI_LINE EXTI_Line13
-#define TAMPER_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOC
-#define TAMPER_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource13
-#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Key push-button
- */
-#define KEY_BUTTON_PIN GPIO_Pin_8
-#define KEY_BUTTON_GPIO_PORT GPIOG
-#define KEY_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define KEY_BUTTON_EXTI_LINE EXTI_Line8
-#define KEY_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define KEY_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource8
-#define KEY_BUTTON_EXTI_IRQn EXTI9_5_IRQn
-/**
- * @brief Joystick Right push-button
- */
-#define RIGHT_BUTTON_PIN GPIO_Pin_13
-#define RIGHT_BUTTON_GPIO_PORT GPIOG
-#define RIGHT_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define RIGHT_BUTTON_EXTI_LINE EXTI_Line13
-#define RIGHT_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define RIGHT_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource13
-#define RIGHT_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Joystick Left push-button
- */
-#define LEFT_BUTTON_PIN GPIO_Pin_14
-#define LEFT_BUTTON_GPIO_PORT GPIOG
-#define LEFT_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define LEFT_BUTTON_EXTI_LINE EXTI_Line14
-#define LEFT_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define LEFT_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource14
-#define LEFT_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Joystick Up push-button
- */
-#define UP_BUTTON_PIN GPIO_Pin_15
-#define UP_BUTTON_GPIO_PORT GPIOG
-#define UP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define UP_BUTTON_EXTI_LINE EXTI_Line15
-#define UP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define UP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource15
-#define UP_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Joystick Down push-button
- */
-#define DOWN_BUTTON_PIN GPIO_Pin_11
-#define DOWN_BUTTON_GPIO_PORT GPIOG
-#define DOWN_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define DOWN_BUTTON_EXTI_LINE EXTI_Line11
-#define DOWN_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define DOWN_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource11
-#define DOWN_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Joystick Sel push-button
- */
-#define SEL_BUTTON_PIN GPIO_Pin_7
-#define SEL_BUTTON_GPIO_PORT GPIOG
-#define SEL_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define SEL_BUTTON_EXTI_LINE EXTI_Line7
-#define SEL_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define SEL_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource7
-#define SEL_BUTTON_EXTI_IRQn EXTI9_5_IRQn
-/**
- * @}
- */
-
-/** @addtogroup STM32100E_EVAL_LOW_LEVEL_COM
- * @{
- */
-#define COMn 2
-
-/**
- * @brief Definition for COM port1, connected to USART1
- */
-#define EVAL_COM1 USART1
-#define EVAL_COM1_CLK RCC_APB2Periph_USART1
-#define EVAL_COM1_TX_PIN GPIO_Pin_9
-#define EVAL_COM1_TX_GPIO_PORT GPIOA
-#define EVAL_COM1_TX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM1_RX_PIN GPIO_Pin_10
-#define EVAL_COM1_RX_GPIO_PORT GPIOA
-#define EVAL_COM1_RX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM1_IRQn USART1_IRQn
-
-/**
- * @brief Definition for COM port2, connected to USART2
- */
-#define EVAL_COM2 USART2
-#define EVAL_COM2_CLK RCC_APB1Periph_USART2
-#define EVAL_COM2_TX_PIN GPIO_Pin_2
-#define EVAL_COM2_TX_GPIO_PORT GPIOA
-#define EVAL_COM2_TX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM2_RX_PIN GPIO_Pin_3
-#define EVAL_COM2_RX_GPIO_PORT GPIOA
-#define EVAL_COM2_RX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM2_IRQn USART2_IRQn
-
-/**
- * @}
- */
-
-/** @addtogroup STM32100E_EVAL_LOW_LEVEL_SD_FLASH
- * @{
- */
-/**
- * @brief SD SPI Interface pins
- */
-#define SD_SPI SPI2
-#define SD_SPI_CLK RCC_APB1Periph_SPI2
-#define SD_SPI_SCK_PIN GPIO_Pin_13 /* PC.13 */
-#define SD_SPI_SCK_GPIO_PORT GPIOB /* GPIOB */
-#define SD_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOB
-#define SD_SPI_MISO_PIN GPIO_Pin_14 /* PC.14 */
-#define SD_SPI_MISO_GPIO_PORT GPIOB /* GPIOB */
-#define SD_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOB
-#define SD_SPI_MOSI_PIN GPIO_Pin_15 /* PB.15 */
-#define SD_SPI_MOSI_GPIO_PORT GPIOB /* GPIOB */
-#define SD_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOB
-#define SD_CS_PIN GPIO_Pin_6 /* PG.06 */
-#define SD_CS_GPIO_PORT GPIOG /* GPIOG */
-#define SD_CS_GPIO_CLK RCC_APB2Periph_GPIOG
-#define SD_DETECT_PIN GPIO_Pin_11 /* PF.11 */
-#define SD_DETECT_GPIO_PORT GPIOF /* GPIOF */
-#define SD_DETECT_GPIO_CLK RCC_APB2Periph_GPIOF
-
-/**
- * @}
- */
-
-/** @addtogroup STM3210C_EVAL_LOW_LEVEL_I2C_EE
- * @{
- */
-/**
- * @brief I2C EEPROM Interface pins
- */
-#define sEE_I2C I2C2
-#define sEE_I2C_CLK RCC_APB1Periph_I2C2
-#define sEE_I2C_SCL_PIN GPIO_Pin_10 /* PB.10 */
-#define sEE_I2C_SCL_GPIO_PORT GPIOB /* GPIOB */
-#define sEE_I2C_SCL_GPIO_CLK RCC_APB2Periph_GPIOB
-#define sEE_I2C_SDA_PIN GPIO_Pin_11 /* PB.11 */
-#define sEE_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */
-#define sEE_I2C_SDA_GPIO_CLK RCC_APB2Periph_GPIOB
-#define sEE_M24C64_32
-
-#define sEE_I2C_DMA DMA1
-#define sEE_I2C_DMA_CHANNEL_TX DMA1_Channel4
-#define sEE_I2C_DMA_CHANNEL_RX DMA1_Channel5
-#define sEE_I2C_DMA_FLAG_TX_TC DMA1_IT_TC4
-#define sEE_I2C_DMA_FLAG_TX_GL DMA1_IT_GL4
-#define sEE_I2C_DMA_FLAG_RX_TC DMA1_IT_TC5
-#define sEE_I2C_DMA_FLAG_RX_GL DMA1_IT_GL5
-#define sEE_I2C_DMA_CLK RCC_AHBPeriph_DMA1
-#define sEE_I2C_DR_Address ((uint32_t)0x40005810)
-#define sEE_USE_DMA
-
-#define sEE_I2C_DMA_TX_IRQn DMA1_Channel4_IRQn
-#define sEE_I2C_DMA_RX_IRQn DMA1_Channel5_IRQn
-#define sEE_I2C_DMA_TX_IRQHandler DMA1_Channel4_IRQHandler
-#define sEE_I2C_DMA_RX_IRQHandler DMA1_Channel5_IRQHandler
-#define sEE_I2C_DMA_PREPRIO 0
-#define sEE_I2C_DMA_SUBPRIO 0
-
-#define sEE_DIRECTION_TX 0
-#define sEE_DIRECTION_RX 1
-
-/* Time constant for the delay caclulation allowing to have a millisecond
- incrementing counter. This value should be equal to (System Clock / 1000).
- ie. if system clock = 24MHz then sEE_TIME_CONST should be 24. */
-#define sEE_TIME_CONST 24
-
-/**
- * @}
- */
-
-/** @addtogroup STM32100E_EVAL_LOW_LEVEL_M25P_FLASH_SPI
- * @{
- */
-/**
- * @brief M25P FLASH SPI Interface pins
- */
-#define sFLASH_SPI SPI1
-#define sFLASH_SPI_CLK RCC_APB2Periph_SPI1
-#define sFLASH_SPI_SCK_PIN GPIO_Pin_5 /* PA.05 */
-#define sFLASH_SPI_SCK_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_SPI_MISO_PIN GPIO_Pin_6 /* PA.06 */
-#define sFLASH_SPI_MISO_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_SPI_MOSI_PIN GPIO_Pin_7 /* PA.07 */
-#define sFLASH_SPI_MOSI_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_CS_PIN GPIO_Pin_6 /* PE.06 */
-#define sFLASH_CS_GPIO_PORT GPIOE /* GPIOE */
-#define sFLASH_CS_GPIO_CLK RCC_APB2Periph_GPIOE
-
-/**
- * @}
- */
-
-
-/** @addtogroup STM32100E_EVAL_LOW_LEVEL_TSENSOR_I2C
- * @{
- */
-/**
- * @brief LM75 Temperature Sensor I2C Interface pins
- */
-#define LM75_I2C I2C2
-#define LM75_I2C_CLK RCC_APB1Periph_I2C2
-#define LM75_I2C_SCL_PIN GPIO_Pin_10 /* PB.10 */
-#define LM75_I2C_SCL_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SCL_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_SDA_PIN GPIO_Pin_11 /* PB.11 */
-#define LM75_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SDA_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_SMBUSALERT_PIN GPIO_Pin_12 /* PB.12 */
-#define LM75_I2C_SMBUSALERT_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SMBUSALERT_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_DR ((uint32_t)0x40005810)
-
-#define LM75_DMA_CLK RCC_AHBPeriph_DMA1
-#define LM75_DMA_TX_CHANNEL DMA1_Channel4
-#define LM75_DMA_RX_CHANNEL DMA1_Channel5
-#define LM75_DMA_TX_TCFLAG DMA1_FLAG_TC4
-#define LM75_DMA_RX_TCFLAG DMA1_FLAG_TC5
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_LOW_LEVEL_Exported_Functions
- * @{
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led);
-void STM_EVAL_LEDOn(Led_TypeDef Led);
-void STM_EVAL_LEDOff(Led_TypeDef Led);
-void STM_EVAL_LEDToggle(Led_TypeDef Led);
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode);
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button);
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct);
-void SD_LowLevel_DeInit(void);
-void SD_LowLevel_Init(void);
-void sEE_LowLevel_DeInit(void);
-void sEE_LowLevel_Init(void);
-void sEE_LowLevel_DMAConfig(uint32_t pBuffer, uint32_t BufferSize, uint32_t Direction);
-void sFLASH_LowLevel_DeInit(void);
-void sFLASH_LowLevel_Init(void);
-void LM75_LowLevel_DeInit(void);
-void LM75_LowLevel_Init(void);
-/**
- * @}
- */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32100E_EVAL_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_fsmc_sram.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_fsmc_sram.h
deleted file mode 100644
index 117afd0..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_fsmc_sram.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100e_eval_fsmc_sram.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the
- * stm32100e_eval_fsmc_sram firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32100E_EVAL_FSMC_SRAM_H
-#define __STM32100E_EVAL_FSMC_SRAM_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100E_EVAL
- * @{
- */
-
-/** @addtogroup STM32100E_EVAL_FSMC_SRAM
- * @{
- */
-
-/** @defgroup STM32100E_EVAL_FSMC_SRAM_Exported_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_FSMC_SRAM_Exported_Constants
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_FSMC_SRAM_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_FSMC_SRAM_Exported_Functions
- * @{
- */
-
-void SRAM_Init(void);
-void SRAM_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite);
-void SRAM_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32100E_EVAL_FSMC_SRAM_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.c
deleted file mode 100644
index fe2bfdf..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.c
+++ /dev/null
@@ -1,1419 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100e_eval_lcd.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file includes the LCD driver for AM-240320L8TNQW00H
- * (LCD_ILI9320), AM240320D5TOQW01H (LCD_ILI9325) and AM-240320LDTNQW00H
- * (LCD_SPFD5408B) Liquid Crystal Display Module of STM32100E-EVAL board.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32100e_eval_lcd.h"
-#include "../Common/fonts.c"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100E_EVAL
- * @{
- */
-
-/** @defgroup STM32100E_EVAL_LCD
- * @brief This file includes the LCD driver for AM-240320L8TNQW00H
- * (LCD_ILI9320), AM240320D5TOQW01H (LCD_ILI9325) and AM-240320LDTNQW00H
- * (LCD_SPFD5408B) Liquid Crystal Display Module of STM32100E-EVAL board.
- * @{
- */
-
-/** @defgroup STM32100E_EVAL_LCD_Private_TypesDefinitions
- * @{
- */
-typedef struct
-{
- __IO uint16_t LCD_REG;
- __IO uint16_t LCD_RAM;
-} LCD_TypeDef;
-/**
- * @}
- */
-
-
-/** @defgroup STM32100E_EVAL_LCD_Private_Defines
- * @{
- */
-/* Note: LCD /CS is CE4 - Bank 4 of NOR/SRAM Bank 1~4 */
-#define LCD_BASE ((uint32_t)(0x60000000 | 0x0C000000))
-#define LCD ((LCD_TypeDef *) LCD_BASE)
-#define MAX_POLY_CORNERS 200
-#define POLY_Y(Z) ((int32_t)((Points + Z)->X))
-#define POLY_X(Z) ((int32_t)((Points + Z)->Y))
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_LCD_Private_Macros
- * @{
- */
-#define ABS(X) ((X) > 0 ? (X) : -(X))
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_LCD_Private_Variables
- * @{
- */
-static sFONT *LCD_Currentfonts;
-/* Global variables to set the written text color */
-static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32100E_EVAL_LCD_Private_FunctionPrototypes
- * @{
- */
-#ifndef USE_Delay
-static void delay(vu32 nCount);
-#endif /* USE_Delay*/
-static void PutPixel(int16_t x, int16_t y);
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed);
-/**
- * @}
- */
-
-
-/** @defgroup STM32100E_EVAL_LCD_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the LCD.
- * @param None
- * @retval None
- */
-void LCD_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LCD Display Off */
- LCD_DisplayOff();
-
- /* BANK 4 (of NOR/SRAM Bank 1~4) is disabled */
- FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
-
- /*!< LCD_SPI DeInit */
- FSMC_NORSRAMDeInit(FSMC_Bank1_NORSRAM4);
-
- /* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
- PD.10(D15), PD.14(D0), PD.15(D1) as input floating */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
- GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
- GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- /* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
- PE.14(D11), PE.15(D12) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
- GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
- GPIO_Pin_15;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- /* Set PF.00(A0 (RS)) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
- /* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_Init(GPIOG, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the LCD.
- * @param None
- * @retval None
- */
-void STM32100E_LCD_Init(void)
-{
- __IO uint32_t lcdid = 0;
-
-/* Configure the LCD Control pins --------------------------------------------*/
- LCD_CtrlLinesConfig();
-/* Configure the FSMC Parallel interface -------------------------------------*/
- LCD_FSMCConfig();
-
- _delay_(5); /* delay 50 ms */
-
- /* Read the LCD ID */
- lcdid = LCD_ReadReg(0x00);
-
- /* Check if the LCD is SPFD5408B Controller */
- if(lcdid == 0x5408)
- {
- /* Start Initial Sequence ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_1, 0x0100); /* Set SS bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* Set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB 18-bit System interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity, no impact */
- /* Power On sequence -----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_17, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_16, 0x12B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x01BD); /* External reference voltage= Vci */
- _delay_(5);
- LCD_WriteReg(LCD_REG_19, 0x1400); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x000E); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x013F); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve (SPFD5408B)-------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0b0d);
- LCD_WriteReg(LCD_REG_49, 0x1923);
- LCD_WriteReg(LCD_REG_50, 0x1c26);
- LCD_WriteReg(LCD_REG_51, 0x261c);
- LCD_WriteReg(LCD_REG_52, 0x2419);
- LCD_WriteReg(LCD_REG_53, 0x0d0b);
- LCD_WriteReg(LCD_REG_54, 0x1006);
- LCD_WriteReg(LCD_REG_55, 0x0610);
- LCD_WriteReg(LCD_REG_56, 0x0706);
- LCD_WriteReg(LCD_REG_57, 0x0304);
- LCD_WriteReg(LCD_REG_58, 0x0e05);
- LCD_WriteReg(LCD_REG_59, 0x0e01);
- LCD_WriteReg(LCD_REG_60, 0x010e);
- LCD_WriteReg(LCD_REG_61, 0x050e);
- LCD_WriteReg(LCD_REG_62, 0x0403);
- LCD_WriteReg(LCD_REG_63, 0x0607);
- /* Set GRAM area ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL, VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
- /* Partial Display Control -----------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR=1
- I/D=01 (Horizontal : increment, Vertical : decrement)
- AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0112); /* 262K color and display ON */
- LCD_SetFont(&LCD_DEFAULT_FONT);
- return;
- }
- else if(lcdid == 0x9325) /* Check if the LCD is ILI9325 Controller */
- {
- /* Start Initial Sequence ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* Set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1018); /* Set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
-
- /* Power On sequence -----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */
-
- /* Adjust the Gamma Curve (ILI9325)---------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0007);
- LCD_WriteReg(LCD_REG_49, 0x0302);
- LCD_WriteReg(LCD_REG_50, 0x0105);
- LCD_WriteReg(LCD_REG_53, 0x0206);
- LCD_WriteReg(LCD_REG_54, 0x0808);
- LCD_WriteReg(LCD_REG_55, 0x0206);
- LCD_WriteReg(LCD_REG_56, 0x0504);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0105);
- LCD_WriteReg(LCD_REG_61, 0x0808);
-
- /* Set GRAM area ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
-
- LCD_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line(GS=1, scan direction is G320~G1) */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
-
- /* Partial Display Control -----------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
-
- /* Panel Control ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
-
- /* set GRAM write direction and BGR = 1 */
- /* I/D=00 (Horizontal : increment, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
-
- LCD_WriteReg(LCD_REG_7, 0x0133); /* 262K color and display ON */
- LCD_SetFont(&LCD_DEFAULT_FONT);
- return;
- }
- /* Check if the LCD is ILI9320 Controller */
-/* Start Initial Sequence ----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_229,0x8000); /* Set the internal vcore voltage */
- LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
-/* Power On sequence ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */
-/* Adjust the Gamma Curve ----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0006);
- LCD_WriteReg(LCD_REG_49, 0x0101);
- LCD_WriteReg(LCD_REG_50, 0x0003);
- LCD_WriteReg(LCD_REG_53, 0x0106);
- LCD_WriteReg(LCD_REG_54, 0x0b02);
- LCD_WriteReg(LCD_REG_55, 0x0302);
- LCD_WriteReg(LCD_REG_56, 0x0707);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0600);
- LCD_WriteReg(LCD_REG_61, 0x020b);
-
-/* Set GRAM area -------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0x2700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
-/* Partial Display Control ---------------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
-/* Panel Control -------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=01 (Horizontal : increment, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- LCD_SetFont(&LCD_DEFAULT_FONT);
-}
-
-/**
- * @brief Sets the LCD Text and Background colors.
- * @param _TextColor: specifies the Text Color.
- * @param _BackColor: specifies the Background Color.
- * @retval None
- */
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
-{
- TextColor = _TextColor;
- BackColor = _BackColor;
-}
-
-/**
- * @brief Gets the LCD Text and Background colors.
- * @param _TextColor: pointer to the variable that will contain the Text
- Color.
- * @param _BackColor: pointer to the variable that will contain the Background
- Color.
- * @retval None
- */
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
-{
- *_TextColor = TextColor; *_BackColor = BackColor;
-}
-
-/**
- * @brief Sets the Text color.
- * @param Color: specifies the Text color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetTextColor(__IO uint16_t Color)
-{
- TextColor = Color;
-}
-
-
-/**
- * @brief Sets the Background color.
- * @param Color: specifies the Background color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetBackColor(__IO uint16_t Color)
-{
- BackColor = Color;
-}
-
-/**
- * @brief Sets the Text Font.
- * @param fonts: specifies the font to be used.
- * @retval None
- */
-void LCD_SetFont(sFONT *fonts)
-{
- LCD_Currentfonts = fonts;
-}
-
-/**
- * @brief Gets the Text Font.
- * @param None.
- * @retval the used font.
- */
-sFONT *LCD_GetFont(void)
-{
- return LCD_Currentfonts;
-}
-
-/**
- * @brief Clears the selected line.
- * @param Line: the Line to be cleared.
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..n
- * @retval None
- */
-void LCD_ClearLine(uint8_t Line)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
- /* Send the string character by character on lCD */
- while (((refcolumn + 1)&0xFFFF) >= LCD_Currentfonts->Width)
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, ' ');
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- }
-}
-
-
-/**
- * @brief Clears the hole LCD.
- * @param Color: the color of the background.
- * @retval None
- */
-void LCD_Clear(uint16_t Color)
-{
- uint32_t index = 0;
-
- LCD_SetCursor(0x00, 0x013F);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(index = 0; index < 76800; index++)
- {
- LCD->LCD_RAM = Color;
- }
-}
-
-
-/**
- * @brief Sets the cursor position.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @retval None
- */
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos)
-{
- LCD_WriteReg(LCD_REG_32, Xpos);
- LCD_WriteReg(LCD_REG_33, Ypos);
-}
-
-
-/**
- * @brief Draws a character on LCD.
- * @param Xpos: the Line where to display the character shape.
- * @param Ypos: start column address.
- * @param c: pointer to the character data.
- * @retval None
- */
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c)
-{
- uint32_t index = 0, i = 0;
- uint8_t Xaddress = 0;
-
- Xaddress = Xpos;
-
- LCD_SetCursor(Xaddress, Ypos);
-
- for(index = 0; index < LCD_Currentfonts->Height; index++)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(i = 0; i < LCD_Currentfonts->Width; i++)
- {
- if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
- (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
-
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- Xaddress++;
- LCD_SetCursor(Xaddress, Ypos);
- }
-}
-
-
-/**
- * @brief Displays one character (16dots width, 24dots height).
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param Column: start column address.
- * @param Ascii: character ascii code, must be between 0x20 and 0x7E.
- * @retval None
- */
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii)
-{
- Ascii -= 32;
- LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
-}
-
-
-/**
- * @brief Displays a maximum of 20 char on the LCD.
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param *ptr: pointer to string to display on LCD.
- * @retval None
- */
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
-
- /* Send the string character by character on lCD */
- while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width))
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, *ptr);
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- /* Point on the next character */
- ptr++;
- }
-}
-
-
-/**
- * @brief Sets a display window
- * @param Xpos: specifies the X buttom left position.
- * @param Ypos: specifies the Y buttom left position.
- * @param Height: display window height.
- * @param Width: display window width.
- * @retval None
- */
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- /* Horizontal GRAM Start Address */
- if(Xpos >= Height)
- {
- LCD_WriteReg(LCD_REG_80, (Xpos - Height + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_80, 0);
- }
- /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_81, Xpos);
- /* Vertical GRAM Start Address */
- if(Ypos >= Width)
- {
- LCD_WriteReg(LCD_REG_82, (Ypos - Width + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_82, 0);
- }
- /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_83, Ypos);
- LCD_SetCursor(Xpos, Ypos);
-}
-
-
-/**
- * @brief Disables LCD Window mode.
- * @param None
- * @retval None
- */
-void LCD_WindowModeDisable(void)
-{
- LCD_SetDisplayWindow(239, 0x13F, 240, 320);
- LCD_WriteReg(LCD_REG_3, 0x1018);
-}
-
-
-/**
- * @brief Displays a line.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: line length.
- * @param Direction: line direction.
- * This parameter can be one of the following values: Vertical or Horizontal.
- * @retval None
- */
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction)
-{
- uint32_t i = 0;
-
- LCD_SetCursor(Xpos, Ypos);
- if(Direction == LCD_DIR_HORIZONTAL)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAM(TextColor);
- }
- }
- else
- {
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- Xpos++;
- LCD_SetCursor(Xpos, Ypos);
- }
- }
-}
-
-
-/**
- * @brief Displays a rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: display rectangle height.
- * @param Width: display rectangle width.
- * @retval None
- */
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-}
-
-
-/**
- * @brief Displays a circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D;/* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
- CurX = 0;
- CurY = Radius;
-
- while (CurX <= CurY)
- {
- LCD_SetCursor(Xpos + CurX, Ypos + CurY);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos + CurX, Ypos - CurY);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos - CurX, Ypos + CurY);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos - CurX, Ypos - CurY);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos + CurY, Ypos + CurX);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos + CurY, Ypos - CurX);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos - CurY, Ypos + CurX);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos - CurY, Ypos - CurX);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-}
-
-
-/**
- * @brief Displays a monocolor picture.
- * @param Pict: pointer to the picture array.
- * @retval None
- */
-void LCD_DrawMonoPict(const uint32_t *Pict)
-{
- uint32_t index = 0, i = 0;
- LCD_SetCursor(0, (LCD_PIXEL_WIDTH - 1));
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(index = 0; index < 2400; index++)
- {
- for(i = 0; i < 32; i++)
- {
- if((Pict[index] & (1 << i)) == 0x00)
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- }
-}
-
-
-/**
- * @brief Displays a bitmap picture loaded in the internal Flash.
- * @param BmpAddress: Bmp picture address in the internal Flash.
- * @retval None
- */
-void LCD_WriteBMP(uint32_t BmpAddress)
-{
- uint32_t index = 0, size = 0;
- /* Read bitmap size */
- size = *(__IO uint16_t *) (BmpAddress + 2);
- size |= (*(__IO uint16_t *) (BmpAddress + 4)) << 16;
- /* Get bitmap data address offset */
- index = *(__IO uint16_t *) (BmpAddress + 10);
- index |= (*(__IO uint16_t *) (BmpAddress + 12)) << 16;
- size = (size - index)/2;
- BmpAddress += index;
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1008);
-
- LCD_WriteRAM_Prepare();
-
- for(index = 0; index < size; index++)
- {
- LCD_WriteRAM(*(__IO uint16_t *)BmpAddress);
- BmpAddress += 2;
- }
-
- /* Set GRAM write direction and BGR = 1 */
- /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
- /* AM = 1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
-}
-
-/**
- * @brief Displays a full rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: rectangle height.
- * @param Width: rectangle width.
- * @retval None
- */
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
- LCD_SetTextColor(TextColor);
-
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-
- Width -= 2;
- Height--;
- Ypos--;
-
- LCD_SetTextColor(BackColor);
-
- while(Height--)
- {
- LCD_DrawLine(++Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- }
-
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Displays a full circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D; /* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
-
- CurX = 0;
- CurY = Radius;
-
- LCD_SetTextColor(BackColor);
-
- while (CurX <= CurY)
- {
- if(CurY > 0)
- {
- LCD_DrawLine(Xpos - CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- }
-
- if(CurX > 0)
- {
- LCD_DrawLine(Xpos - CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- }
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-
- LCD_SetTextColor(TextColor);
- LCD_DrawCircle(Xpos, Ypos, Radius);
-}
-
-/**
- * @brief Displays an uni line (between two points).
- * @param x1: specifies the point 1 x position.
- * @param y1: specifies the point 1 y position.
- * @param x2: specifies the point 2 x position.
- * @param y2: specifies the point 2 y position.
- * @retval None
- */
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
-{
- int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
- yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
- curpixel = 0;
-
- deltax = ABS(x2 - x1); /* The difference between the x's */
- deltay = ABS(y2 - y1); /* The difference between the y's */
- x = x1; /* Start x off at the first pixel */
- y = y1; /* Start y off at the first pixel */
-
- if (x2 >= x1) /* The x-values are increasing */
- {
- xinc1 = 1;
- xinc2 = 1;
- }
- else /* The x-values are decreasing */
- {
- xinc1 = -1;
- xinc2 = -1;
- }
-
- if (y2 >= y1) /* The y-values are increasing */
- {
- yinc1 = 1;
- yinc2 = 1;
- }
- else /* The y-values are decreasing */
- {
- yinc1 = -1;
- yinc2 = -1;
- }
-
- if (deltax >= deltay) /* There is at least one x-value for every y-value */
- {
- xinc1 = 0; /* Don't change the x when numerator >= denominator */
- yinc2 = 0; /* Don't change the y for every iteration */
- den = deltax;
- num = deltax / 2;
- numadd = deltay;
- numpixels = deltax; /* There are more x-values than y-values */
- }
- else /* There is at least one y-value for every x-value */
- {
- xinc2 = 0; /* Don't change the x for every iteration */
- yinc1 = 0; /* Don't change the y when numerator >= denominator */
- den = deltay;
- num = deltay / 2;
- numadd = deltax;
- numpixels = deltay; /* There are more y-values than x-values */
- }
-
- for (curpixel = 0; curpixel <= numpixels; curpixel++)
- {
- PutPixel(x, y); /* Draw the current pixel */
- num += numadd; /* Increase the numerator by the top of the fraction */
- if (num >= den) /* Check if numerator >= denominator */
- {
- num -= den; /* Calculate the new numerator value */
- x += xinc1; /* Change the x as appropriate */
- y += yinc1; /* Change the y as appropriate */
- }
- x += xinc2; /* Change the x as appropriate */
- y += yinc2; /* Change the y as appropriate */
- }
-}
-
-/**
- * @brief Displays an polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLine(pPoint Points, uint16_t PointCount)
-{
- int16_t X = 0, Y = 0;
-
- if(PointCount < 2)
- {
- return;
- }
-
- while(--PointCount)
- {
- X = Points->X;
- Y = Points->Y;
- Points++;
- LCD_DrawUniLine(X, Y, Points->X, Points->Y);
- }
-}
-
-/**
- * @brief Displays an relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @param Closed: specifies if the draw is closed or not.
- * 1: closed, 0 : not closed.
- * @retval None
- */
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed)
-{
- int16_t X = 0, Y = 0;
- pPoint First = Points;
-
- if(PointCount < 2)
- {
- return;
- }
- X = Points->X;
- Y = Points->Y;
- while(--PointCount)
- {
- Points++;
- LCD_DrawUniLine(X, Y, X + Points->X, Y + Points->Y);
- X = X + Points->X;
- Y = Y + Points->Y;
- }
- if(Closed)
- {
- LCD_DrawUniLine(First->X, First->Y, X, Y);
- }
-}
-
-/**
- * @brief Displays a closed polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLine(Points, PointCount);
- LCD_DrawUniLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
-}
-
-/**
- * @brief Displays a relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 0);
-}
-
-/**
- * @brief Displays a closed relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 1);
-}
-
-
-/**
- * @brief Displays a full polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount)
-{
- /* public-domain code by Darel Rex Finley, 2007 */
- uint16_t nodes = 0, nodeX[MAX_POLY_CORNERS], pixelX = 0, pixelY = 0, i = 0,
- j = 0, swap = 0;
- uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0;
-
- IMAGE_LEFT = IMAGE_RIGHT = Points->X;
- IMAGE_TOP= IMAGE_BOTTOM = Points->Y;
-
- for(i = 1; i < PointCount; i++)
- {
- pixelX = POLY_X(i);
- if(pixelX < IMAGE_LEFT)
- {
- IMAGE_LEFT = pixelX;
- }
- if(pixelX > IMAGE_RIGHT)
- {
- IMAGE_RIGHT = pixelX;
- }
-
- pixelY = POLY_Y(i);
- if(pixelY < IMAGE_TOP)
- {
- IMAGE_TOP = pixelY;
- }
- if(pixelY > IMAGE_BOTTOM)
- {
- IMAGE_BOTTOM = pixelY;
- }
- }
-
- LCD_SetTextColor(BackColor);
-
- /* Loop through the rows of the image. */
- for (pixelY = IMAGE_TOP; pixelY < IMAGE_BOTTOM; pixelY++)
- {
- /* Build a list of nodes. */
- nodes = 0; j = PointCount-1;
-
- for (i = 0; i < PointCount; i++)
- {
- if (POLY_Y(i)<(double) pixelY && POLY_Y(j)>=(double) pixelY || POLY_Y(j)<(double) pixelY && POLY_Y(i)>=(double) pixelY)
- {
- nodeX[nodes++]=(int) (POLY_X(i)+((pixelY-POLY_Y(i))*(POLY_X(j)-POLY_X(i)))/(POLY_Y(j)-POLY_Y(i)));
- }
- j = i;
- }
-
- /* Sort the nodes, via a simple "Bubble" sort. */
- i = 0;
- while (i < nodes-1)
- {
- if (nodeX[i]>nodeX[i+1])
- {
- swap = nodeX[i];
- nodeX[i] = nodeX[i+1];
- nodeX[i+1] = swap;
- if(i)
- {
- i--;
- }
- }
- else
- {
- i++;
- }
- }
-
- /* Fill the pixels between node pairs. */
- for (i = 0; i < nodes; i+=2)
- {
- if(nodeX[i] >= IMAGE_RIGHT)
- {
- break;
- }
- if(nodeX[i+1] > IMAGE_LEFT)
- {
- if (nodeX[i] < IMAGE_LEFT)
- {
- nodeX[i]=IMAGE_LEFT;
- }
- if(nodeX[i+1] > IMAGE_RIGHT)
- {
- nodeX[i+1] = IMAGE_RIGHT;
- }
- LCD_SetTextColor(BackColor);
- LCD_DrawLine(pixelY, nodeX[i+1], nodeX[i+1] - nodeX[i], LCD_DIR_HORIZONTAL);
- LCD_SetTextColor(TextColor);
- PutPixel(pixelY, nodeX[i+1]);
- PutPixel(pixelY, nodeX[i]);
- /* for (j=nodeX[i]; j<nodeX[i+1]; j++) PutPixel(j,pixelY); */
- }
- }
- }
-
- /* draw the edges */
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Writes to the selected LCD register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
-{
- /* Write 16-bit Index, then Write Reg */
- LCD->LCD_REG = LCD_Reg;
- /* Write 16-bit Reg */
- LCD->LCD_RAM = LCD_RegValue;
-}
-
-
-/**
- * @brief Reads the selected LCD Register.
- * @param LCD_Reg: address of the selected register.
- * @retval LCD Register Value.
- */
-uint16_t LCD_ReadReg(uint8_t LCD_Reg)
-{
- /* Write 16-bit Index (then Read Reg) */
- LCD->LCD_REG = LCD_Reg;
- /* Read 16-bit Reg */
- return (LCD->LCD_RAM);
-}
-
-
-/**
- * @brief Prepare to write to the LCD RAM.
- * @param None
- * @retval None
- */
-void LCD_WriteRAM_Prepare(void)
-{
- LCD->LCD_REG = LCD_REG_34;
-}
-
-
-/**
- * @brief Writes to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAM(uint16_t RGB_Code)
-{
- /* Write 16-bit GRAM Reg */
- LCD->LCD_RAM = RGB_Code;
-}
-
-
-/**
- * @brief Reads the LCD RAM.
- * @param None
- * @retval LCD RAM Value.
- */
-uint16_t LCD_ReadRAM(void)
-{
- /* Write 16-bit Index (then Read Reg) */
- LCD->LCD_REG = LCD_REG_34; /* Select GRAM Reg */
- /* Read 16-bit Reg */
- return LCD->LCD_RAM;
-}
-
-
-/**
- * @brief Power on the LCD.
- * @param None
- * @retval None
- */
-void LCD_PowerOn(void)
-{
-/* Power On sequence ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude*/
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-}
-
-
-/**
- * @brief Enables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOn(void)
-{
- /* Display On */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-}
-
-
-/**
- * @brief Disables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOff(void)
-{
- /* Display Off */
- LCD_WriteReg(LCD_REG_7, 0x0);
-}
-
-
-/**
- * @brief Configures LCD Control lines (FSMC Pins) in alternate function mode.
- * @param None
- * @retval None
- */
-void LCD_CtrlLinesConfig(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
- RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |
- RCC_APB2Periph_AFIO, ENABLE);
-
- /* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
- PD.10(D15), PD.14(D0), PD.15(D1) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
- GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
- GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- /* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
- PE.14(D11), PE.15(D12) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
- GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
- GPIO_Pin_15;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
- /* Set PF.00(A0 (RS)) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
-
- /* Set PG.12(NE4 (LCD/CS)) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_Init(GPIOG, &GPIO_InitStructure);
-}
-
-/**
- * @brief Configures the Parallel interface (FSMC) for LCD(Parallel mode)
- * @param None
- * @retval None
- */
-void LCD_FSMCConfig(void)
-{
- FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
- FSMC_NORSRAMTimingInitTypeDef p;
-/*-- FSMC Configuration ------------------------------------------------------*/
-/*----------------------- SRAM Bank 4 ----------------------------------------*/
- /* FSMC_Bank1_NORSRAM4 configuration */
- p.FSMC_AddressSetupTime = 1;
- p.FSMC_AddressHoldTime = 0;
- p.FSMC_DataSetupTime = 2;
- p.FSMC_BusTurnAroundDuration = 0;
- p.FSMC_CLKDivision = 0;
- p.FSMC_DataLatency = 0;
- p.FSMC_AccessMode = FSMC_AccessMode_A;
- /* Color LCD configuration ------------------------------------
- LCD configured as follow:
- - Data/Address MUX = Disable
- - Memory Type = SRAM
- - Data Width = 16bit
- - Write Operation = Enable
- - Extended Mode = Enable
- - Asynchronous Wait = Disable */
- FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
- FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
- FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
- FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
- FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
- FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
- FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
- FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
- FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
- FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
- FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
- /* BANK 4 (of NOR/SRAM Bank) is enabled */
- FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
-}
-
-/**
- * @brief Displays a pixel.
- * @param x: pixel x.
- * @param y: pixel y.
- * @retval None
- */
-static void PutPixel(int16_t x, int16_t y)
-{
- if(x < 0 || x > 239 || y < 0 || y > 319)
- {
- return;
- }
- LCD_DrawLine(x, y, 1, LCD_DIR_HORIZONTAL);
-}
-
-#ifndef USE_Delay
-/**
- * @brief Inserts a delay time.
- * @param nCount: specifies the delay time length.
- * @retval None
- */
-static void delay(vu32 nCount)
-{
- vu32 index = 0;
- for(index = (34000 * nCount); index != 0; index--)
- {
- }
-}
-#endif /* USE_Delay*/
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.h
deleted file mode 100644
index 66320cd..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32100E_EVAL/stm32100e_eval_lcd.h
+++ /dev/null
@@ -1,359 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32100e_eval_lcd.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm32100e_eval_lcd
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32100E_EVAL_LCD_H
-#define __STM32100E_EVAL_LCD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-#include "../Common/fonts.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32100E_EVAL
- * @{
- */
-
-/** @addtogroup STM32100E_EVAL_LCD
- * @{
- */
-
-/** @defgroup STM32100E_EVAL_LCD_Exported_Types
- * @{
- */
-typedef struct
-{
- int16_t X;
- int16_t Y;
-} Point, * pPoint;
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_LCD_Exported_Constants
- * @{
- */
-
-/**
- * @brief Uncomment the line below if you want to use user defined Delay function
- * (for precise timing), otherwise default _delay_ function defined within
- * this driver is used (less precise timing).
- */
-/* #define USE_Delay */
-
-#ifdef USE_Delay
-#include "main.h"
- #define _delay_ Delay /* !< User can provide more timing precise _delay_ function
- (with 10ms time base), using SysTick for example */
-#else
- #define _delay_ delay /* !< Default _delay_ function with less precise timing */
-#endif
-
-/**
- * @brief LCD Registers
- */
-#define LCD_REG_0 0x00
-#define LCD_REG_1 0x01
-#define LCD_REG_2 0x02
-#define LCD_REG_3 0x03
-#define LCD_REG_4 0x04
-#define LCD_REG_5 0x05
-#define LCD_REG_6 0x06
-#define LCD_REG_7 0x07
-#define LCD_REG_8 0x08
-#define LCD_REG_9 0x09
-#define LCD_REG_10 0x0A
-#define LCD_REG_12 0x0C
-#define LCD_REG_13 0x0D
-#define LCD_REG_14 0x0E
-#define LCD_REG_15 0x0F
-#define LCD_REG_16 0x10
-#define LCD_REG_17 0x11
-#define LCD_REG_18 0x12
-#define LCD_REG_19 0x13
-#define LCD_REG_20 0x14
-#define LCD_REG_21 0x15
-#define LCD_REG_22 0x16
-#define LCD_REG_23 0x17
-#define LCD_REG_24 0x18
-#define LCD_REG_25 0x19
-#define LCD_REG_26 0x1A
-#define LCD_REG_27 0x1B
-#define LCD_REG_28 0x1C
-#define LCD_REG_29 0x1D
-#define LCD_REG_30 0x1E
-#define LCD_REG_31 0x1F
-#define LCD_REG_32 0x20
-#define LCD_REG_33 0x21
-#define LCD_REG_34 0x22
-#define LCD_REG_36 0x24
-#define LCD_REG_37 0x25
-#define LCD_REG_40 0x28
-#define LCD_REG_41 0x29
-#define LCD_REG_43 0x2B
-#define LCD_REG_45 0x2D
-#define LCD_REG_48 0x30
-#define LCD_REG_49 0x31
-#define LCD_REG_50 0x32
-#define LCD_REG_51 0x33
-#define LCD_REG_52 0x34
-#define LCD_REG_53 0x35
-#define LCD_REG_54 0x36
-#define LCD_REG_55 0x37
-#define LCD_REG_56 0x38
-#define LCD_REG_57 0x39
-#define LCD_REG_58 0x3A
-#define LCD_REG_59 0x3B
-#define LCD_REG_60 0x3C
-#define LCD_REG_61 0x3D
-#define LCD_REG_62 0x3E
-#define LCD_REG_63 0x3F
-#define LCD_REG_64 0x40
-#define LCD_REG_65 0x41
-#define LCD_REG_66 0x42
-#define LCD_REG_67 0x43
-#define LCD_REG_68 0x44
-#define LCD_REG_69 0x45
-#define LCD_REG_70 0x46
-#define LCD_REG_71 0x47
-#define LCD_REG_72 0x48
-#define LCD_REG_73 0x49
-#define LCD_REG_74 0x4A
-#define LCD_REG_75 0x4B
-#define LCD_REG_76 0x4C
-#define LCD_REG_77 0x4D
-#define LCD_REG_78 0x4E
-#define LCD_REG_79 0x4F
-#define LCD_REG_80 0x50
-#define LCD_REG_81 0x51
-#define LCD_REG_82 0x52
-#define LCD_REG_83 0x53
-#define LCD_REG_96 0x60
-#define LCD_REG_97 0x61
-#define LCD_REG_106 0x6A
-#define LCD_REG_118 0x76
-#define LCD_REG_128 0x80
-#define LCD_REG_129 0x81
-#define LCD_REG_130 0x82
-#define LCD_REG_131 0x83
-#define LCD_REG_132 0x84
-#define LCD_REG_133 0x85
-#define LCD_REG_134 0x86
-#define LCD_REG_135 0x87
-#define LCD_REG_136 0x88
-#define LCD_REG_137 0x89
-#define LCD_REG_139 0x8B
-#define LCD_REG_140 0x8C
-#define LCD_REG_141 0x8D
-#define LCD_REG_143 0x8F
-#define LCD_REG_144 0x90
-#define LCD_REG_145 0x91
-#define LCD_REG_146 0x92
-#define LCD_REG_147 0x93
-#define LCD_REG_148 0x94
-#define LCD_REG_149 0x95
-#define LCD_REG_150 0x96
-#define LCD_REG_151 0x97
-#define LCD_REG_152 0x98
-#define LCD_REG_153 0x99
-#define LCD_REG_154 0x9A
-#define LCD_REG_157 0x9D
-#define LCD_REG_192 0xC0
-#define LCD_REG_193 0xC1
-#define LCD_REG_229 0xE5
-
-/**
- * @brief LCD color
- */
-#define LCD_COLOR_WHITE 0xFFFF
-#define LCD_COLOR_BLACK 0x0000
-#define LCD_COLOR_GREY 0xF7DE
-#define LCD_COLOR_BLUE 0x001F
-#define LCD_COLOR_BLUE2 0x051F
-#define LCD_COLOR_RED 0xF800
-#define LCD_COLOR_MAGENTA 0xF81F
-#define LCD_COLOR_GREEN 0x07E0
-#define LCD_COLOR_CYAN 0x7FFF
-#define LCD_COLOR_YELLOW 0xFFE0
-
-/**
- * @brief LCD Lines depending on the chosen fonts.
- */
-#define LCD_LINE_0 LINE(0)
-#define LCD_LINE_1 LINE(1)
-#define LCD_LINE_2 LINE(2)
-#define LCD_LINE_3 LINE(3)
-#define LCD_LINE_4 LINE(4)
-#define LCD_LINE_5 LINE(5)
-#define LCD_LINE_6 LINE(6)
-#define LCD_LINE_7 LINE(7)
-#define LCD_LINE_8 LINE(8)
-#define LCD_LINE_9 LINE(9)
-#define LCD_LINE_10 LINE(10)
-#define LCD_LINE_11 LINE(11)
-#define LCD_LINE_12 LINE(12)
-#define LCD_LINE_13 LINE(13)
-#define LCD_LINE_14 LINE(14)
-#define LCD_LINE_15 LINE(15)
-#define LCD_LINE_16 LINE(16)
-#define LCD_LINE_17 LINE(17)
-#define LCD_LINE_18 LINE(18)
-#define LCD_LINE_19 LINE(19)
-#define LCD_LINE_20 LINE(20)
-#define LCD_LINE_21 LINE(21)
-#define LCD_LINE_22 LINE(22)
-#define LCD_LINE_23 LINE(23)
-#define LCD_LINE_24 LINE(24)
-#define LCD_LINE_25 LINE(25)
-#define LCD_LINE_26 LINE(26)
-#define LCD_LINE_27 LINE(27)
-#define LCD_LINE_28 LINE(28)
-#define LCD_LINE_29 LINE(29)
-
-/**
- * @brief LCD default font
- */
-#define LCD_DEFAULT_FONT Font16x24
-
-/**
- * @brief LCD Direction
- */
-#define LCD_DIR_HORIZONTAL 0x0000
-#define LCD_DIR_VERTICAL 0x0001
-
-/**
- * @brief LCD Size (Width and Height)
- */
-#define LCD_PIXEL_WIDTH 0x0140
-#define LCD_PIXEL_HEIGHT 0x00F0
-
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_LCD_Exported_Macros
- * @{
- */
-#define ASSEMBLE_RGB(R, G, B) ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3))
-/**
- * @}
- */
-
-/** @defgroup STM32100E_EVAL_LCD_Exported_Functions
- * @{
- */
-/** @defgroup
- * @{
- */
-void LCD_DeInit(void);
-void STM32100E_LCD_Init(void);
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
-void LCD_SetTextColor(__IO uint16_t Color);
-void LCD_SetBackColor(__IO uint16_t Color);
-void LCD_ClearLine(uint8_t Line);
-void LCD_Clear(uint16_t Color);
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos);
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c);
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii);
-void LCD_SetFont(sFONT *fonts);
-sFONT *LCD_GetFont(void);
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr);
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_WindowModeDisable(void);
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction);
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_DrawMonoPict(const uint32_t *Pict);
-void LCD_WriteBMP(uint32_t BmpAddress);
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_PolyLine(pPoint Points, uint16_t PointCount);
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount);
-/**
- * @}
- */
-
-/** @defgroup
- * @{
- */
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
-uint16_t LCD_ReadReg(uint8_t LCD_Reg);
-void LCD_WriteRAM_Prepare(void);
-void LCD_WriteRAM(uint16_t RGB_Code);
-uint16_t LCD_ReadRAM(void);
-void LCD_PowerOn(void);
-void LCD_DisplayOn(void);
-void LCD_DisplayOff(void);
-/**
- * @}
- */
-
-/** @defgroup
- * @{
- */
-void LCD_CtrlLinesConfig(void);
-void LCD_FSMCConfig(void);
-/**
- * @}
- */
-
-/**
- * @}
- */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32100E_EVAL_LCD_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210B_EVAL/stm3210b_eval_lcd.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210B_EVAL/stm3210b_eval_lcd.c
deleted file mode 100644
index b9995a5..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210B_EVAL/stm3210b_eval_lcd.c
+++ /dev/null
@@ -1,1878 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210b_eval_lcd.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file includes the LCD driver for AM-240320LTNQW00H (LCD_HX8312),
- * AM-240320L8TNQW00H (LCD_ILI9320), AM-240320LDTNQW00H (LCD_SPFD5408B)
- * Liquid Crystal Display Module of STM3210B-EVAL board.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm3210b_eval_lcd.h"
-#include "../Common/fonts.c"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210B_EVAL
- * @{
- */
-
-/** @defgroup STM3210B_EVAL_LCD
- * @briefThis file includes the LCD driver for AM-240320LTNQW00H (LCD_HX8312),
- * AM-240320L8TNQW00H (LCD_ILI9320), AM-240320LDTNQW00H (LCD_SPFD5408B)
- * Liquid Crystal Display Module of STM3210B-EVAL board.
- * @{
- */
-
-/** @defgroup STM3210B_EVAL_LCD_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210B_EVAL_LCD_Private_Defines
- * @{
- */
-#define LCD_ILI9320 0x9320
-#define LCD_HX8312 0x8312
-#define LCD_SPFD5408 0x5408
-#define START_BYTE 0x70
-#define SET_INDEX 0x00
-#define READ_STATUS 0x01
-#define LCD_WRITE_REG 0x02
-#define LCD_READ_REG 0x03
-#define MAX_POLY_CORNERS 200
-#define POLY_Y(Z) ((int32_t)((Points + Z)->X))
-#define POLY_X(Z) ((int32_t)((Points + Z)->Y))
-/**
- * @}
- */
-
-
-/** @defgroup STM3210B_EVAL_LCD_Private_Macros
- * @{
- */
-#define ABS(X) ((X) > 0 ? (X) : -(X))
-/**
- * @}
- */
-
-
-/** @defgroup STM3210B_EVAL_LCD_Private_Variables
- * @{
- */
-static sFONT *LCD_Currentfonts;
-/* Global variables to set the written text color */
-static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
-static __IO uint32_t LCDType = LCD_ILI9320;
-/**
- * @}
- */
-
-
-/** @defgroup STM3210B_EVAL_LCD_Private_Function_Prototypes
- * @{
- */
-#ifndef USE_Delay
-static void delay(vu32 nCount);
-#endif /* USE_Delay*/
-
-static void LCD_WriteRegHX8312(uint8_t LCD_Reg, uint8_t LCD_RegValue);
-static void LCD_WriteRegILI9320(uint8_t LCD_Reg, uint16_t LCD_RegValue);
-static void PutPixel(int16_t x, int16_t y);
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed);
-/**
- * @}
- */
-
-
-/** @defgroup STM3210B_EVAL_LCD_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the LCD.
- * @param None
- * @retval None
- */
-void LCD_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LCD Display Off */
- LCD_DisplayOff();
-
- /*!< LCD_SPI disable */
- SPI_Cmd(LCD_SPI, DISABLE);
-
- /*!< LCD_SPI DeInit */
- SPI_I2S_DeInit(LCD_SPI);
-
- /*!< Disable SPI clock */
- RCC_APB1PeriphClockCmd(LCD_SPI_CLK, DISABLE);
-
- /* Configure NCS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure NWR(RNW), RS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_RS_PIN;
- GPIO_Init(LCD_RS_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_NWR_PIN;
- GPIO_Init(LCD_NWR_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure SPI pins: SCK, MISO and MOSI */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
- GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN;
- GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
- GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Setups the LCD.
- * @param None
- * @retval None
- */
-void LCD_Setup(void)
-{
-/* Configure the LCD Control pins --------------------------------------------*/
- LCD_CtrlLinesConfig();
-
-/* Configure the LCD_SPI interface ----------------------------------------------*/
- LCD_SPIConfig();
- if(LCDType == LCD_ILI9320)
- {
- _delay_(5); /* Delay 50 ms */
- /* Start Initial Sequence ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_229, 0x8000); /* Set the internal vcore voltage */
- LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
- /* Power On sequence -----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0006);
- LCD_WriteReg(LCD_REG_49, 0x0101);
- LCD_WriteReg(LCD_REG_50, 0x0003);
- LCD_WriteReg(LCD_REG_53, 0x0106);
- LCD_WriteReg(LCD_REG_54, 0x0b02);
- LCD_WriteReg(LCD_REG_55, 0x0302);
- LCD_WriteReg(LCD_REG_56, 0x0707);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0600);
- LCD_WriteReg(LCD_REG_61, 0x020b);
-
- /* Set GRAM area ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0x2700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
- /* Partial Display Control -----------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=01 (Horizontal : increment, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- }
- else if(LCDType == LCD_SPFD5408)
- {
- /* Start Initial Sequence --------------------------------------------------*/
- LCD_WriteReg(LCD_REG_227, 0x3008); /* Set internal timing */
- LCD_WriteReg(LCD_REG_231, 0x0012); /* Set internal timing */
- LCD_WriteReg(LCD_REG_239, 0x1231); /* Set internal timing */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* Set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* Set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
- /* Power On sequence -------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_17, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_16, 0x12B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x01BD); /* External reference voltage= Vci */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1400); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x000E); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x013F); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve --------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0007);
- LCD_WriteReg(LCD_REG_49, 0x0302);
- LCD_WriteReg(LCD_REG_50, 0x0105);
- LCD_WriteReg(LCD_REG_53, 0x0206);
- LCD_WriteReg(LCD_REG_54, 0x0808);
- LCD_WriteReg(LCD_REG_55, 0x0206);
- LCD_WriteReg(LCD_REG_56, 0x0504);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0105);
- LCD_WriteReg(LCD_REG_61, 0x0808);
- /* Set GRAM area -----------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* Set scrolling line */
- /* Partial Display Control -------------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control -----------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1
- I/D=01 (Horizontal : increment, Vertical : decrement)
- AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0112); /* 262K color and display ON */
- }
- else if(LCDType == LCD_HX8312)
- {
- /* Enable the LCD Oscillator ---------------------------------------------*/
- LCD_WriteReg(LCD_REG_1, 0x10);
- LCD_WriteReg(LCD_REG_0, 0xA0);
- LCD_WriteReg(LCD_REG_3, 0x01);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_3, 0x00);
- LCD_WriteReg(LCD_REG_43, 0x04);
-
- LCD_WriteReg(LCD_REG_40, 0x18);
- LCD_WriteReg(LCD_REG_26, 0x05);
- LCD_WriteReg(LCD_REG_37, 0x05);
- LCD_WriteReg(LCD_REG_25, 0x00);
-
- /* LCD Power On ----------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_28, 0x73);
- LCD_WriteReg(LCD_REG_36, 0x74);
- LCD_WriteReg(LCD_REG_30, 0x01);
- LCD_WriteReg(LCD_REG_24, 0xC1);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_24, 0xE1);
- LCD_WriteReg(LCD_REG_24, 0xF1);
- _delay_(6); /* Delay 60 ms */
- LCD_WriteReg(LCD_REG_24, 0xF5);
- _delay_(6); /* Delay 60 ms */
- LCD_WriteReg(LCD_REG_27, 0x09);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_31, 0x11);
- LCD_WriteReg(LCD_REG_32, 0x0E);
- LCD_WriteReg(LCD_REG_30, 0x81);
- _delay_(1); /* Delay 10 ms */
-
- /* Chip Set --------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_157, 0x00);
- LCD_WriteReg(LCD_REG_192, 0x00);
-
- LCD_WriteReg(LCD_REG_14, 0x00);
- LCD_WriteReg(LCD_REG_15, 0x00);
- LCD_WriteReg(LCD_REG_16, 0x00);
- LCD_WriteReg(LCD_REG_17, 0x00);
- LCD_WriteReg(LCD_REG_18, 0x00);
- LCD_WriteReg(LCD_REG_19, 0x00);
- LCD_WriteReg(LCD_REG_20, 0x00);
- LCD_WriteReg(LCD_REG_21, 0x00);
- LCD_WriteReg(LCD_REG_22, 0x00);
- LCD_WriteReg(LCD_REG_23, 0x00);
-
- LCD_WriteReg(LCD_REG_52, 0x01);
- LCD_WriteReg(LCD_REG_53, 0x00);
- LCD_WriteReg(LCD_REG_75, 0x00);
- LCD_WriteReg(LCD_REG_76, 0x00);
- LCD_WriteReg(LCD_REG_78, 0x00);
- LCD_WriteReg(LCD_REG_79, 0x00);
- LCD_WriteReg(LCD_REG_80, 0x00);
-
- LCD_WriteReg(LCD_REG_60, 0x00);
- LCD_WriteReg(LCD_REG_61, 0x00);
- LCD_WriteReg(LCD_REG_62, 0x01);
- LCD_WriteReg(LCD_REG_63, 0x3F);
- LCD_WriteReg(LCD_REG_64, 0x02);
- LCD_WriteReg(LCD_REG_65, 0x02);
- LCD_WriteReg(LCD_REG_66, 0x00);
- LCD_WriteReg(LCD_REG_67, 0x00);
- LCD_WriteReg(LCD_REG_68, 0x00);
- LCD_WriteReg(LCD_REG_69, 0x00);
- LCD_WriteReg(LCD_REG_70, 0xEF);
- LCD_WriteReg(LCD_REG_71, 0x00);
- LCD_WriteReg(LCD_REG_72, 0x00);
- LCD_WriteReg(LCD_REG_73, 0x01);
- LCD_WriteReg(LCD_REG_74, 0x3F);
-
- LCD_WriteReg(LCD_REG_29, 0x08); /* R29:Gate scan direction setting */
-
- LCD_WriteReg(LCD_REG_134, 0x00);
- LCD_WriteReg(LCD_REG_135, 0x30);
- LCD_WriteReg(LCD_REG_136, 0x02);
- LCD_WriteReg(LCD_REG_137, 0x05);
-
- LCD_WriteReg(LCD_REG_141, 0x01); /* R141:Register set-up mode for one line clock */
- LCD_WriteReg(LCD_REG_139, 0x20); /* R139:One line SYSCLK number in one-line */
- LCD_WriteReg(LCD_REG_51, 0x01); /* R51:N line inversion setting */
- LCD_WriteReg(LCD_REG_55, 0x01); /* R55:Scanning method setting */
- LCD_WriteReg(LCD_REG_118, 0x00);
-
- /* Gamma Set -------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_143, 0x10);
- LCD_WriteReg(LCD_REG_144, 0x67);
- LCD_WriteReg(LCD_REG_145, 0x07);
- LCD_WriteReg(LCD_REG_146, 0x65);
- LCD_WriteReg(LCD_REG_147, 0x07);
- LCD_WriteReg(LCD_REG_148, 0x01);
- LCD_WriteReg(LCD_REG_149, 0x76);
- LCD_WriteReg(LCD_REG_150, 0x56);
- LCD_WriteReg(LCD_REG_151, 0x00);
- LCD_WriteReg(LCD_REG_152, 0x06);
- LCD_WriteReg(LCD_REG_153, 0x03);
- LCD_WriteReg(LCD_REG_154, 0x00);
-
- /* Display On ------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_1, 0x50);
- LCD_WriteReg(LCD_REG_5, 0x04);
- LCD_WriteReg(LCD_REG_0, 0x80);
- LCD_WriteReg(LCD_REG_59, 0x01);
- _delay_(4); /* Delay 40 ms */
- LCD_WriteReg(LCD_REG_0, 0x20);
- }
-}
-
-
-/**
- * @brief Initializes the LCD.
- * @param None
- * @retval None
- */
-void STM3210B_LCD_Init(void)
-{
- /* Setups the LCD */
- LCD_Setup();
- /* Try to read new LCD controller ID 0x9320 */
- if (LCD_ReadReg(LCD_REG_0) == LCD_ILI9320)
- {
- LCDType = LCD_ILI9320;
- }
- else
- {
- LCDType = LCD_SPFD5408;
- /* Setups the LCD */
- LCD_Setup();
- /* Try to read new LCD controller ID 0x5408 */
- if (LCD_ReadReg(LCD_REG_0) != LCD_SPFD5408)
- {
- LCDType = LCD_HX8312;
- /* Setups the LCD */
- LCD_Setup();
- }
- }
- LCD_SetFont(&LCD_DEFAULT_FONT);
-}
-
-/**
- * @brief Sets the LCD Text and Background colors.
- * @param _TextColor: specifies the Text Color.
- * @param _BackColor: specifies the Background Color.
- * @retval None
- */
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
-{
- TextColor = _TextColor;
- BackColor = _BackColor;
-}
-
-/**
- * @brief Gets the LCD Text and Background colors.
- * @param _TextColor: pointer to the variable that will contain the Text
- Color.
- * @param _BackColor: pointer to the variable that will contain the Background
- Color.
- * @retval None
- */
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
-{
- *_TextColor = TextColor; *_BackColor = BackColor;
-}
-
-/**
- * @brief Sets the Text color.
- * @param Color: specifies the Text color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetTextColor(__IO uint16_t Color)
-{
- TextColor = Color;
-}
-
-
-/**
- * @brief Sets the Background color.
- * @param Color: specifies the Background color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetBackColor(__IO uint16_t Color)
-{
- BackColor = Color;
-}
-
-/**
- * @brief Sets the Text Font.
- * @param fonts: specifies the font to be used.
- * @retval None
- */
-void LCD_SetFont(sFONT *fonts)
-{
- LCD_Currentfonts = fonts;
-}
-
-/**
- * @brief Gets the Text Font.
- * @param None.
- * @retval the used font.
- */
-sFONT *LCD_GetFont(void)
-{
- return LCD_Currentfonts;
-}
-
-/**
- * @brief Clears the selected line.
- * @param Line: the Line to be cleared.
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..n
- * @retval None
- */
-void LCD_ClearLine(uint8_t Line)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
- /* Send the string character by character on lCD */
- while (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width)
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, ' ');
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- }
-}
-
-
-/**
- * @brief Clears the hole LCD.
- * @param Color: the color of the background.
- * @retval None
- */
-void LCD_Clear(uint16_t Color)
-{
- uint32_t index = 0;
-
- LCD_SetCursor(0x00, 0x013F);
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
- for(index = 0; index < 76800; index++)
- {
- LCD_WriteRAM(Color);
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-}
-
-
-/**
- * @brief Sets the cursor position.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @retval None
- */
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteReg(LCD_REG_32, Xpos);
- LCD_WriteReg(LCD_REG_33, Ypos);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteReg(LCD_REG_66, Xpos);
- LCD_WriteReg(LCD_REG_67, ((Ypos & 0x100)>> 8));
- LCD_WriteReg(LCD_REG_68, (Ypos & 0xFF));
- }
-}
-
-
-/**
- * @brief Draws a character on LCD.
- * @param Xpos: the Line where to display the character shape.
- * @param Ypos: start column address.
- * @param c: pointer to the character data.
- * @retval None
- */
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c)
-{
- uint32_t index = 0, i = 0;
- uint8_t Xaddress = 0;
-
- Xaddress = Xpos;
-
- LCD_SetCursor(Xaddress, Ypos);
-
- for(index = 0; index < LCD_Currentfonts->Height; index++)
- {
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
- for(i = 0; i < LCD_Currentfonts->Width; i++)
- {
- if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
- (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
-
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
- Xaddress++;
- LCD_SetCursor(Xaddress, Ypos);
- }
-}
-
-
-/**
- * @brief Displays one character (16dots width, 24dots height).
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param Column: start column address.
- * @param Ascii: character ascii code, must be between 0x20 and 0x7E.
- * @retval None
- */
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii)
-{
- Ascii -= 32;
- LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
-}
-
-
-/**
- * @brief Displays a maximum of 20 char on the LCD.
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param *ptr: pointer to string to display on LCD.
- * @retval None
- */
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
-
- /* Send the string character by character on lCD */
- while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width))
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, *ptr);
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- /* Point on the next character */
- ptr++;
- }
-}
-
-
-/**
- * @brief Sets a display window
- * @param Xpos: specifies the X buttom left position.
- * @param Ypos: specifies the Y buttom left position.
- * @param Height: display window height.
- * @param Width: display window width.
- * @retval None
- */
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Horizontal GRAM Start Address */
- if(Xpos >= Height)
- {
- LCD_WriteReg(LCD_REG_80, (Xpos - Height + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_80, 0);
- }
- /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_81, Xpos);
- /* Vertical GRAM Start Address */
- if(Ypos >= Width)
- {
- LCD_WriteReg(LCD_REG_82, (Ypos - Width + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_82, 0);
- }
- /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_83, Ypos);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteReg(LCD_REG_1, 0xD0);
- LCD_WriteReg(LCD_REG_5, 0x14);
-
- LCD_WriteReg(LCD_REG_69, (Xpos - Height + 1));
- LCD_WriteReg(LCD_REG_70, Xpos);
-
- LCD_WriteReg(LCD_REG_71, (((Ypos - Width + 1) & 0x100)>> 8));
- LCD_WriteReg(LCD_REG_72, ((Ypos - Width + 1) & 0xFF));
- LCD_WriteReg(LCD_REG_73, ((Ypos & 0x100)>> 8));
- LCD_WriteReg(LCD_REG_74, (Ypos & 0xFF));
- }
- LCD_SetCursor(Xpos, Ypos);
-}
-
-
-/**
- * @brief Disables LCD Window mode.
- * @param None
- * @retval None
- */
-void LCD_WindowModeDisable(void)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_SetDisplayWindow(239, 0x13F, 240, 320);
- LCD_WriteReg(LCD_REG_3, 0x1018);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteReg(LCD_REG_1, 0x50);
- LCD_WriteReg(LCD_REG_5, 0x04);
- }
-
-}
-
-
-/**
- * @brief Displays a line.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: line length.
- * @param Direction: line direction.
- * This parameter can be one of the following values: Vertical or Horizontal.
- * @retval None
- */
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction)
-{
- uint32_t i = 0;
-
- LCD_SetCursor(Xpos, Ypos);
- if(Direction == LCD_DIR_HORIZONTAL)
- {
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAM(TextColor);
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
- }
- else
- {
- for(i = 0; i < Length; i++)
- {
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- Xpos++;
- LCD_SetCursor(Xpos, Ypos);
- }
- }
-}
-
-
-/**
- * @brief Displays a rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: display rectangle height.
- * @param Width: display rectangle width.
- * @retval None
- */
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-}
-
-
-/**
- * @brief Displays a circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D;/* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
- CurX = 0;
- CurY = Radius;
-
- while (CurX <= CurY)
- {
- LCD_SetCursor(Xpos + CurX, Ypos + CurY);
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos + CurX, Ypos - CurY);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos - CurX, Ypos + CurY);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos - CurX, Ypos - CurY);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos + CurY, Ypos + CurX);
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos + CurY, Ypos - CurX);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos - CurY, Ypos + CurX);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_SetCursor(Xpos - CurY, Ypos - CurX);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAMWord(TextColor);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRAM(TextColor);
- }
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-}
-
-
-/**
- * @brief Displays a monocolor picture.
- * @param Pict: pointer to the picture array.
- * @retval None
- */
-void LCD_DrawMonoPict(const uint32_t *Pict)
-{
- uint32_t index = 0, i = 0;
- LCD_SetCursor(0, (LCD_PIXEL_WIDTH - 1));
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
-
- for(index = 0; index < 2400; index++)
- {
- for(i = 0; i < 32; i++)
- {
- if((Pict[index] & (1 << i)) == 0x00)
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- }
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-}
-
-#ifdef USE_LCD_DrawBMP
-/**
- * @brief Displays a bitmap picture loaded in the SPI Flash.
- * @param BmpAddress: Bmp picture address in the SPI Flash.
- * @retval None
- */
-void LCD_DrawBMP(uint32_t BmpAddress)
-{
- uint32_t i = 0, size = 0;
- /* Read bitmap size */
- sFLASH_ReadBuffer((uint8_t*)&size, BmpAddress + 2, 4);
- /* get bitmap data address offset */
- sFLASH_ReadBuffer((uint8_t*)&i, BmpAddress + 10, 4);
-
- size = (size - i)/2;
- sFLASH_StartReadSequence(BmpAddress + i);
- /* Disable LCD_SPI */
- SPI_Cmd(LCD_SPI, DISABLE);
- /* SPI in 16-bit mode */
- SPI_DataSizeConfig(LCD_SPI, SPI_DataSize_16b);
- /* Enable LCD_SPI */
- SPI_Cmd(LCD_SPI, ENABLE);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1008);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
-
- /* Read bitmap data from SPI Flash and send them to LCD */
- for(i = 0; i < size; i++)
- {
- LCD_WriteRAM(__REV16(sFLASH_SendHalfWord(0xA5A5)));
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-
- /* Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
- /* Disable LCD_SPI */
- SPI_Cmd(LCD_SPI, DISABLE);
- /* SPI in 8-bit mode */
- SPI_DataSizeConfig(LCD_SPI, SPI_DataSize_8b);
- /* Enable LCD_SPI */
- SPI_Cmd(LCD_SPI, ENABLE);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Set GRAM write direction and BGR = 1 */
- /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
- /* AM = 1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- }
-}
-#endif /* USE_LCD_DrawBMP */
-
-/**
- * @brief Displays a full rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: rectangle height.
- * @param Width: rectangle width.
- * @retval None
- */
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
- LCD_SetTextColor(TextColor);
-
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-
- Width -= 2;
- Height--;
- Ypos--;
-
- LCD_SetTextColor(BackColor);
-
- while(Height--)
- {
- LCD_DrawLine(++Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- }
-
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Displays a full circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D; /* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
-
- CurX = 0;
- CurY = Radius;
-
- LCD_SetTextColor(BackColor);
-
- while (CurX <= CurY)
- {
- if(CurY > 0)
- {
- LCD_DrawLine(Xpos - CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- }
-
- if(CurX > 0)
- {
- LCD_DrawLine(Xpos - CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- }
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-
- LCD_SetTextColor(TextColor);
- LCD_DrawCircle(Xpos, Ypos, Radius);
-}
-
-/**
- * @brief Displays an uni line (between two points).
- * @param x1: specifies the point 1 x position.
- * @param y1: specifies the point 1 y position.
- * @param x2: specifies the point 2 x position.
- * @param y2: specifies the point 2 y position.
- * @retval None
- */
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
-{
- int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
- yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
- curpixel = 0;
-
- deltax = ABS(x2 - x1); /* The difference between the x's */
- deltay = ABS(y2 - y1); /* The difference between the y's */
- x = x1; /* Start x off at the first pixel */
- y = y1; /* Start y off at the first pixel */
-
- if (x2 >= x1) /* The x-values are increasing */
- {
- xinc1 = 1;
- xinc2 = 1;
- }
- else /* The x-values are decreasing */
- {
- xinc1 = -1;
- xinc2 = -1;
- }
-
- if (y2 >= y1) /* The y-values are increasing */
- {
- yinc1 = 1;
- yinc2 = 1;
- }
- else /* The y-values are decreasing */
- {
- yinc1 = -1;
- yinc2 = -1;
- }
-
- if (deltax >= deltay) /* There is at least one x-value for every y-value */
- {
- xinc1 = 0; /* Don't change the x when numerator >= denominator */
- yinc2 = 0; /* Don't change the y for every iteration */
- den = deltax;
- num = deltax / 2;
- numadd = deltay;
- numpixels = deltax; /* There are more x-values than y-values */
- }
- else /* There is at least one y-value for every x-value */
- {
- xinc2 = 0; /* Don't change the x for every iteration */
- yinc1 = 0; /* Don't change the y when numerator >= denominator */
- den = deltay;
- num = deltay / 2;
- numadd = deltax;
- numpixels = deltay; /* There are more y-values than x-values */
- }
-
- for (curpixel = 0; curpixel <= numpixels; curpixel++)
- {
- PutPixel(x, y); /* Draw the current pixel */
- num += numadd; /* Increase the numerator by the top of the fraction */
- if (num >= den) /* Check if numerator >= denominator */
- {
- num -= den; /* Calculate the new numerator value */
- x += xinc1; /* Change the x as appropriate */
- y += yinc1; /* Change the y as appropriate */
- }
- x += xinc2; /* Change the x as appropriate */
- y += yinc2; /* Change the y as appropriate */
- }
-}
-
-/**
- * @brief Displays an polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLine(pPoint Points, uint16_t PointCount)
-{
- int16_t X = 0, Y = 0;
-
- if(PointCount < 2)
- {
- return;
- }
-
- while(--PointCount)
- {
- X = Points->X;
- Y = Points->Y;
- Points++;
- LCD_DrawUniLine(X, Y, Points->X, Points->Y);
- }
-}
-
-/**
- * @brief Displays an relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @param Closed: specifies if the draw is closed or not.
- * 1: closed, 0 : not closed.
- * @retval None
- */
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed)
-{
- int16_t X = 0, Y = 0;
- pPoint First = Points;
-
- if(PointCount < 2)
- {
- return;
- }
- X = Points->X;
- Y = Points->Y;
- while(--PointCount)
- {
- Points++;
- LCD_DrawUniLine(X, Y, X + Points->X, Y + Points->Y);
- X = X + Points->X;
- Y = Y + Points->Y;
- }
- if(Closed)
- {
- LCD_DrawUniLine(First->X, First->Y, X, Y);
- }
-}
-
-/**
- * @brief Displays a closed polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLine(Points, PointCount);
- LCD_DrawUniLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
-}
-
-/**
- * @brief Displays a relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 0);
-}
-
-/**
- * @brief Displays a closed relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 1);
-}
-
-
-/**
- * @brief Displays a full polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount)
-{
- /* public-domain code by Darel Rex Finley, 2007 */
- uint16_t nodes = 0, nodeX[MAX_POLY_CORNERS], pixelX = 0, pixelY = 0, i = 0,
- j = 0, swap = 0;
- uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0;
-
- IMAGE_LEFT = IMAGE_RIGHT = Points->X;
- IMAGE_TOP= IMAGE_BOTTOM = Points->Y;
-
- for(i = 1; i < PointCount; i++)
- {
- pixelX = POLY_X(i);
- if(pixelX < IMAGE_LEFT)
- {
- IMAGE_LEFT = pixelX;
- }
- if(pixelX > IMAGE_RIGHT)
- {
- IMAGE_RIGHT = pixelX;
- }
-
- pixelY = POLY_Y(i);
- if(pixelY < IMAGE_TOP)
- {
- IMAGE_TOP = pixelY;
- }
- if(pixelY > IMAGE_BOTTOM)
- {
- IMAGE_BOTTOM = pixelY;
- }
- }
-
- LCD_SetTextColor(BackColor);
-
- /* Loop through the rows of the image. */
- for (pixelY = IMAGE_TOP; pixelY < IMAGE_BOTTOM; pixelY++)
- {
- /* Build a list of nodes. */
- nodes = 0; j = PointCount-1;
-
- for (i = 0; i < PointCount; i++)
- {
- if (POLY_Y(i)<(double) pixelY && POLY_Y(j)>=(double) pixelY || POLY_Y(j)<(double) pixelY && POLY_Y(i)>=(double) pixelY)
- {
- nodeX[nodes++]=(int) (POLY_X(i)+((pixelY-POLY_Y(i))*(POLY_X(j)-POLY_X(i)))/(POLY_Y(j)-POLY_Y(i)));
- }
- j = i;
- }
-
- /* Sort the nodes, via a simple "Bubble" sort. */
- i = 0;
- while (i < nodes-1)
- {
- if (nodeX[i]>nodeX[i+1])
- {
- swap = nodeX[i];
- nodeX[i] = nodeX[i+1];
- nodeX[i+1] = swap;
- if(i)
- {
- i--;
- }
- }
- else
- {
- i++;
- }
- }
-
- /* Fill the pixels between node pairs. */
- for (i = 0; i < nodes; i+=2)
- {
- if(nodeX[i] >= IMAGE_RIGHT)
- {
- break;
- }
- if(nodeX[i+1] > IMAGE_LEFT)
- {
- if (nodeX[i] < IMAGE_LEFT)
- {
- nodeX[i]=IMAGE_LEFT;
- }
- if(nodeX[i+1] > IMAGE_RIGHT)
- {
- nodeX[i+1] = IMAGE_RIGHT;
- }
- LCD_SetTextColor(BackColor);
- LCD_DrawLine(pixelY, nodeX[i+1], nodeX[i+1] - nodeX[i], LCD_DIR_HORIZONTAL);
- LCD_SetTextColor(TextColor);
- PutPixel(pixelY, nodeX[i+1]);
- PutPixel(pixelY, nodeX[i]);
- /* for (j=nodeX[i]; j<nodeX[i+1]; j++) PutPixel(j,pixelY); */
- }
- }
- }
-
- /* draw the edges */
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Reset LCD control line(/CS) and Send Start-Byte
- * @param Start_Byte: the Start-Byte to be sent
- * @retval None
- */
-void LCD_nCS_StartByte(uint8_t Start_Byte)
-{
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET);
-
- SPI_I2S_SendData(LCD_SPI, Start_Byte);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-}
-
-
-/**
- * @brief Writes index to select the LCD register.
- * @param LCD_Reg: address of the selected register.
- * @retval None
- */
-void LCD_WriteRegIndex(uint8_t LCD_Reg)
-{
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | SET_INDEX);
-
- /* Write 16-bit Reg Index (High Byte is 0) */
- SPI_I2S_SendData(LCD_SPI, 0x00);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- SPI_I2S_SendData(LCD_SPI, LCD_Reg);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the selected LCD ILI9320 register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-static void LCD_WriteRegILI9320(uint8_t LCD_Reg, uint16_t LCD_RegValue)
-{
- /* Write 16-bit Index (then Write Reg) */
- LCD_WriteRegIndex(LCD_Reg);
-
- /* Write 16-bit Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG);
-
- SPI_I2S_SendData(LCD_SPI, LCD_RegValue>>8);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- SPI_I2S_SendData(LCD_SPI, (LCD_RegValue & 0xFF));
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Reads the selected LCD Register.
- * @param LCD_Reg: address of the selected register.
- * @retval LCD Register Value.
- */
-uint16_t LCD_ReadReg(uint8_t LCD_Reg)
-{
- uint16_t tmp = 0;
- uint8_t i = 0;
-
- /* LCD_SPI prescaler: 4 */
- LCD_SPI->CR1 &= 0xFFC7;
- LCD_SPI->CR1 |= 0x0008;
- /* Write 16-bit Index (then Read Reg) */
- LCD_WriteRegIndex(LCD_Reg);
- /* Read 16-bit Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_READ_REG);
-
- for(i = 0; i < 5; i++)
- {
- SPI_I2S_SendData(LCD_SPI, 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- /* One byte of invalid dummy data read after the start byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
- SPI_I2S_ReceiveData(LCD_SPI);
- }
-
- SPI_I2S_SendData(LCD_SPI, 0xFF);
-
- /* Read upper byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- /* Read lower byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
- tmp = SPI_I2S_ReceiveData(LCD_SPI);
-
-
- SPI_I2S_SendData(LCD_SPI, 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- /* Read lower byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
-
- tmp = ((tmp & 0xFF) << 8) | SPI_I2S_ReceiveData(LCD_SPI);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-
- /* LCD_SPI prescaler: 2 */
- LCD_SPI->CR1 &= 0xFFC7;
-
- return tmp;
-}
-
-
-/**
- * @brief Prepare to write to the LCD RAM.
- * @param None
- * @retval None
- */
-void LCD_WriteRAM_Prepare(void)
-{
- LCD_WriteRegIndex(LCD_REG_34); /* Select GRAM Reg */
-
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG);
-}
-
-
-/**
- * @brief Writes 1 word to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAMWord(uint16_t RGB_Code)
-{
-
- LCD_WriteRAM_Prepare();
-
- LCD_WriteRAM(RGB_Code);
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the selected LCD HX8312 register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-static void LCD_WriteRegHX8312(uint8_t LCD_Reg, uint8_t LCD_RegValue)
-{
- uint16_t tmp = 0;
-
- LCD_CtrlLinesWrite(LCD_NWR_GPIO_PORT, LCD_NWR_PIN, Bit_RESET);
- LCD_CtrlLinesWrite(LCD_RS_GPIO_PORT, LCD_RS_PIN, Bit_RESET);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET);
-
- tmp = LCD_Reg << 8;
- tmp |= LCD_RegValue;
-
- SPI_I2S_SendData(LCD_SPI, tmp);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the selected LCD register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_WriteRegILI9320(LCD_Reg, LCD_RegValue);
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteRegHX8312(LCD_Reg, ((uint8_t)LCD_RegValue));
- }
-}
-
-
-/**
- * @brief Writes to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAM(uint16_t RGB_Code)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- SPI_I2S_SendData(LCD_SPI, RGB_Code >> 8);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- SPI_I2S_SendData(LCD_SPI, RGB_Code & 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- }
-
- if(LCDType == LCD_HX8312)
- {
- LCD_CtrlLinesWrite(LCD_NWR_GPIO_PORT, LCD_NWR_PIN, Bit_RESET);
- LCD_CtrlLinesWrite(LCD_RS_GPIO_PORT, LCD_RS_PIN, Bit_SET);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET);
- SPI_I2S_SendData(LCD_SPI, RGB_Code);
-
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-}
-
-
-/**
- * @brief Power on the LCD.
- * @param None
- * @retval None
- */
-void LCD_PowerOn(void)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Power On sequence ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* delay 50 ms */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- }
- else if(LCDType == LCD_HX8312)
- {
- /* Power On Set */
- LCD_WriteReg(LCD_REG_28, 0x73);
- LCD_WriteReg(LCD_REG_36, 0x74);
- LCD_WriteReg(LCD_REG_30, 0x01);
- LCD_WriteReg(LCD_REG_24, 0xC1);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_24, 0xE1);
- LCD_WriteReg(LCD_REG_24, 0xF1);
- _delay_(6); /* Delay 60 ms */
- LCD_WriteReg(LCD_REG_24, 0xF5);
- _delay_(6); /* Delay 60 ms */
- LCD_WriteReg(LCD_REG_27, 0x09);
- _delay_(1); /* Delay 10 ms */
- LCD_WriteReg(LCD_REG_31, 0x11);
- LCD_WriteReg(LCD_REG_32, 0x0E);
- LCD_WriteReg(LCD_REG_30, 0x81);
- _delay_(1); /* Delay 10 ms */
- }
-}
-
-
-/**
- * @brief Enables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOn(void)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Display On */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- }
- else if(LCDType == LCD_HX8312)
- {
- LCD_WriteReg(LCD_REG_1, 0x50);
- LCD_WriteReg(LCD_REG_5, 0x04);
- /* Display On */
- LCD_WriteReg(LCD_REG_0, 0x80);
- LCD_WriteReg(LCD_REG_59, 0x01);
- _delay_(4); /* Delay 40 ms */
- LCD_WriteReg(LCD_REG_0, 0x20);
- }
-}
-
-
-/**
- * @brief Disables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOff(void)
-{
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Display Off */
- LCD_WriteReg(LCD_REG_7, 0x0);
- }
- else if(LCDType == LCD_HX8312)
- {
- /* Display Off */
- LCD_WriteReg(LCD_REG_0, 0xA0);
- _delay_(4); /* Delay 40 ms */
- LCD_WriteReg(LCD_REG_59, 0x00);
- }
-}
-
-
-/**
- * @brief Configures LCD control lines in Output Push-Pull mode.
- * @param None
- * @retval None
- */
-void LCD_CtrlLinesConfig(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(LCD_NCS_GPIO_CLK | LCD_NWR_GPIO_CLK | LCD_RS_GPIO_CLK, ENABLE);
-
- /* Configure NCS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure NWR(RNW), RS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_RS_PIN;
- GPIO_Init(LCD_RS_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_NWR_PIN;
- GPIO_Init(LCD_NWR_GPIO_PORT, &GPIO_InitStructure);
-
- LCD_CtrlLinesWrite(LCD_NWR_GPIO_PORT, LCD_NWR_PIN, Bit_SET);
- LCD_CtrlLinesWrite(LCD_RS_GPIO_PORT, LCD_RS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Sets or reset LCD control lines.
- * @param GPIOx: where x can be B or D to select the GPIO peripheral.
- * @param CtrlPins: the Control line.
- * This parameter can be:
- * @arg LCD_NCS_PIN: Chip Select pin
- * @arg LCD_NWR_PIN: Read/Write Selection pin
- * @arg LCD_RS_PIN: Register/RAM Selection pin
- * @param BitVal: specifies the value to be written to the selected bit.
- * This parameter can be:
- * @arg Bit_RESET: to clear the port pin
- * @arg Bit_SET: to set the port pin
- * @retval None
- */
-void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, BitAction BitVal)
-{
- /* Set or Reset the control line */
- GPIO_WriteBit(GPIOx, CtrlPins, BitVal);
-}
-
-/**
- * @brief Configures the LCD_SPI interface.
- * @param None
- * @retval None
- */
-void LCD_SPIConfig(void)
-{
- SPI_InitTypeDef SPI_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(LCD_SPI_SCK_GPIO_CLK | LCD_SPI_MISO_GPIO_CLK | LCD_SPI_MOSI_GPIO_CLK, ENABLE);
-
- /* Enable SPI clock */
- RCC_APB1PeriphClockCmd(LCD_SPI_CLK, ENABLE);
-
- /* Configure SPI pins: SCK, MISO and MOSI */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN;
- GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
- GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- SPI_I2S_DeInit(LCD_SPI);
-
- /* SPI Config */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- }
- else if(LCDType == LCD_HX8312)
- {
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
- }
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
-
- SPI_Init(LCD_SPI, &SPI_InitStructure);
-
- /* SPI enable */
- SPI_Cmd(LCD_SPI, ENABLE);
-}
-
-/**
- * @brief Displays a pixel.
- * @param x: pixel x.
- * @param y: pixel y.
- * @retval None
- */
-static void PutPixel(int16_t x, int16_t y)
-{
- if(x < 0 || x > 239 || y < 0 || y > 319)
- {
- return;
- }
- LCD_DrawLine(x, y, 1, LCD_DIR_HORIZONTAL);
-}
-
-#ifndef USE_Delay
-/**
- * @brief Inserts a delay time.
- * @param nCount: specifies the delay time length.
- * @retval None
- */
-static void delay(vu32 nCount)
-{
- vu32 index = 0;
- for(index = (100000 * nCount); index != 0; index--)
- {
- }
-}
-#endif /* USE_Delay*/
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210B_EVAL/stm3210b_eval_lcd.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210B_EVAL/stm3210b_eval_lcd.h
deleted file mode 100644
index 0b7577c..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210B_EVAL/stm3210b_eval_lcd.h
+++ /dev/null
@@ -1,394 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210b_eval_lcd.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm3210b_eval_lcd
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM3210B_EVAL_LCD_H
-#define __STM3210B_EVAL_LCD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-#include "../Common/fonts.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210B_EVAL
- * @{
- */
-
-/** @addtogroup STM3210B_EVAL_LCD
- * @{
- */
-
-
-/** @defgroup STM3210B_EVAL_LCD_Exported_Types
- * @{
- */
-typedef struct
-{
- int16_t X;
- int16_t Y;
-} Point, * pPoint;
-/**
- * @}
- */
-
-
-
-/** @defgroup STM3210B_EVAL_LCD_Exported_Constants
- * @{
- */
-
-/**
- * @brief Uncomment the line below if you want to use LCD_DrawBMP function to
- * display a bitmap picture on the LCD. This function assumes that the bitmap
- * file is loaded in the SPI Flash (mounted on STM3210B-EVAL board), however
- * user can tailor it according to his application hardware requirement.
- */
-/*#define USE_LCD_DrawBMP*/
-
-/**
- * @brief Uncomment the line below if you want to use user defined Delay function
- * (for precise timing), otherwise default _delay_ function defined within
- * this driver is used (less precise timing).
- */
-/* #define USE_Delay */
-
-#ifdef USE_Delay
-#include "main.h"
-
- #define _delay_ Delay /* !< User can provide more timing precise _delay_ function
- (with 10ms time base), using SysTick for example */
-#else
- #define _delay_ delay /* !< Default _delay_ function with less precise timing */
-#endif
-
-
-/**
- * @brief LCD Control pins
- */
-#define LCD_NCS_PIN GPIO_Pin_2
-#define LCD_NCS_GPIO_PORT GPIOB
-#define LCD_NCS_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LCD_NWR_PIN GPIO_Pin_15
-#define LCD_NWR_GPIO_PORT GPIOD
-#define LCD_NWR_GPIO_CLK RCC_APB2Periph_GPIOD
-#define LCD_RS_PIN GPIO_Pin_7
-#define LCD_RS_GPIO_PORT GPIOD
-#define LCD_RS_GPIO_CLK RCC_APB2Periph_GPIOD
-
-/**
- * @brief LCD SPI Interface pins
- */
-#define LCD_SPI SPI2
-#define LCD_SPI_CLK RCC_APB1Periph_SPI2
-#define LCD_SPI_SCK_PIN GPIO_Pin_13
-#define LCD_SPI_SCK_GPIO_PORT GPIOB
-#define LCD_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LCD_SPI_MISO_PIN GPIO_Pin_14
-#define LCD_SPI_MISO_GPIO_PORT GPIOB
-#define LCD_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LCD_SPI_MOSI_PIN GPIO_Pin_15
-#define LCD_SPI_MOSI_GPIO_PORT GPIOB
-#define LCD_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOB
-
-/**
- * @brief LCD Registers
- */
-#define LCD_REG_0 0x00
-#define LCD_REG_1 0x01
-#define LCD_REG_2 0x02
-#define LCD_REG_3 0x03
-#define LCD_REG_4 0x04
-#define LCD_REG_5 0x05
-#define LCD_REG_6 0x06
-#define LCD_REG_7 0x07
-#define LCD_REG_8 0x08
-#define LCD_REG_9 0x09
-#define LCD_REG_10 0x0A
-#define LCD_REG_12 0x0C
-#define LCD_REG_13 0x0D
-#define LCD_REG_14 0x0E
-#define LCD_REG_15 0x0F
-#define LCD_REG_16 0x10
-#define LCD_REG_17 0x11
-#define LCD_REG_18 0x12
-#define LCD_REG_19 0x13
-#define LCD_REG_20 0x14
-#define LCD_REG_21 0x15
-#define LCD_REG_22 0x16
-#define LCD_REG_23 0x17
-#define LCD_REG_24 0x18
-#define LCD_REG_25 0x19
-#define LCD_REG_26 0x1A
-#define LCD_REG_27 0x1B
-#define LCD_REG_28 0x1C
-#define LCD_REG_29 0x1D
-#define LCD_REG_30 0x1E
-#define LCD_REG_31 0x1F
-#define LCD_REG_32 0x20
-#define LCD_REG_33 0x21
-#define LCD_REG_34 0x22
-#define LCD_REG_36 0x24
-#define LCD_REG_37 0x25
-#define LCD_REG_40 0x28
-#define LCD_REG_41 0x29
-#define LCD_REG_43 0x2B
-#define LCD_REG_45 0x2D
-#define LCD_REG_48 0x30
-#define LCD_REG_49 0x31
-#define LCD_REG_50 0x32
-#define LCD_REG_51 0x33
-#define LCD_REG_52 0x34
-#define LCD_REG_53 0x35
-#define LCD_REG_54 0x36
-#define LCD_REG_55 0x37
-#define LCD_REG_56 0x38
-#define LCD_REG_57 0x39
-#define LCD_REG_59 0x3B
-#define LCD_REG_60 0x3C
-#define LCD_REG_61 0x3D
-#define LCD_REG_62 0x3E
-#define LCD_REG_63 0x3F
-#define LCD_REG_64 0x40
-#define LCD_REG_65 0x41
-#define LCD_REG_66 0x42
-#define LCD_REG_67 0x43
-#define LCD_REG_68 0x44
-#define LCD_REG_69 0x45
-#define LCD_REG_70 0x46
-#define LCD_REG_71 0x47
-#define LCD_REG_72 0x48
-#define LCD_REG_73 0x49
-#define LCD_REG_74 0x4A
-#define LCD_REG_75 0x4B
-#define LCD_REG_76 0x4C
-#define LCD_REG_77 0x4D
-#define LCD_REG_78 0x4E
-#define LCD_REG_79 0x4F
-#define LCD_REG_80 0x50
-#define LCD_REG_81 0x51
-#define LCD_REG_82 0x52
-#define LCD_REG_83 0x53
-#define LCD_REG_96 0x60
-#define LCD_REG_97 0x61
-#define LCD_REG_106 0x6A
-#define LCD_REG_118 0x76
-#define LCD_REG_128 0x80
-#define LCD_REG_129 0x81
-#define LCD_REG_130 0x82
-#define LCD_REG_131 0x83
-#define LCD_REG_132 0x84
-#define LCD_REG_133 0x85
-#define LCD_REG_134 0x86
-#define LCD_REG_135 0x87
-#define LCD_REG_136 0x88
-#define LCD_REG_137 0x89
-#define LCD_REG_139 0x8B
-#define LCD_REG_140 0x8C
-#define LCD_REG_141 0x8D
-#define LCD_REG_143 0x8F
-#define LCD_REG_144 0x90
-#define LCD_REG_145 0x91
-#define LCD_REG_146 0x92
-#define LCD_REG_147 0x93
-#define LCD_REG_148 0x94
-#define LCD_REG_149 0x95
-#define LCD_REG_150 0x96
-#define LCD_REG_151 0x97
-#define LCD_REG_152 0x98
-#define LCD_REG_153 0x99
-#define LCD_REG_154 0x9A
-#define LCD_REG_157 0x9D
-#define LCD_REG_192 0xC0
-#define LCD_REG_193 0xC1
-#define LCD_REG_227 0xE3
-#define LCD_REG_229 0xE5
-#define LCD_REG_231 0xE7
-#define LCD_REG_239 0xEF
-
-
-/**
- * @brief LCD color
- */
-#define LCD_COLOR_WHITE 0xFFFF
-#define LCD_COLOR_BLACK 0x0000
-#define LCD_COLOR_GREY 0xF7DE
-#define LCD_COLOR_BLUE 0x001F
-#define LCD_COLOR_BLUE2 0x051F
-#define LCD_COLOR_RED 0xF800
-#define LCD_COLOR_MAGENTA 0xF81F
-#define LCD_COLOR_GREEN 0x07E0
-#define LCD_COLOR_CYAN 0x7FFF
-#define LCD_COLOR_YELLOW 0xFFE0
-
-/**
- * @brief LCD Lines depending on the chosen fonts.
- */
-#define LCD_LINE_0 LINE(0)
-#define LCD_LINE_1 LINE(1)
-#define LCD_LINE_2 LINE(2)
-#define LCD_LINE_3 LINE(3)
-#define LCD_LINE_4 LINE(4)
-#define LCD_LINE_5 LINE(5)
-#define LCD_LINE_6 LINE(6)
-#define LCD_LINE_7 LINE(7)
-#define LCD_LINE_8 LINE(8)
-#define LCD_LINE_9 LINE(9)
-#define LCD_LINE_10 LINE(10)
-#define LCD_LINE_11 LINE(11)
-#define LCD_LINE_12 LINE(12)
-#define LCD_LINE_13 LINE(13)
-#define LCD_LINE_14 LINE(14)
-#define LCD_LINE_15 LINE(15)
-#define LCD_LINE_16 LINE(16)
-#define LCD_LINE_17 LINE(17)
-#define LCD_LINE_18 LINE(18)
-#define LCD_LINE_19 LINE(19)
-#define LCD_LINE_20 LINE(20)
-#define LCD_LINE_21 LINE(21)
-#define LCD_LINE_22 LINE(22)
-#define LCD_LINE_23 LINE(23)
-#define LCD_LINE_24 LINE(24)
-#define LCD_LINE_25 LINE(25)
-#define LCD_LINE_26 LINE(26)
-#define LCD_LINE_27 LINE(27)
-#define LCD_LINE_28 LINE(28)
-#define LCD_LINE_29 LINE(29)
-
-/**
- * @brief LCD default font
- */
-#define LCD_DEFAULT_FONT Font16x24
-
-/**
- * @brief LCD Direction
- */
-#define LCD_DIR_HORIZONTAL 0x0000
-#define LCD_DIR_VERTICAL 0x0001
-
-/**
- * @brief LCD Size (Width and Height)
- */
-#define LCD_PIXEL_WIDTH 0x0140
-#define LCD_PIXEL_HEIGHT 0x00F0
-
-/**
- * @}
- */
-
-/** @defgroup STM3210B_EVAL_LCD_Exported_Macros
- * @{
- */
-#define ASSEMBLE_RGB(R, G, B) ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3))
-/**
- * @}
- */
-
-
-
-/** @defgroup STM3210B_EVAL_LCD_Exported_Functions
- * @{
- */
-void LCD_DeInit(void);
-void LCD_Setup(void);
-void STM3210B_LCD_Init(void);
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
-void LCD_SetTextColor(__IO uint16_t Color);
-void LCD_SetBackColor(__IO uint16_t Color);
-void LCD_ClearLine(uint8_t Line);
-void LCD_Clear(uint16_t Color);
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos);
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c);
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii);
-void LCD_SetFont(sFONT *fonts);
-sFONT *LCD_GetFont(void);
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr);
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_WindowModeDisable(void);
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction);
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_DrawMonoPict(const uint32_t *Pict);
-void LCD_DrawBMP(uint32_t BmpAddress);
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_PolyLine(pPoint Points, uint16_t PointCount);
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount);
-
-void LCD_nCS_StartByte(uint8_t Start_Byte);
-void LCD_WriteRegIndex(uint8_t LCD_Reg);
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
-void LCD_WriteRAM_Prepare(void);
-void LCD_WriteRAMWord(uint16_t RGB_Code);
-uint16_t LCD_ReadReg(uint8_t LCD_Reg);
-void LCD_WriteRAM(uint16_t RGB_Code);
-void LCD_PowerOn(void);
-void LCD_DisplayOn(void);
-void LCD_DisplayOff(void);
-
-void LCD_CtrlLinesConfig(void);
-void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, BitAction BitVal);
-void LCD_SPIConfig(void);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM3210B_EVAL_LCD_H */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval.c
deleted file mode 100644
index b256930..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval.c
+++ /dev/null
@@ -1,604 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210c_eval.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides
- * - set of firmware functions to manage Leds, push-button and COM ports
- * - low level initialization functions for SD card (on SPI) and I2C
- * serial EEPROM (sEE)
- * available on STM3210C-EVAL evaluation board from STMicroelectronics.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm3210c_eval.h"
-#include "stm32f10x_spi.h"
-#include "stm32f10x_i2c.h"
-#include "stm32f10x_dma.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210C_EVAL
- * @{
- */
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL
- * @brief This file provides firmware functions to manage Leds, push-buttons,
- * COM ports, SD card on SPI and EEPROM (sEE) available on STM3210C-EVAL
- * evaluation board from STMicroelectronics.
- * @{
- */
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Private_Variables
- * @{
- */
-GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT,
- LED4_GPIO_PORT};
-const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN,
- LED4_PIN};
-const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK,
- LED4_GPIO_CLK};
-
-GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, TAMPER_BUTTON_GPIO_PORT,
- KEY_BUTTON_GPIO_PORT};
-
-const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, TAMPER_BUTTON_PIN,
- KEY_BUTTON_PIN};
-
-const uint32_t BUTTON_CLK[BUTTONn] = {WAKEUP_BUTTON_GPIO_CLK, TAMPER_BUTTON_GPIO_CLK,
- KEY_BUTTON_GPIO_CLK};
-
-const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {WAKEUP_BUTTON_EXTI_LINE,
- TAMPER_BUTTON_EXTI_LINE,
- KEY_BUTTON_EXTI_LINE};
-
-const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PORT_SOURCE,
- TAMPER_BUTTON_EXTI_PORT_SOURCE,
- KEY_BUTTON_EXTI_PORT_SOURCE};
-
-const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PIN_SOURCE,
- TAMPER_BUTTON_EXTI_PIN_SOURCE,
- KEY_BUTTON_EXTI_PIN_SOURCE};
-
-const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, TAMPER_BUTTON_EXTI_IRQn,
- KEY_BUTTON_EXTI_IRQn};
-
-USART_TypeDef* COM_USART[COMn] = {EVAL_COM1};
-
-GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT};
-
-GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT};
-
-const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK};
-
-const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK};
-
-const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK};
-
-const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN};
-
-const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN};
-
-DMA_InitTypeDef sEEDMA_InitStructure;
-
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Private_FunctionPrototypes
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Private_Functions
- * @{
- */
-
-/**
- * @brief Configures LED GPIO.
- * @param Led: Specifies the Led to be configured.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIO_LED Clock */
- RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);
-
- /* Configure the GPIO_LED pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
- GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);
-}
-
-/**
- * @brief Turns selected LED On.
- * @param Led: Specifies the Led to be set on.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOn(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];
-}
-
-/**
- * @brief Turns selected LED Off.
- * @param Led: Specifies the Led to be set off.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOff(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BRR = GPIO_PIN[Led];
-}
-
-/**
- * @brief Toggles the selected LED.
- * @param Led: Specifies the Led to be toggled.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDToggle(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];
-}
-
-/**
- * @brief Configures Button GPIO and EXTI Line.
- * @param Button: Specifies the Button to be configured.
- * This parameter can be one of following parameters:
- * @arg BUTTON_WAKEUP: Wakeup Push Button
- * @arg BUTTON_TAMPER: Tamper Push Button
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @param Button_Mode: Specifies Button mode.
- * This parameter can be one of following parameters:
- * @arg BUTTON_MODE_GPIO: Button will be used as simple IO
- * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt
- * generation capability
- * @retval None
- */
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* Enable the BUTTON Clock */
- RCC_APB2PeriphClockCmd(BUTTON_CLK[Button] | RCC_APB2Periph_AFIO, ENABLE);
-
- /* Configure Button pin as input floating */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button];
- GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);
-
-
- if (Button_Mode == BUTTON_MODE_EXTI)
- {
- /* Connect Button EXTI Line to Button GPIO Pin */
- GPIO_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);
-
- /* Configure Button EXTI line */
- EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button];
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
-
- if(Button != BUTTON_WAKEUP)
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- }
- else
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- }
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /* Enable and set Button EXTI Interrupt to the lowest priority */
- NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button];
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
- NVIC_Init(&NVIC_InitStructure);
- }
-}
-
-/**
- * @brief Returns the selected Button state.
- * @param Button: Specifies the Button to be checked.
- * This parameter can be one of following parameters:
- * @arg BUTTON_WAKEUP: Wakeup Push Button
- * @arg BUTTON_TAMPER: Tamper Push Button
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @retval The Button GPIO pin value.
- */
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button)
-{
- return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);
-}
-
-
-/**
- * @brief Configures COM port.
- * @param COM: Specifies the COM port to be configured.
- * This parameter can be one of following parameters:
- * @arg COM1
- * @arg COM2
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that
- * contains the configuration information for the specified USART peripheral.
- * @retval None
- */
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM] | RCC_APB2Periph_AFIO, ENABLE);
-
- if (COM == COM1)
- {
- /* Enable the USART2 Pins Software Remapping */
- GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
- RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
- }
-
- /* Configure USART Tx as alternate function push-pull */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);
-
- /* Configure USART Rx as input floating */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];
- GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);
-
- /* USART configuration */
- USART_Init(COM_USART[COM], USART_InitStruct);
-
- /* Enable USART */
- USART_Cmd(COM_USART[COM], ENABLE);
-}
-
-/**
- * @brief DeInitializes the SD/SD communication.
- * @param None
- * @retval None
- */
-void SD_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- SPI_Cmd(SD_SPI, DISABLE); /*!< SD_SPI disable */
- SPI_I2S_DeInit(SD_SPI); /*!< DeInitializes the SD_SPI */
-
- /*!< SD_SPI Periph clock disable */
- RCC_APB1PeriphClockCmd(SD_SPI_CLK, DISABLE);
- /*!< DeRemap SPI3 Pins */
- GPIO_PinRemapConfig(GPIO_Remap_SPI3, DISABLE);
-
- /*!< Configure SD_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
- GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
- GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
- GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
- GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the SD_SPI and CS pins.
- * @param None
- * @retval None
- */
-void SD_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- SPI_InitTypeDef SPI_InitStructure;
-
- /*!< SD_SPI_CS_GPIO, SD_SPI_MOSI_GPIO, SD_SPI_MISO_GPIO, SD_SPI_DETECT_GPIO
- and SD_SPI_SCK_GPIO Periph clock enable */
- RCC_APB2PeriphClockCmd(SD_CS_GPIO_CLK | SD_SPI_MOSI_GPIO_CLK | SD_SPI_MISO_GPIO_CLK |
- SD_SPI_SCK_GPIO_CLK | SD_DETECT_GPIO_CLK, ENABLE);
-
- /*!< SD_SPI Periph clock enable */
- RCC_APB1PeriphClockCmd(SD_SPI_CLK, ENABLE);
- /*!< AFIO Periph clock enable */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- /*!< Remap SPI3 Pins */
- GPIO_PinRemapConfig(GPIO_Remap_SPI3,ENABLE);
-
- /*!< Configure SD_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
- GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
- GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< SD_SPI Config */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_CRCPolynomial = 7;
- SPI_Init(SD_SPI, &SPI_InitStructure);
-
- SPI_Cmd(SD_SPI, ENABLE); /*!< SD_SPI enable */
-}
-
-/**
- * @brief DeInitializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* sEE_I2C Peripheral Disable */
- I2C_Cmd(sEE_I2C, DISABLE);
-
- /* sEE_I2C DeInit */
- I2C_DeInit(sEE_I2C);
-
- /*!< sEE_I2C Periph clock disable */
- RCC_APB1PeriphClockCmd(sEE_I2C_CLK, DISABLE);
-
- /*!< GPIO configuration */
- /*!< Configure sEE_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sEE_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;
- GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure and enable I2C DMA TX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_TX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Configure and enable I2C DMA RX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_RX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Disable and Deinitialize the DMA channels */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_TX, DISABLE);
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_RX, DISABLE);
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_TX);
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_RX);
-}
-
-/**
- * @brief Initializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /*!< sEE_I2C_SCL_GPIO_CLK and sEE_I2C_SDA_GPIO_CLK Periph clock enable */
- RCC_APB2PeriphClockCmd(sEE_I2C_SCL_GPIO_CLK | sEE_I2C_SDA_GPIO_CLK, ENABLE);
-
- /*!< sEE_I2C Periph clock enable */
- RCC_APB1PeriphClockCmd(sEE_I2C_CLK, ENABLE);
-
- /*!< GPIO configuration */
- /*!< Configure sEE_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
- GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sEE_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;
- GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure and enable I2C DMA TX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_TX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Configure and enable I2C DMA RX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_RX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_Init(&NVIC_InitStructure);
-
- /*!< I2C DMA TX and RX channels configuration */
- /* Enable the DMA clock */
- RCC_AHBPeriphClockCmd(sEE_I2C_DMA_CLK, ENABLE);
-
- /* I2C TX DMA Channel configuration */
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_TX);
- sEEDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)sEE_I2C_DR_Address;
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)0; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_BufferSize = 0xFFFF; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- sEEDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- sEEDMA_InitStructure.DMA_PeripheralDataSize = DMA_MemoryDataSize_Byte;
- sEEDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- sEEDMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
- sEEDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
- sEEDMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
- DMA_Init(sEE_I2C_DMA_CHANNEL_TX, &sEEDMA_InitStructure);
-
- /* I2C RX DMA Channel configuration */
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_RX);
- DMA_Init(sEE_I2C_DMA_CHANNEL_RX, &sEEDMA_InitStructure);
-
- /* Enable the DMA Channels Interrupts */
- DMA_ITConfig(sEE_I2C_DMA_CHANNEL_TX, DMA_IT_TC, ENABLE);
- DMA_ITConfig(sEE_I2C_DMA_CHANNEL_RX, DMA_IT_TC, ENABLE);
-}
-
-
-/**
- * @brief Initializes DMA channel used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_DMAConfig(uint32_t pBuffer, uint32_t BufferSize, uint32_t Direction)
-{
- /* Initialize the DMA with the new parameters */
- if (Direction == sEE_DIRECTION_TX)
- {
- /* Configure the DMA Tx Channel with the buffer address and the buffer size */
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pBuffer;
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
- sEEDMA_InitStructure.DMA_BufferSize = (uint32_t)BufferSize;
- DMA_Init(sEE_I2C_DMA_CHANNEL_TX, &sEEDMA_InitStructure);
- }
- else
- {
- /* Configure the DMA Rx Channel with the buffer address and the buffer size */
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pBuffer;
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
- sEEDMA_InitStructure.DMA_BufferSize = (uint32_t)BufferSize;
- DMA_Init(sEE_I2C_DMA_CHANNEL_RX, &sEEDMA_InitStructure);
- }
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval.h
deleted file mode 100644
index 469693f..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210c_eval.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains definitions for STM3210C_EVAL's Leds, push-buttons
- * COM ports, SD Card on SPI and sEE on I2C hardware resources.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 210 STMicroelectronics</center></h2>
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM3210C_EVAL_H
-#define __STM3210C_EVAL_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210C_EVAL
- * @{
- */
-
-/** @addtogroup STM3210C_EVAL_LOW_LEVEL
- * @{
- */
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Exported_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Exported_Constants
- * @{
- */
-
-/** @addtogroup STM3210C_EVAL_LOW_LEVEL_LED
- * @{
- */
-#define LEDn 4
-
-#define LED1_PIN GPIO_Pin_7
-#define LED1_GPIO_PORT GPIOD
-#define LED1_GPIO_CLK RCC_APB2Periph_GPIOD
-
-#define LED2_PIN GPIO_Pin_13
-#define LED2_GPIO_PORT GPIOD
-#define LED2_GPIO_CLK RCC_APB2Periph_GPIOD
-
-#define LED3_PIN GPIO_Pin_3
-#define LED3_GPIO_PORT GPIOD
-#define LED3_GPIO_CLK RCC_APB2Periph_GPIOD
-
-#define LED4_PIN GPIO_Pin_4
-#define LED4_GPIO_PORT GPIOD
-#define LED4_GPIO_CLK RCC_APB2Periph_GPIOD
-
-
-/**
- * @}
- */
-
-/** @addtogroup STM3210C_EVAL_LOW_LEVEL_BUTTON
- * @{
- */
-#define BUTTONn 3 /*!< Joystick pins are connected to
- an IO Expander (accessible through
- I2C1 interface) */
-
-/**
- * @brief Wakeup push-button
- */
-#define WAKEUP_BUTTON_PIN GPIO_Pin_0
-#define WAKEUP_BUTTON_GPIO_PORT GPIOA
-#define WAKEUP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOA
-#define WAKEUP_BUTTON_EXTI_LINE EXTI_Line0
-#define WAKEUP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOA
-#define WAKEUP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource0
-#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn
-
-/**
- * @brief Tamper push-button
- */
-#define TAMPER_BUTTON_PIN GPIO_Pin_13
-#define TAMPER_BUTTON_GPIO_PORT GPIOC
-#define TAMPER_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOC
-#define TAMPER_BUTTON_EXTI_LINE EXTI_Line13
-#define TAMPER_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOC
-#define TAMPER_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource13
-#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-
-/**
- * @brief Key push-button
- */
-#define KEY_BUTTON_PIN GPIO_Pin_9
-#define KEY_BUTTON_GPIO_PORT GPIOB
-#define KEY_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOB
-#define KEY_BUTTON_EXTI_LINE EXTI_Line9
-#define KEY_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOB
-#define KEY_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource9
-#define KEY_BUTTON_EXTI_IRQn EXTI9_5_IRQn
-/**
- * @}
- */
-
-/** @addtogroup STM3210C_EVAL_LOW_LEVEL_COM
- * @{
- */
-#define COMn 1
-
-/**
- * @brief Definition for COM port1, connected to USART2 (USART2 pins remapped on GPIOD)
- */
-#define EVAL_COM1 USART2
-#define EVAL_COM1_CLK RCC_APB1Periph_USART2
-#define EVAL_COM1_TX_PIN GPIO_Pin_5
-#define EVAL_COM1_TX_GPIO_PORT GPIOD
-#define EVAL_COM1_TX_GPIO_CLK RCC_APB2Periph_GPIOD
-#define EVAL_COM1_RX_PIN GPIO_Pin_6
-#define EVAL_COM1_RX_GPIO_PORT GPIOD
-#define EVAL_COM1_RX_GPIO_CLK RCC_APB2Periph_GPIOD
-#define EVAL_COM1_IRQn USART2_IRQn
-
-/**
- * @}
- */
-
-/** @addtogroup STM3210B_EVAL_SD_SPI
- * @{
- */
-/**
- * @brief SD SPI Interface pins
- */
-#define SD_SPI SPI3
-#define SD_SPI_CLK RCC_APB1Periph_SPI3
-#define SD_SPI_SCK_PIN GPIO_Pin_10 /* PC.10 */
-#define SD_SPI_SCK_GPIO_PORT GPIOC /* GPIOC */
-#define SD_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOC
-#define SD_SPI_MISO_PIN GPIO_Pin_11 /* PC.11 */
-#define SD_SPI_MISO_GPIO_PORT GPIOC /* GPIOC */
-#define SD_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOC
-#define SD_SPI_MOSI_PIN GPIO_Pin_12 /* PC.12 */
-#define SD_SPI_MOSI_GPIO_PORT GPIOC /* GPIOC */
-#define SD_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOC
-#define SD_CS_PIN GPIO_Pin_4 /* PA.04 */
-#define SD_CS_GPIO_PORT GPIOA /* GPIOA */
-#define SD_CS_GPIO_CLK RCC_APB2Periph_GPIOA
-#define SD_DETECT_PIN GPIO_Pin_0 /* PE.00 */
-#define SD_DETECT_GPIO_PORT GPIOE /* GPIOE */
-#define SD_DETECT_GPIO_CLK RCC_APB2Periph_GPIOE
-
-/**
- * @}
- */
-
-/** @addtogroup STM3210C_EVAL_LOW_LEVEL_I2C_EE
- * @{
- */
-/**
- * @brief I2C EEPROM Interface pins
- */
-#define sEE_I2C I2C1
-#define sEE_I2C_CLK RCC_APB1Periph_I2C1
-#define sEE_I2C_SCL_PIN GPIO_Pin_6 /* PB.06 */
-#define sEE_I2C_SCL_GPIO_PORT GPIOB /* GPIOB */
-#define sEE_I2C_SCL_GPIO_CLK RCC_APB2Periph_GPIOB
-#define sEE_I2C_SDA_PIN GPIO_Pin_7 /* PB.07 */
-#define sEE_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */
-#define sEE_I2C_SDA_GPIO_CLK RCC_APB2Periph_GPIOB
-#define sEE_M24C64_32
-
-#define sEE_I2C_DMA DMA1
-#define sEE_I2C_DMA_CHANNEL_TX DMA1_Channel6
-#define sEE_I2C_DMA_CHANNEL_RX DMA1_Channel7
-#define sEE_I2C_DMA_FLAG_TX_TC DMA1_IT_TC6
-#define sEE_I2C_DMA_FLAG_TX_GL DMA1_IT_GL6
-#define sEE_I2C_DMA_FLAG_RX_TC DMA1_IT_TC7
-#define sEE_I2C_DMA_FLAG_RX_GL DMA1_IT_GL7
-#define sEE_I2C_DMA_CLK RCC_AHBPeriph_DMA1
-#define sEE_I2C_DR_Address ((uint32_t)0x40005410)
-#define sEE_USE_DMA
-
-#define sEE_I2C_DMA_TX_IRQn DMA1_Channel6_IRQn
-#define sEE_I2C_DMA_RX_IRQn DMA1_Channel7_IRQn
-#define sEE_I2C_DMA_TX_IRQHandler DMA1_Channel6_IRQHandler
-#define sEE_I2C_DMA_RX_IRQHandler DMA1_Channel7_IRQHandler
-#define sEE_I2C_DMA_PREPRIO 0
-#define sEE_I2C_DMA_SUBPRIO 0
-
-#define sEE_DIRECTION_TX 0
-#define sEE_DIRECTION_RX 1
-
-/* Time constant for the delay caclulation allowing to have a millisecond
- incrementing counter. This value should be equal to (System Clock / 1000).
- ie. if system clock = 72MHz then sEE_TIME_CONST should be 72. */
-#define sEE_TIME_CONST 72
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LOW_LEVEL_Exported_Functions
- * @{
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led);
-void STM_EVAL_LEDOn(Led_TypeDef Led);
-void STM_EVAL_LEDOff(Led_TypeDef Led);
-void STM_EVAL_LEDToggle(Led_TypeDef Led);
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode);
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button);
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct);
-void SD_LowLevel_DeInit(void);
-void SD_LowLevel_Init(void);
-void sEE_LowLevel_DeInit(void);
-void sEE_LowLevel_Init(void);
-void sEE_LowLevel_DMAConfig(uint32_t pBuffer, uint32_t BufferSize, uint32_t Direction);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM3210C_EVAL_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval_lcd.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval_lcd.c
deleted file mode 100644
index 3f547e3..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval_lcd.c
+++ /dev/null
@@ -1,1407 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210c_eval_lcd.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file includes the LCD driver for AM-240320L8TNQW00H (LCD_ILI9320)
- * Liquid Crystal Display Module of STM3210C-EVAL board.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm3210c_eval_lcd.h"
-#include "../Common/fonts.c"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210C_EVAL
- * @{
- */
-
-/** @defgroup STM3210C_EVAL_LCD
- * @brief This file includes the LCD driver for AM-240320L8TNQW00H (LCD_ILI9320)
- * Liquid Crystal Display Module of STM3210C-EVAL board.
- * @{
- */
-
-/** @defgroup STM3210C_EVAL_LCD_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LCD_Private_Defines
- * @{
- */
-#define START_BYTE 0x70
-#define SET_INDEX 0x00
-#define READ_STATUS 0x01
-#define LCD_WRITE_REG 0x02
-#define LCD_READ_REG 0x03
-#define MAX_POLY_CORNERS 200
-#define POLY_Y(Z) ((int32_t)((Points + Z)->X))
-#define POLY_X(Z) ((int32_t)((Points + Z)->Y))
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LCD_Private_Macros
- * @{
- */
-#define ABS(X) ((X) > 0 ? (X) : -(X))
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LCD_Private_Variables
- * @{
- */
-static sFONT *LCD_Currentfonts;
-/* Global variables to set the written text color */
-static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LCD_Private_FunctionPrototypes
- * @{
- */
-#ifndef USE_Delay
-static void delay(__IO uint32_t nCount);
-#endif /* USE_Delay*/
-static void PutPixel(int16_t x, int16_t y);
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed);
-/**
- * @}
- */
-
-
-/** @defgroup STM3210C_EVAL_LCD_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the LCD.
- * @param None
- * @retval None
- */
-void LCD_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LCD Display Off */
- LCD_DisplayOff();
-
- /*!< LCD_SPI disable */
- SPI_Cmd(LCD_SPI, DISABLE);
-
- /*!< LCD_SPI DeInit */
- SPI_I2S_DeInit(LCD_SPI);
-
- /*!< Disable SPI clock */
- RCC_APB1PeriphClockCmd(LCD_SPI_CLK, DISABLE);
- GPIO_PinRemapConfig(GPIO_Remap_SPI3, DISABLE);
-
- /* Configure NCS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure SPI pins: SCK, MISO and MOSI */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
- GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN;
- GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
- GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Setups the LCD.
- * @param None
- * @retval None
- */
-void LCD_Setup(void)
-{
-/* Configure the LCD Control pins --------------------------------------------*/
- LCD_CtrlLinesConfig();
-
-/* Configure the LCD_SPI interface ----------------------------------------------*/
- LCD_SPIConfig();
- _delay_(5); /* Delay 50 ms */
- /* Start Initial Sequence ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_229, 0x8000); /* Set the internal vcore voltage */
- LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
- /* Power On sequence -----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0006);
- LCD_WriteReg(LCD_REG_49, 0x0101);
- LCD_WriteReg(LCD_REG_50, 0x0003);
- LCD_WriteReg(LCD_REG_53, 0x0106);
- LCD_WriteReg(LCD_REG_54, 0x0b02);
- LCD_WriteReg(LCD_REG_55, 0x0302);
- LCD_WriteReg(LCD_REG_56, 0x0707);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0600);
- LCD_WriteReg(LCD_REG_61, 0x020b);
-
- /* Set GRAM area ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0x2700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
- /* Partial Display Control -----------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=01 (Horizontal : increment, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-}
-
-
-/**
- * @brief Initializes the LCD.
- * @param None
- * @retval None
- */
-void STM3210C_LCD_Init(void)
-{
- /* Setups the LCD */
- LCD_Setup();
- LCD_SetFont(&LCD_DEFAULT_FONT);
-}
-
-/**
- * @brief Sets the LCD Text and Background colors.
- * @param _TextColor: specifies the Text Color.
- * @param _BackColor: specifies the Background Color.
- * @retval None
- */
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
-{
- TextColor = _TextColor;
- BackColor = _BackColor;
-}
-
-/**
- * @brief Gets the LCD Text and Background colors.
- * @param _TextColor: pointer to the variable that will contain the Text
- Color.
- * @param _BackColor: pointer to the variable that will contain the Background
- Color.
- * @retval None
- */
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
-{
- *_TextColor = TextColor; *_BackColor = BackColor;
-}
-
-/**
- * @brief Sets the Text color.
- * @param Color: specifies the Text color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetTextColor(__IO uint16_t Color)
-{
- TextColor = Color;
-}
-
-
-/**
- * @brief Sets the Background color.
- * @param Color: specifies the Background color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetBackColor(__IO uint16_t Color)
-{
- BackColor = Color;
-}
-
-/**
- * @brief Sets the Text Font.
- * @param fonts: specifies the font to be used.
- * @retval None
- */
-void LCD_SetFont(sFONT *fonts)
-{
- LCD_Currentfonts = fonts;
-}
-
-/**
- * @brief Gets the Text Font.
- * @param None.
- * @retval the used font.
- */
-sFONT *LCD_GetFont(void)
-{
- return LCD_Currentfonts;
-}
-
-/**
- * @brief Clears the selected line.
- * @param Line: the Line to be cleared.
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..n
- * @retval None
- */
-void LCD_ClearLine(uint8_t Line)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
- /* Send the string character by character on lCD */
- while (((refcolumn + 1)& 0xFFFF) >= LCD_Currentfonts->Width)
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, ' ');
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- }
-}
-
-
-/**
- * @brief Clears the hole LCD.
- * @param Color: the color of the background.
- * @retval None
- */
-void LCD_Clear(uint16_t Color)
-{
- uint32_t index = 0;
-
- LCD_SetCursor(0x00, 0x013F);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(index = 0; index < 76800; index++)
- {
- LCD_WriteRAM(Color);
- }
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-
-}
-
-
-/**
- * @brief Sets the cursor position.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @retval None
- */
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos)
-{
- LCD_WriteReg(LCD_REG_32, Xpos);
- LCD_WriteReg(LCD_REG_33, Ypos);
-}
-
-
-/**
- * @brief Draws a character on LCD.
- * @param Xpos: the Line where to display the character shape.
- * @param Ypos: start column address.
- * @param c: pointer to the character data.
- * @retval None
- */
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c)
-{
- uint32_t index = 0, i = 0;
- uint8_t Xaddress = 0;
-
- Xaddress = Xpos;
-
- LCD_SetCursor(Xaddress, Ypos);
-
- for(index = 0; index < LCD_Currentfonts->Height; index++)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(i = 0; i < LCD_Currentfonts->Width; i++)
- {
- if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
- (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
-
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- Xaddress++;
- LCD_SetCursor(Xaddress, Ypos);
- }
-}
-
-
-/**
- * @brief Displays one character (16dots width, 24dots height).
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param Column: start column address.
- * @param Ascii: character ascii code, must be between 0x20 and 0x7E.
- * @retval None
- */
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii)
-{
- Ascii -= 32;
- LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
-}
-
-
-/**
- * @brief Displays a maximum of 20 char on the LCD.
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param *ptr: pointer to string to display on LCD.
- * @retval None
- */
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
-
- /* Send the string character by character on lCD */
- while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width))
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, *ptr);
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- /* Point on the next character */
- ptr++;
- }
-}
-
-
-/**
- * @brief Sets a display window
- * @param Xpos: specifies the X buttom left position.
- * @param Ypos: specifies the Y buttom left position.
- * @param Height: display window height.
- * @param Width: display window width.
- * @retval None
- */
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- /* Horizontal GRAM Start Address */
- if(Xpos >= Height)
- {
- LCD_WriteReg(LCD_REG_80, (Xpos - Height + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_80, 0);
- }
- /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_81, Xpos);
- /* Vertical GRAM Start Address */
- if(Ypos >= Width)
- {
- LCD_WriteReg(LCD_REG_82, (Ypos - Width + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_82, 0);
- }
- /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_83, Ypos);
- LCD_SetCursor(Xpos, Ypos);
-}
-
-
-/**
- * @brief Disables LCD Window mode.
- * @param None
- * @retval None
- */
-void LCD_WindowModeDisable(void)
-{
- LCD_SetDisplayWindow(239, 0x13F, 240, 320);
- LCD_WriteReg(LCD_REG_3, 0x1018);
-}
-
-
-/**
- * @brief Displays a line.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: line length.
- * @param Direction: line direction.
- * This parameter can be one of the following values: Vertical or Horizontal.
- * @retval None
- */
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction)
-{
- uint32_t i = 0;
-
- LCD_SetCursor(Xpos, Ypos);
- if(Direction == LCD_DIR_HORIZONTAL)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
- else
- {
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAMWord(TextColor);
- Xpos++;
- LCD_SetCursor(Xpos, Ypos);
- }
- }
-}
-
-
-/**
- * @brief Displays a rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: display rectangle height.
- * @param Width: display rectangle width.
- * @retval None
- */
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-}
-
-
-/**
- * @brief Displays a circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- s32 D;/* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
- CurX = 0;
- CurY = Radius;
-
- while (CurX <= CurY)
- {
- LCD_SetCursor(Xpos + CurX, Ypos + CurY);
- LCD_WriteRAMWord(TextColor);
- LCD_SetCursor(Xpos + CurX, Ypos - CurY);
- LCD_WriteRAMWord(TextColor);
- LCD_SetCursor(Xpos - CurX, Ypos + CurY);
- LCD_WriteRAMWord(TextColor);
- LCD_SetCursor(Xpos - CurX, Ypos - CurY);
- LCD_WriteRAMWord(TextColor);
- LCD_SetCursor(Xpos + CurY, Ypos + CurX);
- LCD_WriteRAMWord(TextColor);
- LCD_SetCursor(Xpos + CurY, Ypos - CurX);
- LCD_WriteRAMWord(TextColor);
- LCD_SetCursor(Xpos - CurY, Ypos + CurX);
- LCD_WriteRAMWord(TextColor);
- LCD_SetCursor(Xpos - CurY, Ypos - CurX);
- LCD_WriteRAMWord(TextColor);
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-}
-
-/**
- * @brief Displays a monocolor picture.
- * @param Pict: pointer to the picture array.
- * @retval None
- */
-void LCD_DrawMonoPict(const uint32_t *Pict)
-{
- uint32_t index = 0, i = 0;
- LCD_SetCursor(0, (LCD_PIXEL_WIDTH - 1));
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(index = 0; index < 2400; index++)
- {
- for(i = 0; i < 32; i++)
- {
- if((Pict[index] & (1 << i)) == 0x00)
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- }
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-#ifdef USE_LCD_DrawBMP
-/**
- * @brief Displays a bitmap picture loaded in the SPI Flash.
- * @param BmpAddress: Bmp picture address in the SPI Flash.
- * @retval None
- */
-//void LCD_DrawBMP(uint32_t BmpAddress)
-//{
-// uint32_t i = 0, size = 0;
-//
-// /* Read bitmap size */
-// sFLASH_ReadBuffer((uint8_t*)&size, BmpAddress + 2, 4);
-//
-// /* get bitmap data address offset */
-// sFLASH_ReadBuffer((uint8_t*)&i, BmpAddress + 10, 4);
-//
-// size = (size - i)/2;
-//
-// sFLASH_StartReadSequence(BmpAddress + i);
-//
-// /* Disable LCD_SPI */
-// SPI_Cmd(LCD_SPI, DISABLE);
-// /* SPI in 16-bit mode */
-// SPI_DataSizeConfig(LCD_SPI, SPI_DataSize_16b);
-//
-// /* Enable LCD_SPI */
-// SPI_Cmd(LCD_SPI, ENABLE);
-//
-// /* Set GRAM write direction and BGR = 1 */
-// /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
-// /* AM=1 (address is updated in vertical writing direction) */
-// LCD_WriteReg(LCD_REG_3, 0x1008);
-//
-// LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
-//
-// /* Read bitmap data from SPI Flash and send them to LCD */
-// for(i = 0; i < size; i++)
-// {
-// LCD_WriteRAM(__REV_HalfWord(sFLASH_SendHalfWord(0xA5A5)));
-// }
-//
-// LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-//
-// /* Deselect the FLASH: Chip Select high */
-// sFLASH_CS_HIGH();
-//
-// /* Disable LCD_SPI */
-// SPI_Cmd(LCD_SPI, DISABLE);
-// /* SPI in 8-bit mode */
-// SPI_DataSizeConfig(LCD_SPI, SPI_DataSize_8b);
-//
-// /* Enable LCD_SPI */
-// SPI_Cmd(LCD_SPI, ENABLE);
-//
-// /* Set GRAM write direction and BGR = 1 */
-// /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
-// /* AM = 1 (address is updated in vertical writing direction) */
-// LCD_WriteReg(LCD_REG_3, 0x1018);
-//}
-
-
-/**
- * @brief Displays a bitmap picture loaded in the Internal FLASH.
- * @param BmpAddress: Bmp picture address in the Internal FLASH.
- * @retval None
- */
-void LCD_DrawBMP(const uint16_t *BmpAddress)
-{
- uint32_t i = 0, size = 0;
- /* Read bitmap size */
- size = BmpAddress[1] | (BmpAddress[2] << 16);
- /* get bitmap data address offset */
- i = BmpAddress[5] | (BmpAddress[6] << 16);
- size = (size - i)/2;
- BmpAddress += i/2;
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1008);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- /* Read bitmap data from SPI Flash and send them to LCD */
- for(i = 0; i < size; i++)
- {
- LCD_WriteRAM(BmpAddress[i]);
- }
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- /* Set GRAM write direction and BGR = 1 */
- /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
- /* AM = 1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
-}
-#endif
-
-/**
- * @brief Displays a full rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: rectangle height.
- * @param Width: rectangle width.
- * @retval None
- */
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
- LCD_SetTextColor(TextColor);
-
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-
- Width -= 2;
- Height--;
- Ypos--;
-
- LCD_SetTextColor(BackColor);
-
- while(Height--)
- {
- LCD_DrawLine(++Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- }
-
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Displays a full circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D; /* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
-
- CurX = 0;
- CurY = Radius;
-
- LCD_SetTextColor(BackColor);
-
- while (CurX <= CurY)
- {
- if(CurY > 0)
- {
- LCD_DrawLine(Xpos - CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- }
-
- if(CurX > 0)
- {
- LCD_DrawLine(Xpos - CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- }
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-
- LCD_SetTextColor(TextColor);
- LCD_DrawCircle(Xpos, Ypos, Radius);
-}
-
-/**
- * @brief Displays an uni line (between two points).
- * @param x1: specifies the point 1 x position.
- * @param y1: specifies the point 1 y position.
- * @param x2: specifies the point 2 x position.
- * @param y2: specifies the point 2 y position.
- * @retval None
- */
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
-{
- int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
- yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
- curpixel = 0;
-
- deltax = ABS(x2 - x1); /* The difference between the x's */
- deltay = ABS(y2 - y1); /* The difference between the y's */
- x = x1; /* Start x off at the first pixel */
- y = y1; /* Start y off at the first pixel */
-
- if (x2 >= x1) /* The x-values are increasing */
- {
- xinc1 = 1;
- xinc2 = 1;
- }
- else /* The x-values are decreasing */
- {
- xinc1 = -1;
- xinc2 = -1;
- }
-
- if (y2 >= y1) /* The y-values are increasing */
- {
- yinc1 = 1;
- yinc2 = 1;
- }
- else /* The y-values are decreasing */
- {
- yinc1 = -1;
- yinc2 = -1;
- }
-
- if (deltax >= deltay) /* There is at least one x-value for every y-value */
- {
- xinc1 = 0; /* Don't change the x when numerator >= denominator */
- yinc2 = 0; /* Don't change the y for every iteration */
- den = deltax;
- num = deltax / 2;
- numadd = deltay;
- numpixels = deltax; /* There are more x-values than y-values */
- }
- else /* There is at least one y-value for every x-value */
- {
- xinc2 = 0; /* Don't change the x for every iteration */
- yinc1 = 0; /* Don't change the y when numerator >= denominator */
- den = deltay;
- num = deltay / 2;
- numadd = deltax;
- numpixels = deltay; /* There are more y-values than x-values */
- }
-
- for (curpixel = 0; curpixel <= numpixels; curpixel++)
- {
- PutPixel(x, y); /* Draw the current pixel */
- num += numadd; /* Increase the numerator by the top of the fraction */
- if (num >= den) /* Check if numerator >= denominator */
- {
- num -= den; /* Calculate the new numerator value */
- x += xinc1; /* Change the x as appropriate */
- y += yinc1; /* Change the y as appropriate */
- }
- x += xinc2; /* Change the x as appropriate */
- y += yinc2; /* Change the y as appropriate */
- }
-}
-
-/**
- * @brief Displays an polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLine(pPoint Points, uint16_t PointCount)
-{
- int16_t X = 0, Y = 0;
-
- if(PointCount < 2)
- {
- return;
- }
-
- while(--PointCount)
- {
- X = Points->X;
- Y = Points->Y;
- Points++;
- LCD_DrawUniLine(X, Y, Points->X, Points->Y);
- }
-}
-
-/**
- * @brief Displays an relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @param Closed: specifies if the draw is closed or not.
- * 1: closed, 0 : not closed.
- * @retval None
- */
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed)
-{
- int16_t X = 0, Y = 0;
- pPoint First = Points;
-
- if(PointCount < 2)
- {
- return;
- }
- X = Points->X;
- Y = Points->Y;
- while(--PointCount)
- {
- Points++;
- LCD_DrawUniLine(X, Y, X + Points->X, Y + Points->Y);
- X = X + Points->X;
- Y = Y + Points->Y;
- }
- if(Closed)
- {
- LCD_DrawUniLine(First->X, First->Y, X, Y);
- }
-}
-
-/**
- * @brief Displays a closed polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLine(Points, PointCount);
- LCD_DrawUniLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
-}
-
-/**
- * @brief Displays a relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 0);
-}
-
-/**
- * @brief Displays a closed relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 1);
-}
-
-
-/**
- * @brief Displays a full polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount)
-{
- /* public-domain code by Darel Rex Finley, 2007 */
- uint16_t nodes = 0, nodeX[MAX_POLY_CORNERS], pixelX = 0, pixelY = 0, i = 0,
- j = 0, swap = 0;
- uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0;
-
- IMAGE_LEFT = IMAGE_RIGHT = Points->X;
- IMAGE_TOP= IMAGE_BOTTOM = Points->Y;
-
- for(i = 1; i < PointCount; i++)
- {
- pixelX = POLY_X(i);
- if(pixelX < IMAGE_LEFT)
- {
- IMAGE_LEFT = pixelX;
- }
- if(pixelX > IMAGE_RIGHT)
- {
- IMAGE_RIGHT = pixelX;
- }
-
- pixelY = POLY_Y(i);
- if(pixelY < IMAGE_TOP)
- {
- IMAGE_TOP = pixelY;
- }
- if(pixelY > IMAGE_BOTTOM)
- {
- IMAGE_BOTTOM = pixelY;
- }
- }
-
- LCD_SetTextColor(BackColor);
-
- /* Loop through the rows of the image. */
- for (pixelY = IMAGE_TOP; pixelY < IMAGE_BOTTOM; pixelY++)
- {
- /* Build a list of nodes. */
- nodes = 0; j = PointCount-1;
-
- for (i = 0; i < PointCount; i++)
- {
- if (POLY_Y(i)<(double) pixelY && POLY_Y(j)>=(double) pixelY || POLY_Y(j)<(double) pixelY && POLY_Y(i)>=(double) pixelY)
- {
- nodeX[nodes++]=(int) (POLY_X(i)+((pixelY-POLY_Y(i))*(POLY_X(j)-POLY_X(i)))/(POLY_Y(j)-POLY_Y(i)));
- }
- j = i;
- }
-
- /* Sort the nodes, via a simple "Bubble" sort. */
- i = 0;
- while (i < nodes-1)
- {
- if (nodeX[i]>nodeX[i+1])
- {
- swap = nodeX[i];
- nodeX[i] = nodeX[i+1];
- nodeX[i+1] = swap;
- if(i)
- {
- i--;
- }
- }
- else
- {
- i++;
- }
- }
-
- /* Fill the pixels between node pairs. */
- for (i = 0; i < nodes; i+=2)
- {
- if(nodeX[i] >= IMAGE_RIGHT)
- {
- break;
- }
- if(nodeX[i+1] > IMAGE_LEFT)
- {
- if (nodeX[i] < IMAGE_LEFT)
- {
- nodeX[i]=IMAGE_LEFT;
- }
- if(nodeX[i+1] > IMAGE_RIGHT)
- {
- nodeX[i+1] = IMAGE_RIGHT;
- }
- LCD_SetTextColor(BackColor);
- LCD_DrawLine(pixelY, nodeX[i+1], nodeX[i+1] - nodeX[i], LCD_DIR_HORIZONTAL);
- LCD_SetTextColor(TextColor);
- PutPixel(pixelY, nodeX[i+1]);
- PutPixel(pixelY, nodeX[i]);
- /* for (j=nodeX[i]; j<nodeX[i+1]; j++) PutPixel(j,pixelY); */
- }
- }
- }
-
- /* draw the edges */
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Reset LCD control line(/CS) and Send Start-Byte
- * @param Start_Byte: the Start-Byte to be sent
- * @retval None
- */
-void LCD_nCS_StartByte(uint8_t Start_Byte)
-{
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET);
- SPI_I2S_SendData(LCD_SPI, Start_Byte);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-}
-
-/**
- * @brief Writes index to select the LCD register.
- * @param LCD_Reg: address of the selected register.
- * @retval None
- */
-void LCD_WriteRegIndex(uint8_t LCD_Reg)
-{
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | SET_INDEX);
- /* Write 16-bit Reg Index (High Byte is 0) */
- SPI_I2S_SendData(LCD_SPI, 0x00);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- SPI_I2S_SendData(LCD_SPI, LCD_Reg);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Reads the selected LCD Register.
- * @param None
- * @retval LCD Register Value.
- */
-uint16_t LCD_ReadReg(uint8_t LCD_Reg)
-{
- uint16_t tmp = 0;
- uint8_t i = 0;
-
- /* LCD_SPI prescaler: 4 */
- LCD_SPI->CR1 &= 0xFFC7;
- LCD_SPI->CR1 |= 0x0008;
- /* Write 16-bit Index (then Read Reg) */
- LCD_WriteRegIndex(LCD_Reg);
- /* Read 16-bit Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_READ_REG);
-
- for(i = 0; i < 5; i++)
- {
- SPI_I2S_SendData(LCD_SPI, 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- /* One byte of invalid dummy data read after the start byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
- SPI_I2S_ReceiveData(LCD_SPI);
- }
- SPI_I2S_SendData(LCD_SPI, 0xFF);
- /* Read upper byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- /* Read lower byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
- tmp = SPI_I2S_ReceiveData(LCD_SPI);
-
-
- SPI_I2S_SendData(LCD_SPI, 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- /* Read lower byte */
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
- {
- }
- tmp = ((tmp & 0xFF) << 8) | SPI_I2S_ReceiveData(LCD_SPI);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- /* LCD_SPI prescaler: 2 */
- LCD_SPI->CR1 &= 0xFFC7;
- return tmp;
-}
-
-
-/**
- * @brief Prepare to write to the LCD RAM.
- * @param None
- * @retval None
- */
-void LCD_WriteRAM_Prepare(void)
-{
- LCD_WriteRegIndex(LCD_REG_34); /* Select GRAM Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG);
-}
-
-
-/**
- * @brief Writes 1 word to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAMWord(uint16_t RGB_Code)
-{
- LCD_WriteRAM_Prepare();
- LCD_WriteRAM(RGB_Code);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the selected LCD register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
-{
- /* Write 16-bit Index (then Write Reg) */
- LCD_WriteRegIndex(LCD_Reg);
- /* Write 16-bit Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG);
- SPI_I2S_SendData(LCD_SPI, LCD_RegValue>>8);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- SPI_I2S_SendData(LCD_SPI, (LCD_RegValue & 0xFF));
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAM(uint16_t RGB_Code)
-{
- SPI_I2S_SendData(LCD_SPI, RGB_Code >> 8);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
- SPI_I2S_SendData(LCD_SPI, RGB_Code & 0xFF);
- while(SPI_I2S_GetFlagStatus(LCD_SPI, SPI_I2S_FLAG_BSY) != RESET)
- {
- }
-}
-
-
-/**
- * @brief Power on the LCD.
- * @param None
- * @retval None
- */
-void LCD_PowerOn(void)
-{
- /* Power On sequence ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* delay 50 ms */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-}
-
-/**
- * @brief Enables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOn(void)
-{
- /* Display On */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-
-}
-
-/**
- * @brief Disables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOff(void)
-{
- /* Display Off */
- LCD_WriteReg(LCD_REG_7, 0x0);
-}
-
-/**
- * @brief Configures LCD control lines in Output Push-Pull mode.
- * @param None
- * @retval None
- */
-void LCD_CtrlLinesConfig(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(LCD_NCS_GPIO_CLK, ENABLE);
-
- /* Configure NCS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Sets or reset LCD control lines.
- * @param GPIOx: where x can be B or D to select the GPIO peripheral.
- * @param CtrlPins: the Control line. This parameter can be:
- * @arg LCD_NCS_PIN: Chip Select pin
- * @param BitVal: specifies the value to be written to the selected bit.
- * This parameter can be:
- * @arg Bit_RESET: to clear the port pin
- * @arg Bit_SET: to set the port pin
- * @retval None
- */
-void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, BitAction BitVal)
-{
- /* Set or Reset the control line */
- GPIO_WriteBit(GPIOx, CtrlPins, BitVal);
-}
-
-
-/**
- * @brief Configures the LCD_SPI interface.
- * @param None
- * @retval None
- */
-void LCD_SPIConfig(void)
-{
- SPI_InitTypeDef SPI_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(LCD_SPI_SCK_GPIO_CLK | LCD_SPI_MISO_GPIO_CLK | LCD_SPI_MOSI_GPIO_CLK
- | RCC_APB2Periph_AFIO, ENABLE);
- GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE);
-
- /* Enable SPI clock */
- RCC_APB1PeriphClockCmd(LCD_SPI_CLK, ENABLE);
-
- /* Configure SPI pins: SCK, MISO and MOSI */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN;
- GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
- GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- SPI_I2S_DeInit(LCD_SPI);
-
- /* SPI Config */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_Init(LCD_SPI, &SPI_InitStructure);
-
- /* SPI enable */
- SPI_Cmd(LCD_SPI, ENABLE);
-}
-
-/**
- * @brief Displays a pixel.
- * @param x: pixel x.
- * @param y: pixel y.
- * @retval None
- */
-static void PutPixel(int16_t x, int16_t y)
-{
- if(x < 0 || x > 239 || y < 0 || y > 319)
- {
- return;
- }
- LCD_DrawLine(x, y, 1, LCD_DIR_HORIZONTAL);
-}
-
-#ifndef USE_Delay
-/**
- * @brief Inserts a delay time.
- * @param nCount: specifies the delay time length.
- * @retval None
- */
-static void delay(__IO uint32_t nCount)
-{
- __IO uint32_t index = 0;
- for(index = (100000 * nCount); index != 0; index--)
- {
- }
-}
-#endif /* USE_Delay*/
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval_lcd.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval_lcd.h
deleted file mode 100644
index 0584c8a..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210C_EVAL/stm3210c_eval_lcd.h
+++ /dev/null
@@ -1,379 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210c_eval_lcd.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the lcd firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM3210C_EVAL_LCD_H
-#define __STM3210C_EVAL_LCD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-#include "../Common/fonts.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210C_EVAL
- * @{
- */
-
-/** @addtogroup STM3210C_EVAL_LCD
- * @{
- */
-
-
-/** @defgroup STM3210C_EVAL_LCD_Exported_Types
- * @{
- */
-typedef struct
-{
- int16_t X;
- int16_t Y;
-} Point, * pPoint;
-/**
- * @}
- */
-
-/** @defgroup STM3210C_EVAL_LCD_Exported_Constants
- * @{
- */
-
-/**
- * @brief Uncomment the line below if you want to use LCD_DrawBMP function to
- * display a bitmap picture on the LCD. This function assumes that the bitmap
- * file is loaded in the SPI Flash (mounted on STM3210C-EVAL board), however
- * user can tailor it according to his application hardware requirement.
- */
-/*#define USE_LCD_DrawBMP*/
-
-/**
- * @brief Uncomment the line below if you want to use user defined Delay function
- * (for precise timing), otherwise default _delay_ function defined within
- * this driver is used (less precise timing).
- */
-/* #define USE_Delay */
-
-#ifdef USE_Delay
-#include "main.h"
-
- #define _delay_ Delay /* !< User can provide more timing precise _delay_ function
- (with 10ms time base), using SysTick for example */
-#else
- #define _delay_ delay /* !< Default _delay_ function with less precise timing */
-#endif
-
-/**
- * @brief LCD Control pins
- */
-#define LCD_NCS_PIN GPIO_Pin_2
-#define LCD_NCS_GPIO_PORT GPIOB
-#define LCD_NCS_GPIO_CLK RCC_APB2Periph_GPIOB
-
-/**
- * @brief LCD SPI Interface pins
- */
-#define LCD_SPI SPI3
-#define LCD_SPI_CLK RCC_APB1Periph_SPI3
-#define LCD_SPI_SCK_PIN GPIO_Pin_10
-#define LCD_SPI_SCK_GPIO_PORT GPIOC
-#define LCD_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOC
-#define LCD_SPI_MISO_PIN GPIO_Pin_11
-#define LCD_SPI_MISO_GPIO_PORT GPIOC
-#define LCD_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOC
-#define LCD_SPI_MOSI_PIN GPIO_Pin_12
-#define LCD_SPI_MOSI_GPIO_PORT GPIOC
-#define LCD_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOC
-
-/**
- * @brief LCD Registers
- */
-#define LCD_REG_0 0x00
-#define LCD_REG_1 0x01
-#define LCD_REG_2 0x02
-#define LCD_REG_3 0x03
-#define LCD_REG_4 0x04
-#define LCD_REG_5 0x05
-#define LCD_REG_6 0x06
-#define LCD_REG_7 0x07
-#define LCD_REG_8 0x08
-#define LCD_REG_9 0x09
-#define LCD_REG_10 0x0A
-#define LCD_REG_12 0x0C
-#define LCD_REG_13 0x0D
-#define LCD_REG_14 0x0E
-#define LCD_REG_15 0x0F
-#define LCD_REG_16 0x10
-#define LCD_REG_17 0x11
-#define LCD_REG_18 0x12
-#define LCD_REG_19 0x13
-#define LCD_REG_20 0x14
-#define LCD_REG_21 0x15
-#define LCD_REG_22 0x16
-#define LCD_REG_23 0x17
-#define LCD_REG_24 0x18
-#define LCD_REG_25 0x19
-#define LCD_REG_26 0x1A
-#define LCD_REG_27 0x1B
-#define LCD_REG_28 0x1C
-#define LCD_REG_29 0x1D
-#define LCD_REG_30 0x1E
-#define LCD_REG_31 0x1F
-#define LCD_REG_32 0x20
-#define LCD_REG_33 0x21
-#define LCD_REG_34 0x22
-#define LCD_REG_36 0x24
-#define LCD_REG_37 0x25
-#define LCD_REG_40 0x28
-#define LCD_REG_41 0x29
-#define LCD_REG_43 0x2B
-#define LCD_REG_45 0x2D
-#define LCD_REG_48 0x30
-#define LCD_REG_49 0x31
-#define LCD_REG_50 0x32
-#define LCD_REG_51 0x33
-#define LCD_REG_52 0x34
-#define LCD_REG_53 0x35
-#define LCD_REG_54 0x36
-#define LCD_REG_55 0x37
-#define LCD_REG_56 0x38
-#define LCD_REG_57 0x39
-#define LCD_REG_59 0x3B
-#define LCD_REG_60 0x3C
-#define LCD_REG_61 0x3D
-#define LCD_REG_62 0x3E
-#define LCD_REG_63 0x3F
-#define LCD_REG_64 0x40
-#define LCD_REG_65 0x41
-#define LCD_REG_66 0x42
-#define LCD_REG_67 0x43
-#define LCD_REG_68 0x44
-#define LCD_REG_69 0x45
-#define LCD_REG_70 0x46
-#define LCD_REG_71 0x47
-#define LCD_REG_72 0x48
-#define LCD_REG_73 0x49
-#define LCD_REG_74 0x4A
-#define LCD_REG_75 0x4B
-#define LCD_REG_76 0x4C
-#define LCD_REG_77 0x4D
-#define LCD_REG_78 0x4E
-#define LCD_REG_79 0x4F
-#define LCD_REG_80 0x50
-#define LCD_REG_81 0x51
-#define LCD_REG_82 0x52
-#define LCD_REG_83 0x53
-#define LCD_REG_96 0x60
-#define LCD_REG_97 0x61
-#define LCD_REG_106 0x6A
-#define LCD_REG_118 0x76
-#define LCD_REG_128 0x80
-#define LCD_REG_129 0x81
-#define LCD_REG_130 0x82
-#define LCD_REG_131 0x83
-#define LCD_REG_132 0x84
-#define LCD_REG_133 0x85
-#define LCD_REG_134 0x86
-#define LCD_REG_135 0x87
-#define LCD_REG_136 0x88
-#define LCD_REG_137 0x89
-#define LCD_REG_139 0x8B
-#define LCD_REG_140 0x8C
-#define LCD_REG_141 0x8D
-#define LCD_REG_143 0x8F
-#define LCD_REG_144 0x90
-#define LCD_REG_145 0x91
-#define LCD_REG_146 0x92
-#define LCD_REG_147 0x93
-#define LCD_REG_148 0x94
-#define LCD_REG_149 0x95
-#define LCD_REG_150 0x96
-#define LCD_REG_151 0x97
-#define LCD_REG_152 0x98
-#define LCD_REG_153 0x99
-#define LCD_REG_154 0x9A
-#define LCD_REG_157 0x9D
-#define LCD_REG_192 0xC0
-#define LCD_REG_193 0xC1
-#define LCD_REG_229 0xE5
-
-/**
- * @brief LCD color
- */
-#define LCD_COLOR_WHITE 0xFFFF
-#define LCD_COLOR_BLACK 0x0000
-#define LCD_COLOR_GREY 0xF7DE
-#define LCD_COLOR_BLUE 0x001F
-#define LCD_COLOR_BLUE2 0x051F
-#define LCD_COLOR_RED 0xF800
-#define LCD_COLOR_MAGENTA 0xF81F
-#define LCD_COLOR_GREEN 0x07E0
-#define LCD_COLOR_CYAN 0x7FFF
-#define LCD_COLOR_YELLOW 0xFFE0
-
-/**
- * @brief LCD Lines depending on the chosen fonts.
- */
-#define LCD_LINE_0 LINE(0)
-#define LCD_LINE_1 LINE(1)
-#define LCD_LINE_2 LINE(2)
-#define LCD_LINE_3 LINE(3)
-#define LCD_LINE_4 LINE(4)
-#define LCD_LINE_5 LINE(5)
-#define LCD_LINE_6 LINE(6)
-#define LCD_LINE_7 LINE(7)
-#define LCD_LINE_8 LINE(8)
-#define LCD_LINE_9 LINE(9)
-#define LCD_LINE_10 LINE(10)
-#define LCD_LINE_11 LINE(11)
-#define LCD_LINE_12 LINE(12)
-#define LCD_LINE_13 LINE(13)
-#define LCD_LINE_14 LINE(14)
-#define LCD_LINE_15 LINE(15)
-#define LCD_LINE_16 LINE(16)
-#define LCD_LINE_17 LINE(17)
-#define LCD_LINE_18 LINE(18)
-#define LCD_LINE_19 LINE(19)
-#define LCD_LINE_20 LINE(20)
-#define LCD_LINE_21 LINE(21)
-#define LCD_LINE_22 LINE(22)
-#define LCD_LINE_23 LINE(23)
-#define LCD_LINE_24 LINE(24)
-#define LCD_LINE_25 LINE(25)
-#define LCD_LINE_26 LINE(26)
-#define LCD_LINE_27 LINE(27)
-#define LCD_LINE_28 LINE(28)
-#define LCD_LINE_29 LINE(29)
-
-/**
- * @brief LCD default font
- */
-#define LCD_DEFAULT_FONT Font16x24
-
-/**
- * @brief LCD Direction
- */
-#define LCD_DIR_HORIZONTAL 0x0000
-#define LCD_DIR_VERTICAL 0x0001
-
-/**
- * @brief LCD Size (Width and Height)
- */
-#define LCD_PIXEL_WIDTH 0x0140
-#define LCD_PIXEL_HEIGHT 0x00F0
-
-/**
- * @}
- */
-
-/** @defgroup STM3210C_EVAL_LCD_Exported_Macros
- * @{
- */
-#define ASSEMBLE_RGB(R, G, B) ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3))
-/**
- * @}
- */
-
-/** @defgroup STM3210C_EVAL_LCD_Exported_Functions
- * @{
- */
-void LCD_DeInit(void);
-void LCD_Setup(void);
-void STM3210C_LCD_Init(void);
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
-void LCD_SetTextColor(__IO uint16_t Color);
-void LCD_SetBackColor(__IO uint16_t Color);
-void LCD_ClearLine(uint8_t Line);
-void LCD_Clear(uint16_t Color);
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos);
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c);
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii);
-void LCD_SetFont(sFONT *fonts);
-sFONT *LCD_GetFont(void);
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr);
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_WindowModeDisable(void);
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction);
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_DrawMonoPict(const uint32_t *Pict);
-#ifdef USE_LCD_DrawBMP
-//void LCD_DrawBMP(uint32_t BmpAddress);
-void LCD_DrawBMP(const uint16_t *BmpAddress);
-#endif
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_PolyLine(pPoint Points, uint16_t PointCount);
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount);
-
-void LCD_nCS_StartByte(uint8_t Start_Byte);
-void LCD_WriteRegIndex(uint8_t LCD_Reg);
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
-void LCD_WriteRAM_Prepare(void);
-void LCD_WriteRAMWord(uint16_t RGB_Code);
-uint16_t LCD_ReadReg(uint8_t LCD_Reg);
-void LCD_WriteRAM(uint16_t RGB_Code);
-void LCD_PowerOn(void);
-void LCD_DisplayOn(void);
-void LCD_DisplayOff(void);
-
-void LCD_CtrlLinesConfig(void);
-void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, BitAction BitVal);
-void LCD_SPIConfig(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM3210C_EVAL_LCD_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval.c
deleted file mode 100644
index 0e345e4..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval.c
+++ /dev/null
@@ -1,667 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210e_eval.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides
- * - set of firmware functions to manage Leds, push-button and COM ports
- * - low level initialization functions for SD card (on SDIO), SPI serial
- * flash (sFLASH) and temperature sensor (LM75)
- * available on STM3210E-EVAL evaluation board from STMicroelectronics.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm3210e_eval.h"
-#include "stm32f10x_spi.h"
-#include "stm32f10x_i2c.h"
-#include "stm32f10x_sdio.h"
-#include "stm32f10x_dma.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL
- * @brief This file provides firmware functions to manage Leds, push-buttons,
- * COM ports, SD card on SDIO, serial flash (sFLASH), serial EEPROM (sEE)
- * and temperature sensor (LM75) available on STM3210E-EVAL evaluation
- * board from STMicroelectronics.
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Private_Variables
- * @{
- */
-GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT,
- LED4_GPIO_PORT};
-const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN,
- LED4_PIN};
-const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK,
- LED4_GPIO_CLK};
-
-GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, TAMPER_BUTTON_GPIO_PORT,
- KEY_BUTTON_GPIO_PORT, RIGHT_BUTTON_GPIO_PORT,
- LEFT_BUTTON_GPIO_PORT, UP_BUTTON_GPIO_PORT,
- DOWN_BUTTON_GPIO_PORT, SEL_BUTTON_GPIO_PORT};
-
-const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, TAMPER_BUTTON_PIN,
- KEY_BUTTON_PIN, RIGHT_BUTTON_PIN,
- LEFT_BUTTON_PIN, UP_BUTTON_PIN,
- DOWN_BUTTON_PIN, SEL_BUTTON_PIN};
-
-const uint32_t BUTTON_CLK[BUTTONn] = {WAKEUP_BUTTON_GPIO_CLK, TAMPER_BUTTON_GPIO_CLK,
- KEY_BUTTON_GPIO_CLK, RIGHT_BUTTON_GPIO_CLK,
- LEFT_BUTTON_GPIO_CLK, UP_BUTTON_GPIO_CLK,
- DOWN_BUTTON_GPIO_CLK, SEL_BUTTON_GPIO_CLK};
-
-const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {WAKEUP_BUTTON_EXTI_LINE,
- TAMPER_BUTTON_EXTI_LINE,
- KEY_BUTTON_EXTI_LINE,
- RIGHT_BUTTON_EXTI_LINE,
- LEFT_BUTTON_EXTI_LINE,
- UP_BUTTON_EXTI_LINE,
- DOWN_BUTTON_EXTI_LINE,
- SEL_BUTTON_EXTI_LINE};
-
-const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PORT_SOURCE,
- TAMPER_BUTTON_EXTI_PORT_SOURCE,
- KEY_BUTTON_EXTI_PORT_SOURCE,
- RIGHT_BUTTON_EXTI_PORT_SOURCE,
- LEFT_BUTTON_EXTI_PORT_SOURCE,
- UP_BUTTON_EXTI_PORT_SOURCE,
- DOWN_BUTTON_EXTI_PORT_SOURCE,
- SEL_BUTTON_EXTI_PORT_SOURCE};
-
-const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PIN_SOURCE,
- TAMPER_BUTTON_EXTI_PIN_SOURCE,
- KEY_BUTTON_EXTI_PIN_SOURCE,
- RIGHT_BUTTON_EXTI_PIN_SOURCE,
- LEFT_BUTTON_EXTI_PIN_SOURCE,
- UP_BUTTON_EXTI_PIN_SOURCE,
- DOWN_BUTTON_EXTI_PIN_SOURCE,
- SEL_BUTTON_EXTI_PIN_SOURCE};
-
-const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, TAMPER_BUTTON_EXTI_IRQn,
- KEY_BUTTON_EXTI_IRQn, RIGHT_BUTTON_EXTI_IRQn,
- LEFT_BUTTON_EXTI_IRQn, UP_BUTTON_EXTI_IRQn,
- DOWN_BUTTON_EXTI_IRQn, SEL_BUTTON_EXTI_IRQn};
-
-USART_TypeDef* COM_USART[COMn] = {EVAL_COM1, EVAL_COM2};
-
-GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT, EVAL_COM2_TX_GPIO_PORT};
-
-GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT, EVAL_COM2_RX_GPIO_PORT};
-
-const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK, EVAL_COM2_CLK};
-
-const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK, EVAL_COM2_TX_GPIO_CLK};
-
-const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK, EVAL_COM2_RX_GPIO_CLK};
-
-const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN, EVAL_COM2_TX_PIN};
-
-const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN};
-
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Private_Functions
- * @{
- */
-
-/**
- * @brief Configures LED GPIO.
- * @param Led: Specifies the Led to be configured.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIO_LED Clock */
- RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);
-
- /* Configure the GPIO_LED pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
- GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);
-}
-
-/**
- * @brief Turns selected LED On.
- * @param Led: Specifies the Led to be set on.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOn(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];
-}
-
-/**
- * @brief Turns selected LED Off.
- * @param Led: Specifies the Led to be set off.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOff(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BRR = GPIO_PIN[Led];
-}
-
-/**
- * @brief Toggles the selected LED.
- * @param Led: Specifies the Led to be toggled.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDToggle(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];
-}
-
-/**
- * @brief Configures Button GPIO and EXTI Line.
- * @param Button: Specifies the Button to be configured.
- * This parameter can be one of following parameters:
- * @arg BUTTON_WAKEUP: Wakeup Push Button
- * @arg BUTTON_TAMPER: Tamper Push Button
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @param Button_Mode: Specifies Button mode.
- * This parameter can be one of following parameters:
- * @arg BUTTON_MODE_GPIO: Button will be used as simple IO
- * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt
- * generation capability
- * @retval None
- */
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* Enable the BUTTON Clock */
- RCC_APB2PeriphClockCmd(BUTTON_CLK[Button] | RCC_APB2Periph_AFIO, ENABLE);
-
- /* Configure Button pin as input floating */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button];
- GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);
-
-
- if (Button_Mode == BUTTON_MODE_EXTI)
- {
- /* Connect Button EXTI Line to Button GPIO Pin */
- GPIO_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);
-
- /* Configure Button EXTI line */
- EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button];
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
-
- if(Button != BUTTON_WAKEUP)
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- }
- else
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- }
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /* Enable and set Button EXTI Interrupt to the lowest priority */
- NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button];
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
- NVIC_Init(&NVIC_InitStructure);
- }
-}
-
-/**
- * @brief Returns the selected Button state.
- * @param Button: Specifies the Button to be checked.
- * This parameter can be one of following parameters:
- * @arg BUTTON_WAKEUP: Wakeup Push Button
- * @arg BUTTON_TAMPER: Tamper Push Button
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @retval The Button GPIO pin value.
- */
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button)
-{
- return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);
-}
-
-/**
- * @brief Configures COM port.
- * @param COM: Specifies the COM port to be configured.
- * This parameter can be one of following parameters:
- * @arg COM1
- * @arg COM2
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that
- * contains the configuration information for the specified USART peripheral.
- * @retval None
- */
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_APB2PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM] | RCC_APB2Periph_AFIO, ENABLE);
-
- /* Enable UART clock */
- if (COM == COM1)
- {
- RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
- }
- else
- {
- RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
- }
-
- /* Configure USART Tx as alternate function push-pull */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);
-
- /* Configure USART Rx as input floating */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];
- GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);
-
- /* USART configuration */
- USART_Init(COM_USART[COM], USART_InitStruct);
-
- /* Enable USART */
- USART_Cmd(COM_USART[COM], ENABLE);
-}
-
-/**
- * @brief DeInitializes the SDIO interface.
- * @param None
- * @retval None
- */
-void SD_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< Disable SDIO Clock */
- SDIO_ClockCmd(DISABLE);
-
- /*!< Set Power State to OFF */
- SDIO_SetPowerState(SDIO_PowerState_OFF);
-
- /*!< DeInitializes the SDIO peripheral */
- SDIO_DeInit();
-
- /*!< Disable the SDIO AHB Clock */
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, DISABLE);
-
- /*!< Configure PC.08, PC.09, PC.10, PC.11, PC.12 pin: D0, D1, D2, D3, CLK pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-
- /*!< Configure PD.02 CMD line */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the SD Card and put it into StandBy State (Ready for
- * data transfer).
- * @param None
- * @retval None
- */
-void SD_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< GPIOC and GPIOD Periph clock enable */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | SD_DETECT_GPIO_CLK, ENABLE);
-
- /*!< Configure PC.08, PC.09, PC.10, PC.11, PC.12 pin: D0, D1, D2, D3, CLK pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-
- /*!< Configure PD.02 CMD line */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Enable the SDIO AHB Clock */
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);
-
- /*!< Enable the DMA2 Clock */
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
-}
-
-/**
- * @brief Configures the DMA2 Channel4 for SDIO Tx request.
- * @param BufferSRC: pointer to the source buffer
- * @param BufferSize: buffer size
- * @retval None
- */
-void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize)
-{
-
- DMA_InitTypeDef DMA_InitStructure;
-
- DMA_ClearFlag(DMA2_FLAG_TC4 | DMA2_FLAG_TE4 | DMA2_FLAG_HT4 | DMA2_FLAG_GL4);
-
- /*!< DMA2 Channel4 disable */
- DMA_Cmd(DMA2_Channel4, DISABLE);
-
- /*!< DMA2 Channel4 Config */
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS;
- DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)BufferSRC;
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
- DMA_InitStructure.DMA_BufferSize = BufferSize / 4;
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
- DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
- DMA_InitStructure.DMA_Priority = DMA_Priority_High;
- DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
- DMA_Init(DMA2_Channel4, &DMA_InitStructure);
-
- /*!< DMA2 Channel4 enable */
- DMA_Cmd(DMA2_Channel4, ENABLE);
-}
-
-/**
- * @brief Configures the DMA2 Channel4 for SDIO Rx request.
- * @param BufferDST: pointer to the destination buffer
- * @param BufferSize: buffer size
- * @retval None
- */
-void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize)
-{
- DMA_InitTypeDef DMA_InitStructure;
-
- DMA_ClearFlag(DMA2_FLAG_TC4 | DMA2_FLAG_TE4 | DMA2_FLAG_HT4 | DMA2_FLAG_GL4);
-
- /*!< DMA2 Channel4 disable */
- DMA_Cmd(DMA2_Channel4, DISABLE);
-
- /*!< DMA2 Channel4 Config */
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS;
- DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)BufferDST;
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
- DMA_InitStructure.DMA_BufferSize = BufferSize / 4;
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
- DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
- DMA_InitStructure.DMA_Priority = DMA_Priority_High;
- DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
- DMA_Init(DMA2_Channel4, &DMA_InitStructure);
-
- /*!< DMA2 Channel4 enable */
- DMA_Cmd(DMA2_Channel4, ENABLE);
-}
-
-/**
- * @brief Returns the DMA End Of Transfer Status.
- * @param None
- * @retval DMA SDIO Channel Status.
- */
-uint32_t SD_DMAEndOfTransferStatus(void)
-{
- return (uint32_t)DMA_GetFlagStatus(DMA2_FLAG_TC4);
-}
-
-/**
- * @brief DeInitializes the peripherals used by the SPI FLASH driver.
- * @param None
- * @retval None
- */
-void sFLASH_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< Disable the sFLASH_SPI */
- SPI_Cmd(sFLASH_SPI, DISABLE);
-
- /*!< DeInitializes the sFLASH_SPI */
- SPI_I2S_DeInit(sFLASH_SPI);
-
- /*!< sFLASH_SPI Periph clock disable */
- RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, DISABLE);
-
- /*!< Configure sFLASH_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;
- GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;
- GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
- GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
- GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the peripherals used by the SPI FLASH driver.
- * @param None
- * @retval None
- */
-void sFLASH_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< sFLASH_SPI_CS_GPIO, sFLASH_SPI_MOSI_GPIO, sFLASH_SPI_MISO_GPIO
- and sFLASH_SPI_SCK_GPIO Periph clock enable */
- RCC_APB2PeriphClockCmd(sFLASH_CS_GPIO_CLK | sFLASH_SPI_MOSI_GPIO_CLK | sFLASH_SPI_MISO_GPIO_CLK |
- sFLASH_SPI_SCK_GPIO_CLK, ENABLE);
-
- /*!< sFLASH_SPI Periph clock enable */
- RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, ENABLE);
-
- /*!< Configure sFLASH_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;
- GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
- GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief DeInitializes the LM75_I2C.
- * @param None
- * @retval None
- */
-void LM75_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< Disable LM75_I2C */
- I2C_Cmd(LM75_I2C, DISABLE);
- /*!< DeInitializes the LM75_I2C */
- I2C_DeInit(LM75_I2C);
-
- /*!< LM75_I2C Periph clock disable */
- RCC_APB1PeriphClockCmd(LM75_I2C_CLK, DISABLE);
-
- /*!< Configure LM75_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;
- GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pin: SMBUS ALERT */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;
- GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the LM75_I2C..
- * @param None
- * @retval None
- */
-void LM75_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LM75_I2C Periph clock enable */
- RCC_APB1PeriphClockCmd(LM75_I2C_CLK, ENABLE);
-
- /*!< LM75_I2C_SCL_GPIO_CLK, LM75_I2C_SDA_GPIO_CLK
- and LM75_I2C_SMBUSALERT_GPIO_CLK Periph clock enable */
- RCC_APB2PeriphClockCmd(LM75_I2C_SCL_GPIO_CLK | LM75_I2C_SDA_GPIO_CLK |
- LM75_I2C_SMBUSALERT_GPIO_CLK, ENABLE);
-
- /*!< Configure LM75_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
- GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;
- GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pin: SMBUS ALERT */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval.h
deleted file mode 100644
index 69dcff1..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval.h
+++ /dev/null
@@ -1,342 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210e_eval.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains definitions for STM3210E_EVAL's Leds, push-buttons
- * COM ports, sFLASH (on SPI) and Temperature Sensor LM75 (on I2C)
- * hardware resources.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM3210E_EVAL_H
-#define __STM3210E_EVAL_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL_LOW_LEVEL
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Exported_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Exported_Constants
- * @{
- */
-/** @addtogroup STM3210E_EVAL_LOW_LEVEL_LED
- * @{
- */
-#define LEDn 4
-
-#define LED1_PIN GPIO_Pin_6
-#define LED1_GPIO_PORT GPIOF
-#define LED1_GPIO_CLK RCC_APB2Periph_GPIOF
-
-#define LED2_PIN GPIO_Pin_7
-#define LED2_GPIO_PORT GPIOF
-#define LED2_GPIO_CLK RCC_APB2Periph_GPIOF
-
-#define LED3_PIN GPIO_Pin_8
-#define LED3_GPIO_PORT GPIOF
-#define LED3_GPIO_CLK RCC_APB2Periph_GPIOF
-
-#define LED4_PIN GPIO_Pin_9
-#define LED4_GPIO_PORT GPIOF
-#define LED4_GPIO_CLK RCC_APB2Periph_GPIOF
-
-/**
- * @}
- */
-
-/** @addtogroup STM3210E_EVAL_LOW_LEVEL_BUTTON
- * @{
- */
-#define BUTTONn 8
-
-/**
- * @brief Wakeup push-button
- */
-#define WAKEUP_BUTTON_PIN GPIO_Pin_0
-#define WAKEUP_BUTTON_GPIO_PORT GPIOA
-#define WAKEUP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOA
-#define WAKEUP_BUTTON_EXTI_LINE EXTI_Line0
-#define WAKEUP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOA
-#define WAKEUP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource0
-#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn
-/**
- * @brief Tamper push-button
- */
-#define TAMPER_BUTTON_PIN GPIO_Pin_13
-#define TAMPER_BUTTON_GPIO_PORT GPIOC
-#define TAMPER_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOC
-#define TAMPER_BUTTON_EXTI_LINE EXTI_Line13
-#define TAMPER_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOC
-#define TAMPER_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource13
-#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Key push-button
- */
-#define KEY_BUTTON_PIN GPIO_Pin_8
-#define KEY_BUTTON_GPIO_PORT GPIOG
-#define KEY_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define KEY_BUTTON_EXTI_LINE EXTI_Line8
-#define KEY_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define KEY_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource8
-#define KEY_BUTTON_EXTI_IRQn EXTI9_5_IRQn
-/**
- * @brief Joystick Right push-button
- */
-#define RIGHT_BUTTON_PIN GPIO_Pin_13
-#define RIGHT_BUTTON_GPIO_PORT GPIOG
-#define RIGHT_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define RIGHT_BUTTON_EXTI_LINE EXTI_Line13
-#define RIGHT_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define RIGHT_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource13
-#define RIGHT_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Joystick Left push-button
- */
-#define LEFT_BUTTON_PIN GPIO_Pin_14
-#define LEFT_BUTTON_GPIO_PORT GPIOG
-#define LEFT_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define LEFT_BUTTON_EXTI_LINE EXTI_Line14
-#define LEFT_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define LEFT_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource14
-#define LEFT_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Joystick Up push-button
- */
-#define UP_BUTTON_PIN GPIO_Pin_15
-#define UP_BUTTON_GPIO_PORT GPIOG
-#define UP_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define UP_BUTTON_EXTI_LINE EXTI_Line15
-#define UP_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define UP_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource15
-#define UP_BUTTON_EXTI_IRQn EXTI15_10_IRQn
-/**
- * @brief Joystick Down push-button
- */
-#define DOWN_BUTTON_PIN GPIO_Pin_3
-#define DOWN_BUTTON_GPIO_PORT GPIOD
-#define DOWN_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOD
-#define DOWN_BUTTON_EXTI_LINE EXTI_Line3
-#define DOWN_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOD
-#define DOWN_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource3
-#define DOWN_BUTTON_EXTI_IRQn EXTI3_IRQn
-/**
- * @brief Joystick Sel push-button
- */
-#define SEL_BUTTON_PIN GPIO_Pin_7
-#define SEL_BUTTON_GPIO_PORT GPIOG
-#define SEL_BUTTON_GPIO_CLK RCC_APB2Periph_GPIOG
-#define SEL_BUTTON_EXTI_LINE EXTI_Line7
-#define SEL_BUTTON_EXTI_PORT_SOURCE GPIO_PortSourceGPIOG
-#define SEL_BUTTON_EXTI_PIN_SOURCE GPIO_PinSource7
-#define SEL_BUTTON_EXTI_IRQn EXTI9_5_IRQn
-/**
- * @}
- */
-
-/** @addtogroup STM3210E_EVAL_LOW_LEVEL_COM
- * @{
- */
-#define COMn 2
-
-/**
- * @brief Definition for COM port1, connected to USART1
- */
-#define EVAL_COM1 USART1
-#define EVAL_COM1_CLK RCC_APB2Periph_USART1
-#define EVAL_COM1_TX_PIN GPIO_Pin_9
-#define EVAL_COM1_TX_GPIO_PORT GPIOA
-#define EVAL_COM1_TX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM1_RX_PIN GPIO_Pin_10
-#define EVAL_COM1_RX_GPIO_PORT GPIOA
-#define EVAL_COM1_RX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM1_IRQn USART1_IRQn
-
-/**
- * @brief Definition for COM port2, connected to USART2
- */
-#define EVAL_COM2 USART2
-#define EVAL_COM2_CLK RCC_APB1Periph_USART2
-#define EVAL_COM2_TX_PIN GPIO_Pin_2
-#define EVAL_COM2_TX_GPIO_PORT GPIOA
-#define EVAL_COM2_TX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM2_RX_PIN GPIO_Pin_3
-#define EVAL_COM2_RX_GPIO_PORT GPIOA
-#define EVAL_COM2_RX_GPIO_CLK RCC_APB2Periph_GPIOA
-#define EVAL_COM2_IRQn USART2_IRQn
-
-/**
- * @}
- */
-
-/** @addtogroup STM3210E_EVAL_LOW_LEVEL_SD_FLASH
- * @{
- */
-/**
- * @brief SD FLASH SDIO Interface
- */
-
-#define SD_DETECT_PIN GPIO_Pin_11 /* PF.11 */
-#define SD_DETECT_GPIO_PORT GPIOF /* GPIOF */
-#define SD_DETECT_GPIO_CLK RCC_APB2Periph_GPIOF
-
-#define SDIO_FIFO_ADDRESS ((uint32_t)0x40018080)
-/**
- * @brief SDIO Intialization Frequency (400KHz max)
- */
-#define SDIO_INIT_CLK_DIV ((uint8_t)0xB2)
-/**
- * @brief SDIO Data Transfer Frequency (25MHz max)
- */
-#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x00)
-
-/**
- * @}
- */
-
-/** @addtogroup STM3210E_EVAL_LOW_LEVEL_M25P_FLASH_SPI
- * @{
- */
-/**
- * @brief M25P FLASH SPI Interface pins
- */
-#define sFLASH_SPI SPI1
-#define sFLASH_SPI_CLK RCC_APB2Periph_SPI1
-#define sFLASH_SPI_SCK_PIN GPIO_Pin_5 /* PA.05 */
-#define sFLASH_SPI_SCK_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_SPI_MISO_PIN GPIO_Pin_6 /* PA.06 */
-#define sFLASH_SPI_MISO_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_SPI_MOSI_PIN GPIO_Pin_7 /* PA.07 */
-#define sFLASH_SPI_MOSI_GPIO_PORT GPIOA /* GPIOA */
-#define sFLASH_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOA
-#define sFLASH_CS_PIN GPIO_Pin_2 /* PB.02 */
-#define sFLASH_CS_GPIO_PORT GPIOB /* GPIOB */
-#define sFLASH_CS_GPIO_CLK RCC_APB2Periph_GPIOB
-
-/**
- * @}
- */
-
-/** @addtogroup STM3210E_EVAL_LOW_LEVEL_TSENSOR_I2C
- * @{
- */
-/**
- * @brief LM75 Temperature Sensor I2C Interface pins
- */
-#define LM75_I2C I2C1
-#define LM75_I2C_CLK RCC_APB1Periph_I2C1
-#define LM75_I2C_SCL_PIN GPIO_Pin_6 /* PB.06 */
-#define LM75_I2C_SCL_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SCL_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_SDA_PIN GPIO_Pin_7 /* PB.07 */
-#define LM75_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SDA_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_SMBUSALERT_PIN GPIO_Pin_5 /* PB.05 */
-#define LM75_I2C_SMBUSALERT_GPIO_PORT GPIOB /* GPIOB */
-#define LM75_I2C_SMBUSALERT_GPIO_CLK RCC_APB2Periph_GPIOB
-#define LM75_I2C_DR ((uint32_t)0x40005410)
-
-#define LM75_DMA_CLK RCC_AHBPeriph_DMA1
-#define LM75_DMA_TX_CHANNEL DMA1_Channel6
-#define LM75_DMA_RX_CHANNEL DMA1_Channel7
-#define LM75_DMA_TX_TCFLAG DMA1_FLAG_TC6
-#define LM75_DMA_RX_TCFLAG DMA1_FLAG_TC7
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_LOW_LEVEL_Exported_Functions
- * @{
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led);
-void STM_EVAL_LEDOn(Led_TypeDef Led);
-void STM_EVAL_LEDOff(Led_TypeDef Led);
-void STM_EVAL_LEDToggle(Led_TypeDef Led);
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode);
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button);
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct);
-void SD_LowLevel_DeInit(void);
-void SD_LowLevel_Init(void);
-void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize);
-void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize);
-uint32_t SD_DMAEndOfTransferStatus(void);
-void sFLASH_LowLevel_DeInit(void);
-void sFLASH_LowLevel_Init(void);
-void LM75_LowLevel_DeInit(void);
-void LM75_LowLevel_Init(void);
-/**
- * @}
- */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM3210E_EVAL_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nand.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nand.c
deleted file mode 100644
index 97f1022..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nand.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210e_eval_fsmc_nand.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides a set of functions needed to drive the
- * NAND512W3A2 memory mounted on STM3210E-EVAL board.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm3210e_eval_fsmc_nand.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL_FSMC_NAND
- * @brief This file provides a set of functions needed to drive the
- * NAND512W3A2 memory mounted on STM3210E-EVAL board.
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_FSMC_NAND_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_FSMC_NAND_Private_Defines
- * @{
- */
-/**
- * @brief FSMC Bank 2
- */
-#define FSMC_Bank_NAND FSMC_Bank2_NAND
-#define Bank_NAND_ADDR Bank2_NAND_ADDR
-#define Bank2_NAND_ADDR ((uint32_t)0x70000000)
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_FSMC_NAND_Private_Macros
- * @{
- */
-#define ROW_ADDRESS (Address.Page + (Address.Block + (Address.Zone * NAND_ZONE_SIZE)) * NAND_BLOCK_SIZE)
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_FSMC_NAND_Private_Variables
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_FSMC_NAND_Private_Function_Prototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_FSMC_NAND_Private_Functions
- * @{
- */
-
-/**
- * @brief Configures the FSMC and GPIOs to interface with the NAND memory.
- * This function must be called before any write/read operation on the
- * NAND.
- * @param None
- * @retval None
- */
-void NAND_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- FSMC_NANDInitTypeDef FSMC_NANDInitStructure;
- FSMC_NAND_PCCARDTimingInitTypeDef p;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
- RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
-
-/*-- GPIO Configuration ------------------------------------------------------*/
-/*!< CLE, ALE, D0->D3, NOE, NWE and NCE2 NAND pin configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15 |
- GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
- GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
-
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
-/*!< D4->D7 NAND pin configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
-
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
-
-/*!< NWAIT NAND pin configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
-
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
-/*!< INT2 NAND pin configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_Init(GPIOG, &GPIO_InitStructure);
-
- /*-- FSMC Configuration ------------------------------------------------------*/
- p.FSMC_SetupTime = 0x0;
- p.FSMC_WaitSetupTime = 0x2;
- p.FSMC_HoldSetupTime = 0x1;
- p.FSMC_HiZSetupTime = 0x0;
-
- FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND;
- FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Enable;
- FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
- FSMC_NANDInitStructure.FSMC_ECC = FSMC_ECC_Enable;
- FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_512Bytes;
- FSMC_NANDInitStructure.FSMC_TCLRSetupTime = 0x00;
- FSMC_NANDInitStructure.FSMC_TARSetupTime = 0x00;
- FSMC_NANDInitStructure.FSMC_CommonSpaceTimingStruct = &p;
- FSMC_NANDInitStructure.FSMC_AttributeSpaceTimingStruct = &p;
-
- FSMC_NANDInit(&FSMC_NANDInitStructure);
-
- /*!< FSMC NAND Bank Cmd Test */
- FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);
-}
-
-/**
- * @brief Reads NAND memory's ID.
- * @param NAND_ID: pointer to a NAND_IDTypeDef structure which will hold
- * the Manufacturer and Device ID.
- * @retval None
- */
-void NAND_ReadID(NAND_IDTypeDef* NAND_ID)
-{
- uint32_t data = 0;
-
- /*!< Send Command to the command area */
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = 0x90;
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;
-
- /*!< Sequence to read ID from NAND flash */
- data = *(__IO uint32_t *)(Bank_NAND_ADDR | DATA_AREA);
-
- NAND_ID->Maker_ID = ADDR_1st_CYCLE (data);
- NAND_ID->Device_ID = ADDR_2nd_CYCLE (data);
- NAND_ID->Third_ID = ADDR_3rd_CYCLE (data);
- NAND_ID->Fourth_ID = ADDR_4th_CYCLE (data);
-}
-
-/**
- * @brief This routine is for writing one or several 512 Bytes Page size.
- * @param pBuffer: pointer on the Buffer containing data to be written
- * @param Address: First page address
- * @param NumPageToWrite: Number of page to write
- * @retval New status of the NAND operation. This parameter can be:
- * - NAND_TIMEOUT_ERROR: when the previous operation generate
- * a Timeout error
- * - NAND_READY: when memory is ready for the next operation
- * And the new status of the increment address operation. It can be:
- * - NAND_VALID_ADDRESS: When the new address is valid address
- * - NAND_INVALID_ADDRESS: When the new address is invalid address
- */
-uint32_t NAND_WriteSmallPage(uint8_t *pBuffer, NAND_ADDRESS Address, uint32_t NumPageToWrite)
-{
- uint32_t index = 0x00, numpagewritten = 0x00, addressstatus = NAND_VALID_ADDRESS;
- uint32_t status = NAND_READY, size = 0x00;
-
- while((NumPageToWrite != 0x00) && (addressstatus == NAND_VALID_ADDRESS) && (status == NAND_READY))
- {
- /*!< Page write command and address */
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_AREA_A;
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_WRITE0;
-
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS);
-
- /*!< Calculate the size */
- size = NAND_PAGE_SIZE + (NAND_PAGE_SIZE * numpagewritten);
-
- /*!< Write data */
- for(; index < size; index++)
- {
- *(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA) = pBuffer[index];
- }
-
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_WRITE_TRUE1;
-
- /*!< Check status for successful operation */
- status = NAND_GetStatus();
-
- if(status == NAND_READY)
- {
- numpagewritten++;
-
- NumPageToWrite--;
-
- /*!< Calculate Next small page Address */
- addressstatus = NAND_AddressIncrement(&Address);
- }
- }
-
- return (status | addressstatus);
-}
-
-/**
- * @brief This routine is for sequential read from one or several 512 Bytes Page size.
- * @param pBuffer: pointer on the Buffer to fill
- * @param Address: First page address
- * @param NumPageToRead: Number of page to read
- * @retval New status of the NAND operation. This parameter can be:
- * - NAND_TIMEOUT_ERROR: when the previous operation generate
- * a Timeout error
- * - NAND_READY: when memory is ready for the next operation
- * And the new status of the increment address operation. It can be:
- * - NAND_VALID_ADDRESS: When the new address is valid address
- * - NAND_INVALID_ADDRESS: When the new address is invalid address
- */
-uint32_t NAND_ReadSmallPage(uint8_t *pBuffer, NAND_ADDRESS Address, uint32_t NumPageToRead)
-{
- uint32_t index = 0x00, numpageread = 0x00, addressstatus = NAND_VALID_ADDRESS;
- uint32_t status = NAND_READY, size = 0x00;
-
- while((NumPageToRead != 0x0) && (addressstatus == NAND_VALID_ADDRESS))
- {
- /*!< Page Read command and page address */
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_AREA_A;
-
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS);
-
- /*!< Calculate the size */
- size = NAND_PAGE_SIZE + (NAND_PAGE_SIZE * numpageread);
-
- /*!< Get Data into Buffer */
- for(; index < size; index++)
- {
- pBuffer[index]= *(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA);
- }
-
- numpageread++;
-
- NumPageToRead--;
-
- /*!< Calculate page address */
- addressstatus = NAND_AddressIncrement(&Address);
- }
-
- status = NAND_GetStatus();
-
- return (status | addressstatus);
-}
-
-/**
- * @brief This routine write the spare area information for the specified
- * pages addresses.
- * @param pBuffer: pointer on the Buffer containing data to be written
- * @param Address: First page address
- * @param NumSpareAreaTowrite: Number of Spare Area to write
- * @retval New status of the NAND operation. This parameter can be:
- * - NAND_TIMEOUT_ERROR: when the previous operation generate
- * a Timeout error
- * - NAND_READY: when memory is ready for the next operation
- * And the new status of the increment address operation. It can be:
- * - NAND_VALID_ADDRESS: When the new address is valid address
- * - NAND_INVALID_ADDRESS: When the new address is invalid address
- */
-uint32_t NAND_WriteSpareArea(uint8_t *pBuffer, NAND_ADDRESS Address, uint32_t NumSpareAreaTowrite)
-{
- uint32_t index = 0x00, numsparesreawritten = 0x00, addressstatus = NAND_VALID_ADDRESS;
- uint32_t status = NAND_READY, size = 0x00;
-
- while((NumSpareAreaTowrite != 0x00) && (addressstatus == NAND_VALID_ADDRESS) && (status == NAND_READY))
- {
- /*!< Page write Spare area command and address */
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_AREA_C;
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_WRITE0;
-
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS);
-
- /*!< Calculate the size */
- size = NAND_SPARE_AREA_SIZE + (NAND_SPARE_AREA_SIZE * numsparesreawritten);
-
- /*!< Write the data */
- for(; index < size; index++)
- {
- *(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA) = pBuffer[index];
- }
-
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_WRITE_TRUE1;
-
- /*!< Check status for successful operation */
- status = NAND_GetStatus();
-
- if(status == NAND_READY)
- {
- numsparesreawritten++;
-
- NumSpareAreaTowrite--;
-
- /*!< Calculate Next page Address */
- addressstatus = NAND_AddressIncrement(&Address);
- }
- }
-
- return (status | addressstatus);
-}
-
-/**
- * @brief This routine read the spare area information from the specified
- * pages addresses.
- * @param pBuffer: pointer on the Buffer to fill
- * @param Address: First page address
- * @param NumSpareAreaToRead: Number of Spare Area to read
- * @retval New status of the NAND operation. This parameter can be:
- * - NAND_TIMEOUT_ERROR: when the previous operation generate
- * a Timeout error
- * - NAND_READY: when memory is ready for the next operation
- * And the new status of the increment address operation. It can be:
- * - NAND_VALID_ADDRESS: When the new address is valid address
- * - NAND_INVALID_ADDRESS: When the new address is invalid address
- */
-uint32_t NAND_ReadSpareArea(uint8_t *pBuffer, NAND_ADDRESS Address, uint32_t NumSpareAreaToRead)
-{
- uint32_t numsparearearead = 0x00, index = 0x00, addressstatus = NAND_VALID_ADDRESS;
- uint32_t status = NAND_READY, size = 0x00;
-
- while((NumSpareAreaToRead != 0x0) && (addressstatus == NAND_VALID_ADDRESS))
- {
- /*!< Page Read command and page address */
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_AREA_C;
-
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS);
-
- /*!< Data Read */
- size = NAND_SPARE_AREA_SIZE + (NAND_SPARE_AREA_SIZE * numsparearearead);
-
- /*!< Get Data into Buffer */
- for ( ;index < size; index++)
- {
- pBuffer[index] = *(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA);
- }
-
- numsparearearead++;
-
- NumSpareAreaToRead--;
-
- /*!< Calculate page address */
- addressstatus = NAND_AddressIncrement(&Address);
- }
-
- status = NAND_GetStatus();
-
- return (status | addressstatus);
-}
-
-/**
- * @brief This routine erase complete block from NAND FLASH
- * @param Address: Any address into block to be erased
- * @retval New status of the NAND operation. This parameter can be:
- * - NAND_TIMEOUT_ERROR: when the previous operation generate
- * a Timeout error
- * - NAND_READY: when memory is ready for the next operation
- */
-uint32_t NAND_EraseBlock(NAND_ADDRESS Address)
-{
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_ERASE0;
-
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(ROW_ADDRESS);
- *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(ROW_ADDRESS);
-
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_ERASE1;
-
- return (NAND_GetStatus());
-}
-
-/**
- * @brief This routine reset the NAND FLASH.
- * @param None
- * @retval NAND_READY
- */
-uint32_t NAND_Reset(void)
-{
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_RESET;
-
- return (NAND_READY);
-}
-
-/**
- * @brief Get the NAND operation status.
- * @param None
- * @retval New status of the NAND operation. This parameter can be:
- * - NAND_TIMEOUT_ERROR: when the previous operation generate
- * a Timeout error
- * - NAND_READY: when memory is ready for the next operation
- */
-uint32_t NAND_GetStatus(void)
-{
- uint32_t timeout = 0x1000000, status = NAND_READY;
-
- status = NAND_ReadStatus();
-
- /*!< Wait for a NAND operation to complete or a TIMEOUT to occur */
- while ((status != NAND_READY) &&( timeout != 0x00))
- {
- status = NAND_ReadStatus();
- timeout --;
- }
-
- if(timeout == 0x00)
- {
- status = NAND_TIMEOUT_ERROR;
- }
-
- /*!< Return the operation status */
- return (status);
-}
-
-/**
- * @brief Reads the NAND memory status using the Read status command.
- * @param None
- * @retval The status of the NAND memory. This parameter can be:
- * - NAND_BUSY: when memory is busy
- * - NAND_READY: when memory is ready for the next operation
- * - NAND_ERROR: when the previous operation gererates error
- */
-uint32_t NAND_ReadStatus(void)
-{
- uint32_t data = 0x00, status = NAND_BUSY;
-
- /*!< Read status operation ------------------------------------ */
- *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_STATUS;
- data = *(__IO uint8_t *)(Bank_NAND_ADDR);
-
- if((data & NAND_ERROR) == NAND_ERROR)
- {
- status = NAND_ERROR;
- }
- else if((data & NAND_READY) == NAND_READY)
- {
- status = NAND_READY;
- }
- else
- {
- status = NAND_BUSY;
- }
-
- return (status);
-}
-
-/**
- * @brief Increment the NAND memory address.
- * @param Address: address to be incremented.
- * @retval The new status of the increment address operation. It can be:
- * - NAND_VALID_ADDRESS: When the new address is valid address
- * - NAND_INVALID_ADDRESS: When the new address is invalid address
- */
-uint32_t NAND_AddressIncrement(NAND_ADDRESS* Address)
-{
- uint32_t status = NAND_VALID_ADDRESS;
-
- Address->Page++;
-
- if(Address->Page == NAND_BLOCK_SIZE)
- {
- Address->Page = 0;
- Address->Block++;
-
- if(Address->Block == NAND_ZONE_SIZE)
- {
- Address->Block = 0;
- Address->Zone++;
-
- if(Address->Zone == NAND_MAX_ZONE)
- {
- status = NAND_INVALID_ADDRESS;
- }
- }
- }
-
- return (status);
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nor.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nor.c
deleted file mode 100644
index e3a03d8..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nor.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210e_eval_fsmc_nor.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides a set of functions needed to drive the M29W128FL,
- * M29W128GL and S29GL128P NOR memories mounted on STM3210E-EVAL board.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm3210e_eval_fsmc_nor.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL_FSMC_NOR
- * @brief This file provides a set of functions needed to drive the M29W128FL,
- * M29W128GL and S29GL128P NOR memories mounted on STM3210E-EVAL board.
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Defines
- * @{
- */
-/**
- * @brief FSMC Bank 1 NOR/SRAM2
- */
-#define Bank1_NOR2_ADDR ((uint32_t)0x64000000)
-
-/* Delay definition */
-#define BlockErase_Timeout ((uint32_t)0x00A00000)
-#define ChipErase_Timeout ((uint32_t)0x30000000)
-#define Program_Timeout ((uint32_t)0x00001400)
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Macros
- * @{
- */
-#define ADDR_SHIFT(A) (Bank1_NOR2_ADDR + (2 * (A)))
-#define NOR_WRITE(Address, Data) (*(__IO uint16_t *)(Address) = (Data))
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Variables
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroupSTM3210E_EVAL_FSMC_NOR_Private_Function_Prototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Private_Functions
- * @{
- */
-
-/**
- * @brief Configures the FSMC and GPIOs to interface with the NOR memory.
- * This function must be called before any write/read operation
- * on the NOR.
- * @param None
- * @retval None
- */
-void NOR_Init(void)
-{
- FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
- FSMC_NORSRAMTimingInitTypeDef p;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
- RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
-
- /*-- GPIO Configuration ------------------------------------------------------*/
- /*!< NOR Data lines configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
- GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
- GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 |
- GPIO_Pin_14 | GPIO_Pin_15;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
- /*!< NOR Address lines configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
- GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 |
- GPIO_Pin_14 | GPIO_Pin_15;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |
- GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
- GPIO_Init(GPIOG, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
- /*!< NOE and NWE configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- /*!< NE2 configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
- GPIO_Init(GPIOG, &GPIO_InitStructure);
-
- /*!< Configure PD6 for NOR memory Ready/Busy signal */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- /*-- FSMC Configuration ----------------------------------------------------*/
- p.FSMC_AddressSetupTime = 0x02;
- p.FSMC_AddressHoldTime = 0x00;
- p.FSMC_DataSetupTime = 0x05;
- p.FSMC_BusTurnAroundDuration = 0x00;
- p.FSMC_CLKDivision = 0x00;
- p.FSMC_DataLatency = 0x00;
- p.FSMC_AccessMode = FSMC_AccessMode_B;
-
- FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
- FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
- FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
- FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
- FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
- FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
- FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
- FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
- FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
- FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
-
- FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
-
- /*!< Enable FSMC Bank1_NOR Bank */
- FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
-}
-
-/**
- * @brief Reads NOR memory's Manufacturer and Device Code.
- * @param NOR_ID: pointer to a NOR_IDTypeDef structure which will hold the
- * Manufacturer and Device Code.
- * @retval None
- */
-void NOR_ReadID(NOR_IDTypeDef* NOR_ID)
-{
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x0090);
-
- NOR_ID->Manufacturer_Code = *(__IO uint16_t *) ADDR_SHIFT(0x0000);
- NOR_ID->Device_Code1 = *(__IO uint16_t *) ADDR_SHIFT(0x0001);
- NOR_ID->Device_Code2 = *(__IO uint16_t *) ADDR_SHIFT(0x000E);
- NOR_ID->Device_Code3 = *(__IO uint16_t *) ADDR_SHIFT(0x000F);
-}
-
-/**
- * @brief Erases the specified Nor memory block.
- * @param BlockAddr: address of the block to erase.
- * @retval NOR_Status: The returned value can be: NOR_SUCCESS, NOR_ERROR
- * or NOR_TIMEOUT
- */
-NOR_Status NOR_EraseBlock(uint32_t BlockAddr)
-{
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x0080);
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
- NOR_WRITE((Bank1_NOR2_ADDR + BlockAddr), 0x30);
-
- return (NOR_GetStatus(BlockErase_Timeout));
-}
-
-/**
- * @brief Erases the entire chip.
- * @param None
- * @retval NOR_Status: The returned value can be: NOR_SUCCESS, NOR_ERROR
- * or NOR_TIMEOUT
- */
-NOR_Status NOR_EraseChip(void)
-{
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x0080);
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x0010);
-
- return (NOR_GetStatus(ChipErase_Timeout));
-}
-
-/**
- * @brief Writes a half-word to the NOR memory.
- * @param WriteAddr: NOR memory internal address to write to.
- * @param Data: Data to write.
- * @retval NOR_Status: The returned value can be: NOR_SUCCESS, NOR_ERROR
- * or NOR_TIMEOUT
- */
-NOR_Status NOR_WriteHalfWord(uint32_t WriteAddr, uint16_t Data)
-{
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x00A0);
- NOR_WRITE((Bank1_NOR2_ADDR + WriteAddr), Data);
-
- return (NOR_GetStatus(Program_Timeout));
-}
-
-/**
- * @brief Writes a half-word buffer to the FSMC NOR memory.
- * @param pBuffer: pointer to buffer.
- * @param WriteAddr: NOR memory internal address from which the data will be
- * written.
- * @param NumHalfwordToWrite: number of Half words to write.
- * @retval NOR_Status: The returned value can be: NOR_SUCCESS, NOR_ERROR
- * or NOR_TIMEOUT
- */
-NOR_Status NOR_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite)
-{
- NOR_Status status = NOR_ONGOING;
-
- do
- {
- /*!< Transfer data to the memory */
- status = NOR_WriteHalfWord(WriteAddr, *pBuffer++);
- WriteAddr = WriteAddr + 2;
- NumHalfwordToWrite--;
- }
- while((status == NOR_SUCCESS) && (NumHalfwordToWrite != 0));
-
- return (status);
-}
-
-/**
- * @brief Writes a half-word buffer to the FSMC NOR memory. This function
- * must be used only with S29GL128P NOR memory.
- * @param pBuffer: pointer to buffer.
- * @param WriteAddr: NOR memory internal address from which the data will be
- * written.
- * @param NumHalfwordToWrite: number of Half words to write.
- * The maximum allowed value is 32 Half words (64 bytes).
- * @retval NOR_Status: The returned value can be: NOR_SUCCESS, NOR_ERROR
- * or NOR_TIMEOUT
- */
-NOR_Status NOR_ProgramBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite)
-{
- uint32_t lastloadedaddress = 0x00;
- uint32_t currentaddress = 0x00;
- uint32_t endaddress = 0x00;
-
- /*!< Initialize variables */
- currentaddress = WriteAddr;
- endaddress = WriteAddr + NumHalfwordToWrite - 1;
- lastloadedaddress = WriteAddr;
-
- /*!< Issue unlock command sequence */
- NOR_WRITE(ADDR_SHIFT(0x00555), 0x00AA);
-
- NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
-
- /*!< Write Write Buffer Load Command */
- NOR_WRITE(ADDR_SHIFT(WriteAddr), 0x0025);
- NOR_WRITE(ADDR_SHIFT(WriteAddr), (NumHalfwordToWrite - 1));
-
- /*!< Load Data into NOR Buffer */
- while(currentaddress <= endaddress)
- {
- /*!< Store last loaded address & data value (for polling) */
- lastloadedaddress = currentaddress;
-
- NOR_WRITE(ADDR_SHIFT(currentaddress), *pBuffer++);
- currentaddress += 1;
- }
-
- NOR_WRITE(ADDR_SHIFT(lastloadedaddress), 0x29);
-
- return(NOR_GetStatus(Program_Timeout));
-}
-
-/**
- * @brief Reads a half-word from the NOR memory.
- * @param ReadAddr: NOR memory internal address to read from.
- * @retval Half-word read from the NOR memory
- */
-uint16_t NOR_ReadHalfWord(uint32_t ReadAddr)
-{
- NOR_WRITE(ADDR_SHIFT(0x00555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x002AA), 0x0055);
- NOR_WRITE((Bank1_NOR2_ADDR + ReadAddr), 0x00F0 );
-
- return (*(__IO uint16_t *)((Bank1_NOR2_ADDR + ReadAddr)));
-}
-
-/**
- * @brief Reads a block of data from the FSMC NOR memory.
- * @param pBuffer: pointer to the buffer that receives the data read from the
- * NOR memory.
- * @param ReadAddr: NOR memory internal address to read from.
- * @param NumHalfwordToRead : number of Half word to read.
- * @retval None
- */
-void NOR_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead)
-{
- NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
- NOR_WRITE((Bank1_NOR2_ADDR + ReadAddr), 0x00F0);
-
- for(; NumHalfwordToRead != 0x00; NumHalfwordToRead--) /*!< while there is data to read */
- {
- /*!< Read a Halfword from the NOR */
- *pBuffer++ = *(__IO uint16_t *)((Bank1_NOR2_ADDR + ReadAddr));
- ReadAddr = ReadAddr + 2;
- }
-}
-
-/**
- * @brief Returns the NOR memory to Read mode.
- * @param None
- * @retval NOR_SUCCESS
- */
-NOR_Status NOR_ReturnToReadMode(void)
-{
- NOR_WRITE(Bank1_NOR2_ADDR, 0x00F0);
-
- return (NOR_SUCCESS);
-}
-
-/**
- * @brief Returns the NOR memory to Read mode and resets the errors in the NOR
- * memory Status Register.
- * @param None
- * @retval NOR_SUCCESS
- */
-NOR_Status NOR_Reset(void)
-{
- NOR_WRITE(ADDR_SHIFT(0x00555), 0x00AA);
- NOR_WRITE(ADDR_SHIFT(0x002AA), 0x0055);
- NOR_WRITE(Bank1_NOR2_ADDR, 0x00F0);
-
- return (NOR_SUCCESS);
-}
-
-/**
- * @brief Returns the NOR operation status.
- * @param Timeout: NOR progamming Timeout
- * @retval NOR_Status: The returned value can be: NOR_SUCCESS, NOR_ERROR
- * or NOR_TIMEOUT
- */
-NOR_Status NOR_GetStatus(uint32_t Timeout)
-{
- uint16_t val1 = 0x00, val2 = 0x00;
- NOR_Status status = NOR_ONGOING;
- uint32_t timeout = Timeout;
-
- /*!< Poll on NOR memory Ready/Busy signal ----------------------------------*/
- while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_6) != RESET) && (timeout > 0))
- {
- timeout--;
- }
-
- timeout = Timeout;
-
- while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_6) == RESET) && (timeout > 0))
- {
- timeout--;
- }
-
- /*!< Get the NOR memory operation status -----------------------------------*/
- while((Timeout != 0x00) && (status != NOR_SUCCESS))
- {
- Timeout--;
-
- /*!< Read DQ6 and DQ5 */
- val1 = *(__IO uint16_t *)(Bank1_NOR2_ADDR);
- val2 = *(__IO uint16_t *)(Bank1_NOR2_ADDR);
-
- /*!< If DQ6 did not toggle between the two reads then return NOR_Success */
- if((val1 & 0x0040) == (val2 & 0x0040))
- {
- return NOR_SUCCESS;
- }
-
- if((val1 & 0x0020) != 0x0020)
- {
- status = NOR_ONGOING;
- }
-
- val1 = *(__IO uint16_t *)(Bank1_NOR2_ADDR);
- val2 = *(__IO uint16_t *)(Bank1_NOR2_ADDR);
-
- if((val1 & 0x0040) == (val2 & 0x0040))
- {
- return NOR_SUCCESS;
- }
- else if((val1 & 0x0020) == 0x0020)
- {
- return NOR_ERROR;
- }
- }
-
- if(Timeout == 0x00)
- {
- status = NOR_TIMEOUT;
- }
-
- /*!< Return the operation status */
- return (status);
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nor.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nor.h
deleted file mode 100644
index 7423f49..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_fsmc_nor.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210e_eval_fsmc_nor.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the
- * stm3210e_eval_fsmc_nor firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM3210E_EVAL_FSMC_NOR_H
-#define __STM3210E_EVAL_FSMC_NOR_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL_FSMC_NOR
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Exported_Types
- * @{
- */
-typedef struct
-{
- uint16_t Manufacturer_Code;
- uint16_t Device_Code1;
- uint16_t Device_Code2;
- uint16_t Device_Code3;
-}NOR_IDTypeDef;
-
-/* NOR Status */
-typedef enum
-{
- NOR_SUCCESS = 0,
- NOR_ONGOING,
- NOR_ERROR,
- NOR_TIMEOUT
-}NOR_Status;
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Exported_Constants
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_FSMC_NOR_Exported_Functions
- * @{
- */
-void NOR_Init(void);
-void NOR_ReadID(NOR_IDTypeDef* NOR_ID);
-NOR_Status NOR_EraseBlock(uint32_t BlockAddr);
-NOR_Status NOR_EraseChip(void);
-NOR_Status NOR_WriteHalfWord(uint32_t WriteAddr, uint16_t Data);
-NOR_Status NOR_WriteBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite);
-NOR_Status NOR_ProgramBuffer(uint16_t* pBuffer, uint32_t WriteAddr, uint32_t NumHalfwordToWrite);
-uint16_t NOR_ReadHalfWord(uint32_t ReadAddr);
-void NOR_ReadBuffer(uint16_t* pBuffer, uint32_t ReadAddr, uint32_t NumHalfwordToRead);
-NOR_Status NOR_ReturnToReadMode(void);
-NOR_Status NOR_Reset(void);
-NOR_Status NOR_GetStatus(uint32_t Timeout);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM3210E_EVAL_FSMC_NOR_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_lcd.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_lcd.c
deleted file mode 100644
index f9277af..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_lcd.c
+++ /dev/null
@@ -1,1329 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210e_eval_lcd.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file includes the LCD driver for AM-240320L8TNQW00H
- * (LCD_ILI9320) and AM-240320LDTNQW00H (LCD_SPFD5408B) Liquid Crystal
- * Display Module of STM3210E-EVAL board.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm3210e_eval_lcd.h"
-#include "../Common/fonts.c"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_LCD
- * @brief This file includes the LCD driver for AM-240320L8TNQW00H
- * (LCD_ILI9320) and AM-240320LDTNQW00H (LCD_SPFD5408B) Liquid Crystal
- * Display Module of STM3210E-EVAL board.
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_LCD_Private_TypesDefinitions
- * @{
- */
-typedef struct
-{
- __IO uint16_t LCD_REG;
- __IO uint16_t LCD_RAM;
-} LCD_TypeDef;
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_LCD_Private_Defines
- * @{
- */
-/* Note: LCD /CS is CE4 - Bank 4 of NOR/SRAM Bank 1~4 */
-#define LCD_BASE ((uint32_t)(0x60000000 | 0x0C000000))
-#define LCD ((LCD_TypeDef *) LCD_BASE)
-#define MAX_POLY_CORNERS 200
-#define POLY_Y(Z) ((int32_t)((Points + Z)->X))
-#define POLY_X(Z) ((int32_t)((Points + Z)->Y))
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_LCD_Private_Macros
- * @{
- */
-#define ABS(X) ((X) > 0 ? (X) : -(X))
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_LCD_Private_Variables
- * @{
- */
-static sFONT *LCD_Currentfonts;
-/* Global variables to set the written text color */
-static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
-
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_LCD_Private_FunctionPrototypes
- * @{
- */
-#ifndef USE_Delay
-static void delay(vu32 nCount);
-#endif /* USE_Delay*/
-static void PutPixel(int16_t x, int16_t y);
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed);
-/**
- * @}
- */
-
-
-/** @defgroup STM3210E_EVAL_LCD_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the LCD.
- * @param None
- * @retval None
- */
-void LCD_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LCD Display Off */
- LCD_DisplayOff();
-
- /* BANK 4 (of NOR/SRAM Bank 1~4) is disabled */
- FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
-
- /*!< LCD_SPI DeInit */
- FSMC_NORSRAMDeInit(FSMC_Bank1_NORSRAM4);
-
- /* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
- PD.10(D15), PD.14(D0), PD.15(D1) as input floating */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
- GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
- GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- /* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
- PE.14(D11), PE.15(D12) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
- GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
- GPIO_Pin_15;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- /* Set PF.00(A0 (RS)) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
- /* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_Init(GPIOG, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the LCD.
- * @param None
- * @retval None
- */
-void STM3210E_LCD_Init(void)
-{
-/* Configure the LCD Control pins --------------------------------------------*/
- LCD_CtrlLinesConfig();
-/* Configure the FSMC Parallel interface -------------------------------------*/
- LCD_FSMCConfig();
-
- _delay_(5); /* delay 50 ms */
- /* Check if the LCD is SPFD5408B Controller */
- if(LCD_ReadReg(0x00) == 0x5408)
- {
- /* Start Initial Sequence ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_1, 0x0100); /* Set SS bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* Set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB 18-bit System interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity, no impact */
- /* Power On sequence -----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_17, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_16, 0x12B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x01BD); /* External reference voltage= Vci */
- _delay_(5);
- LCD_WriteReg(LCD_REG_19, 0x1400); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x000E); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x013F); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve (SPFD5408B)-------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0b0d);
- LCD_WriteReg(LCD_REG_49, 0x1923);
- LCD_WriteReg(LCD_REG_50, 0x1c26);
- LCD_WriteReg(LCD_REG_51, 0x261c);
- LCD_WriteReg(LCD_REG_52, 0x2419);
- LCD_WriteReg(LCD_REG_53, 0x0d0b);
- LCD_WriteReg(LCD_REG_54, 0x1006);
- LCD_WriteReg(LCD_REG_55, 0x0610);
- LCD_WriteReg(LCD_REG_56, 0x0706);
- LCD_WriteReg(LCD_REG_57, 0x0304);
- LCD_WriteReg(LCD_REG_58, 0x0e05);
- LCD_WriteReg(LCD_REG_59, 0x0e01);
- LCD_WriteReg(LCD_REG_60, 0x010e);
- LCD_WriteReg(LCD_REG_61, 0x050e);
- LCD_WriteReg(LCD_REG_62, 0x0403);
- LCD_WriteReg(LCD_REG_63, 0x0607);
- /* Set GRAM area ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL, VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
- /* Partial Display Control -----------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR=1
- I/D=01 (Horizontal : increment, Vertical : decrement)
- AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0112); /* 262K color and display ON */
- LCD_SetFont(&LCD_DEFAULT_FONT);
- return;
- }
-/* Start Initial Sequence ----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_229,0x8000); /* Set the internal vcore voltage */
- LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
-/* Power On sequence ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */
-/* Adjust the Gamma Curve ----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0006);
- LCD_WriteReg(LCD_REG_49, 0x0101);
- LCD_WriteReg(LCD_REG_50, 0x0003);
- LCD_WriteReg(LCD_REG_53, 0x0106);
- LCD_WriteReg(LCD_REG_54, 0x0b02);
- LCD_WriteReg(LCD_REG_55, 0x0302);
- LCD_WriteReg(LCD_REG_56, 0x0707);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0600);
- LCD_WriteReg(LCD_REG_61, 0x020b);
-
-/* Set GRAM area -------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0x2700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
-/* Partial Display Control ---------------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
-/* Panel Control -------------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=01 (Horizontal : increment, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- LCD_SetFont(&LCD_DEFAULT_FONT);
-}
-
-/**
- * @brief Sets the LCD Text and Background colors.
- * @param _TextColor: specifies the Text Color.
- * @param _BackColor: specifies the Background Color.
- * @retval None
- */
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
-{
- TextColor = _TextColor;
- BackColor = _BackColor;
-}
-
-/**
- * @brief Gets the LCD Text and Background colors.
- * @param _TextColor: pointer to the variable that will contain the Text
- Color.
- * @param _BackColor: pointer to the variable that will contain the Background
- Color.
- * @retval None
- */
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
-{
- *_TextColor = TextColor; *_BackColor = BackColor;
-}
-
-/**
- * @brief Sets the Text color.
- * @param Color: specifies the Text color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetTextColor(__IO uint16_t Color)
-{
- TextColor = Color;
-}
-
-
-/**
- * @brief Sets the Background color.
- * @param Color: specifies the Background color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetBackColor(__IO uint16_t Color)
-{
- BackColor = Color;
-}
-
-/**
- * @brief Sets the Text Font.
- * @param fonts: specifies the font to be used.
- * @retval None
- */
-void LCD_SetFont(sFONT *fonts)
-{
- LCD_Currentfonts = fonts;
-}
-
-/**
- * @brief Gets the Text Font.
- * @param None.
- * @retval the used font.
- */
-sFONT *LCD_GetFont(void)
-{
- return LCD_Currentfonts;
-}
-
-/**
- * @brief Clears the selected line.
- * @param Line: the Line to be cleared.
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..n
- * @retval None
- */
-void LCD_ClearLine(uint8_t Line)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
- /* Send the string character by character on lCD */
- while (((refcolumn + 1)&0xFFFF) >= LCD_Currentfonts->Width)
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, ' ');
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- }
-}
-
-
-/**
- * @brief Clears the hole LCD.
- * @param Color: the color of the background.
- * @retval None
- */
-void LCD_Clear(uint16_t Color)
-{
- uint32_t index = 0;
-
- LCD_SetCursor(0x00, 0x013F);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(index = 0; index < 76800; index++)
- {
- LCD->LCD_RAM = Color;
- }
-}
-
-
-/**
- * @brief Sets the cursor position.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @retval None
- */
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos)
-{
- LCD_WriteReg(LCD_REG_32, Xpos);
- LCD_WriteReg(LCD_REG_33, Ypos);
-}
-
-
-/**
- * @brief Draws a character on LCD.
- * @param Xpos: the Line where to display the character shape.
- * @param Ypos: start column address.
- * @param c: pointer to the character data.
- * @retval None
- */
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c)
-{
- uint32_t index = 0, i = 0;
- uint8_t Xaddress = 0;
-
- Xaddress = Xpos;
-
- LCD_SetCursor(Xaddress, Ypos);
-
- for(index = 0; index < LCD_Currentfonts->Height; index++)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(i = 0; i < LCD_Currentfonts->Width; i++)
- {
- if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
- (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
-
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- Xaddress++;
- LCD_SetCursor(Xaddress, Ypos);
- }
-}
-
-
-/**
- * @brief Displays one character (16dots width, 24dots height).
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param Column: start column address.
- * @param Ascii: character ascii code, must be between 0x20 and 0x7E.
- * @retval None
- */
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii)
-{
- Ascii -= 32;
- LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
-}
-
-
-/**
- * @brief Displays a maximum of 20 char on the LCD.
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param *ptr: pointer to string to display on LCD.
- * @retval None
- */
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
-
- /* Send the string character by character on lCD */
- while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width))
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, *ptr);
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- /* Point on the next character */
- ptr++;
- }
-}
-
-
-/**
- * @brief Sets a display window
- * @param Xpos: specifies the X buttom left position.
- * @param Ypos: specifies the Y buttom left position.
- * @param Height: display window height.
- * @param Width: display window width.
- * @retval None
- */
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- /* Horizontal GRAM Start Address */
- if(Xpos >= Height)
- {
- LCD_WriteReg(LCD_REG_80, (Xpos - Height + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_80, 0);
- }
- /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_81, Xpos);
- /* Vertical GRAM Start Address */
- if(Ypos >= Width)
- {
- LCD_WriteReg(LCD_REG_82, (Ypos - Width + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_82, 0);
- }
- /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_83, Ypos);
- LCD_SetCursor(Xpos, Ypos);
-}
-
-
-/**
- * @brief Disables LCD Window mode.
- * @param None
- * @retval None
- */
-void LCD_WindowModeDisable(void)
-{
- LCD_SetDisplayWindow(239, 0x13F, 240, 320);
- LCD_WriteReg(LCD_REG_3, 0x1018);
-}
-
-
-/**
- * @brief Displays a line.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: line length.
- * @param Direction: line direction.
- * This parameter can be one of the following values: Vertical or Horizontal.
- * @retval None
- */
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction)
-{
- uint32_t i = 0;
-
- LCD_SetCursor(Xpos, Ypos);
- if(Direction == LCD_DIR_HORIZONTAL)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAM(TextColor);
- }
- }
- else
- {
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- Xpos++;
- LCD_SetCursor(Xpos, Ypos);
- }
- }
-}
-
-
-/**
- * @brief Displays a rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: display rectangle height.
- * @param Width: display rectangle width.
- * @retval None
- */
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-}
-
-
-/**
- * @brief Displays a circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D;/* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
- CurX = 0;
- CurY = Radius;
-
- while (CurX <= CurY)
- {
- LCD_SetCursor(Xpos + CurX, Ypos + CurY);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos + CurX, Ypos - CurY);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos - CurX, Ypos + CurY);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos - CurX, Ypos - CurY);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos + CurY, Ypos + CurX);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos + CurY, Ypos - CurX);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos - CurY, Ypos + CurX);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- LCD_SetCursor(Xpos - CurY, Ypos - CurX);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(TextColor);
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-}
-
-
-/**
- * @brief Displays a monocolor picture.
- * @param Pict: pointer to the picture array.
- * @retval None
- */
-void LCD_DrawMonoPict(const uint32_t *Pict)
-{
- uint32_t index = 0, i = 0;
- LCD_SetCursor(0, (LCD_PIXEL_WIDTH - 1));
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- for(index = 0; index < 2400; index++)
- {
- for(i = 0; i < 32; i++)
- {
- if((Pict[index] & (1 << i)) == 0x00)
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- }
-}
-
-
-/**
- * @brief Displays a bitmap picture loaded in the internal Flash.
- * @param BmpAddress: Bmp picture address in the internal Flash.
- * @retval None
- */
-void LCD_WriteBMP(uint32_t BmpAddress)
-{
- uint32_t index = 0, size = 0;
- /* Read bitmap size */
- size = *(__IO uint16_t *) (BmpAddress + 2);
- size |= (*(__IO uint16_t *) (BmpAddress + 4)) << 16;
- /* Get bitmap data address offset */
- index = *(__IO uint16_t *) (BmpAddress + 10);
- index |= (*(__IO uint16_t *) (BmpAddress + 12)) << 16;
- size = (size - index)/2;
- BmpAddress += index;
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1008);
-
- LCD_WriteRAM_Prepare();
-
- for(index = 0; index < size; index++)
- {
- LCD_WriteRAM(*(__IO uint16_t *)BmpAddress);
- BmpAddress += 2;
- }
-
- /* Set GRAM write direction and BGR = 1 */
- /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
- /* AM = 1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
-}
-
-/**
- * @brief Displays a full rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: rectangle height.
- * @param Width: rectangle width.
- * @retval None
- */
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
- LCD_SetTextColor(TextColor);
-
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-
- Width -= 2;
- Height--;
- Ypos--;
-
- LCD_SetTextColor(BackColor);
-
- while(Height--)
- {
- LCD_DrawLine(++Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- }
-
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Displays a full circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D; /* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
-
- CurX = 0;
- CurY = Radius;
-
- LCD_SetTextColor(BackColor);
-
- while (CurX <= CurY)
- {
- if(CurY > 0)
- {
- LCD_DrawLine(Xpos - CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- }
-
- if(CurX > 0)
- {
- LCD_DrawLine(Xpos - CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- }
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-
- LCD_SetTextColor(TextColor);
- LCD_DrawCircle(Xpos, Ypos, Radius);
-}
-
-/**
- * @brief Displays an uni line (between two points).
- * @param x1: specifies the point 1 x position.
- * @param y1: specifies the point 1 y position.
- * @param x2: specifies the point 2 x position.
- * @param y2: specifies the point 2 y position.
- * @retval None
- */
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
-{
- int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
- yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
- curpixel = 0;
-
- deltax = ABS(x2 - x1); /* The difference between the x's */
- deltay = ABS(y2 - y1); /* The difference between the y's */
- x = x1; /* Start x off at the first pixel */
- y = y1; /* Start y off at the first pixel */
-
- if (x2 >= x1) /* The x-values are increasing */
- {
- xinc1 = 1;
- xinc2 = 1;
- }
- else /* The x-values are decreasing */
- {
- xinc1 = -1;
- xinc2 = -1;
- }
-
- if (y2 >= y1) /* The y-values are increasing */
- {
- yinc1 = 1;
- yinc2 = 1;
- }
- else /* The y-values are decreasing */
- {
- yinc1 = -1;
- yinc2 = -1;
- }
-
- if (deltax >= deltay) /* There is at least one x-value for every y-value */
- {
- xinc1 = 0; /* Don't change the x when numerator >= denominator */
- yinc2 = 0; /* Don't change the y for every iteration */
- den = deltax;
- num = deltax / 2;
- numadd = deltay;
- numpixels = deltax; /* There are more x-values than y-values */
- }
- else /* There is at least one y-value for every x-value */
- {
- xinc2 = 0; /* Don't change the x for every iteration */
- yinc1 = 0; /* Don't change the y when numerator >= denominator */
- den = deltay;
- num = deltay / 2;
- numadd = deltax;
- numpixels = deltay; /* There are more y-values than x-values */
- }
-
- for (curpixel = 0; curpixel <= numpixels; curpixel++)
- {
- PutPixel(x, y); /* Draw the current pixel */
- num += numadd; /* Increase the numerator by the top of the fraction */
- if (num >= den) /* Check if numerator >= denominator */
- {
- num -= den; /* Calculate the new numerator value */
- x += xinc1; /* Change the x as appropriate */
- y += yinc1; /* Change the y as appropriate */
- }
- x += xinc2; /* Change the x as appropriate */
- y += yinc2; /* Change the y as appropriate */
- }
-}
-
-/**
- * @brief Displays an polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLine(pPoint Points, uint16_t PointCount)
-{
- int16_t X = 0, Y = 0;
-
- if(PointCount < 2)
- {
- return;
- }
-
- while(--PointCount)
- {
- X = Points->X;
- Y = Points->Y;
- Points++;
- LCD_DrawUniLine(X, Y, Points->X, Points->Y);
- }
-}
-
-/**
- * @brief Displays an relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @param Closed: specifies if the draw is closed or not.
- * 1: closed, 0 : not closed.
- * @retval None
- */
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed)
-{
- int16_t X = 0, Y = 0;
- pPoint First = Points;
-
- if(PointCount < 2)
- {
- return;
- }
- X = Points->X;
- Y = Points->Y;
- while(--PointCount)
- {
- Points++;
- LCD_DrawUniLine(X, Y, X + Points->X, Y + Points->Y);
- X = X + Points->X;
- Y = Y + Points->Y;
- }
- if(Closed)
- {
- LCD_DrawUniLine(First->X, First->Y, X, Y);
- }
-}
-
-/**
- * @brief Displays a closed polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLine(Points, PointCount);
- LCD_DrawUniLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
-}
-
-/**
- * @brief Displays a relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 0);
-}
-
-/**
- * @brief Displays a closed relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 1);
-}
-
-
-/**
- * @brief Displays a full polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount)
-{
- /* public-domain code by Darel Rex Finley, 2007 */
- uint16_t nodes = 0, nodeX[MAX_POLY_CORNERS], pixelX = 0, pixelY = 0, i = 0,
- j = 0, swap = 0;
- uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0;
-
- IMAGE_LEFT = IMAGE_RIGHT = Points->X;
- IMAGE_TOP= IMAGE_BOTTOM = Points->Y;
-
- for(i = 1; i < PointCount; i++)
- {
- pixelX = POLY_X(i);
- if(pixelX < IMAGE_LEFT)
- {
- IMAGE_LEFT = pixelX;
- }
- if(pixelX > IMAGE_RIGHT)
- {
- IMAGE_RIGHT = pixelX;
- }
-
- pixelY = POLY_Y(i);
- if(pixelY < IMAGE_TOP)
- {
- IMAGE_TOP = pixelY;
- }
- if(pixelY > IMAGE_BOTTOM)
- {
- IMAGE_BOTTOM = pixelY;
- }
- }
-
- LCD_SetTextColor(BackColor);
-
- /* Loop through the rows of the image. */
- for (pixelY = IMAGE_TOP; pixelY < IMAGE_BOTTOM; pixelY++)
- {
- /* Build a list of nodes. */
- nodes = 0; j = PointCount-1;
-
- for (i = 0; i < PointCount; i++)
- {
- if (POLY_Y(i)<(double) pixelY && POLY_Y(j)>=(double) pixelY || POLY_Y(j)<(double) pixelY && POLY_Y(i)>=(double) pixelY)
- {
- nodeX[nodes++]=(int) (POLY_X(i)+((pixelY-POLY_Y(i))*(POLY_X(j)-POLY_X(i)))/(POLY_Y(j)-POLY_Y(i)));
- }
- j = i;
- }
-
- /* Sort the nodes, via a simple "Bubble" sort. */
- i = 0;
- while (i < nodes-1)
- {
- if (nodeX[i]>nodeX[i+1])
- {
- swap = nodeX[i];
- nodeX[i] = nodeX[i+1];
- nodeX[i+1] = swap;
- if(i)
- {
- i--;
- }
- }
- else
- {
- i++;
- }
- }
-
- /* Fill the pixels between node pairs. */
- for (i = 0; i < nodes; i+=2)
- {
- if(nodeX[i] >= IMAGE_RIGHT)
- {
- break;
- }
- if(nodeX[i+1] > IMAGE_LEFT)
- {
- if (nodeX[i] < IMAGE_LEFT)
- {
- nodeX[i]=IMAGE_LEFT;
- }
- if(nodeX[i+1] > IMAGE_RIGHT)
- {
- nodeX[i+1] = IMAGE_RIGHT;
- }
- LCD_SetTextColor(BackColor);
- LCD_DrawLine(pixelY, nodeX[i+1], nodeX[i+1] - nodeX[i], LCD_DIR_HORIZONTAL);
- LCD_SetTextColor(TextColor);
- PutPixel(pixelY, nodeX[i+1]);
- PutPixel(pixelY, nodeX[i]);
- /* for (j=nodeX[i]; j<nodeX[i+1]; j++) PutPixel(j,pixelY); */
- }
- }
- }
-
- /* draw the edges */
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Writes to the selected LCD register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
-{
- /* Write 16-bit Index, then Write Reg */
- LCD->LCD_REG = LCD_Reg;
- /* Write 16-bit Reg */
- LCD->LCD_RAM = LCD_RegValue;
-}
-
-
-/**
- * @brief Reads the selected LCD Register.
- * @param LCD_Reg: address of the selected register.
- * @retval LCD Register Value.
- */
-uint16_t LCD_ReadReg(uint8_t LCD_Reg)
-{
- /* Write 16-bit Index (then Read Reg) */
- LCD->LCD_REG = LCD_Reg;
- /* Read 16-bit Reg */
- return (LCD->LCD_RAM);
-}
-
-
-/**
- * @brief Prepare to write to the LCD RAM.
- * @param None
- * @retval None
- */
-void LCD_WriteRAM_Prepare(void)
-{
- LCD->LCD_REG = LCD_REG_34;
-}
-
-
-/**
- * @brief Writes to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAM(uint16_t RGB_Code)
-{
- /* Write 16-bit GRAM Reg */
- LCD->LCD_RAM = RGB_Code;
-}
-
-
-/**
- * @brief Reads the LCD RAM.
- * @param None
- * @retval LCD RAM Value.
- */
-uint16_t LCD_ReadRAM(void)
-{
- /* Write 16-bit Index (then Read Reg) */
- LCD->LCD_REG = LCD_REG_34; /* Select GRAM Reg */
- /* Read 16-bit Reg */
- return LCD->LCD_RAM;
-}
-
-
-/**
- * @brief Power on the LCD.
- * @param None
- * @retval None
- */
-void LCD_PowerOn(void)
-{
-/* Power On sequence ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude*/
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-}
-
-
-/**
- * @brief Enables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOn(void)
-{
- /* Display On */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-}
-
-
-/**
- * @brief Disables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOff(void)
-{
- /* Display Off */
- LCD_WriteReg(LCD_REG_7, 0x0);
-}
-
-
-/**
- * @brief Configures LCD Control lines (FSMC Pins) in alternate function mode.
- * @param None
- * @retval None
- */
-void LCD_CtrlLinesConfig(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- /* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
- RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |
- RCC_APB2Periph_AFIO, ENABLE);
- /* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
- PD.10(D15), PD.14(D0), PD.15(D1) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
- GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
- GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- /* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
- PE.14(D11), PE.15(D12) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
- GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
- GPIO_Pin_15;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- /* Set PF.00(A0 (RS)) as alternate function push pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
- /* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_Init(GPIOG, &GPIO_InitStructure);
-}
-
-
-/**
- * @brief Configures the Parallel interface (FSMC) for LCD(Parallel mode)
- * @param None
- * @retval None
- */
-void LCD_FSMCConfig(void)
-{
- FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
- FSMC_NORSRAMTimingInitTypeDef p;
-/*-- FSMC Configuration ------------------------------------------------------*/
-/*----------------------- SRAM Bank 4 ----------------------------------------*/
- /* FSMC_Bank1_NORSRAM4 configuration */
- p.FSMC_AddressSetupTime = 1;
- p.FSMC_AddressHoldTime = 0;
- p.FSMC_DataSetupTime = 2;
- p.FSMC_BusTurnAroundDuration = 0;
- p.FSMC_CLKDivision = 0;
- p.FSMC_DataLatency = 0;
- p.FSMC_AccessMode = FSMC_AccessMode_A;
- /* Color LCD configuration ------------------------------------
- LCD configured as follow:
- - Data/Address MUX = Disable
- - Memory Type = SRAM
- - Data Width = 16bit
- - Write Operation = Enable
- - Extended Mode = Enable
- - Asynchronous Wait = Disable */
- FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
- FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
- FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
- FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
- FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
- FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
- FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
- FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
- FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
- FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
- FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
- /* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */
- FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
-}
-
-/**
- * @brief Displays a pixel.
- * @param x: pixel x.
- * @param y: pixel y.
- * @retval None
- */
-static void PutPixel(int16_t x, int16_t y)
-{
- if(x < 0 || x > 239 || y < 0 || y > 319)
- {
- return;
- }
- LCD_DrawLine(x, y, 1, LCD_DIR_HORIZONTAL);
-}
-
-#ifndef USE_Delay
-/**
- * @brief Inserts a delay time.
- * @param nCount: specifies the delay time length.
- * @retval None
- */
-static void delay(vu32 nCount)
-{
- vu32 index = 0;
- for(index = (100000 * nCount); index != 0; index--)
- {
- }
-}
-#endif /* USE_Delay*/
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_lcd.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_lcd.h
deleted file mode 100644
index 3e86c94..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM3210E_EVAL/stm3210e_eval_lcd.h
+++ /dev/null
@@ -1,359 +0,0 @@
-/**
- ******************************************************************************
- * @file stm3210e_eval_lcd.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm3210e_eval_lcd
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM3210E_EVAL_LCD_H
-#define __STM3210E_EVAL_LCD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-#include "../Common/fonts.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL
- * @{
- */
-
-/** @addtogroup STM3210E_EVAL_LCD
- * @{
- */
-
-/** @defgroup STM3210E_EVAL_LCD_Exported_Types
- * @{
- */
-typedef struct
-{
- int16_t X;
- int16_t Y;
-} Point, * pPoint;
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_LCD_Exported_Constants
- * @{
- */
-
-/**
- * @brief Uncomment the line below if you want to use user defined Delay function
- * (for precise timing), otherwise default _delay_ function defined within
- * this driver is used (less precise timing).
- */
-/* #define USE_Delay */
-
-#ifdef USE_Delay
-#include "main.h"
- #define _delay_ Delay /* !< User can provide more timing precise _delay_ function
- (with 10ms time base), using SysTick for example */
-#else
- #define _delay_ delay /* !< Default _delay_ function with less precise timing */
-#endif
-
-/**
- * @brief LCD Registers
- */
-#define LCD_REG_0 0x00
-#define LCD_REG_1 0x01
-#define LCD_REG_2 0x02
-#define LCD_REG_3 0x03
-#define LCD_REG_4 0x04
-#define LCD_REG_5 0x05
-#define LCD_REG_6 0x06
-#define LCD_REG_7 0x07
-#define LCD_REG_8 0x08
-#define LCD_REG_9 0x09
-#define LCD_REG_10 0x0A
-#define LCD_REG_12 0x0C
-#define LCD_REG_13 0x0D
-#define LCD_REG_14 0x0E
-#define LCD_REG_15 0x0F
-#define LCD_REG_16 0x10
-#define LCD_REG_17 0x11
-#define LCD_REG_18 0x12
-#define LCD_REG_19 0x13
-#define LCD_REG_20 0x14
-#define LCD_REG_21 0x15
-#define LCD_REG_22 0x16
-#define LCD_REG_23 0x17
-#define LCD_REG_24 0x18
-#define LCD_REG_25 0x19
-#define LCD_REG_26 0x1A
-#define LCD_REG_27 0x1B
-#define LCD_REG_28 0x1C
-#define LCD_REG_29 0x1D
-#define LCD_REG_30 0x1E
-#define LCD_REG_31 0x1F
-#define LCD_REG_32 0x20
-#define LCD_REG_33 0x21
-#define LCD_REG_34 0x22
-#define LCD_REG_36 0x24
-#define LCD_REG_37 0x25
-#define LCD_REG_40 0x28
-#define LCD_REG_41 0x29
-#define LCD_REG_43 0x2B
-#define LCD_REG_45 0x2D
-#define LCD_REG_48 0x30
-#define LCD_REG_49 0x31
-#define LCD_REG_50 0x32
-#define LCD_REG_51 0x33
-#define LCD_REG_52 0x34
-#define LCD_REG_53 0x35
-#define LCD_REG_54 0x36
-#define LCD_REG_55 0x37
-#define LCD_REG_56 0x38
-#define LCD_REG_57 0x39
-#define LCD_REG_58 0x3A
-#define LCD_REG_59 0x3B
-#define LCD_REG_60 0x3C
-#define LCD_REG_61 0x3D
-#define LCD_REG_62 0x3E
-#define LCD_REG_63 0x3F
-#define LCD_REG_64 0x40
-#define LCD_REG_65 0x41
-#define LCD_REG_66 0x42
-#define LCD_REG_67 0x43
-#define LCD_REG_68 0x44
-#define LCD_REG_69 0x45
-#define LCD_REG_70 0x46
-#define LCD_REG_71 0x47
-#define LCD_REG_72 0x48
-#define LCD_REG_73 0x49
-#define LCD_REG_74 0x4A
-#define LCD_REG_75 0x4B
-#define LCD_REG_76 0x4C
-#define LCD_REG_77 0x4D
-#define LCD_REG_78 0x4E
-#define LCD_REG_79 0x4F
-#define LCD_REG_80 0x50
-#define LCD_REG_81 0x51
-#define LCD_REG_82 0x52
-#define LCD_REG_83 0x53
-#define LCD_REG_96 0x60
-#define LCD_REG_97 0x61
-#define LCD_REG_106 0x6A
-#define LCD_REG_118 0x76
-#define LCD_REG_128 0x80
-#define LCD_REG_129 0x81
-#define LCD_REG_130 0x82
-#define LCD_REG_131 0x83
-#define LCD_REG_132 0x84
-#define LCD_REG_133 0x85
-#define LCD_REG_134 0x86
-#define LCD_REG_135 0x87
-#define LCD_REG_136 0x88
-#define LCD_REG_137 0x89
-#define LCD_REG_139 0x8B
-#define LCD_REG_140 0x8C
-#define LCD_REG_141 0x8D
-#define LCD_REG_143 0x8F
-#define LCD_REG_144 0x90
-#define LCD_REG_145 0x91
-#define LCD_REG_146 0x92
-#define LCD_REG_147 0x93
-#define LCD_REG_148 0x94
-#define LCD_REG_149 0x95
-#define LCD_REG_150 0x96
-#define LCD_REG_151 0x97
-#define LCD_REG_152 0x98
-#define LCD_REG_153 0x99
-#define LCD_REG_154 0x9A
-#define LCD_REG_157 0x9D
-#define LCD_REG_192 0xC0
-#define LCD_REG_193 0xC1
-#define LCD_REG_229 0xE5
-
-/**
- * @brief LCD color
- */
-#define LCD_COLOR_WHITE 0xFFFF
-#define LCD_COLOR_BLACK 0x0000
-#define LCD_COLOR_GREY 0xF7DE
-#define LCD_COLOR_BLUE 0x001F
-#define LCD_COLOR_BLUE2 0x051F
-#define LCD_COLOR_RED 0xF800
-#define LCD_COLOR_MAGENTA 0xF81F
-#define LCD_COLOR_GREEN 0x07E0
-#define LCD_COLOR_CYAN 0x7FFF
-#define LCD_COLOR_YELLOW 0xFFE0
-
-/**
- * @brief LCD Lines depending on the chosen fonts.
- */
-#define LCD_LINE_0 LINE(0)
-#define LCD_LINE_1 LINE(1)
-#define LCD_LINE_2 LINE(2)
-#define LCD_LINE_3 LINE(3)
-#define LCD_LINE_4 LINE(4)
-#define LCD_LINE_5 LINE(5)
-#define LCD_LINE_6 LINE(6)
-#define LCD_LINE_7 LINE(7)
-#define LCD_LINE_8 LINE(8)
-#define LCD_LINE_9 LINE(9)
-#define LCD_LINE_10 LINE(10)
-#define LCD_LINE_11 LINE(11)
-#define LCD_LINE_12 LINE(12)
-#define LCD_LINE_13 LINE(13)
-#define LCD_LINE_14 LINE(14)
-#define LCD_LINE_15 LINE(15)
-#define LCD_LINE_16 LINE(16)
-#define LCD_LINE_17 LINE(17)
-#define LCD_LINE_18 LINE(18)
-#define LCD_LINE_19 LINE(19)
-#define LCD_LINE_20 LINE(20)
-#define LCD_LINE_21 LINE(21)
-#define LCD_LINE_22 LINE(22)
-#define LCD_LINE_23 LINE(23)
-#define LCD_LINE_24 LINE(24)
-#define LCD_LINE_25 LINE(25)
-#define LCD_LINE_26 LINE(26)
-#define LCD_LINE_27 LINE(27)
-#define LCD_LINE_28 LINE(28)
-#define LCD_LINE_29 LINE(29)
-
-/**
- * @brief LCD default font
- */
-#define LCD_DEFAULT_FONT Font16x24
-
-/**
- * @brief LCD Direction
- */
-#define LCD_DIR_HORIZONTAL 0x0000
-#define LCD_DIR_VERTICAL 0x0001
-
-/**
- * @brief LCD Size (Width and Height)
- */
-#define LCD_PIXEL_WIDTH 0x0140
-#define LCD_PIXEL_HEIGHT 0x00F0
-
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_LCD_Exported_Macros
- * @{
- */
-#define ASSEMBLE_RGB(R, G, B) ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3))
-/**
- * @}
- */
-
-/** @defgroup STM3210E_EVAL_LCD_Exported_Functions
- * @{
- */
-/** @defgroup
- * @{
- */
-void LCD_DeInit(void);
-void STM3210E_LCD_Init(void);
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
-void LCD_SetTextColor(__IO uint16_t Color);
-void LCD_SetBackColor(__IO uint16_t Color);
-void LCD_ClearLine(uint8_t Line);
-void LCD_Clear(uint16_t Color);
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos);
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c);
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii);
-void LCD_SetFont(sFONT *fonts);
-sFONT *LCD_GetFont(void);
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr);
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_WindowModeDisable(void);
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction);
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_DrawMonoPict(const uint32_t *Pict);
-void LCD_WriteBMP(uint32_t BmpAddress);
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_PolyLine(pPoint Points, uint16_t PointCount);
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount);
-/**
- * @}
- */
-
-/** @defgroup
- * @{
- */
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
-uint16_t LCD_ReadReg(uint8_t LCD_Reg);
-void LCD_WriteRAM_Prepare(void);
-void LCD_WriteRAM(uint16_t RGB_Code);
-uint16_t LCD_ReadRAM(void);
-void LCD_PowerOn(void);
-void LCD_DisplayOn(void);
-void LCD_DisplayOff(void);
-/**
- * @}
- */
-
-/** @defgroup
- * @{
- */
-void LCD_CtrlLinesConfig(void);
-void LCD_FSMCConfig(void);
-/**
- * @}
- */
-
-/**
- * @}
- */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM3210E_EVAL_LCD_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval.c
deleted file mode 100644
index 0209e69..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval.c
+++ /dev/null
@@ -1,750 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32l152_eval.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides:
- * - set of firmware functions to manage Leds, push-button and COM ports
- * - low level initialization functions for SD card (on SPI) and
- * temperature sensor (LM75) available on STM32L152-EVAL
- * evaluation board RevB from STMicroelectronics.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32l152_eval.h"
-#include "stm32l1xx_spi.h"
-#include "stm32l1xx_i2c.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32L152_EVAL
- * @{
- */
-
-/** @defgroup STM32L152_EVAL_LOW_LEVEL
- * @brief This file provides firmware functions to manage Leds, push-buttons,
- * COM ports, SD card on SPI and temperature sensor (LM75) available on
- * STM32L152-EVAL evaluation board from STMicroelectronics.
- * @{
- */
-
-/** @defgroup STM32L152_EVAL_LOW_LEVEL_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_LOW_LEVEL_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_LOW_LEVEL_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_LOW_LEVEL_Private_Variables
- * @{
- */
-GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT,
- LED4_GPIO_PORT};
-const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN,
- LED4_PIN};
-const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK,
- LED4_GPIO_CLK};
-
-GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {KEY_BUTTON_GPIO_PORT, RIGHT_BUTTON_GPIO_PORT,
- LEFT_BUTTON_GPIO_PORT, UP_BUTTON_GPIO_PORT,
- DOWN_BUTTON_GPIO_PORT, SEL_BUTTON_GPIO_PORT};
-
-const uint16_t BUTTON_PIN[BUTTONn] = {KEY_BUTTON_PIN, RIGHT_BUTTON_PIN,
- LEFT_BUTTON_PIN, UP_BUTTON_PIN,
- DOWN_BUTTON_PIN, SEL_BUTTON_PIN};
-
-const uint32_t BUTTON_CLK[BUTTONn] = {KEY_BUTTON_GPIO_CLK, RIGHT_BUTTON_GPIO_CLK,
- LEFT_BUTTON_GPIO_CLK, UP_BUTTON_GPIO_CLK,
- DOWN_BUTTON_GPIO_CLK, SEL_BUTTON_GPIO_CLK};
-
-const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {KEY_BUTTON_EXTI_LINE,
- RIGHT_BUTTON_EXTI_LINE,
- LEFT_BUTTON_EXTI_LINE,
- UP_BUTTON_EXTI_LINE,
- DOWN_BUTTON_EXTI_LINE,
- SEL_BUTTON_EXTI_LINE};
-
-const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {KEY_BUTTON_EXTI_PORT_SOURCE,
- RIGHT_BUTTON_EXTI_PORT_SOURCE,
- LEFT_BUTTON_EXTI_PORT_SOURCE,
- UP_BUTTON_EXTI_PORT_SOURCE,
- DOWN_BUTTON_EXTI_PORT_SOURCE,
- SEL_BUTTON_EXTI_PORT_SOURCE};
-
-const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {KEY_BUTTON_EXTI_PIN_SOURCE,
- RIGHT_BUTTON_EXTI_PIN_SOURCE,
- LEFT_BUTTON_EXTI_PIN_SOURCE,
- UP_BUTTON_EXTI_PIN_SOURCE,
- DOWN_BUTTON_EXTI_PIN_SOURCE,
- SEL_BUTTON_EXTI_PIN_SOURCE};
-
-const uint16_t BUTTON_IRQn[BUTTONn] = {KEY_BUTTON_EXTI_IRQn, RIGHT_BUTTON_EXTI_IRQn,
- LEFT_BUTTON_EXTI_IRQn, UP_BUTTON_EXTI_IRQn,
- DOWN_BUTTON_EXTI_IRQn, SEL_BUTTON_EXTI_IRQn};
-
-USART_TypeDef* COM_USART[COMn] = {EVAL_COM1, EVAL_COM2};
-
-GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT, EVAL_COM2_TX_GPIO_PORT};
-
-GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT, EVAL_COM2_RX_GPIO_PORT};
-
-const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK, EVAL_COM2_CLK};
-
-const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK, EVAL_COM2_TX_GPIO_CLK};
-
-const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK, EVAL_COM2_RX_GPIO_CLK};
-
-const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN, EVAL_COM2_TX_PIN};
-
-const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN};
-
-const uint16_t COM_TX_PIN_SOURCE[COMn] = {EVAL_COM1_TX_SOURCE, EVAL_COM2_TX_SOURCE};
-
-const uint16_t COM_RX_PIN_SOURCE[COMn] = {EVAL_COM1_RX_SOURCE, EVAL_COM2_RX_SOURCE};
-
-const uint16_t COM_TX_AF[COMn] = {EVAL_COM1_TX_AF, EVAL_COM2_TX_AF};
-
-const uint16_t COM_RX_AF[COMn] = {EVAL_COM1_RX_AF, EVAL_COM2_RX_AF};
-
-DMA_InitTypeDef sEEDMA_InitStructure;
-
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_LOW_LEVEL_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LOW_LEVEL_Private_Functions
- * @{
- */
-
-/**
- * @brief Configures LED GPIO.
- * @param Led: Specifies the Led to be configured.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDInit(Led_TypeDef Led)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIO_LED Clock */
- RCC_AHBPeriphClockCmd(GPIO_CLK[Led], ENABLE);
-
- /* Configure the GPIO_LED pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
- GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);
- GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led];
-}
-
-/**
- * @brief Turns selected LED On.
- * @param Led: Specifies the Led to be set on.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOn(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BSRRH = GPIO_PIN[Led];
-}
-
-/**
- * @brief Turns selected LED Off.
- * @param Led: Specifies the Led to be set off.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDOff(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led];
-}
-
-/**
- * @brief Toggles the selected LED.
- * @param Led: Specifies the Led to be toggled.
- * This parameter can be one of following parameters:
- * @arg LED1
- * @arg LED2
- * @arg LED3
- * @arg LED4
- * @retval None
- */
-void STM_EVAL_LEDToggle(Led_TypeDef Led)
-{
- GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];
-}
-
-/**
- * @brief Configures Button GPIO and EXTI Line.
- * @param Button: Specifies the Button to be configured.
- * This parameter can be one of following parameters:
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @param Button_Mode: Specifies Button mode.
- * This parameter can be one of following parameters:
- * @arg BUTTON_MODE_GPIO: Button will be used as simple IO
- * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt
- * generation capability
- * @retval None
- */
-void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* There is no Wakeup and Tamper buttons on STM32L152-EVAL, the Button value should
- be greater than 1. */
- if(Button > 1)
- {
- Button = (Button_TypeDef) (Button - 2);
-
- /* Enable the BUTTON Clock */
- RCC_AHBPeriphClockCmd(BUTTON_CLK[Button], ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
-
- /* Configure Button pin as input */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button];
- GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);
-
-
- if (Button_Mode == BUTTON_MODE_EXTI)
- {
- /* Connect Button EXTI Line to Button GPIO Pin */
- SYSCFG_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);
-
- /* Configure Button EXTI line */
- EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button];
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
-
- if(Button != BUTTON_KEY)
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- }
- else
- {
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- }
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /* Enable and set Button EXTI Interrupt to the lowest priority */
- NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button];
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
- NVIC_Init(&NVIC_InitStructure);
- }
- }
-}
-
-/**
- * @brief Returns the selected Button state.
- * @param Button: Specifies the Button to be checked.
- * This parameter can be one of following parameters:
- * @arg BUTTON_KEY: Key Push Button
- * @arg BUTTON_RIGHT: Joystick Right Push Button
- * @arg BUTTON_LEFT: Joystick Left Push Button
- * @arg BUTTON_UP: Joystick Up Push Button
- * @arg BUTTON_DOWN: Joystick Down Push Button
- * @arg BUTTON_SEL: Joystick Sel Push Button
- * @retval - When Button > 1, the Button GPIO pin value is returned.
- * - When Button = 0 or 1, error code (0xFF) is returned.
- */
-uint32_t STM_EVAL_PBGetState(Button_TypeDef Button)
-{
- /* There is no Wakeup and Tamper pins on STM32L152-EVAL, the Button value should
- be greater than 1. */
- if(Button > 1)
- {
- Button = (Button_TypeDef) (Button - 2);
- return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);
- }
- else
- {
- return 0xFF; /* Error Code */
- }
-}
-
-/**
- * @brief Configures COM port.
- * @param COM: Specifies the COM port to be configured.
- * This parameter can be one of following parameters:
- * @arg COM1
- * @arg COM2
- * @param USART_InitStruct: pointer to a USART_InitTypeDef structure that
- * contains the configuration information for the specified USART peripheral.
- * @retval None
- */
-void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable GPIO clock */
- RCC_AHBPeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM], ENABLE);
-
- /* Enable UART clock */
- RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
-
- /* Connect PXx to USARTx_Tx */
- GPIO_PinAFConfig(COM_TX_PORT[COM], COM_TX_PIN_SOURCE[COM], COM_TX_AF[COM]);
-
- /* Connect PXx to USARTx_Rx */
- GPIO_PinAFConfig(COM_RX_PORT[COM], COM_RX_PIN_SOURCE[COM], COM_RX_AF[COM]);
-
- /* Configure USART Tx as alternate function push-pull */
- GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);
-
- /* Configure USART Rx as alternate function push-pull */
- GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];
- GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);
-
- /* USART configuration */
- USART_Init(COM_USART[COM], USART_InitStruct);
-
- /* Enable USART */
- USART_Cmd(COM_USART[COM], ENABLE);
-}
-
-/**
- * @brief DeInitializes the SPI interface.
- * @param None
- * @retval None
- */
-void SD_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- SPI_Cmd(SD_SPI, DISABLE); /*!< SD_SPI disable */
- SPI_DeInit(SD_SPI); /*!< DeInitializes the SD_SPI */
-
- /*!< SD_SPI Periph clock disable */
- RCC_APB1PeriphClockCmd(SD_SPI_CLK, DISABLE);
-
- /*!< Configure SD_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
- GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
- GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
- GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
- GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the SD Card and put it into StandBy State (Ready for
- * data transfer).
- * @param None
- * @retval None
- */
-void SD_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- SPI_InitTypeDef SPI_InitStructure;
-
- /*!< SD_SPI_CS_GPIO, SD_SPI_MOSI_GPIO, SD_SPI_MISO_GPIO, SD_SPI_DETECT_GPIO
- and SD_SPI_SCK_GPIO Periph clock enable */
- RCC_AHBPeriphClockCmd(SD_CS_GPIO_CLK | SD_SPI_MOSI_GPIO_CLK | SD_SPI_MISO_GPIO_CLK |
- SD_SPI_SCK_GPIO_CLK | SD_DETECT_GPIO_CLK, ENABLE);
-
- /*!< SD_SPI Periph clock enable */
- RCC_APB1PeriphClockCmd(SD_SPI_CLK, ENABLE);
-
- /*!< Configure SD_SPI pins: SCK */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MISO */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
- GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI pins: MOSI */
- GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
- GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
- GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
- GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
- GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
-
- /* Connect PXx to SD_SPI_SCK */
- GPIO_PinAFConfig(SD_SPI_SCK_GPIO_PORT, SD_SPI_SCK_SOURCE, SD_SPI_SCK_AF);
-
- /* Connect PXx to SD_SPI_MISO */
- GPIO_PinAFConfig(SD_SPI_MISO_GPIO_PORT, SD_SPI_MISO_SOURCE, SD_SPI_MISO_AF);
-
- /* Connect PXx to SD_SPI_MOSI */
- GPIO_PinAFConfig(SD_SPI_MOSI_GPIO_PORT, SD_SPI_MOSI_SOURCE, SD_SPI_MOSI_AF);
-
- /*!< SD_SPI Config */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
-
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_CRCPolynomial = 7;
- SPI_Init(SD_SPI, &SPI_InitStructure);
-
- SPI_Cmd(SD_SPI, ENABLE); /*!< SD_SPI enable */
-}
-
-/**
- * @brief DeInitializes the LM75_I2C.
- * @param None
- * @retval None
- */
-void LM75_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< Disable LM75_I2C */
- I2C_Cmd(LM75_I2C, DISABLE);
-
- /*!< DeInitializes the LM75_I2C */
- I2C_DeInit(LM75_I2C);
-
- /*!< LM75_I2C Periph clock disable */
- RCC_APB1PeriphClockCmd(LM75_I2C_CLK, DISABLE);
-
- /*!< Configure LM75_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;
- GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pin: SMBUS ALERT */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;
- GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Initializes the LM75_I2C.
- * @param None
- * @retval None
- */
-void LM75_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LM75_I2C Periph clock enable */
- RCC_APB1PeriphClockCmd(LM75_I2C_CLK, ENABLE);
-
- /*!< LM75_I2C_SCL_GPIO_CLK, LM75_I2C_SDA_GPIO_CLK
- and LM75_I2C_SMBUSALERT_GPIO_CLK Periph clock enable */
- RCC_AHBPeriphClockCmd(LM75_I2C_SCL_GPIO_CLK | LM75_I2C_SDA_GPIO_CLK |
- LM75_I2C_SMBUSALERT_GPIO_CLK, ENABLE);
-
- /*!< Configure LM75_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;
- GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure LM75_I2C pin: SMBUS ALERT */
- GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;
- GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);
-
-
- /* Connect PXx to I2C_SCL */
- GPIO_PinAFConfig(LM75_I2C_SCL_GPIO_PORT, LM75_I2C_SCL_SOURCE, LM75_I2C_SCL_AF);
-
- /* Connect PXx to I2C_SDA */
- GPIO_PinAFConfig(LM75_I2C_SDA_GPIO_PORT, LM75_I2C_SDA_SOURCE, LM75_I2C_SDA_AF);
-
- /* Connect PXx to I2C_SMBUSALER */
- GPIO_PinAFConfig(LM75_I2C_SMBUSALERT_GPIO_PORT, LM75_I2C_SMBUSALERT_SOURCE, LM75_I2C_SMBUSALERT_AF);
-}
-
-/**
- * @brief DeInitializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* sEE_I2C Peripheral Disable */
- I2C_Cmd(sEE_I2C, DISABLE);
-
- /* sEE_I2C DeInit */
- I2C_DeInit(sEE_I2C);
-
- /*!< sEE_I2C Periph clock disable */
- RCC_APB1PeriphClockCmd(sEE_I2C_CLK, DISABLE);
-
- /*!< GPIO configuration */
- /*!< Configure sEE_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sEE_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;
- GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure and enable I2C DMA TX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_TX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Configure and enable I2C DMA RX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_RX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Disable and Deinitialize the DMA channels */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_TX, DISABLE);
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_RX, DISABLE);
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_TX);
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_RX);
-}
-
-/**
- * @brief Initializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_Init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /*!< sEE_I2C Periph clock enable */
- RCC_APB1PeriphClockCmd(sEE_I2C_CLK, ENABLE);
-
- /*!< sEE_I2C_SCL_GPIO_CLK and sEE_I2C_SDA_GPIO_CLK Periph clock enable */
- RCC_AHBPeriphClockCmd(sEE_I2C_SCL_GPIO_CLK | sEE_I2C_SDA_GPIO_CLK, ENABLE);
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
-
- /* Reset sEE_I2C peripheral */
- RCC_APB1PeriphResetCmd(sEE_I2C_CLK, ENABLE);
-
- /* Release reset signal of sEE_I2C IP */
- RCC_APB1PeriphResetCmd(sEE_I2C_CLK, DISABLE);
-
- /*!< GPIO configuration */
- /*!< Configure sEE_I2C pins: SCL */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
-
- /*!< Configure sEE_I2C pins: SDA */
- GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;
- GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
-
- /* Connect PXx to I2C_SCL*/
- GPIO_PinAFConfig(sEE_I2C_SCL_GPIO_PORT, sEE_I2C_SCL_SOURCE, sEE_I2C_SCL_AF);
-
- /* Connect PXx to I2C_SDA*/
- GPIO_PinAFConfig(sEE_I2C_SDA_GPIO_PORT, sEE_I2C_SDA_SOURCE, sEE_I2C_SDA_AF);
-
- /* Configure and enable I2C DMA TX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_TX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Configure and enable I2C DMA RX Channel interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = sEE_I2C_DMA_RX_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = sEE_I2C_DMA_PREPRIO;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = sEE_I2C_DMA_SUBPRIO;
- NVIC_Init(&NVIC_InitStructure);
-
- /*!< I2C DMA TX and RX channels configuration */
- /* Enable the DMA clock */
- RCC_AHBPeriphClockCmd(sEE_I2C_DMA_CLK, ENABLE);
-
- /* I2C TX DMA Channel configuration */
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_TX);
- sEEDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)sEE_I2C_DR_Address;
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)0; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_BufferSize = 0xFFFF; /* This parameter will be configured durig communication */
- sEEDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- sEEDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- sEEDMA_InitStructure.DMA_PeripheralDataSize = DMA_MemoryDataSize_Byte;
- sEEDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- sEEDMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
- sEEDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
- sEEDMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
- DMA_Init(sEE_I2C_DMA_CHANNEL_TX, &sEEDMA_InitStructure);
-
- /* I2C RX DMA Channel configuration */
- DMA_DeInit(sEE_I2C_DMA_CHANNEL_RX);
- DMA_Init(sEE_I2C_DMA_CHANNEL_RX, &sEEDMA_InitStructure);
-
- /* Enable the DMA Channels Interrupts */
- DMA_ITConfig(sEE_I2C_DMA_CHANNEL_TX, DMA_IT_TC, ENABLE);
- DMA_ITConfig(sEE_I2C_DMA_CHANNEL_RX, DMA_IT_TC, ENABLE);
-}
-
-/**
- * @brief Initializes DMA channel used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_LowLevel_DMAConfig(uint32_t pBuffer, uint32_t BufferSize, uint32_t Direction)
-{
- /* Initialize the DMA with the new parameters */
- if (Direction == sEE_DIRECTION_TX)
- {
- /* Configure the DMA Tx Channel with the buffer address and the buffer size */
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pBuffer;
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
- sEEDMA_InitStructure.DMA_BufferSize = (uint32_t)BufferSize;
- DMA_Init(sEE_I2C_DMA_CHANNEL_TX, &sEEDMA_InitStructure);
- }
- else
- {
- /* Configure the DMA Rx Channel with the buffer address and the buffer size */
- sEEDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pBuffer;
- sEEDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
- sEEDMA_InitStructure.DMA_BufferSize = (uint32_t)BufferSize;
- DMA_Init(sEE_I2C_DMA_CHANNEL_RX, &sEEDMA_InitStructure);
- }
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_i2c_ee.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_i2c_ee.c
deleted file mode 100644
index 27c1638..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_i2c_ee.c
+++ /dev/null
@@ -1,810 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32l152_eval_i2c_ee.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file provides a set of functions needed to manage an I2C M24CXX
- * EEPROM memory.
- *
- * ===================================================================
- * Notes:
- * - This driver is intended for STM32L1xx families devices only.
- * - There is no I2C EEPROM memory available in STM32L152-EVAL board,
- * to use this driver you have to build your own hardware.
- * ===================================================================
- *
- * It implements a high level communication layer for read and write
- * from/to this memory. The needed STM32 hardware resources (I2C and
- * GPIO) are defined in stm32l152_eval.h file, and the initialization is
- * performed in sEE_LowLevel_Init() function declared in stm32l152_eval.c
- * file.
- * You can easily tailor this driver to any other development board,
- * by just adapting the defines for hardware resources and
- * sEE_LowLevel_Init() function.
- *
- * @note In this driver, basic read and write functions (sEE_ReadBuffer()
- * and sEE_WritePage()) use the DMA to perform the data transfer
- * to/from EEPROM memory (except when number of requested data is
- * equal to 1). Thus, after calling these two functions, user
- * application may perform other tasks while DMA is transferring
- * data. The application should then monitor the variable holding
- * the number of data in order to determine when the transfer is
- * completed (variable decremented to 0). Stopping transfer tasks
- * are performed into DMA interrupt handlers (which are integrated
- * into this driver).
- *
- * +-----------------------------------------------------------------+
- * | Pin assignment |
- * +---------------------------------------+-----------+-------------+
- * | STM32 I2C Pins | sEE | Pin |
- * +---------------------------------------+-----------+-------------+
- * | . | E0(GND) | 1 (0V) |
- * | . | E1(GND) | 2 (0V) |
- * | . | E2(GND) | 3 (0V) |
- * | . | E0(VSS) | 4 (0V) |
- * | sEE_I2C_SDA_PIN/ SDA | SDA | 5 |
- * | sEE_I2C_SCL_PIN/ SCL | SCL | 6 |
- * | . | /WC(VDD)| 7 (3.3V) |
- * | . | VDD | 8 (3.3V) |
- * +---------------------------------------+-----------+-------------+
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32l152_eval_i2c_ee.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32L152_EVAL
- * @{
- */
-
-/** @addtogroup STM32L152_EVAL_I2C_EE
- * @brief This file includes the I2C EEPROM driver of STM32L152-EVAL board.
- * @{
- */
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Private_Variables
- * @{
- */
-__IO uint16_t sEEAddress = 0;
-__IO uint32_t sEETimeout = sEE_LONG_TIMEOUT;
-__IO uint16_t* sEEDataReadPointer;
-__IO uint8_t* sEEDataWritePointer;
-__IO uint8_t sEEDataNum;
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Private_Function_Prototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_DeInit(void)
-{
- sEE_LowLevel_DeInit();
-}
-
-/**
- * @brief Initializes peripherals used by the I2C EEPROM driver.
- * @param None
- * @retval None
- */
-void sEE_Init(void)
-{
- I2C_InitTypeDef I2C_InitStructure;
-
- sEE_LowLevel_Init();
-
- /*!< I2C configuration */
- /* sEE_I2C configuration */
- I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
- I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
- I2C_InitStructure.I2C_OwnAddress1 = I2C_SLAVE_ADDRESS7;
- I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
- I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
- I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
-
- /* sEE_I2C Peripheral Enable */
- I2C_Cmd(sEE_I2C, ENABLE);
- /* Apply sEE_I2C configuration after enabling it */
- I2C_Init(sEE_I2C, &I2C_InitStructure);
-
- /* Enable the sEE_I2C peripheral DMA requests */
- I2C_DMACmd(sEE_I2C, ENABLE);
-
-#if defined (sEE_M24C64_32)
- /*!< Select the EEPROM address according to the state of E0, E1, E2 pins */
- sEEAddress = sEE_HW_ADDRESS;
-#elif defined (sEE_M24C08)
- /*!< depending on the sEE Address selected in the i2c_ee.h file */
- #ifdef sEE_Block0_ADDRESS
- /*!< Select the sEE Block0 to write on */
- sEEAddress = sEE_Block0_ADDRESS;
- #endif
-
- #ifdef sEE_Block1_ADDRESS
- /*!< Select the sEE Block1 to write on */
- sEEAddress = sEE_Block1_ADDRESS;
- #endif
-
- #ifdef sEE_Block2_ADDRESS
- /*!< Select the sEE Block2 to write on */
- sEEAddress = sEE_Block2_ADDRESS;
- #endif
-
- #ifdef sEE_Block3_ADDRESS
- /*!< Select the sEE Block3 to write on */
- sEEAddress = sEE_Block3_ADDRESS;
- #endif
-#endif /*!< sEE_M24C64_32 */
-}
-
-/**
- * @brief Reads a block of data from the EEPROM.
- * @param pBuffer : pointer to the buffer that receives the data read from
- * the EEPROM.
- * @param ReadAddr : EEPROM's internal address to start reading from.
- * @param NumByteToRead : pointer to the variable holding number of bytes to
- * be read from the EEPROM.
- *
- * @note The variable pointed by NumByteToRead is reset to 0 when all the
- * data are read from the EEPROM. Application should monitor this
- * variable in order know when the transfer is complete.
- *
- * @note When number of data to be read is higher than 1, this function just
- * configures the communication and enable the DMA channel to transfer data.
- * Meanwhile, the user application may perform other tasks.
- * When number of data to be read is 1, then the DMA is not used. The byte
- * is read in polling mode.
- *
- * @retval sEE_OK (0) if operation is correctly performed, else return value
- * different from sEE_OK (0) or the timeout user callback.
- */
-uint32_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead)
-{
- /* Set the pointer to the Number of data to be read. This pointer will be used
- by the DMA Transfer Completer interrupt Handler in order to reset the
- variable to 0. User should check on this variable in order to know if the
- DMA transfer has been complete or not. */
- sEEDataReadPointer = NumByteToRead;
-
- /*!< While the bus is busy */
- sEETimeout = sEE_LONG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send START condition */
- I2C_GenerateSTART(sEE_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send EEPROM address for write */
- I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter);
-
- /*!< Test on EV6 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
-#ifdef sEE_M24C08
-
- /*!< Send the EEPROM's internal address to read from: Only one byte address */
- I2C_SendData(sEE_I2C, ReadAddr);
-
-#elif defined (sEE_M24C64_32)
-
- /*!< Send the EEPROM's internal address to read from: MSB of the address first */
- I2C_SendData(sEE_I2C, (uint8_t)((ReadAddr & 0xFF00) >> 8));
-
- /*!< Test on EV8 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTING))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send the EEPROM's internal address to read from: LSB of the address */
- I2C_SendData(sEE_I2C, (uint8_t)(ReadAddr & 0x00FF));
-
-#endif /*!< sEE_M24C08 */
-
- /*!< Test on EV8 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BTF) == RESET)
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send STRAT condition a second time */
- I2C_GenerateSTART(sEE_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it (cleared by reading SR1 then writing to DR) */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send EEPROM address for read */
- I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Receiver);
-
- /* If number of data to be read is 1, then DMA couldn't be used */
- /* One Byte Master Reception procedure (POLLING) ---------------------------*/
- if ((uint16_t)(*NumByteToRead) < 2)
- {
- /* Wait on ADDR flag to be set (ADDR is still not cleared at this level */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_ADDR) == RESET)
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Disable Acknowledgement */
- I2C_AcknowledgeConfig(sEE_I2C, DISABLE);
-
- /* Clear ADDR register by reading SR1 then SR2 register (SR1 has already been read) */
- (void)sEE_I2C->SR2;
-
- /*!< Send STOP Condition */
- I2C_GenerateSTOP(sEE_I2C, ENABLE);
-
- /* Wait for the byte to be received */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_RXNE) == RESET)
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Read the byte received from the EEPROM */
- *pBuffer = I2C_ReceiveData(sEE_I2C);
-
- /*!< Decrement the read bytes counter */
- (uint16_t)(*NumByteToRead)--;
-
- /* Wait to make sure that STOP control bit has been cleared */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(sEE_I2C->CR1 & I2C_CR1_STOP)
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Re-Enable Acknowledgement to be ready for another reception */
- I2C_AcknowledgeConfig(sEE_I2C, ENABLE);
- }
- else/* More than one Byte Master Reception procedure (DMA) -----------------*/
- {
- /*!< Test on EV6 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /* Configure the DMA Rx Channel with the buffer address and the buffer size */
- sEE_LowLevel_DMAConfig((uint32_t)pBuffer, (uint16_t)(*NumByteToRead), sEE_DIRECTION_RX);
-
- /* Inform the DMA that the next End Of Transfer Signal will be the last one */
- I2C_DMALastTransferCmd(sEE_I2C, ENABLE);
-
- /* Enable the DMA Rx Channel */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_RX, ENABLE);
- }
-
- /* If all operations OK, return sEE_OK (0) */
- return sEE_OK;
-}
-
-/**
- * @brief Writes more than one byte to the EEPROM with a single WRITE cycle.
- *
- * @note The number of bytes (combined to write start address) must not
- * cross the EEPROM page boundary. This function can only write into
- * the boundaries of an EEPROM page.
- * This function doesn't check on boundaries condition (in this driver
- * the function sEE_WriteBuffer() which calls sEE_WritePage() is
- * responsible of checking on Page boundaries).
- *
- * @param pBuffer : pointer to the buffer containing the data to be written to
- * the EEPROM.
- * @param WriteAddr : EEPROM's internal address to write to.
- * @param NumByteToWrite : pointer to the variable holding number of bytes to
- * be written into the EEPROM.
- *
- * @note The variable pointed by NumByteToWrite is reset to 0 when all the
- * data are written to the EEPROM. Application should monitor this
- * variable in order know when the transfer is complete.
- *
- * @note This function just configure the communication and enable the DMA
- * channel to transfer data. Meanwhile, the user application may perform
- * other tasks in parallel.
- *
- * @retval sEE_OK (0) if operation is correctly performed, else return value
- * different from sEE_OK (0) or the timeout user callback.
- */
-uint32_t sEE_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite)
-{
- /* Set the pointer to the Number of data to be written. This pointer will be used
- by the DMA Transfer Completer interrupt Handler in order to reset the
- variable to 0. User should check on this variable in order to know if the
- DMA transfer has been complete or not. */
- sEEDataWritePointer = NumByteToWrite;
-
- /*!< While the bus is busy */
- sEETimeout = sEE_LONG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send START condition */
- I2C_GenerateSTART(sEE_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send EEPROM address for write */
- sEETimeout = sEE_FLAG_TIMEOUT;
- I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter);
-
- /*!< Test on EV6 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
-#ifdef sEE_M24C08
-
- /*!< Send the EEPROM's internal address to write to : only one byte Address */
- I2C_SendData(sEE_I2C, WriteAddr);
-
-#elif defined(sEE_M24C64_32)
-
- /*!< Send the EEPROM's internal address to write to : MSB of the address first */
- I2C_SendData(sEE_I2C, (uint8_t)((WriteAddr & 0xFF00) >> 8));
-
- /*!< Test on EV8 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTING))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send the EEPROM's internal address to write to : LSB of the address */
- I2C_SendData(sEE_I2C, (uint8_t)(WriteAddr & 0x00FF));
-
-#endif /*!< sEE_M24C08 */
-
- /*!< Test on EV8 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTING))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /* Configure the DMA Tx Channel with the buffer address and the buffer size */
- sEE_LowLevel_DMAConfig((uint32_t)pBuffer, (uint8_t)(*NumByteToWrite), sEE_DIRECTION_TX);
-
- /* Enable the DMA Tx Channel */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_TX, ENABLE);
-
- /* If all operations OK, return sEE_OK (0) */
- return sEE_OK;
-}
-
-/**
- * @brief Writes buffer of data to the I2C EEPROM.
- * @param pBuffer : pointer to the buffer containing the data to be written
- * to the EEPROM.
- * @param WriteAddr : EEPROM's internal address to write to.
- * @param NumByteToWrite : number of bytes to write to the EEPROM.
- * @retval None
- */
-void sEE_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite)
-{
- uint8_t NumOfPage = 0, NumOfSingle = 0, count = 0;
- uint16_t Addr = 0;
-
- Addr = WriteAddr % sEE_PAGESIZE;
- count = sEE_PAGESIZE - Addr;
- NumOfPage = NumByteToWrite / sEE_PAGESIZE;
- NumOfSingle = NumByteToWrite % sEE_PAGESIZE;
-
- /*!< If WriteAddr is sEE_PAGESIZE aligned */
- if(Addr == 0)
- {
- /*!< If NumByteToWrite < sEE_PAGESIZE */
- if(NumOfPage == 0)
- {
- /* Store the number of data to be written */
- sEEDataNum = NumOfSingle;
- /* Start writing data */
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- /*!< If NumByteToWrite > sEE_PAGESIZE */
- else
- {
- while(NumOfPage--)
- {
- /* Store the number of data to be written */
- sEEDataNum = sEE_PAGESIZE;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- WriteAddr += sEE_PAGESIZE;
- pBuffer += sEE_PAGESIZE;
- }
-
- if(NumOfSingle!=0)
- {
- /* Store the number of data to be written */
- sEEDataNum = NumOfSingle;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- }
- }
- /*!< If WriteAddr is not sEE_PAGESIZE aligned */
- else
- {
- /*!< If NumByteToWrite < sEE_PAGESIZE */
- if(NumOfPage== 0)
- {
- /*!< If the number of data to be written is more than the remaining space
- in the current page: */
- if (NumByteToWrite > count)
- {
- /* Store the number of data to be written */
- sEEDataNum = count;
- /*!< Write the data conained in same page */
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
-
- /* Store the number of data to be written */
- sEEDataNum = (NumByteToWrite - count);
- /*!< Write the remaining data in the following page */
- sEE_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- else
- {
- /* Store the number of data to be written */
- sEEDataNum = NumOfSingle;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- }
- /*!< If NumByteToWrite > sEE_PAGESIZE */
- else
- {
- NumByteToWrite -= count;
- NumOfPage = NumByteToWrite / sEE_PAGESIZE;
- NumOfSingle = NumByteToWrite % sEE_PAGESIZE;
-
- if(count != 0)
- {
- /* Store the number of data to be written */
- sEEDataNum = count;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- WriteAddr += count;
- pBuffer += count;
- }
-
- while(NumOfPage--)
- {
- /* Store the number of data to be written */
- sEEDataNum = sEE_PAGESIZE;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- WriteAddr += sEE_PAGESIZE;
- pBuffer += sEE_PAGESIZE;
- }
- if(NumOfSingle != 0)
- {
- /* Store the number of data to be written */
- sEEDataNum = NumOfSingle;
- sEE_WritePage(pBuffer, WriteAddr, (uint8_t*)(&sEEDataNum));
- /* Wait transfer through DMA to be complete */
- sEETimeout = sEE_LONG_TIMEOUT;
- while (sEEDataNum > 0)
- {
- if((sEETimeout--) == 0) {sEE_TIMEOUT_UserCallback(); return;};
- }
- sEE_WaitEepromStandbyState();
- }
- }
- }
-}
-
-/**
- * @brief Wait for EEPROM Standby state.
- *
- * @note This function allows to wait and check that EEPROM has finished the
- * last operation. It is mostly used after Write operation: after receiving
- * the buffer to be written, the EEPROM may need additional time to actually
- * perform the write operation. During this time, it doesn't answer to
- * I2C packets addressed to it. Once the write operation is complete
- * the EEPROM responds to its address.
- *
- * @param None
- * @retval sEE_OK (0) if operation is correctly performed, else return value
- * different from sEE_OK (0) or the timeout user callback.
- */
-uint32_t sEE_WaitEepromStandbyState(void)
-{
- __IO uint16_t tmpSR1 = 0;
- __IO uint32_t sEETrials = 0;
-
- /*!< While the bus is busy */
- sEETimeout = sEE_LONG_TIMEOUT;
- while(I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BUSY))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /* Keep looping till the slave acknowledge his address or maximum number
- of trials is reached (this number is defined by sEE_MAX_TRIALS_NUMBER define
- in stm32_eval_i2c_ee.h file) */
- while (1)
- {
- /*!< Send START condition */
- I2C_GenerateSTART(sEE_I2C, ENABLE);
-
- /*!< Test on EV5 and clear it */
- sEETimeout = sEE_FLAG_TIMEOUT;
- while(!I2C_CheckEvent(sEE_I2C, I2C_EVENT_MASTER_MODE_SELECT))
- {
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send EEPROM address for write */
- I2C_Send7bitAddress(sEE_I2C, sEEAddress, I2C_Direction_Transmitter);
-
- /* Wait for ADDR flag to be set (Slave acknowledged his address) */
- sEETimeout = sEE_LONG_TIMEOUT;
- do
- {
- /* Get the current value of the SR1 register */
- tmpSR1 = sEE_I2C->SR1;
-
- /* Update the timeout value and exit if it reach 0 */
- if((sEETimeout--) == 0) return sEE_TIMEOUT_UserCallback();
- }
- /* Keep looping till the Address is acknowledged or the AF flag is
- set (address not acknowledged at time) */
- while((tmpSR1 & (I2C_SR1_ADDR | I2C_SR1_AF)) == 0);
-
- /* Check if the ADDR flag has been set */
- if (tmpSR1 & I2C_SR1_ADDR)
- {
- /* Clear ADDR Flag by reading SR1 then SR2 registers (SR1 have already
- been read) */
- (void)sEE_I2C->SR2;
-
- /*!< STOP condition */
- I2C_GenerateSTOP(sEE_I2C, ENABLE);
-
- /* Exit the function */
- return sEE_OK;
- }
- else
- {
- /*!< Clear AF flag */
- I2C_ClearFlag(sEE_I2C, I2C_FLAG_AF);
- }
-
- /* Check if the maximum allowed numbe of trials has bee reached */
- if (sEETrials++ == sEE_MAX_TRIALS_NUMBER)
- {
- /* If the maximum number of trials has been reached, exit the function */
- return sEE_TIMEOUT_UserCallback();
- }
- }
-}
-
-/**
- * @brief This function handles the DMA Tx Channel interrupt Handler.
- * @param None
- * @retval None
- */
-void sEE_I2C_DMA_TX_IRQHandler(void)
-{
- /* Check if the DMA transfer is complete */
- if(DMA_GetFlagStatus(sEE_I2C_DMA_FLAG_TX_TC) != RESET)
- {
- /* Disable the DMA Tx Channel and Clear all its Flags */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_TX, DISABLE);
- DMA_ClearFlag(sEE_I2C_DMA_FLAG_TX_GL);
-
- /*!< Wait till all data have been physically transferred on the bus */
- sEETimeout = sEE_LONG_TIMEOUT;
- while(!I2C_GetFlagStatus(sEE_I2C, I2C_FLAG_BTF))
- {
- if((sEETimeout--) == 0) sEE_TIMEOUT_UserCallback();
- }
-
- /*!< Send STOP condition */
- I2C_GenerateSTOP(sEE_I2C, ENABLE);
-
- /* Reset the variable holding the number of data to be written */
- *sEEDataWritePointer = 0;
- }
-}
-
-/**
- * @brief This function handles the DMA Rx Channel interrupt Handler.
- * @param None
- * @retval None
- */
-void sEE_I2C_DMA_RX_IRQHandler(void)
-{
- /* Check if the DMA transfer is complete */
- if(DMA_GetFlagStatus(sEE_I2C_DMA_FLAG_RX_TC) != RESET)
- {
- /*!< Send STOP Condition */
- I2C_GenerateSTOP(sEE_I2C, ENABLE);
-
- /* Disable the DMA Rx Channel and Clear all its Flags */
- DMA_Cmd(sEE_I2C_DMA_CHANNEL_RX, DISABLE);
- DMA_ClearFlag(sEE_I2C_DMA_FLAG_RX_GL);
-
- /* Reset the variable holding the number of data to be read */
- *sEEDataReadPointer = 0;
- }
-}
-
-#ifdef USE_DEFAULT_TIMEOUT_CALLBACK
-/**
- * @brief Basic management of the timeout situation.
- * @param None.
- * @retval None.
- */
-uint32_t sEE_TIMEOUT_UserCallback(void)
-{
- /* Block communication and all processes */
- while (1)
- {
- }
-}
-#endif /* USE_DEFAULT_TIMEOUT_CALLBACK */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_i2c_ee.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_i2c_ee.h
deleted file mode 100644
index f0ad428..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_i2c_ee.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32l152_eval_i2c_ee.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm32l152_eval_i2c_ee
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32L152_EVAL_I2C_EE_H
-#define __STM32L152_EVAL_I2C_EE_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32L152_EVAL
- * @{
- */
-
-/** @addtogroup STM32L152_EVAL_I2C_EE
- * @{
- */
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Exported_Types
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Exported_Constants
- * @{
- */
-
-/* Uncomment the following line to use the default sEE_TIMEOUT_UserCallback()
- function implemented in stm32_evel_i2c_ee.c file.
- sEE_TIMEOUT_UserCallback() function is called whenever a timeout condition
- occure during communication (waiting on an event that doesn't occur, bus
- errors, busy devices ...). */
-/* #define USE_DEFAULT_TIMEOUT_CALLBACK */
-
-#if !defined (sEE_M24C08) && !defined (sEE_M24C64_32)
-/* Use the defines below the choose the EEPROM type */
-/* #define sEE_M24C08*/ /* Support the device: M24C08. */
-/* note: Could support: M24C01, M24C02, M24C04 and M24C16 if the blocks and
- HW address are correctly defined*/
-#define sEE_M24C64_32 /* Support the devices: M24C32 and M24C64 */
-#endif
-
-#ifdef sEE_M24C64_32
-/* For M24C32 and M24C64 devices, E0,E1 and E2 pins are all used for device
- address selection (ne need for additional address lines). According to the
- Harware connection on the board (on STM3210C-EVAL board E0 = E1 = E2 = 0) */
-
- #define sEE_HW_ADDRESS 0xA0 /* E0 = E1 = E2 = 0 */
-
-#elif defined (sEE_M24C08)
-/* The M24C08W contains 4 blocks (128byte each) with the adresses below: E2 = 0
- EEPROM Addresses defines */
- #define sEE_Block0_ADDRESS 0xA0 /* E2 = 0 */
- /*#define sEE_Block1_ADDRESS 0xA2*/ /* E2 = 0 */
- /*#define sEE_Block2_ADDRESS 0xA4*/ /* E2 = 0 */
- /*#define sEE_Block3_ADDRESS 0xA6*/ /* E2 = 0 */
-
-#endif /* sEE_M24C64_32 */
-
-#define I2C_SPEED 200000
-#define I2C_SLAVE_ADDRESS7 0xA0
-
-#if defined (sEE_M24C08)
- #define sEE_PAGESIZE 16
-#elif defined (sEE_M24C64_32)
- #define sEE_PAGESIZE 32
-#endif
-
-/* Maximum Timeout values for flags and events waiting loops. These timeouts are
- not based on accurate values, they just guarantee that the application will
- not remain stuck if the I2C communication is corrupted.
- You may modify these timeout values depending on CPU frequency and application
- conditions (interrupts routines ...). */
-#define sEE_FLAG_TIMEOUT ((uint32_t)0x1000)
-#define sEE_LONG_TIMEOUT ((uint32_t)(10 * sEE_FLAG_TIMEOUT))
-
-/* Maximum number of trials for sEE_WaitEepromStandbyState() function */
-#define sEE_MAX_TRIALS_NUMBER 300
-
-/* Defintions for the state of the DMA transfer */
-#define sEE_STATE_READY 0
-#define sEE_STATE_BUSY 1
-#define sEE_STATE_ERROR 2
-
-#define sEE_OK 0
-#define sEE_FAIL 1
-
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_I2C_EE_Exported_Functions
- * @{
- */
-void sEE_DeInit(void);
-void sEE_Init(void);
-uint32_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead);
-uint32_t sEE_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite);
-void sEE_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite);
-uint32_t sEE_WaitEepromStandbyState(void);
-
-/* USER Callbacks: These are functions for which prototypes only are declared in
- EEPROM driver and that should be implemented into user applicaiton. */
-/* sEE_TIMEOUT_UserCallback() function is called whenever a timeout condition
- occure during communication (waiting on an event that doesn't occur, bus
- errors, busy devices ...).
- You can use the default timeout callback implementation by uncommenting the
- define USE_DEFAULT_TIMEOUT_CALLBACK in stm32_evel_i2c_ee.h file.
- Typically the user implementation of this callback should reset I2C peripheral
- and re-initialize communication or in worst case reset all the application. */
-uint32_t sEE_TIMEOUT_UserCallback(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32L152_EVAL_I2C_EE_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
-
-
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_lcd.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_lcd.c
deleted file mode 100644
index 8170595..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_lcd.c
+++ /dev/null
@@ -1,1529 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32l152_eval_lcd.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file includes the LCD driver for AM-240320L8TNQW00H (LCD_ILI9320),
- * AM-240320LDTNQW00H (LCD_SPFD5408B) Liquid Crystal Display Module
- * of STM32L152-EVAL board RevB.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32l152_eval_lcd.h"
-#include "../Common/fonts.c"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32L152_EVAL
- * @{
- */
-
-/** @defgroup STM32L152_EVAL_LCD
- * @brief This file includes the LCD driver for AM-240320L8TNQW00H (LCD_ILI9320),
- * AM-240320LDTNQW00H (LCD_SPFD5408B) Liquid Crystal Display Module
- * of STM32L152-EVAL board.
- * @{
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Private_Types
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Private_Defines
- * @{
- */
-#define LCD_ILI9320 0x9320
-#define LCD_SPFD5408 0x5408
-#define START_BYTE 0x70
-#define SET_INDEX 0x00
-#define READ_STATUS 0x01
-#define LCD_WRITE_REG 0x02
-#define LCD_READ_REG 0x03
-#define MAX_POLY_CORNERS 200
-#define POLY_Y(Z) ((int32_t)((Points + Z)->X))
-#define POLY_X(Z) ((int32_t)((Points + Z)->Y))
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Private_Macros
- * @{
- */
-#define ABS(X) ((X) > 0 ? (X) : -(X))
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Private_Variables
- * @{
- */
-static sFONT *LCD_Currentfonts;
-/* Global variables to set the written text color */
-static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
-static __IO uint32_t LCDType = LCD_SPFD5408;
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Private_Function_Prototypes
- * @{
- */
-#ifndef USE_Delay
-static void delay(__IO uint32_t nCount);
-#endif /* USE_Delay*/
-
-static void PutPixel(int16_t x, int16_t y);
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed);
-
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Private_Functions
- * @{
- */
-
-/**
- * @brief DeInitializes the LCD.
- * @param None
- * @retval None
- */
-void STM32L152_LCD_DeInit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /*!< LCD Display Off */
- LCD_DisplayOff();
-
- /*!< LCD_SPI disable */
- SPI_Cmd(LCD_SPI, DISABLE);
-
- /*!< LCD_SPI DeInit */
- SPI_DeInit(LCD_SPI);
-
- /*!< Disable SPI clock */
- RCC_APB1PeriphClockCmd(LCD_SPI_CLK, DISABLE);
-
- /* Configure NCS in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure SPI pins: SCK, MISO and MOSI */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
- GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN;
- GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
- GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-}
-
-/**
- * @brief Setups the LCD.
- * @param None
- * @retval None
- */
-void LCD_Setup(void)
-{
-/* Configure the LCD Control pins --------------------------------------------*/
- LCD_CtrlLinesConfig();
-
-/* Configure the LCD_SPI interface ----------------------------------------------*/
- LCD_SPIConfig();
-
- if(LCDType == LCD_SPFD5408)
- {
- /* Start Initial Sequence --------------------------------------------------*/
- LCD_WriteReg(LCD_REG_227, 0x3008); /* Set internal timing */
- LCD_WriteReg(LCD_REG_231, 0x0012); /* Set internal timing */
- LCD_WriteReg(LCD_REG_239, 0x1231); /* Set internal timing */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* Set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* Set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
- /* Power On sequence -------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_17, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_16, 0x12B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x01BD); /* External reference voltage= Vci */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1400); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x000E); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x013F); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve --------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0007);
- LCD_WriteReg(LCD_REG_49, 0x0302);
- LCD_WriteReg(LCD_REG_50, 0x0105);
- LCD_WriteReg(LCD_REG_53, 0x0206);
- LCD_WriteReg(LCD_REG_54, 0x0808);
- LCD_WriteReg(LCD_REG_55, 0x0206);
- LCD_WriteReg(LCD_REG_56, 0x0504);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0105);
- LCD_WriteReg(LCD_REG_61, 0x0808);
- /* Set GRAM area -----------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* Set scrolling line */
- /* Partial Display Control -------------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control -----------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1
- I/D=01 (Horizontal : increment, Vertical : decrement)
- AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0112); /* 262K color and display ON */
- }
- else if(LCDType == LCD_ILI9320)
- {
- _delay_(5); /* Delay 50 ms */
- /* Start Initial Sequence ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_229, 0x8000); /* Set the internal vcore voltage */
- LCD_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */
- LCD_WriteReg(LCD_REG_1, 0x0100); /* set SS and SM bit */
- LCD_WriteReg(LCD_REG_2, 0x0700); /* set 1 line inversion */
- LCD_WriteReg(LCD_REG_3, 0x1030); /* set GRAM write direction and BGR=1. */
- LCD_WriteReg(LCD_REG_4, 0x0000); /* Resize register */
- LCD_WriteReg(LCD_REG_8, 0x0202); /* set the back porch and front porch */
- LCD_WriteReg(LCD_REG_9, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
- LCD_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */
- LCD_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */
- LCD_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */
- LCD_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */
- /* Power On sequence -----------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */
- LCD_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */
- /* Adjust the Gamma Curve ------------------------------------------------*/
- LCD_WriteReg(LCD_REG_48, 0x0006);
- LCD_WriteReg(LCD_REG_49, 0x0101);
- LCD_WriteReg(LCD_REG_50, 0x0003);
- LCD_WriteReg(LCD_REG_53, 0x0106);
- LCD_WriteReg(LCD_REG_54, 0x0b02);
- LCD_WriteReg(LCD_REG_55, 0x0302);
- LCD_WriteReg(LCD_REG_56, 0x0707);
- LCD_WriteReg(LCD_REG_57, 0x0007);
- LCD_WriteReg(LCD_REG_60, 0x0600);
- LCD_WriteReg(LCD_REG_61, 0x020b);
-
- /* Set GRAM area ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
- LCD_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
- LCD_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_96, 0x2700); /* Gate Scan Line */
- LCD_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */
- LCD_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */
- /* Partial Display Control -----------------------------------------------*/
- LCD_WriteReg(LCD_REG_128, 0x0000);
- LCD_WriteReg(LCD_REG_129, 0x0000);
- LCD_WriteReg(LCD_REG_130, 0x0000);
- LCD_WriteReg(LCD_REG_131, 0x0000);
- LCD_WriteReg(LCD_REG_132, 0x0000);
- LCD_WriteReg(LCD_REG_133, 0x0000);
- /* Panel Control ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_144, 0x0010);
- LCD_WriteReg(LCD_REG_146, 0x0000);
- LCD_WriteReg(LCD_REG_147, 0x0003);
- LCD_WriteReg(LCD_REG_149, 0x0110);
- LCD_WriteReg(LCD_REG_151, 0x0000);
- LCD_WriteReg(LCD_REG_152, 0x0000);
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=01 (Horizontal : increment, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
- }
-}
-
-
-/**
- * @brief Initializes the LCD.
- * @param None
- * @retval None
- */
-void STM32L152_LCD_Init(void)
-{
- /* Setups the LCD */
- LCD_Setup();
-
- /* Try to read new LCD controller ID 0x5408 */
- if (LCD_ReadReg(LCD_REG_0) == LCD_SPFD5408)
- {
- LCDType = LCD_SPFD5408;
- }
- else
- {
- LCDType = LCD_ILI9320;
- /* Setups the LCD */
- LCD_Setup();
- }
-
- LCD_SetFont(&LCD_DEFAULT_FONT);
-}
-
-/**
- * @brief Sets the LCD Text and Background colors.
- * @param _TextColor: specifies the Text Color.
- * @param _BackColor: specifies the Background Color.
- * @retval None
- */
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
-{
- TextColor = _TextColor;
- BackColor = _BackColor;
-}
-
-/**
- * @brief Gets the LCD Text and Background colors.
- * @param _TextColor: pointer to the variable that will contain the Text
- Color.
- * @param _BackColor: pointer to the variable that will contain the Background
- Color.
- * @retval None
- */
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
-{
- *_TextColor = TextColor; *_BackColor = BackColor;
-}
-
-/**
- * @brief Sets the Text color.
- * @param Color: specifies the Text color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetTextColor(__IO uint16_t Color)
-{
- TextColor = Color;
-}
-
-
-/**
- * @brief Sets the Background color.
- * @param Color: specifies the Background color code RGB(5-6-5).
- * @retval None
- */
-void LCD_SetBackColor(__IO uint16_t Color)
-{
- BackColor = Color;
-}
-
-/**
- * @brief Sets the Text Font.
- * @param fonts: specifies the font to be used.
- * @retval None
- */
-void LCD_SetFont(sFONT *fonts)
-{
- LCD_Currentfonts = fonts;
-}
-
-/**
- * @brief Gets the Text Font.
- * @param None.
- * @retval the used font.
- */
-sFONT *LCD_GetFont(void)
-{
- return LCD_Currentfonts;
-}
-
-/**
- * @brief Clears the selected line.
- * @param Line: the Line to be cleared.
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..n
- * @retval None
- */
-void LCD_ClearLine(uint8_t Line)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
-
- /* Send the string character by character on lCD */
- while (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width)
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, ' ');
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- }
-}
-
-
-/**
- * @brief Clears the hole LCD.
- * @param Color: the color of the background.
- * @retval None
- */
-void LCD_Clear(uint16_t Color)
-{
- uint32_t index = 0;
-
- LCD_SetCursor(0x00, 0x013F);
-
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
-
- for(index = 0; index < 76800; index++)
- {
- LCD_WriteRAM(Color);
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-
-}
-
-
-/**
- * @brief Sets the cursor position.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @retval None
- */
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos)
-{
- LCD_WriteReg(LCD_REG_32, Xpos);
- LCD_WriteReg(LCD_REG_33, Ypos);
-}
-
-
-/**
- * @brief Draws a character on LCD.
- * @param Xpos: the Line where to display the character shape.
- * @param Ypos: start column address.
- * @param c: pointer to the character data.
- * @retval None
- */
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c)
-{
- uint32_t index = 0, i = 0;
- uint8_t Xaddress = 0;
-
- Xaddress = Xpos;
-
- LCD_SetCursor(Xaddress, Ypos);
-
- for(index = 0; index < LCD_Currentfonts->Height; index++)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
-
- for(i = 0; i < LCD_Currentfonts->Width; i++)
- {
- if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
- (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
-
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- Xaddress++;
- LCD_SetCursor(Xaddress, Ypos);
- }
-}
-
-
-/**
- * @brief Displays one character (16dots width, 24dots height).
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param Column: start column address.
- * @param Ascii: character ascii code, must be between 0x20 and 0x7E.
- * @retval None
- */
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii)
-{
- Ascii -= 32;
- LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
-}
-
-
-/**
- * @brief Displays a maximum of 20 char on the LCD.
- * @param Line: the Line where to display the character shape .
- * This parameter can be one of the following values:
- * @arg Linex: where x can be 0..9
- * @param *ptr: pointer to string to display on LCD.
- * @retval None
- */
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr)
-{
- uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
-
- /* Send the string character by character on lCD */
- while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width))
- {
- /* Display one character on LCD */
- LCD_DisplayChar(Line, refcolumn, *ptr);
- /* Decrement the column position by 16 */
- refcolumn -= LCD_Currentfonts->Width;
- /* Point on the next character */
- ptr++;
- }
-}
-
-
-/**
- * @brief Sets a display window
- * @param Xpos: specifies the X buttom left position.
- * @param Ypos: specifies the Y buttom left position.
- * @param Height: display window height.
- * @param Width: display window width.
- * @retval None
- */
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- /* Horizontal GRAM Start Address */
- if(Xpos >= Height)
- {
- LCD_WriteReg(LCD_REG_80, (Xpos - Height + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_80, 0);
- }
- /* Horizontal GRAM End Address */
- LCD_WriteReg(LCD_REG_81, Xpos);
- /* Vertical GRAM Start Address */
- if(Ypos >= Width)
- {
- LCD_WriteReg(LCD_REG_82, (Ypos - Width + 1));
- }
- else
- {
- LCD_WriteReg(LCD_REG_82, 0);
- }
- /* Vertical GRAM End Address */
- LCD_WriteReg(LCD_REG_83, Ypos);
-
- LCD_SetCursor(Xpos, Ypos);
-}
-
-
-/**
- * @brief Disables LCD Window mode.
- * @param None
- * @retval None
- */
-void LCD_WindowModeDisable(void)
-{
- LCD_SetDisplayWindow(239, 0x13F, 240, 320);
- LCD_WriteReg(LCD_REG_3, 0x1018);
-}
-
-/**
- * @brief Displays a line.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: line length.
- * @param Direction: line direction.
- * This parameter can be one of the following values: Vertical or Horizontal.
- * @retval None
- */
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction)
-{
- uint32_t i = 0;
-
- LCD_SetCursor(Xpos, Ypos);
-
- if(Direction == LCD_DIR_HORIZONTAL)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
-
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAM(TextColor);
- }
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
- else
- {
- for(i = 0; i < Length; i++)
- {
- LCD_WriteRAMWord(TextColor);
- Xpos++;
- LCD_SetCursor(Xpos, Ypos);
- }
- }
-}
-
-
-/**
- * @brief Displays a rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: display rectangle height.
- * @param Width: display rectangle width.
- * @retval None
- */
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)
-{
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-}
-
-
-/**
- * @brief Displays a circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D;/* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
- CurX = 0;
- CurY = Radius;
-
- while (CurX <= CurY)
- {
- LCD_SetCursor(Xpos + CurX, Ypos + CurY);
- LCD_WriteRAMWord(TextColor);
- LCD_SetCursor(Xpos + CurX, Ypos - CurY);
- LCD_WriteRAMWord(TextColor);
-
- LCD_SetCursor(Xpos - CurX, Ypos + CurY);
- LCD_WriteRAMWord(TextColor);
-
- LCD_SetCursor(Xpos - CurX, Ypos - CurY);
- LCD_WriteRAMWord(TextColor);
-
- LCD_SetCursor(Xpos + CurY, Ypos + CurX);
- LCD_WriteRAMWord(TextColor);
-
- LCD_SetCursor(Xpos + CurY, Ypos - CurX);
- LCD_WriteRAMWord(TextColor);
-
- LCD_SetCursor(Xpos - CurY, Ypos + CurX);
- LCD_WriteRAMWord(TextColor);
-
- LCD_SetCursor(Xpos - CurY, Ypos - CurX);
- LCD_WriteRAMWord(TextColor);
-
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-}
-
-
-/**
- * @brief Displays a monocolor picture.
- * @param Pict: pointer to the picture array.
- * @retval None
- */
-void LCD_DrawMonoPict(const uint32_t *Pict)
-{
- uint32_t index = 0, i = 0;
- LCD_SetCursor(0, (LCD_PIXEL_WIDTH - 1));
-
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
-
- for(index = 0; index < 2400; index++)
- {
- for(i = 0; i < 32; i++)
- {
- if((Pict[index] & (1 << i)) == 0x00)
- {
- LCD_WriteRAM(BackColor);
- }
- else
- {
- LCD_WriteRAM(TextColor);
- }
- }
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-#ifdef USE_LCD_DrawBMP
-/**
- * @brief Displays a bitmap picture loaded in the SPI Flash.
- * @param BmpAddress: Bmp picture address in the SPI Flash.
- * @retval None
- */
-void LCD_DrawBMP(uint32_t BmpAddress)
-{
- uint32_t i = 0, size = 0;
- /* Read bitmap size */
- sFLASH_ReadBuffer((uint8_t*)&size, BmpAddress + 2, 4);
- /* get bitmap data address offset */
- sFLASH_ReadBuffer((uint8_t*)&i, BmpAddress + 10, 4);
-
- size = (size - i)/2;
- sFLASH_StartReadSequence(BmpAddress + i);
- /* Disable LCD_SPI */
- SPI_Cmd(LCD_SPI, DISABLE);
- /* SPI in 16-bit mode */
- SPI_DataSizeConfig(LCD_SPI, SPI_DataSize_16b);
- /* Enable LCD_SPI */
- SPI_Cmd(LCD_SPI, ENABLE);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Set GRAM write direction and BGR = 1 */
- /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
- /* AM=1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1008);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- }
-
- /* Read bitmap data from SPI Flash and send them to LCD */
- for(i = 0; i < size; i++)
- {
- LCD_WriteRAM(__REV16(sFLASH_SendHalfWord(0xA5A5)));
- }
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
- }
-
- /* Deselect the FLASH: Chip Select high */
- sFLASH_CS_HIGH();
- /* Disable LCD_SPI */
- SPI_Cmd(LCD_SPI, DISABLE);
- /* SPI in 8-bit mode */
- SPI_DataSizeConfig(LCD_SPI, SPI_DataSize_8b);
- /* Enable LCD_SPI */
- SPI_Cmd(LCD_SPI, ENABLE);
-
- if((LCDType == LCD_ILI9320) || (LCDType == LCD_SPFD5408))
- {
- /* Set GRAM write direction and BGR = 1 */
- /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
- /* AM = 1 (address is updated in vertical writing direction) */
- LCD_WriteReg(LCD_REG_3, 0x1018);
- }
-}
-#endif /* USE_LCD_DrawBMP */
-
-/**
- * @brief Displays a full rectangle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Height: rectangle height.
- * @param Width: rectangle width.
- * @retval None
- */
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
- LCD_SetTextColor(TextColor);
-
- LCD_DrawLine(Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- LCD_DrawLine((Xpos + Height), Ypos, Width, LCD_DIR_HORIZONTAL);
-
- LCD_DrawLine(Xpos, Ypos, Height, LCD_DIR_VERTICAL);
- LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, LCD_DIR_VERTICAL);
-
- Width -= 2;
- Height--;
- Ypos--;
-
- LCD_SetTextColor(BackColor);
-
- while(Height--)
- {
- LCD_DrawLine(++Xpos, Ypos, Width, LCD_DIR_HORIZONTAL);
- }
-
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Displays a full circle.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Radius
- * @retval None
- */
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
- int32_t D; /* Decision Variable */
- uint32_t CurX;/* Current X Value */
- uint32_t CurY;/* Current Y Value */
-
- D = 3 - (Radius << 1);
-
- CurX = 0;
- CurY = Radius;
-
- LCD_SetTextColor(BackColor);
-
- while (CurX <= CurY)
- {
- if(CurY > 0)
- {
- LCD_DrawLine(Xpos - CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurX, Ypos + CurY, 2*CurY, LCD_DIR_HORIZONTAL);
- }
-
- if(CurX > 0)
- {
- LCD_DrawLine(Xpos - CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- LCD_DrawLine(Xpos + CurY, Ypos + CurX, 2*CurX, LCD_DIR_HORIZONTAL);
- }
- if (D < 0)
- {
- D += (CurX << 2) + 6;
- }
- else
- {
- D += ((CurX - CurY) << 2) + 10;
- CurY--;
- }
- CurX++;
- }
-
- LCD_SetTextColor(TextColor);
- LCD_DrawCircle(Xpos, Ypos, Radius);
-}
-
-/**
- * @brief Displays an uni line (between two points).
- * @param x1: specifies the point 1 x position.
- * @param y1: specifies the point 1 y position.
- * @param x2: specifies the point 2 x position.
- * @param y2: specifies the point 2 y position.
- * @retval None
- */
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
-{
- int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
- yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
- curpixel = 0;
-
- deltax = ABS(x2 - x1); /* The difference between the x's */
- deltay = ABS(y2 - y1); /* The difference between the y's */
- x = x1; /* Start x off at the first pixel */
- y = y1; /* Start y off at the first pixel */
-
- if (x2 >= x1) /* The x-values are increasing */
- {
- xinc1 = 1;
- xinc2 = 1;
- }
- else /* The x-values are decreasing */
- {
- xinc1 = -1;
- xinc2 = -1;
- }
-
- if (y2 >= y1) /* The y-values are increasing */
- {
- yinc1 = 1;
- yinc2 = 1;
- }
- else /* The y-values are decreasing */
- {
- yinc1 = -1;
- yinc2 = -1;
- }
-
- if (deltax >= deltay) /* There is at least one x-value for every y-value */
- {
- xinc1 = 0; /* Don't change the x when numerator >= denominator */
- yinc2 = 0; /* Don't change the y for every iteration */
- den = deltax;
- num = deltax / 2;
- numadd = deltay;
- numpixels = deltax; /* There are more x-values than y-values */
- }
- else /* There is at least one y-value for every x-value */
- {
- xinc2 = 0; /* Don't change the x for every iteration */
- yinc1 = 0; /* Don't change the y when numerator >= denominator */
- den = deltay;
- num = deltay / 2;
- numadd = deltax;
- numpixels = deltay; /* There are more y-values than x-values */
- }
-
- for (curpixel = 0; curpixel <= numpixels; curpixel++)
- {
- PutPixel(x, y); /* Draw the current pixel */
- num += numadd; /* Increase the numerator by the top of the fraction */
- if (num >= den) /* Check if numerator >= denominator */
- {
- num -= den; /* Calculate the new numerator value */
- x += xinc1; /* Change the x as appropriate */
- y += yinc1; /* Change the y as appropriate */
- }
- x += xinc2; /* Change the x as appropriate */
- y += yinc2; /* Change the y as appropriate */
- }
-}
-
-/**
- * @brief Displays an polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLine(pPoint Points, uint16_t PointCount)
-{
- int16_t X = 0, Y = 0;
-
- if(PointCount < 2)
- {
- return;
- }
-
- while(--PointCount)
- {
- X = Points->X;
- Y = Points->Y;
- Points++;
- LCD_DrawUniLine(X, Y, Points->X, Points->Y);
- }
-}
-
-/**
- * @brief Displays an relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @param Closed: specifies if the draw is closed or not.
- * 1: closed, 0 : not closed.
- * @retval None
- */
-static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed)
-{
- int16_t X = 0, Y = 0;
- pPoint First = Points;
-
- if(PointCount < 2)
- {
- return;
- }
- X = Points->X;
- Y = Points->Y;
- while(--PointCount)
- {
- Points++;
- LCD_DrawUniLine(X, Y, X + Points->X, Y + Points->Y);
- X = X + Points->X;
- Y = Y + Points->Y;
- }
- if(Closed)
- {
- LCD_DrawUniLine(First->X, First->Y, X, Y);
- }
-}
-
-/**
- * @brief Displays a closed polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLine(Points, PointCount);
- LCD_DrawUniLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
-}
-
-/**
- * @brief Displays a relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 0);
-}
-
-/**
- * @brief Displays a closed relative polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount)
-{
- LCD_PolyLineRelativeClosed(Points, PointCount, 1);
-}
-
-
-/**
- * @brief Displays a full polyline (between many points).
- * @param Points: pointer to the points array.
- * @param PointCount: Number of points.
- * @retval None
- */
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount)
-{
- /* public-domain code by Darel Rex Finley, 2007 */
- uint16_t nodes = 0, nodeX[MAX_POLY_CORNERS], pixelX = 0, pixelY = 0, i = 0,
- j = 0, swap = 0;
- uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0;
-
- IMAGE_LEFT = IMAGE_RIGHT = Points->X;
- IMAGE_TOP= IMAGE_BOTTOM = Points->Y;
-
- for(i = 1; i < PointCount; i++)
- {
- pixelX = POLY_X(i);
- if(pixelX < IMAGE_LEFT)
- {
- IMAGE_LEFT = pixelX;
- }
- if(pixelX > IMAGE_RIGHT)
- {
- IMAGE_RIGHT = pixelX;
- }
-
- pixelY = POLY_Y(i);
- if(pixelY < IMAGE_TOP)
- {
- IMAGE_TOP = pixelY;
- }
- if(pixelY > IMAGE_BOTTOM)
- {
- IMAGE_BOTTOM = pixelY;
- }
- }
-
- LCD_SetTextColor(BackColor);
-
- /* Loop through the rows of the image. */
- for (pixelY = IMAGE_TOP; pixelY < IMAGE_BOTTOM; pixelY++)
- {
- /* Build a list of nodes. */
- nodes = 0; j = PointCount-1;
-
- for (i = 0; i < PointCount; i++)
- {
- if (POLY_Y(i)<(double) pixelY && POLY_Y(j)>=(double) pixelY || POLY_Y(j)<(double) pixelY && POLY_Y(i)>=(double) pixelY)
- {
- nodeX[nodes++]=(int) (POLY_X(i)+((pixelY-POLY_Y(i))*(POLY_X(j)-POLY_X(i)))/(POLY_Y(j)-POLY_Y(i)));
- }
- j = i;
- }
-
- /* Sort the nodes, via a simple "Bubble" sort. */
- i = 0;
- while (i < nodes-1)
- {
- if (nodeX[i]>nodeX[i+1])
- {
- swap = nodeX[i];
- nodeX[i] = nodeX[i+1];
- nodeX[i+1] = swap;
- if(i)
- {
- i--;
- }
- }
- else
- {
- i++;
- }
- }
-
- /* Fill the pixels between node pairs. */
- for (i = 0; i < nodes; i+=2)
- {
- if(nodeX[i] >= IMAGE_RIGHT)
- {
- break;
- }
- if(nodeX[i+1] > IMAGE_LEFT)
- {
- if (nodeX[i] < IMAGE_LEFT)
- {
- nodeX[i]=IMAGE_LEFT;
- }
- if(nodeX[i+1] > IMAGE_RIGHT)
- {
- nodeX[i+1] = IMAGE_RIGHT;
- }
- LCD_SetTextColor(BackColor);
- LCD_DrawLine(pixelY, nodeX[i+1], nodeX[i+1] - nodeX[i], LCD_DIR_HORIZONTAL);
- LCD_SetTextColor(TextColor);
- PutPixel(pixelY, nodeX[i+1]);
- PutPixel(pixelY, nodeX[i]);
- /* for (j=nodeX[i]; j<nodeX[i+1]; j++) PutPixel(j,pixelY); */
- }
- }
- }
-
- /* draw the edges */
- LCD_SetTextColor(TextColor);
-}
-
-/**
- * @brief Reset LCD control line(/CS) and Send Start-Byte
- * @param Start_Byte: the Start-Byte to be sent
- * @retval None
- */
-void LCD_nCS_StartByte(uint8_t Start_Byte)
-{
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_RESET);
-
- SPI_SendData(LCD_SPI, Start_Byte);
-
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
-}
-
-
-/**
- * @brief Writes index to select the LCD register.
- * @param LCD_Reg: address of the selected register.
- * @retval None
- */
-void LCD_WriteRegIndex(uint8_t LCD_Reg)
-{
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | SET_INDEX);
-
- /* Write 16-bit Reg Index (High Byte is 0) */
- SPI_SendData(LCD_SPI, 0x00);
-
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
-
- SPI_SendData(LCD_SPI, LCD_Reg);
-
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Writes to the selected LCD ILI9320 register.
- * @param LCD_Reg: address of the selected register.
- * @param LCD_RegValue: value to write to the selected register.
- * @retval None
- */
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
-{
- /* Write 16-bit Index (then Write Reg) */
- LCD_WriteRegIndex(LCD_Reg);
-
- /* Write 16-bit Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG);
-
- SPI_SendData(LCD_SPI, LCD_RegValue >> 8);
-
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
-
- SPI_SendData(LCD_SPI, (LCD_RegValue & 0xFF));
-
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Reads the selected LCD Register.
- * @param LCD_Reg: address of the selected register.
- * @retval LCD Register Value.
- */
-uint16_t LCD_ReadReg(uint8_t LCD_Reg)
-{
- uint16_t tmp = 0;
- uint8_t i = 0;
-
- /* LCD_SPI prescaler: 4 */
- LCD_SPI->CR1 &= 0xFFC7;
- LCD_SPI->CR1 |= 0x0008;
- /* Write 16-bit Index (then Read Reg) */
- LCD_WriteRegIndex(LCD_Reg);
- /* Read 16-bit Reg */
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_READ_REG);
-
- for(i = 0; i < 5; i++)
- {
- SPI_SendData(LCD_SPI, 0xFF);
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
- /* One byte of invalid dummy data read after the start byte */
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_RXNE) == RESET)
- {
- }
- SPI_ReceiveData(LCD_SPI);
- }
-
- SPI_SendData(LCD_SPI, 0xFF);
-
- /* Read upper byte */
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
-
- /* Read lower byte */
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_RXNE) == RESET)
- {
- }
- tmp = SPI_ReceiveData(LCD_SPI);
-
-
- SPI_SendData(LCD_SPI, 0xFF);
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
-
- /* Read lower byte */
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_RXNE) == RESET)
- {
- }
-
- tmp = ((tmp & 0xFF) << 8) | SPI_ReceiveData(LCD_SPI);
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-
- /* LCD_SPI prescaler: 2 */
- LCD_SPI->CR1 &= 0xFFC7;
-
- return tmp;
-}
-
-
-/**
- * @brief Prepare to write to the LCD RAM.
- * @param None
- * @retval None
- */
-void LCD_WriteRAM_Prepare(void)
-{
- LCD_WriteRegIndex(LCD_REG_34); /* Select GRAM Reg */
-
- /* Reset LCD control line(/CS) and Send Start-Byte */
- LCD_nCS_StartByte(START_BYTE | LCD_WRITE_REG);
-}
-
-
-/**
- * @brief Writes 1 word to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAMWord(uint16_t RGB_Code)
-{
- LCD_WriteRAM_Prepare();
-
- LCD_WriteRAM(RGB_Code);
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-/**
- * @brief Writes to the LCD RAM.
- * @param RGB_Code: the pixel color in RGB mode (5-6-5).
- * @retval None
- */
-void LCD_WriteRAM(uint16_t RGB_Code)
-{
- SPI_SendData(LCD_SPI, RGB_Code >> 8);
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
- SPI_SendData(LCD_SPI, RGB_Code & 0xFF);
- while(SPI_GetFlagStatus(LCD_SPI, SPI_FLAG_BSY) != RESET)
- {
- }
-}
-
-
-/**
- * @brief Power on the LCD.
- * @param None
- * @retval None
- */
-void LCD_PowerOn(void)
-{
- /* Power On sequence ---------------------------------------------------------*/
- LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
- LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
- LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */
- _delay_(20); /* Dis-charge capacitor power voltage (200ms) */
- LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
- LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
- _delay_(5); /* Delay 50 ms */
- LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
- _delay_(5); /* delay 50 ms */
- LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
- LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
- _delay_(5); /* delay 50 ms */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-}
-
-
-/**
- * @brief Enables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOn(void)
-{
- /* Display On */
- LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
-}
-
-
-/**
- * @brief Disables the Display.
- * @param None
- * @retval None
- */
-void LCD_DisplayOff(void)
-{
- /* Display Off */
- LCD_WriteReg(LCD_REG_7, 0x0);
-}
-
-
-/**
- * @brief Configures LCD control lines in Output Push-Pull mode.
- * @param None
- * @retval None
- */
-void LCD_CtrlLinesConfig(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_AHBPeriphClockCmd(LCD_NCS_GPIO_CLK, ENABLE);
-
- /* Configure NCS (PF.02) in Output Push-Pull mode */
- GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
-
- LCD_CtrlLinesWrite(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, Bit_SET);
-}
-
-
-/**
- * @brief Sets or reset LCD control lines.
- * @param GPIOx: where x can be B or D to select the GPIO peripheral.
- * @param CtrlPins: the Control line.
- * This parameter can be:
- * @arg LCD_NCS_PIN: Chip Select pin
- * @arg LCD_NWR_PIN: Read/Write Selection pin
- * @arg LCD_RS_PIN: Register/RAM Selection pin
- * @param BitVal: specifies the value to be written to the selected bit.
- * This parameter can be:
- * @arg Bit_RESET: to clear the port pin
- * @arg Bit_SET: to set the port pin
- * @retval None
- */
-void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, BitAction BitVal)
-{
- /* Set or Reset the control line */
- GPIO_WriteBit(GPIOx, CtrlPins, BitVal);
-}
-
-
-/**
- * @brief Configures the LCD_SPI interface.
- * @param None
- * @retval None
- */
-void LCD_SPIConfig(void)
-{
- SPI_InitTypeDef SPI_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable LCD_SPI_SCK_GPIO_CLK, LCD_SPI_MISO_GPIO_CLK and LCD_SPI_MOSI_GPIO_CLK clock */
- RCC_AHBPeriphClockCmd(LCD_SPI_SCK_GPIO_CLK | LCD_SPI_MISO_GPIO_CLK | LCD_SPI_MOSI_GPIO_CLK, ENABLE);
-
- /* Enable LCD_SPI and SYSCFG clock */
- RCC_APB2PeriphClockCmd(LCD_SPI_CLK | RCC_APB2Periph_SYSCFG, ENABLE);
-
- /* Configure LCD_SPI SCK pin */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure LCD_SPI MISO pin */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN;
- GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
-
- /* Configure LCD_SPI MOSI pin */
- GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;
- GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
-
- /* Connect PE.13 to SPI SCK */
- GPIO_PinAFConfig(LCD_SPI_SCK_GPIO_PORT, LCD_SPI_SCK_SOURCE, LCD_SPI_SCK_AF);
-
- /* Connect PE.14 to SPI MISO */
- GPIO_PinAFConfig(LCD_SPI_MISO_GPIO_PORT, LCD_SPI_MISO_SOURCE, LCD_SPI_MISO_AF);
-
- /* Connect PE.15 to SPI MOSI */
- GPIO_PinAFConfig(LCD_SPI_MOSI_GPIO_PORT, LCD_SPI_MOSI_SOURCE, LCD_SPI_MOSI_AF);
-
- SPI_DeInit(LCD_SPI);
-
- /* SPI Config */
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_CRCPolynomial = 7;
- SPI_Init(LCD_SPI, &SPI_InitStructure);
-
- /* SPI enable */
- SPI_Cmd(LCD_SPI, ENABLE);
-}
-
-/**
- * @brief Displays a pixel.
- * @param x: pixel x.
- * @param y: pixel y.
- * @retval None
- */
-static void PutPixel(int16_t x, int16_t y)
-{
- if(x < 0 || x > 239 || y < 0 || y > 319)
- {
- return;
- }
- LCD_DrawLine(x, y, 1, LCD_DIR_HORIZONTAL);
-}
-
-#ifndef USE_Delay
-/**
- * @brief Inserts a delay time.
- * @param nCount: specifies the delay time length.
- * @retval None
- */
-static void delay(__IO uint32_t nCount)
-{
- __IO uint32_t index = 0;
- for(index = (34000 * nCount); index != 0; index--)
- {
- }
-}
-#endif /* USE_Delay*/
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_lcd.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_lcd.h
deleted file mode 100644
index 6c7f982..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/STM32L152_EVAL/stm32l152_eval_lcd.h
+++ /dev/null
@@ -1,392 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32l152_eval_lcd.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief This file contains all the functions prototypes for the stm32l152_eval_lcd
- * firmware driver.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32L152_EVAL_LCD_H
-#define __STM32L152_EVAL_LCD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32l1xx.h"
-#include "../Common/fonts.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @addtogroup STM32L152_EVAL
- * @{
- */
-
-/** @addtogroup STM32L152_EVAL_LCD
- * @{
- */
-
-
-/** @defgroup STM32L152_EVAL_LCD_Exported_Types
- * @{
- */
-typedef struct
-{
- int16_t X;
- int16_t Y;
-} Point, * pPoint;
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Exported_Constants
- * @{
- */
-
-/**
- * @brief Uncomment the line below if you want to use LCD_DrawBMP function to
- * display a bitmap picture on the LCD. This function assumes that the bitmap
- * file is loaded in the SPI Flash (mounted on STM32L152-EVAL board), however
- * user can tailor it according to his application hardware requirement.
- */
-/*#define USE_LCD_DrawBMP*/
-
-/**
- * @brief Uncomment the line below if you want to use user defined Delay function
- * (for precise timing), otherwise default _delay_ function defined within
- * this driver is used (less precise timing).
- */
-/* #define USE_Delay */
-
-#ifdef USE_Delay
-#include "main.h"
-
- #define _delay_ Delay /* !< User can provide more timing precise _delay_ function
- (with 10ms time base), using SysTick for example */
-#else
- #define _delay_ delay /* !< Default _delay_ function with less precise timing */
-#endif
-
-
-/**
- * @brief LCD Control pins
- */
-#define LCD_NCS_PIN GPIO_Pin_2
-#define LCD_NCS_GPIO_PORT GPIOH
-#define LCD_NCS_GPIO_CLK RCC_AHBPeriph_GPIOH
-
-/**
- * @brief LCD SPI Interface pins
- */
-#define LCD_SPI_SCK_PIN GPIO_Pin_13 /* PE.13 */
-#define LCD_SPI_SCK_GPIO_PORT GPIOE /* GPIOE */
-#define LCD_SPI_SCK_GPIO_CLK RCC_AHBPeriph_GPIOE
-#define LCD_SPI_SCK_SOURCE GPIO_PinSource13
-#define LCD_SPI_SCK_AF GPIO_AF_SPI1
-#define LCD_SPI_MISO_PIN GPIO_Pin_14 /* PE.14 */
-#define LCD_SPI_MISO_GPIO_PORT GPIOE /* GPIOE */
-#define LCD_SPI_MISO_GPIO_CLK RCC_AHBPeriph_GPIOE
-#define LCD_SPI_MISO_SOURCE GPIO_PinSource14
-#define LCD_SPI_MISO_AF GPIO_AF_SPI1
-#define LCD_SPI_MOSI_PIN GPIO_Pin_15 /* PE.15 */
-#define LCD_SPI_MOSI_GPIO_PORT GPIOE /* GPIOE */
-#define LCD_SPI_MOSI_GPIO_CLK RCC_AHBPeriph_GPIOE
-#define LCD_SPI_MOSI_SOURCE GPIO_PinSource15
-#define LCD_SPI_MOSI_AF GPIO_AF_SPI1
-#define LCD_SPI SPI1
-#define LCD_SPI_CLK RCC_APB2Periph_SPI1
-
-
-/**
- * @brief LCD Registers
- */
-#define LCD_REG_0 0x00
-#define LCD_REG_1 0x01
-#define LCD_REG_2 0x02
-#define LCD_REG_3 0x03
-#define LCD_REG_4 0x04
-#define LCD_REG_5 0x05
-#define LCD_REG_6 0x06
-#define LCD_REG_7 0x07
-#define LCD_REG_8 0x08
-#define LCD_REG_9 0x09
-#define LCD_REG_10 0x0A
-#define LCD_REG_12 0x0C
-#define LCD_REG_13 0x0D
-#define LCD_REG_14 0x0E
-#define LCD_REG_15 0x0F
-#define LCD_REG_16 0x10
-#define LCD_REG_17 0x11
-#define LCD_REG_18 0x12
-#define LCD_REG_19 0x13
-#define LCD_REG_20 0x14
-#define LCD_REG_21 0x15
-#define LCD_REG_22 0x16
-#define LCD_REG_23 0x17
-#define LCD_REG_24 0x18
-#define LCD_REG_25 0x19
-#define LCD_REG_26 0x1A
-#define LCD_REG_27 0x1B
-#define LCD_REG_28 0x1C
-#define LCD_REG_29 0x1D
-#define LCD_REG_30 0x1E
-#define LCD_REG_31 0x1F
-#define LCD_REG_32 0x20
-#define LCD_REG_33 0x21
-#define LCD_REG_34 0x22
-#define LCD_REG_36 0x24
-#define LCD_REG_37 0x25
-#define LCD_REG_40 0x28
-#define LCD_REG_41 0x29
-#define LCD_REG_43 0x2B
-#define LCD_REG_45 0x2D
-#define LCD_REG_48 0x30
-#define LCD_REG_49 0x31
-#define LCD_REG_50 0x32
-#define LCD_REG_51 0x33
-#define LCD_REG_52 0x34
-#define LCD_REG_53 0x35
-#define LCD_REG_54 0x36
-#define LCD_REG_55 0x37
-#define LCD_REG_56 0x38
-#define LCD_REG_57 0x39
-#define LCD_REG_59 0x3B
-#define LCD_REG_60 0x3C
-#define LCD_REG_61 0x3D
-#define LCD_REG_62 0x3E
-#define LCD_REG_63 0x3F
-#define LCD_REG_64 0x40
-#define LCD_REG_65 0x41
-#define LCD_REG_66 0x42
-#define LCD_REG_67 0x43
-#define LCD_REG_68 0x44
-#define LCD_REG_69 0x45
-#define LCD_REG_70 0x46
-#define LCD_REG_71 0x47
-#define LCD_REG_72 0x48
-#define LCD_REG_73 0x49
-#define LCD_REG_74 0x4A
-#define LCD_REG_75 0x4B
-#define LCD_REG_76 0x4C
-#define LCD_REG_77 0x4D
-#define LCD_REG_78 0x4E
-#define LCD_REG_79 0x4F
-#define LCD_REG_80 0x50
-#define LCD_REG_81 0x51
-#define LCD_REG_82 0x52
-#define LCD_REG_83 0x53
-#define LCD_REG_96 0x60
-#define LCD_REG_97 0x61
-#define LCD_REG_106 0x6A
-#define LCD_REG_118 0x76
-#define LCD_REG_128 0x80
-#define LCD_REG_129 0x81
-#define LCD_REG_130 0x82
-#define LCD_REG_131 0x83
-#define LCD_REG_132 0x84
-#define LCD_REG_133 0x85
-#define LCD_REG_134 0x86
-#define LCD_REG_135 0x87
-#define LCD_REG_136 0x88
-#define LCD_REG_137 0x89
-#define LCD_REG_139 0x8B
-#define LCD_REG_140 0x8C
-#define LCD_REG_141 0x8D
-#define LCD_REG_143 0x8F
-#define LCD_REG_144 0x90
-#define LCD_REG_145 0x91
-#define LCD_REG_146 0x92
-#define LCD_REG_147 0x93
-#define LCD_REG_148 0x94
-#define LCD_REG_149 0x95
-#define LCD_REG_150 0x96
-#define LCD_REG_151 0x97
-#define LCD_REG_152 0x98
-#define LCD_REG_153 0x99
-#define LCD_REG_154 0x9A
-#define LCD_REG_157 0x9D
-#define LCD_REG_192 0xC0
-#define LCD_REG_193 0xC1
-#define LCD_REG_227 0xE3
-#define LCD_REG_229 0xE5
-#define LCD_REG_231 0xE7
-#define LCD_REG_239 0xEF
-
-
-/**
- * @brief LCD color
- */
-#define LCD_COLOR_WHITE 0xFFFF
-#define LCD_COLOR_BLACK 0x0000
-#define LCD_COLOR_GREY 0xF7DE
-#define LCD_COLOR_BLUE 0x001F
-#define LCD_COLOR_BLUE2 0x051F
-#define LCD_COLOR_RED 0xF800
-#define LCD_COLOR_MAGENTA 0xF81F
-#define LCD_COLOR_GREEN 0x07E0
-#define LCD_COLOR_CYAN 0x7FFF
-#define LCD_COLOR_YELLOW 0xFFE0
-
-/**
- * @brief LCD Lines depending on the chosen fonts.
- */
-#define LCD_LINE_0 LINE(0)
-#define LCD_LINE_1 LINE(1)
-#define LCD_LINE_2 LINE(2)
-#define LCD_LINE_3 LINE(3)
-#define LCD_LINE_4 LINE(4)
-#define LCD_LINE_5 LINE(5)
-#define LCD_LINE_6 LINE(6)
-#define LCD_LINE_7 LINE(7)
-#define LCD_LINE_8 LINE(8)
-#define LCD_LINE_9 LINE(9)
-#define LCD_LINE_10 LINE(10)
-#define LCD_LINE_11 LINE(11)
-#define LCD_LINE_12 LINE(12)
-#define LCD_LINE_13 LINE(13)
-#define LCD_LINE_14 LINE(14)
-#define LCD_LINE_15 LINE(15)
-#define LCD_LINE_16 LINE(16)
-#define LCD_LINE_17 LINE(17)
-#define LCD_LINE_18 LINE(18)
-#define LCD_LINE_19 LINE(19)
-#define LCD_LINE_20 LINE(20)
-#define LCD_LINE_21 LINE(21)
-#define LCD_LINE_22 LINE(22)
-#define LCD_LINE_23 LINE(23)
-#define LCD_LINE_24 LINE(24)
-#define LCD_LINE_25 LINE(25)
-#define LCD_LINE_26 LINE(26)
-#define LCD_LINE_27 LINE(27)
-#define LCD_LINE_28 LINE(28)
-#define LCD_LINE_29 LINE(29)
-
-
-/**
- * @brief LCD default font
- */
-#define LCD_DEFAULT_FONT Font16x24
-
-/**
- * @brief LCD Direction
- */
-#define LCD_DIR_HORIZONTAL 0x0000
-#define LCD_DIR_VERTICAL 0x0001
-
-/**
- * @brief LCD Size (Width and Height)
- */
-#define LCD_PIXEL_WIDTH 0x0140
-#define LCD_PIXEL_HEIGHT 0x00F0
-
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Exported_Macros
- * @{
- */
-#define ASSEMBLE_RGB(R, G, B) ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3))
-
-/**
- * @}
- */
-
-/** @defgroup STM32L152_EVAL_LCD_Exported_Functions
- * @{
- */
-void STM32L152_LCD_DeInit(void);
-void LCD_Setup(void);
-void STM32L152_LCD_Init(void);
-void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
-void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
-void LCD_SetTextColor(__IO uint16_t Color);
-void LCD_SetBackColor(__IO uint16_t Color);
-void LCD_ClearLine(uint8_t Line);
-void LCD_Clear(uint16_t Color);
-void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos);
-void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c);
-void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii);
-void LCD_SetFont(sFONT *fonts);
-sFONT *LCD_GetFont(void);
-void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr);
-void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_WindowModeDisable(void);
-void LCD_DrawLine(uint8_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction);
-void LCD_DrawRect(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
-void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_DrawMonoPict(const uint32_t *Pict);
-void LCD_DrawBMP(uint32_t BmpAddress);
-void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
-void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
-void LCD_PolyLine(pPoint Points, uint16_t PointCount);
-void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount);
-void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount);
-void LCD_FillPolyLine(pPoint Points, uint16_t PointCount);
-void LCD_nCS_StartByte(uint8_t Start_Byte);
-void LCD_WriteRegIndex(uint8_t LCD_Reg);
-void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
-void LCD_WriteRAM_Prepare(void);
-void LCD_WriteRAMWord(uint16_t RGB_Code);
-uint16_t LCD_ReadReg(uint8_t LCD_Reg);
-void LCD_WriteRAM(uint16_t RGB_Code);
-void LCD_PowerOn(void);
-void LCD_DisplayOn(void);
-void LCD_DisplayOff(void);
-
-void LCD_CtrlLinesConfig(void);
-void LCD_CtrlLinesWrite(GPIO_TypeDef* GPIOx, uint16_t CtrlPins, BitAction BitVal);
-void LCD_SPIConfig(void);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32L152_EVAL_LCD_H */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/stm32_eval.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/stm32_eval.c
deleted file mode 100644
index 9b6984b..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/stm32_eval.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval.c
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief STM32xx-EVAL abstraction layer.
- * This file should be added to the main application to use the provided
- * functions that manage Leds, push-buttons, COM ports and low level
- * HW resources initialization of the different modules available on
- * STM32 evaluation boards from STMicroelectronics.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_eval.h"
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @defgroup STM32_EVAL
- * @brief This file provides firmware functions to manage Leds, push-buttons,
- * COM ports and low level HW resources initialization of the different
- * modules available on STM32 Evaluation Boards from STMicroelectronics.
- * @{
- */
-
-/** @defgroup STM32_EVAL_Abstraction_Layer
- * @{
- */
-
-#ifdef USE_STM32100B_EVAL
- #include "stm32100b_eval/stm32100b_eval.c"
-#elif defined USE_STM3210B_EVAL
- #include "stm3210b_eval/stm3210b_eval.c"
-#elif defined USE_STM3210E_EVAL
- #include "stm3210e_eval/stm3210e_eval.c"
-#elif defined USE_STM3210C_EVAL
- #include "stm3210c_eval/stm3210c_eval.c"
-#elif defined USE_STM32L152_EVAL
- #include "stm32l152_eval/stm32l152_eval.c"
-#elif defined USE_STM32100E_EVAL
- #include "stm32100e_eval/stm32100e_eval.c"
-#else
- #error "Please select first the STM32 EVAL board to be used (in stm32_eval.h)"
-#endif
-
-/** @defgroup STM32_EVAL_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_Private_Variables
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_Private_FunctionPrototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup STM32_EVAL_Private_Functions
- * @{
- */
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/stm32_eval.h b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/stm32_eval.h
deleted file mode 100644
index d30caff..0000000
--- a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Utilities/STM32_EVAL/stm32_eval.h
+++ /dev/null
@@ -1,368 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32_eval.h
- * @author MCD Application Team
- * @version V4.5.0
- * @date 07-March-2011
- * @brief Header file for stm32_eval.c module.
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32_EVAL_H
-#define __STM32_EVAL_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-
-/** @addtogroup Utilities
- * @{
- */
-
-/** @addtogroup STM32_EVAL
- * @{
- */
-
-/** @defgroup STM32_EVAL_Abstraction_Layer
- * @{
- */
-
-/** @defgroup STM32_EVAL_HARDWARE_RESOURCES
- * @{
- */
-
-/**
-@code
- The table below gives an overview of the hardware resources supported by each
- STM32 EVAL board.
- - LCD: TFT Color LCD (Parallel (FSMC) and Serial (SPI))
- - IOE: IO Expander on I2C
- - sFLASH: serial SPI FLASH (M25Pxxx)
- - sEE: serial I2C EEPROM (M24C08, M24C32, M24C64)
- - TSENSOR: Temperature Sensor (LM75)
- - SD: SD Card memory (SPI and SDIO (SD Card MODE))
- =================================================================================================================+
- STM32 EVAL | LED | Buttons | Com Ports | LCD | IOE | sFLASH | sEE | TSENSOR | SD (SPI) | SD(SDIO) |
- =================================================================================================================+
- STM3210B-EVAL | 4 | 8 | 2 | YES (SPI) | NO | YES | NO | YES | YES | NO |
- -----------------------------------------------------------------------------------------------------------------+
- STM3210E-EVAL | 4 | 8 | 2 | YES (FSMC)| NO | YES | NO | YES | NO | YES |
- -----------------------------------------------------------------------------------------------------------------+
- STM3210C-EVAL | 4 | 3 | 1 | YES (SPI) | YES | NO | YES | NO | YES | NO |
- -----------------------------------------------------------------------------------------------------------------+
- STM32100B-EVAL | 4 | 8 | 2 | YES (SPI) | NO | YES | NO | YES | YES | NO |
- -----------------------------------------------------------------------------------------------------------------+
- STM32L152-EVAL | 4 | 8 | 2 | YES (SPI) | NO | NO | NO | YES | YES | NO |
- -----------------------------------------------------------------------------------------------------------------+
- STM32100E-EVAL | 4 | 8 | 2 | YES (FSMC)| YES | YES | YES | YES | YES | NO |
- =================================================================================================================+
-@endcode
-*/
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_Exported_Types
- * @{
- */
-typedef enum
-{
- LED1 = 0,
- LED2 = 1,
- LED3 = 2,
- LED4 = 3
-} Led_TypeDef;
-
-typedef enum
-{
- BUTTON_WAKEUP = 0,
- BUTTON_TAMPER = 1,
- BUTTON_KEY = 2,
- BUTTON_RIGHT = 3,
- BUTTON_LEFT = 4,
- BUTTON_UP = 5,
- BUTTON_DOWN = 6,
- BUTTON_SEL = 7
-} Button_TypeDef;
-
-typedef enum
-{
- BUTTON_MODE_GPIO = 0,
- BUTTON_MODE_EXTI = 1
-} ButtonMode_TypeDef;
-
-typedef enum
-{
- JOY_NONE = 0,
- JOY_SEL = 1,
- JOY_DOWN = 2,
- JOY_LEFT = 3,
- JOY_RIGHT = 4,
- JOY_UP = 5
-} JOYState_TypeDef
-;
-
-typedef enum
-{
- COM1 = 0,
- COM2 = 1
-} COM_TypeDef;
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_Exported_Constants
- * @{
- */
-
-/**
- * @brief Uncomment the line corresponding to the STMicroelectronics evaluation
- * board used in your application.
- *
- * Tip: To avoid modifying this file each time you need to switch between these
- * boards, you can define the board in your toolchain compiler preprocessor.
- */
-#if !defined (USE_STM32100B_EVAL) && !defined (USE_STM3210B_EVAL) && !defined (USE_STM3210E_EVAL)\
- && !defined (USE_STM3210C_EVAL) && !defined (USE_STM32L152_EVAL) && !defined (USE_STM32100E_EVAL)
- //#define USE_STM32100B_EVAL
- //#define USE_STM3210B_EVAL
- //#define USE_STM3210E_EVAL
- //#define USE_STM3210C_EVAL
- //#define USE_STM32L152_EVAL
- //#define USE_STM32100E_EVAL
-#endif
-
-#ifdef USE_STM32100B_EVAL
- #include "stm32f10x.h"
- #include "stm32100b_eval/stm32100b_eval.h"
-#elif defined USE_STM3210B_EVAL
- #include "stm32f10x.h"
- #include "stm3210b_eval/stm3210b_eval.h"
-#elif defined USE_STM3210E_EVAL
- #include "stm32f10x.h"
- #include "stm3210e_eval/stm3210e_eval.h"
-#elif defined USE_STM3210C_EVAL
- #include "stm32f10x.h"
- #include "stm3210c_eval/stm3210c_eval.h"
-#elif defined USE_STM32L152_EVAL
- #include "stm32l1xx.h"
- #include "stm32l152_eval/stm32l152_eval.h"
-#elif defined USE_STM32100E_EVAL
- #include "stm32f10x.h"
- #include "stm32100e_eval/stm32100e_eval.h"
-#else
- #error "Please select first the STM32 EVAL board to be used (in stm32_eval.h)"
-#endif
-
-
-/**
- * @brief STM32 Button Defines Legacy
- */
-#define Button_WAKEUP BUTTON_WAKEUP
-#define Button_TAMPER BUTTON_TAMPER
-#define Button_KEY BUTTON_KEY
-#define Button_RIGHT BUTTON_RIGHT
-#define Button_LEFT BUTTON_LEFT
-#define Button_UP BUTTON_UP
-#define Button_DOWN BUTTON_DOWN
-#define Button_SEL BUTTON_SEL
-#define Mode_GPIO BUTTON_MODE_GPIO
-#define Mode_EXTI BUTTON_MODE_EXTI
-#define Button_Mode_TypeDef ButtonMode_TypeDef
-#define JOY_CENTER JOY_SEL
-#define JOY_State_TypeDef JOYState_TypeDef
-
-/**
- * @brief LCD Defines Legacy
- */
-#define LCD_RSNWR_GPIO_CLK LCD_NWR_GPIO_CLK
-#define LCD_SPI_GPIO_PORT LCD_SPI_SCK_GPIO_PORT
-#define LCD_SPI_GPIO_CLK LCD_SPI_SCK_GPIO_CLK
-#define R0 LCD_REG_0
-#define R1 LCD_REG_1
-#define R2 LCD_REG_2
-#define R3 LCD_REG_3
-#define R4 LCD_REG_4
-#define R5 LCD_REG_5
-#define R6 LCD_REG_6
-#define R7 LCD_REG_7
-#define R8 LCD_REG_8
-#define R9 LCD_REG_9
-#define R10 LCD_REG_10
-#define R12 LCD_REG_12
-#define R13 LCD_REG_13
-#define R14 LCD_REG_14
-#define R15 LCD_REG_15
-#define R16 LCD_REG_16
-#define R17 LCD_REG_17
-#define R18 LCD_REG_18
-#define R19 LCD_REG_19
-#define R20 LCD_REG_20
-#define R21 LCD_REG_21
-#define R22 LCD_REG_22
-#define R23 LCD_REG_23
-#define R24 LCD_REG_24
-#define R25 LCD_REG_25
-#define R26 LCD_REG_26
-#define R27 LCD_REG_27
-#define R28 LCD_REG_28
-#define R29 LCD_REG_29
-#define R30 LCD_REG_30
-#define R31 LCD_REG_31
-#define R32 LCD_REG_32
-#define R33 LCD_REG_33
-#define R34 LCD_REG_34
-#define R36 LCD_REG_36
-#define R37 LCD_REG_37
-#define R40 LCD_REG_40
-#define R41 LCD_REG_41
-#define R43 LCD_REG_43
-#define R45 LCD_REG_45
-#define R48 LCD_REG_48
-#define R49 LCD_REG_49
-#define R50 LCD_REG_50
-#define R51 LCD_REG_51
-#define R52 LCD_REG_52
-#define R53 LCD_REG_53
-#define R54 LCD_REG_54
-#define R55 LCD_REG_55
-#define R56 LCD_REG_56
-#define R57 LCD_REG_57
-#define R59 LCD_REG_59
-#define R60 LCD_REG_60
-#define R61 LCD_REG_61
-#define R62 LCD_REG_62
-#define R63 LCD_REG_63
-#define R64 LCD_REG_64
-#define R65 LCD_REG_65
-#define R66 LCD_REG_66
-#define R67 LCD_REG_67
-#define R68 LCD_REG_68
-#define R69 LCD_REG_69
-#define R70 LCD_REG_70
-#define R71 LCD_REG_71
-#define R72 LCD_REG_72
-#define R73 LCD_REG_73
-#define R74 LCD_REG_74
-#define R75 LCD_REG_75
-#define R76 LCD_REG_76
-#define R77 LCD_REG_77
-#define R78 LCD_REG_78
-#define R79 LCD_REG_79
-#define R80 LCD_REG_80
-#define R81 LCD_REG_81
-#define R82 LCD_REG_82
-#define R83 LCD_REG_83
-#define R96 LCD_REG_96
-#define R97 LCD_REG_97
-#define R106 LCD_REG_106
-#define R118 LCD_REG_118
-#define R128 LCD_REG_128
-#define R129 LCD_REG_129
-#define R130 LCD_REG_130
-#define R131 LCD_REG_131
-#define R132 LCD_REG_132
-#define R133 LCD_REG_133
-#define R134 LCD_REG_134
-#define R135 LCD_REG_135
-#define R136 LCD_REG_136
-#define R137 LCD_REG_137
-#define R139 LCD_REG_139
-#define R140 LCD_REG_140
-#define R141 LCD_REG_141
-#define R143 LCD_REG_143
-#define R144 LCD_REG_144
-#define R145 LCD_REG_145
-#define R146 LCD_REG_146
-#define R147 LCD_REG_147
-#define R148 LCD_REG_148
-#define R149 LCD_REG_149
-#define R150 LCD_REG_150
-#define R151 LCD_REG_151
-#define R152 LCD_REG_152
-#define R153 LCD_REG_153
-#define R154 LCD_REG_154
-#define R157 LCD_REG_157
-#define R192 LCD_REG_192
-#define R193 LCD_REG_193
-#define R227 LCD_REG_227
-#define R229 LCD_REG_229
-#define R231 LCD_REG_231
-#define R239 LCD_REG_239
-#define White LCD_COLOR_WHITE
-#define Black LCD_COLOR_BLACK
-#define Grey LCD_COLOR_GREY
-#define Blue LCD_COLOR_BLUE
-#define Blue2 LCD_COLOR_BLUE2
-#define Red LCD_COLOR_RED
-#define Magenta LCD_COLOR_MAGENTA
-#define Green LCD_COLOR_GREEN
-#define Cyan LCD_COLOR_CYAN
-#define Yellow LCD_COLOR_YELLOW
-#define Line0 LCD_LINE_0
-#define Line1 LCD_LINE_1
-#define Line2 LCD_LINE_2
-#define Line3 LCD_LINE_3
-#define Line4 LCD_LINE_4
-#define Line5 LCD_LINE_5
-#define Line6 LCD_LINE_6
-#define Line7 LCD_LINE_7
-#define Line8 LCD_LINE_8
-#define Line9 LCD_LINE_9
-#define Horizontal LCD_DIR_HORIZONTAL
-#define Vertical LCD_DIR_VERTICAL
-
-
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup STM32_EVAL_Exported_Functions
- * @{
- */
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __STM32_EVAL_H */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/