Write performance improvements.
authorMichael McMaster <michael@codesrc.com>
Mon, 14 Oct 2013 12:24:04 +0000 (22:24 +1000)
committerMichael McMaster <michael@codesrc.com>
Mon, 14 Oct 2013 12:24:04 +0000 (22:24 +1000)
- Multi-sector SD card writes supported.
- Updated to PSoC Creator 3.0

80 files changed:
STATUS
readme.txt
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/Cm3Iar.icf [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/Cm3RealView.scat
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/Cm3Start.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyBootAsmGnu.s
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyBootAsmIar.s [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyBootAsmRv.s
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyDmac.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyDmac.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyFlash.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyFlash.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyLib.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyLib.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CySpc.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CySpc.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN.c [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_ISR.c [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_ISR.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_aliases.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_In_DBx_aliases.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_In_aliases.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_Out_DBx_aliases.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST.c [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_aliases.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SDCard.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_Data_Clk.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_Data_Clk.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_Init_Clk.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_Init_Clk.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cm3gcc.ld
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/config.hex
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/core_cm3.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/core_cm3_psoc5.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/core_cmFunc.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/core_cmInstr.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyPm.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyPm.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydisabledsheets.h [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cypins.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cytypes.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyutils.c
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/eeprom.hex [new file with mode: 0644]
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h
software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoCCreatorExportIDE.xml [new file with mode: 0755]
software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cycdx [deleted file]
software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cydwr
software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cyfit
software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cyprj
software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.svd [deleted file]
software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD_PSoC5lib.uvproj
software/SCSI2SD/SCSI2SD.cydsn/TopDesign/TopDesign.cysch
software/SCSI2SD/SCSI2SD.cydsn/inquiry.c
software/SCSI2SD/SCSI2SD.cydsn/loopback.c
software/SCSI2SD/SCSI2SD.cydsn/main.c
software/SCSI2SD/SCSI2SD.cydsn/mode.c
software/SCSI2SD/SCSI2SD.cydsn/scsi.c
software/SCSI2SD/SCSI2SD.cydsn/scsi.h
software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.c
software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.h
software/SCSI2SD/SCSI2SD.cydsn/sd.c

diff --git a/STATUS b/STATUS
index be57b07..dc2d8ce 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -9,7 +9,5 @@ assignments are incorrect.
        - Partity checking is on
        - Unit Attention Condition is off
 
-- Write performance is not adequate
-       - Multi-sector SD commands are not yet supported.
-       - DMA is not used for SPI transfers
+- DMA is not used for SPI transfers
 
index 9c4461a..fb2c3b8 100644 (file)
@@ -42,10 +42,18 @@ Dimensions
 Performance
 
 As currently implemented:
-Sequential read: 250kb/sec Sequential write: 50kb/sec
 
-These numbers are dreadful. I am working on updating the slow polling SD card
-communication to use DMA. I expect the performance to reach 1.8Mb/sec.
+Sequential read: 250kb/sec Sequential write: 240kb/sec
+
+Tested with a 16GB class 10 SD card, via the commands:
+
+ # WRITE TEST
+ sudo dd bs=8192 count=100 if=/dev/zero of=/dev/sdX oflag=dsync
+
+ # READ TEST
+ sudo dd bs=8192 count=100 if=/dev/sdX of=/dev/null
+
+I am working on updating the slow polling SD card communication to use DMA. I expect the performance to reach 1Mb/sec. 
 
 
 Compatibility
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/Cm3Iar.icf b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/Cm3Iar.icf
new file mode 100644 (file)
index 0000000..0cda8fb
--- /dev/null
@@ -0,0 +1,113 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/\r
+/*-Editor annotation file-*/\r
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */\r
+/*-Specials-*/\r
+define symbol __ICFEDIT_intvec_start__ = 0x00000000;\r
+/*-Memory Regions-*/\r
+define symbol __ICFEDIT_region_ROM_start__ = 0x0;\r
+define symbol __ICFEDIT_region_ROM_end__   = 262144 - 1;\r
+define symbol __ICFEDIT_region_RAM_start__ = 0x20000000 - (65536 / 2);\r
+define symbol __ICFEDIT_region_RAM_end__   = 0x20000000 + (65536 / 2) - 1;\r
+/*-Sizes-*/\r
+define symbol __ICFEDIT_size_cstack__ = 0x4000;\r
+define symbol __ICFEDIT_size_heap__   = 0x1000;\r
+/**** End of ICF editor section. ###ICF###*/\r
+\r
+\r
+/******** Definitions ********/\r
+define symbol CY_APPL_LOADABLE  = 0;\r
+define symbol CY_APPL_LOADER    = 0;\r
+define symbol CY_APPL_NUM       = 1;\r
+define symbol CY_APPL_MAX       = 1;\r
+define symbol CY_METADATA_SIZE  = 64;\r
+define symbol CY_EE_IN_BTLDR    = 0x0;\r
+define symbol CY_EE_SIZE        = 2048;\r
+\r
+if (!CY_APPL_LOADABLE) {\r
+    define symbol CYDEV_BTLDR_SIZE = 0;\r
+}\r
+\r
+define symbol CY_FLASH_SIZE     = 262144;\r
+define symbol CY_APPL_ORIGIN    = 0; \r
+define symbol CY_FLASH_ROW_SIZE = 256;\r
+define symbol CY_ECC_ROW_SIZE   = 32;\r
+\r
+define memory mem with size = 4G;\r
+define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];\r
+define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];\r
+\r
+define block CSTACK      with alignment = 8, size = __ICFEDIT_size_cstack__   { };\r
+define block HEAP        with alignment = 8, size = __ICFEDIT_size_heap__     { };\r
+define block HSTACK      {block HEAP, last block CSTACK};\r
+\r
+define block LOADER     { readonly section .cybootloader };\r
+define block APPL       with fixed order {readonly section .romvectors, readonly};\r
+\r
+/* The address of Flash row next after Bootloader image */\r
+define symbol CY_BTLDR_END      = CYDEV_BTLDR_SIZE +\r
+                                    ((CYDEV_BTLDR_SIZE % CY_FLASH_ROW_SIZE) ?\r
+                                    (CY_FLASH_ROW_SIZE - (CYDEV_BTLDR_SIZE % CY_FLASH_ROW_SIZE)) : 0);\r
+\r
+/* The start address of Standard/Loader/Loadable#1 image */\r
+define symbol CY_APPL1_START    = CY_APPL_ORIGIN ? CY_APPL_ORIGIN : CY_BTLDR_END;\r
+\r
+/* The number of metadata records located at the end of Flash */\r
+define symbol CY_METADATA_CNT   = (CY_APPL_NUM == 2) ? 2 : ((CY_APPL_LOADER || CY_APPL_LOADABLE) ? 1 : 0);\r
+\r
+/* The application area size measured in rows */\r
+define symbol CY_APPL_ROW_CNT   = ((CY_FLASH_SIZE - CY_APPL1_START) / CY_FLASH_ROW_SIZE) - CY_METADATA_CNT;\r
+\r
+/* The start address of Loadable#2 image if any */\r
+define symbol CY_APPL2_START    = CY_APPL1_START + (CY_APPL_ROW_CNT / 2 + CY_APPL_ROW_CNT % 2) * CY_FLASH_ROW_SIZE;\r
+\r
+/* The current image (Standard/Loader/Loadable) start address */\r
+define symbol CY_APPL_START     = (CY_APPL_NUM == 1) ? CY_APPL1_START : CY_APPL2_START;\r
+\r
+/* The ECC data placement address */\r
+define exported symbol CY_ECC_OFFSET     = (CY_APPL_START / CY_FLASH_ROW_SIZE) * CY_ECC_ROW_SIZE;\r
+\r
+/* The EEPROM offset and size that can be used by current application (Standard/Loader/Loadable) */\r
+define symbol CY_EE_OFFSET      = (CY_APPL_LOADABLE && !CY_EE_IN_BTLDR) ? ((CY_EE_SIZE / CY_APPL_MAX) * (CY_APPL_NUM - 1)) : 0;\r
+define symbol CY_EE_IN_USE      = (CY_APPL_LOADABLE && !CY_EE_IN_BTLDR) ? (CY_EE_SIZE / CY_APPL_MAX) : CY_EE_SIZE;\r
+\r
+/* Define EEPROM region */\r
+define region EEPROM_region     = mem:[from (0x90200000 + CY_EE_OFFSET) size CY_EE_IN_USE];\r
+\r
+/* Define APPL region that will limit application size */\r
+define region APPL_region       = mem:[from CY_APPL_START size CY_APPL_ROW_CNT * CY_FLASH_ROW_SIZE];\r
+\r
+\r
+/****** Initializations ******/\r
+initialize by copy { readwrite };\r
+do not initialize  { section .noinit };\r
+do not initialize  { readwrite section .ramvectors };\r
+\r
+/******** Placements *********/\r
+".cybootloader"    : place at start of ROM_region {block LOADER};\r
+"APPL"             : place at start of APPL_region {block APPL};\r
+\r
+"RAMVEC"           : place at start of RAM_region { readwrite section .ramvectors };\r
+"readwrite"        : place in RAM_region          { readwrite };\r
+"HSTACK"           : place at end of RAM_region   { block HSTACK};\r
+\r
+keep {  section .cybootloader, \r
+        section .cyloadermeta, \r
+        section .cyloadablemeta,\r
+        section .cyconfigecc, \r
+        section .cycustnvl, \r
+        section .cywolatch,\r
+        section .cyeeprom, \r
+        section .cyflashprotect,\r
+        section .cymeta };\r
+\r
+".cyloadermeta"   : place at address mem : (CY_APPL_LOADER ? (CY_FLASH_SIZE - CY_METADATA_SIZE) : 0xF0000000) { readonly section .cyloadermeta };\r
+".cyloadablemeta" : place at address mem : (CY_FLASH_SIZE - CY_FLASH_ROW_SIZE * (CY_APPL_NUM - 1) - CY_METADATA_SIZE) { readonly section .cyloadablemeta };\r
+".cyconfigecc"    : place at address mem : (0x80000000 + CY_ECC_OFFSET) { readonly section .cyconfigecc };\r
+".cycustnvl"      : place at address mem : 0x90000000 { readonly section .cycustnvl };\r
+".cywolatch"      : place at address mem : 0x90100000 { readonly section .cywolatch };\r
+".cyeeprom"       : place in EEPROM_region { readonly section .cyeeprom };\r
+".cyflashprotect" : place at address mem : 0x90400000 { readonly section .cyflashprotect };\r
+".cymeta"         : place at address mem : 0x90500000 { readonly section .cymeta };\r
+\r
+\r
+/* EOF */\r
index c9d6785..3f58d9b 100644 (file)
@@ -1,6 +1,10 @@
+#! armcc -E\r
+; The first line specifies a preprocessor command that the linker invokes \r
+; to pass a scatter file through a C preprocessor.\r
+\r
 ;********************************************************************************\r
 ;* File Name: Cm3RealView.scat\r
-;* Version 3.40\r
+;* Version 4.0\r
 ;*\r
 ;*  Description:\r
 ;*  This Linker Descriptor file describes the memory layout of the PSoC5\r
 ;* disclaimers, and limitations in the end user license agreement accompanying\r
 ;* the software package with which this file was provided.\r
 ;********************************************************************************/\r
+#include "cyfitter.h"\r
+\r
+#define CY_FLASH_SIZE       262144\r
+#define CY_APPL_ORIGIN      0\r
+#define CY_FLASH_ROW_SIZE   256\r
+#define CY_ECC_ROW_SIZE     32\r
+#define CY_EE_SIZE          2048\r
+#define CY_METADATA_SIZE    64\r
+\r
+\r
+; Define application base address\r
+#if (CYDEV_PROJ_TYPE == CYDEV_PROJ_TYPE_LOADABLE)\r
+    #define CY_APPL_NUM     1\r
+    #define CY_APPL_MAX     1\r
+    #define CY_EE_IN_BTLDR  \r
+\r
+    #if CY_APPL_ORIGIN\r
+        #define APPL1_START     CY_APPL_ORIGIN\r
+    #else\r
+        #define APPL1_START     AlignExpr(ImageLimit(CYBOOTLOADER), CY_FLASH_ROW_SIZE)\r
+    #endif\r
+\r
+    #define APPL_START      (APPL1_START + AlignExpr(((CY_FLASH_SIZE - APPL1_START - 2 * CY_FLASH_ROW_SIZE) / 2 ) * (CY_APPL_NUM - 1), CY_FLASH_ROW_SIZE))\r
+    #define ECC_OFFSET      ((APPL_START / CY_FLASH_ROW_SIZE) * CY_ECC_ROW_SIZE)\r
+    #define EE_OFFSET       (CY_EE_IN_BTLDR ? 0 : (CY_EE_SIZE / CY_APPL_MAX) * (CY_APPL_NUM - 1))\r
+    #define EE_SIZE         (CY_EE_IN_BTLDR ? CY_EE_SIZE : (CY_EE_SIZE / CY_APPL_MAX))\r
+\r
+#else\r
+\r
+    #define APPL_START      0\r
+    #define ECC_OFFSET      0\r
+    #define EE_OFFSET       0\r
+    #define EE_SIZE         CY_EE_SIZE\r
+\r
+#endif\r
+\r
+\r
+; Place Bootloader at the beginning of Flash\r
+#if (CYDEV_PROJ_TYPE == CYDEV_PROJ_TYPE_LOADABLE)\r
+\r
+    CYBOOTLOADER 0\r
+    {\r
+        .cybootloader +0\r
+        {\r
+            * (.cybootloader)\r
+        }\r
+    }\r
 \r
-LOAD_ROM 0 (262144 - 0)\r
+    #if CY_APPL_ORIGIN\r
+        ScatterAssert(APPL_START > LoadLimit(CYBOOTLOADER))\r
+    #endif\r
+\r
+#endif\r
+\r
+\r
+APPLICATION APPL_START (CY_FLASH_SIZE - APPL_START)\r
 {\r
     VECTORS +0\r
     {\r
@@ -51,7 +109,7 @@ LOAD_ROM 0 (262144 - 0)
 \r
     DATA +0\r
     {\r
-        * (+RW, +ZI)\r
+        .ANY (+RW, +ZI)\r
     }\r
 \r
     ARM_LIB_HEAP (0x20000000 + (65536 / 2) - 0x1000 - 0x4000) EMPTY 0x1000\r
@@ -62,3 +120,71 @@ LOAD_ROM 0 (262144 - 0)
     {\r
     }\r
 }\r
+\r
+\r
+#if (CYDEV_PROJ_TYPE == CYDEV_PROJ_TYPE_BOOTLOADER || CYDEV_PROJ_TYPE == CYDEV_PROJ_TYPE_MULTIAPPBOOTLOADER)\r
+\r
+    CYLOADERMETA (CY_FLASH_SIZE - CY_METADATA_SIZE)\r
+    {\r
+        .cyloadermeta +0 { * (.cyloadermeta) }\r
+    }\r
+\r
+#else\r
+\r
+    #if (CYDEV_PROJ_TYPE == CYDEV_PROJ_TYPE_LOADABLE)\r
+\r
+        CYLOADABLEMETA (CY_FLASH_SIZE - CY_FLASH_ROW_SIZE * (CY_APPL_NUM - 1) - CY_METADATA_SIZE)\r
+        {\r
+            .cyloadablemeta +0 { * (.cyloadablemeta) }\r
+        }\r
+    \r
+    #endif\r
+\r
+#endif\r
+\r
+#if (CYDEV_ECC_ENABLE == 0)\r
+\r
+    CYCONFIGECC (0x80000000 + ECC_OFFSET)\r
+    {\r
+        .cyconfigecc +0 { * (.cyconfigecc) }\r
+    }\r
+\r
+#endif\r
+\r
+CYCUSTNVL 0x90000000\r
+{\r
+    .cycustnvl +0 { * (.cycustnvl) }\r
+}\r
+\r
+CYWOLATCH 0x90100000\r
+{\r
+    .cywolatch +0 { * (.cywolatch) }\r
+}\r
+\r
+#if defined(CYDEV_ALLOCATE_EEPROM)\r
+\r
+    CYEEPROM 0x90200000 + EE_OFFSET (EE_SIZE)\r
+    {\r
+        .cyeeprom +0 { * (.cyeeprom) }\r
+    }\r
+\r
+#endif\r
+\r
+CYFLASHPROTECT 0x90400000\r
+{\r
+    .cyflashprotect +0 { * (.cyflashprotect) }\r
+}\r
+\r
+CYMETA 0x90500000\r
+{\r
+    .cymeta +0 { * (.cymeta) }\r
+}\r
+\r
+#if (CYDEV_PROJ_TYPE == CYDEV_PROJ_TYPE_LOADABLE)\r
+\r
+    CYLOADERMETA +0\r
+    {\r
+        .cyloadermeta +0 { * (.cyloadermeta) }\r
+    }\r
+\r
+#endif\r
index 858f158..f4d6607 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: Cm3Start.c\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 *  Description:\r
 *  Startup code for the ARM CM3.\r
@@ -12,6 +12,7 @@
 * the software package with which this file was provided.\r
 *******************************************************************************/\r
 \r
+#include <limits.h>\r
 #include "cydevice_trm.h"\r
 #include "cytypes.h"\r
 #include "cyfitter_cfg.h"\r
 #include "CyDmac.h"\r
 #include "cyfitter.h"\r
 \r
-#define NUM_INTERRUPTS              32u\r
-#define NUM_VECTORS                 (CYINT_IRQ_BASE+NUM_INTERRUPTS)\r
-#define NUM_ROM_VECTORS             4u\r
-#define NVIC_APINT                  ((reg32 *) CYREG_NVIC_APPLN_INTR)\r
-#define NVIC_CFG_CTRL               ((reg32 *) CYREG_NVIC_CFG_CONTROL)\r
-#define NVIC_APINT_PRIGROUP_3_5     0x00000400u  /* Priority group 3.5 split */\r
-#define NVIC_APINT_VECTKEY          0x05FA0000u  /* This key is required in order to write the NVIC_APINT register */\r
-#define NVIC_CFG_STACKALIGN         0x00000200u  /* This specifies that the exception stack must be 8 byte aligned */\r
+#define CY_NUM_INTERRUPTS           (32u)\r
+#define CY_NUM_VECTORS              (CYINT_IRQ_BASE + CY_NUM_INTERRUPTS)\r
+#define CY_NUM_ROM_VECTORS          (4u)\r
+#define CY_NVIC_APINT_PTR           ((reg32 *) CYREG_NVIC_APPLN_INTR)\r
+#define CY_NVIC_CFG_CTRL_PTR        ((reg32 *) CYREG_NVIC_CFG_CONTROL)\r
+#define CY_NVIC_APINT_PRIGROUP_3_5  (0x00000400u)  /* Priority group 3.5 split */\r
+#define CY_NVIC_APINT_VECTKEY       (0x05FA0000u)  /* This key is required in order to write the NVIC_APINT register */\r
+#define CY_NVIC_CFG_STACKALIGN      (0x00000200u)  /* This specifies that the exception stack must be 8 byte aligned */\r
+\r
 \r
 /* Extern functions */\r
 extern void CyBtldr_CheckLaunch(void);\r
@@ -38,26 +40,35 @@ void Reset(void);
 CY_ISR(IntDefaultHandler);\r
 \r
 #if defined(__ARMCC_VERSION)\r
-    #define INITIAL_STACK_POINTER (cyisraddress)(uint32)&Image$$ARM_LIB_STACK$$ZI$$Limit\r
+    #define INITIAL_STACK_POINTER ((cyisraddress)(uint32)&Image$$ARM_LIB_STACK$$ZI$$Limit)\r
 #elif defined (__GNUC__)\r
-    #define INITIAL_STACK_POINTER __cs3_stack\r
+    #define INITIAL_STACK_POINTER (&__cy_stack)\r
+#elif defined (__ICCARM__)\r
+    #pragma language=extended\r
+    #pragma segment="CSTACK"\r
+    #define INITIAL_STACK_POINTER  { .__ptr = __sfe( "CSTACK" ) }\r
+\r
+    extern void __iar_program_start( void );\r
+    extern void __iar_data_init3 (void);\r
 #endif  /* (__ARMCC_VERSION) */\r
 \r
 /* Global variables */\r
-CY_NOINIT static uint32 cySysNoInitDataValid;\r
+#if !defined (__ICCARM__)\r
+    CY_NOINIT static uint32 cySysNoInitDataValid;\r
+#endif  /* !defined (__ICCARM__) */\r
 \r
 \r
 /*******************************************************************************\r
 * Default Ram Interrupt Vector table storage area. Must be 256-byte aligned.\r
 *******************************************************************************/\r
-\r
-__attribute__ ((section(".ramvectors")))\r
-#if defined(__ARMCC_VERSION)\r
-__align(256)\r
-#elif defined (__GNUC__)\r
-__attribute__ ((aligned(256)))\r
-#endif\r
-cyisraddress CyRamVectors[NUM_VECTORS];\r
+#if defined (__ICCARM__)\r
+    #pragma location=".ramvectors"\r
+    #pragma data_alignment=256\r
+#else\r
+    CY_SECTION(".ramvectors")\r
+    CY_ALIGN(256)\r
+#endif  /* defined (__ICCARM__) */\r
+cyisraddress CyRamVectors[CY_NUM_VECTORS];\r
 \r
 \r
 /*******************************************************************************\r
@@ -121,42 +132,27 @@ extern int __main(void);
 *  None\r
 *\r
 *******************************************************************************/\r
-__asm void Reset(void)\r
+void Reset(void)\r
 {\r
-    PRESERVE8\r
-    EXTERN __main\r
-    EXTERN CyResetStatus\r
-\r
-    #if(CYDEV_BOOTLOADER_ENABLE)\r
-        EXTERN CyBtldr_CheckLaunch\r
-    #endif  /* (CYDEV_BOOTLOADER_ENABLE) */\r
-\r
-\r
     #if(CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE)\r
-        #if(CYDEV_DEBUGGING_ENABLE)\r
-            ldr  r3, =0x400046e8 /* CYDEV_DEBUG_ENABLE_REGISTER */\r
-            ldrb r4, [r3, #0]\r
-            orr  r4, r4, #01\r
-            strb r4, [r3, #0]\r
-debugEnabled\r
-        #endif    /* (CYDEV_DEBUGGING_ENABLE) */\r
 \r
-        ldr  r3, =0x400046fa /* CYREG_RESET_SR0 */\r
-        ldrb r2, [r3, #0]\r
+        /* For PSoC 5LP, debugging is enabled by default */\r
+        #if(CYDEV_DEBUGGING_ENABLE == 0)\r
+            *(reg32 *)(CYDEV_DEBUG_ENABLE_REGISTER) |= CYDEV_DEBUG_ENABLE_MASK;\r
+        #endif /* (CYDEV_DEBUGGING_ENABLE) */\r
 \r
-    #endif  /* (CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE) */\r
+        /* Reset Status Register has Read-to-clear SW access mode.\r
+        * Preserve current RESET_SR0 state to make it available for next reading.\r
+        */\r
+        *(reg32 *)(CYREG_PHUB_CFGMEM23_CFG1) = *(reg32 *)(CYREG_RESET_SR0);\r
 \r
-    ldr  r3, =0x400076BC /* CYREG_PHUB_CFGMEM23_CFG1 */\r
-    strb r2, [r3, #0]\r
+    #endif  /* (CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE) */\r
 \r
     #if(CYDEV_BOOTLOADER_ENABLE)\r
-        bl CyBtldr_CheckLaunch\r
+        CyBtldr_CheckLaunch();\r
     #endif /* (CYDEV_BOOTLOADER_ENABLE) */\r
 \r
-    /* Let RealView setup the libraries. */\r
-    bl __main\r
-\r
-    ALIGN\r
+    __main();\r
 }\r
 \r
 \r
@@ -181,14 +177,38 @@ void $Sub$$main(void)
     /* Call original main */\r
     $Super$$main();\r
 \r
-    /* If main returns it is undefined what we should do. */\r
-    while (1);\r
+    while (1)\r
+    {\r
+        /* If main returns it is undefined what we should do. */\r
+    }\r
 }\r
 \r
 #elif defined(__GNUC__)\r
 \r
-extern void __cs3_stack(void);\r
-extern void __cs3_start_c(void);\r
+void Start_c(void);\r
+\r
+/* Stack Base address */\r
+extern void __cy_stack(void);\r
+\r
+/* Application entry point. */\r
+extern int main(void);\r
+\r
+/* The static objects constructors initializer */\r
+extern void __libc_init_array(void);\r
+\r
+typedef unsigned char __cy_byte_align8 __attribute ((aligned (8)));\r
+\r
+struct __cy_region\r
+{\r
+    __cy_byte_align8 *init; /* Initial contents of this region.  */\r
+    __cy_byte_align8 *data; /* Start address of region.  */\r
+    size_t init_size;       /* Size of initial data.  */\r
+    size_t zero_size;       /* Additional size to be zeroed.  */\r
+};\r
+\r
+extern const struct __cy_region __cy_regions[];\r
+extern const char __cy_region_num __attribute__((weak));\r
+#define __cy_region_num ((size_t)&__cy_region_num)\r
 \r
 \r
 /*******************************************************************************\r
@@ -196,7 +216,7 @@ extern void __cs3_start_c(void);
 ********************************************************************************\r
 *\r
 * Summary:\r
-*  This function handles the reset interrupt for the GCC toolchain.  This is the\r
+*  This function handles the reset interrupt for the GCC toolchain. This is the\r
 *  first bit of code that is executed at startup.\r
 *\r
 * Parameters:\r
@@ -206,34 +226,140 @@ extern void __cs3_start_c(void);
 *  None\r
 *\r
 *******************************************************************************/\r
-__attribute__ ((naked))\r
 void Reset(void)\r
 {\r
-    __asm volatile(\r
-#if(CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE)\r
-\r
-  #if(CYDEV_DEBUGGING_ENABLE)\r
-    "    ldr  r3, =%0\n"\r
-    "    ldrb r4, [r3, #0]\n"\r
-    "    orr  r4, r4, #01\n"\r
-    "    strb r4, [r3, #0]\n"\r
-    "debugEnabled:\n"\r
-  #endif    /* (CYDEV_DEBUGGING_ENABLE) */\r
-\r
-    "    ldr  r3, =%1\n"\r
-    "    ldrb r2, [r3, #0]\n"\r
-    "    uxtb r2, r2\n"\r
-#endif  /* (CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE) */\r
-\r
-    "    ldr  r3, =%2\n"\r
-    "    strb r2, [r3, #0]\n"\r
-\r
-#if(CYDEV_BOOTLOADER_ENABLE)\r
-    "    bl CyBtldr_CheckLaunch\n"\r
-#endif /* (CYDEV_BOOTLOADER_ENABLE) */\r
-\r
-    /*  Switch to C initialization phase */\r
-    "    bl __cs3_start_c\n" : : "i" (CYDEV_DEBUG_ENABLE_REGISTER), "i" (CYREG_RESET_SR0), "i" (CYREG_PHUB_CFGMEM23_CFG1));\r
+    #if(CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE)\r
+\r
+        /* For PSoC 5LP, debugging is enabled by default */\r
+        #if(CYDEV_DEBUGGING_ENABLE == 0)\r
+            *(reg32 *)(CYDEV_DEBUG_ENABLE_REGISTER) |= CYDEV_DEBUG_ENABLE_MASK;\r
+        #endif /* (CYDEV_DEBUGGING_ENABLE) */\r
+\r
+        /* Reset Status Register has Read-to-clear SW access mode.\r
+        * Preserve current RESET_SR0 state to make it available for next reading.\r
+        */\r
+        *(reg32 *)(CYREG_PHUB_CFGMEM23_CFG1) = *(reg32 *)(CYREG_RESET_SR0);\r
+\r
+    #endif  /* (CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE) */\r
+\r
+    #if(CYDEV_BOOTLOADER_ENABLE)\r
+        CyBtldr_CheckLaunch();\r
+    #endif /* (CYDEV_BOOTLOADER_ENABLE) */\r
+\r
+    Start_c();\r
+}\r
+\r
+__attribute__((weak))\r
+void _exit(int status)\r
+{\r
+    /* Cause a divide by 0 exception */\r
+    int x = status / INT_MAX;\r
+    x = 4 / x;\r
+\r
+    while(1)\r
+    {\r
+    }\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name: Start_c\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  This function handles initializing the .data and .bss sections in\r
+*  preperation for running standard C code.  Once initialization is complete\r
+*  it will call main(). This function will never return.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void Start_c(void)  __attribute__ ((noreturn));\r
+void Start_c(void)\r
+{\r
+    unsigned regions = __cy_region_num;\r
+    const struct __cy_region *rptr = __cy_regions;\r
+\r
+    /* Initialize memory */\r
+    for (regions = __cy_region_num, rptr = __cy_regions; regions--; rptr++)\r
+    {\r
+        uint32 *src = (uint32 *)rptr->init;\r
+        uint32 *dst = (uint32 *)rptr->data;\r
+        unsigned limit = rptr->init_size;\r
+        unsigned count;\r
+\r
+        for (count = 0u; count != limit; count += sizeof (uint32))\r
+        {\r
+            *dst++ = *src++;\r
+        }\r
+        limit = rptr->zero_size;\r
+        for (count = 0u; count != limit; count += sizeof (uint32))\r
+        {\r
+            *dst++ = 0u;\r
+        }\r
+    }\r
+\r
+    /* Invoke static objects constructors */\r
+    __libc_init_array();\r
+    (void) main();\r
+\r
+    while (1)\r
+    {\r
+        /* If main returns, make sure we don't return. */\r
+    }\r
+}\r
+\r
+\r
+#elif defined (__ICCARM__)\r
+\r
+/*******************************************************************************\r
+* Function Name: __low_level_init\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  This function perform early initializations for the IAR Embedded\r
+*  Workbench IDE. It is executed in the context of reset interrupt handler\r
+*  before the data sections are initialized.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*  The value that determines whether or not data sections should be initialized\r
+*  by the system startup code:\r
+*    0 - skip data sections initialization;\r
+*    1 - initialize data sections;\r
+*\r
+*******************************************************************************/\r
+int __low_level_init(void)\r
+{\r
+    #if(CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE)\r
+\r
+        /* For PSoC 5LP, debugging is enabled by default */\r
+        #if(CYDEV_DEBUGGING_ENABLE == 0)\r
+            *(reg32 *)(CYDEV_DEBUG_ENABLE_REGISTER) |= CYDEV_DEBUG_ENABLE_MASK;\r
+        #endif /* (CYDEV_DEBUGGING_ENABLE) */\r
+\r
+        /* Reset Status Register has Read-to-clear SW access mode.\r
+        * Preserve current RESET_SR0 state to make it available for next reading.\r
+        */\r
+        *(reg32 *)(CYREG_PHUB_CFGMEM23_CFG1) = *(reg32 *)(CYREG_RESET_SR0);\r
+\r
+    #endif  /* (CYDEV_PROJ_TYPE != CYDEV_PROJ_TYPE_LOADABLE) */\r
+\r
+    #if (CYDEV_BOOTLOADER_ENABLE)\r
+        CyBtldr_CheckLaunch();\r
+    #endif /* CYDEV_BOOTLOADER_ENABLE */\r
+\r
+    /* Initialize data sections */\r
+    __iar_data_init3();\r
+\r
+    initialize_psoc();\r
+\r
+    return 0;\r
 }\r
 \r
 #endif /* __GNUC__ */\r
@@ -245,21 +371,32 @@ void Reset(void)
 *\r
 *******************************************************************************/\r
 #if defined(__ARMCC_VERSION)\r
+    /* Suppress diagnostic message 1296-D: extended constant initialiser used */\r
     #pragma diag_suppress 1296\r
-#endif\r
-__attribute__ ((section(".romvectors")))\r
-const cyisraddress RomVectors[NUM_ROM_VECTORS] =\r
+#endif  /* defined(__ARMCC_VERSION) */\r
+\r
+#if defined (__ICCARM__)\r
+    #pragma location=".romvectors"\r
+    const intvec_elem __vector_table[CY_NUM_ROM_VECTORS] =\r
+#else\r
+    CY_SECTION(".romvectors")\r
+    const cyisraddress RomVectors[CY_NUM_ROM_VECTORS] =\r
+#endif  /* defined (__ICCARM__) */\r
 {\r
-    #if defined(__ARMCC_VERSION)\r
-        INITIAL_STACK_POINTER,           /* The initial stack pointer  0 */\r
-    #elif defined (__GNUC__)\r
-        &INITIAL_STACK_POINTER,          /* The initial stack pointer  0 */\r
-    #endif  /* (__ARMCC_VERSION) */\r
-    (cyisraddress)&Reset,    /* The reset handler          1 */\r
+    INITIAL_STACK_POINTER,   /* The initial stack pointer  0 */\r
+    #if defined (__ICCARM__) /* The reset handler          1 */\r
+        __iar_program_start,\r
+    #else\r
+        (cyisraddress)&Reset,\r
+    #endif  /* defined (__ICCARM__) */\r
     &IntDefaultHandler,      /* The NMI handler            2 */\r
     &IntDefaultHandler,      /* The hard fault handler     3 */\r
 };\r
 \r
+#if defined(__ARMCC_VERSION)\r
+    #pragma diag_default 1296\r
+#endif  /* defined(__ARMCC_VERSION) */\r
+\r
 \r
 /*******************************************************************************\r
 * Function Name: initialize_psoc\r
@@ -278,7 +415,6 @@ const cyisraddress RomVectors[NUM_ROM_VECTORS] =
 #if (defined(__GNUC__) && !defined(__ARMCC_VERSION))\r
 __attribute__ ((constructor(101)))\r
 #endif\r
-\r
 void initialize_psoc(void)\r
 {\r
     uint32 i;\r
@@ -286,13 +422,17 @@ void initialize_psoc(void)
     /* Set Priority group 5. */\r
 \r
     /* Writes to NVIC_APINT register require the VECTKEY in the upper half */\r
-    *NVIC_APINT = NVIC_APINT_VECTKEY | NVIC_APINT_PRIGROUP_3_5;\r
-    *NVIC_CFG_CTRL |= NVIC_CFG_STACKALIGN;\r
+    *CY_NVIC_APINT_PTR = CY_NVIC_APINT_VECTKEY | CY_NVIC_APINT_PRIGROUP_3_5;\r
+    *CY_NVIC_CFG_CTRL_PTR |= CY_NVIC_CFG_STACKALIGN;\r
 \r
     /* Set Ram interrupt vectors to default functions. */\r
-    for(i = 0u; i < NUM_VECTORS; i++)\r
+    for (i = 0u; i < CY_NUM_VECTORS; i++)\r
     {\r
-        CyRamVectors[i] = (i < NUM_ROM_VECTORS) ? RomVectors[i] : &IntDefaultHandler;\r
+        #if defined (__ICCARM__)\r
+            CyRamVectors[i] = (i < CY_NUM_ROM_VECTORS) ? __vector_table[i].__fun : &IntDefaultHandler;\r
+        #else\r
+            CyRamVectors[i] = (i < CY_NUM_ROM_VECTORS) ? RomVectors[i] : &IntDefaultHandler;\r
+        #endif  /* defined (__ICCARM__) */\r
     }\r
 \r
     /* Was stored in CFGMEM to avoid being cleared while SRAM gets cleared */\r
@@ -310,9 +450,11 @@ void initialize_psoc(void)
         CyDmacConfigure();\r
 \r
     #endif  /* (0u != DMA_CHANNELS_USED__MASK0) */\r
-    \r
-    /* Actually, no need to clean this variable, just to make compiler happy. */\r
-    cySysNoInitDataValid = 0u;\r
+\r
+    #if !defined (__ICCARM__)\r
+        /* Actually, no need to clean this variable, just to make compiler happy. */\r
+        cySysNoInitDataValid = 0u;\r
+    #endif  /* !defined (__ICCARM__) */\r
 }\r
 \r
 \r
index deb960a..a8797f7 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CyBootAsmGnu.s\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 *  Description:\r
 *   Assembly routines for GNU as.\r
@@ -12,6 +12,8 @@
 * the software package with which this file was provided.\r
 *******************************************************************************/\r
 \r
+.include "cyfittergnu.inc"\r
+\r
 .syntax unified\r
 .text\r
 .thumb\r
 .type CyDelayCycles, %function\r
 .thumb_func\r
 CyDelayCycles:              /* cycles bytes */\r
-       ADDS r0, r0, #2         /*      1       2       Round to nearest multiple of 4 */\r
-       LSRS r0, r0, #2         /*      1       2       Divide by 4 and set flags */\r
-       BEQ CyDelayCycles_done  /*      2       2       Skip if 0 */\r
-       NOP                     /*      1       2       Loop alignment padding */\r
+/* If ICache is enabled */\r
+.ifeq CYDEV_INSTRUCT_CACHE_ENABLED - 1\r
+\r
+    ADDS r0, r0, #2           /*  1    2   Round to nearest multiple of 4 */\r
+    LSRS r0, r0, #2           /*  1    2   Divide by 4 and set flags */\r
+    BEQ CyDelayCycles_done    /*  2    2   Skip if 0 */\r
+    NOP                       /*  1    2   Loop alignment padding */\r
+\r
+CyDelayCycles_loop:\r
+    SUBS r0, r0, #1           /*  1    2 */\r
+    MOV r0, r0                /*  1    2   Pad loop to power of two cycles */\r
+    BNE CyDelayCycles_loop    /*  2    2 */\r
+\r
+CyDelayCycles_done:\r
+    BX lr                     /*  3    2 */\r
+\r
+.else\r
+\r
+    CMP r0, #20               /*  1    2   If delay is short - jump to cycle */\r
+    BLS CyDelayCycles_short   /*  1    2  */\r
+    PUSH {r1}                 /*  2    2   PUSH r1 to stack */\r
+    MOVS r1, #1               /*  1    2  */\r
+\r
+    SUBS r0, r0, #20          /*  1    2   Subtract overhead */\r
+    LDR r1,=CYREG_CACHE_CC_CTL/*  2    2   Load flash wait cycles value */\r
+    LDRB r1, [r1, #0]         /*  2    2  */\r
+    ANDS r1, #0xC0            /*  1    2  */\r
+\r
+    LSRS r1, r1, #6           /*  1    2  */\r
+    PUSH {r2}                 /*  1    2   PUSH r2 to stack */\r
+    LDR r2, =cy_flash_cycles  /*  2    2  */\r
+    LDRB r1, [r2, r1]         /*  2    2  */\r
+\r
+    POP {r2}                  /*  2    2   POP r2 from stack */\r
+    NOP                       /*  1    2   Alignment padding */\r
+    NOP                       /*  1    2   Alignment padding */\r
+    NOP                       /*  1    2   Alignment padding */\r
+\r
 CyDelayCycles_loop:\r
-       SUBS r0, r0, #1         /*      1       2 */\r
-       MOV r0, r0              /*      1       2       Pad loop to power of two cycles */\r
-       BNE CyDelayCycles_loop  /*      2       2 */\r
+    SBCS r0, r0, r1           /*  1    2  */\r
+    BPL CyDelayCycles_loop    /*  3    2  */\r
+    NOP                       /*  1    2   Loop alignment padding */\r
+    NOP                       /*  1    2   Loop alignment padding */\r
+\r
+    POP {r1}                  /*  2    2   POP r1 from stack */\r
 CyDelayCycles_done:\r
-       BX lr                   /*      3       2 */\r
+    BX lr                     /*  3    2  */\r
+    NOP                       /*  1    2   Alignment padding */\r
+    NOP                       /*  1    2   Alignment padding */\r
+\r
+CyDelayCycles_short:\r
+    SBCS r0, r0, #4           /*  1    2  */\r
+    BPL CyDelayCycles_short   /*  3    2  */\r
+    BX lr                     /*  3    2  */\r
+\r
+cy_flash_cycles:\r
+.byte 0x0B\r
+.byte 0x05\r
+.byte 0x07\r
+.byte 0x09\r
+.endif\r
+\r
 .endfunc\r
 \r
 \r
@@ -81,9 +135,9 @@ CyDelayCycles_done:
 .type CyEnterCriticalSection, %function\r
 .thumb_func\r
 CyEnterCriticalSection:\r
-       MRS r0, PRIMASK         /* Save and return interrupt state */\r
-       CPSID I                 /* Disable interrupts */\r
-       BX lr\r
+    MRS r0, PRIMASK         /* Save and return interrupt state */\r
+    CPSID I                 /* Disable interrupts */\r
+    BX lr\r
 .endfunc\r
 \r
 \r
@@ -110,8 +164,8 @@ CyEnterCriticalSection:
 .type CyExitCriticalSection, %function\r
 .thumb_func\r
 CyExitCriticalSection:\r
-       MSR PRIMASK, r0         /* Restore interrupt state */\r
-       BX lr\r
+    MSR PRIMASK, r0         /* Restore interrupt state */\r
+    BX lr\r
 .endfunc\r
 \r
 .end\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyBootAsmIar.s b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CyBootAsmIar.s
new file mode 100644 (file)
index 0000000..166ba87
--- /dev/null
@@ -0,0 +1,156 @@
+;-------------------------------------------------------------------------------\r
+; FILENAME: CyBootAsmIar.s\r
+; Version 4.0\r
+;\r
+;  DESCRIPTION:\r
+;    Assembly routines for IAR Embedded Workbench IDE.\r
+;\r
+;-------------------------------------------------------------------------------\r
+; Copyright 2013, Cypress Semiconductor Corporation.  All rights reserved.\r
+; You may use this file only in accordance with the license, terms, conditions,\r
+; disclaimers, and limitations in the end user license agreement accompanying\r
+; the software package with which this file was provided.\r
+;-------------------------------------------------------------------------------\r
+\r
+    SECTION .text:CODE:ROOT(4)\r
+    PUBLIC CyDelayCycles\r
+    PUBLIC CyEnterCriticalSection\r
+    PUBLIC CyExitCriticalSection\r
+    INCLUDE cyfitteriar.inc\r
+    THUMB\r
+\r
+\r
+;-------------------------------------------------------------------------------\r
+; Function Name: CyEnterCriticalSection\r
+;-------------------------------------------------------------------------------\r
+;\r
+; Summary:\r
+;  CyEnterCriticalSection disables interrupts and returns a value indicating\r
+;  whether interrupts were previously enabled.\r
+;\r
+;  Note Implementation of CyEnterCriticalSection manipulates the IRQ enable bit\r
+;  with interrupts still enabled. The test and set of the interrupt bits is not\r
+;  atomic. Therefore, to avoid corrupting processor state, it must be the policy \r
+;  that all interrupt routines restore the interrupt enable bits as they were \r
+;  found on entry.\r
+;\r
+; Parameters:\r
+;  None\r
+;\r
+; Return:\r
+;  uint8\r
+;   Returns 0 if interrupts were previously enabled or 1 if interrupts\r
+;   were previously disabled.\r
+;\r
+;-------------------------------------------------------------------------------\r
+; uint8 CyEnterCriticalSection(void)\r
+\r
+CyEnterCriticalSection:\r
+    MRS r0, PRIMASK         ; Save and return interrupt state\r
+    CPSID I                 ; Disable interrupts\r
+    BX lr\r
+\r
+\r
+;-------------------------------------------------------------------------------\r
+; Function Name: CyExitCriticalSection\r
+;-------------------------------------------------------------------------------\r
+;\r
+; Summary:\r
+;  CyExitCriticalSection re-enables interrupts if they were enabled before\r
+;  CyEnterCriticalSection was called. The argument should be the value returned\r
+;  from CyEnterCriticalSection.\r
+;\r
+; Parameters:\r
+;  uint8 savedIntrStatus:\r
+;   Saved interrupt status returned by the CyEnterCriticalSection function.\r
+;\r
+; Return:\r
+;  None\r
+;\r
+;-------------------------------------------------------------------------------\r
+; void CyExitCriticalSection(uint8 savedIntrStatus)\r
+\r
+CyExitCriticalSection:\r
+    MSR PRIMASK, r0         ; Restore interrupt state\r
+    BX lr\r
+\r
+\r
+;-------------------------------------------------------------------------------\r
+; Function Name: CyDelayCycles\r
+;-------------------------------------------------------------------------------\r
+;\r
+; Summary:\r
+;  Delays for the specified number of cycles.\r
+;\r
+; Parameters:\r
+;  uint32 cycles: number of cycles to delay.\r
+;\r
+; Return:\r
+;  None\r
+;\r
+;-------------------------------------------------------------------------------\r
+; void CyDelayCycles(uint32 cycles)\r
+\r
+CyDelayCycles: \r
+    IF CYDEV_INSTRUCT_CACHE_ENABLED == 1\r
+                              ; cycles bytes\r
+    ADDS r0, r0, #2           ;   1   2  Round to nearest multiple of 4\r
+    LSRS r0, r0, #2           ;   1   2  Divide by 4 and set flags\r
+    BEQ CyDelayCycles_done    ;   2   2  Skip if 0\r
+    NOP                       ;   1   2  Loop alignment padding\r
+CyDelayCycles_loop:\r
+    SUBS r0, r0, #1           ;   1   2\r
+    MOV r0, r0                ;   1   2  Pad loop to power of two cycles\r
+    BNE CyDelayCycles_loop    ;   2   2\r
+CyDelayCycles_done:\r
+    BX lr                     ;   3   2\r
+    \r
+    ELSE\r
+    \r
+    CMP r0, #20               ;   1   2  If delay is short - jump to cycle\r
+    BLS CyDelayCycles_short   ;   1   2\r
+    PUSH {r1}                 ;   2   2  PUSH r1 to stack\r
+    MOVS r1, #1               ;   1   2\r
+\r
+    SUBS r0, r0, #20          ;   1   2  Subtract overhead\r
+    LDR r1,=CYREG_CACHE_CC_CTL;   2   2  Load flash wait cycles value\r
+    LDRB r1, [r1, #0]         ;   2   2\r
+    ANDS r1, r1, #0xC0        ;   1   2\r
+\r
+    LSRS r1, r1, #6           ;   1   2\r
+    PUSH {r2}                 ;   1   2  PUSH r2 to stack\r
+    LDR r2, =cy_flash_cycles  ;   2   2\r
+    LDRB r1, [r2, r1]         ;   2   2\r
+\r
+    POP {r2}                  ;   2   2  POP r2 from stack\r
+    NOP                       ;   1   2  Alignment padding\r
+    NOP                       ;   1   2  Alignment padding\r
+    NOP                       ;   1   2  Alignment padding\r
+\r
+CyDelayCycles_loop:\r
+    SBCS r0, r0, r1           ;   1   2\r
+    BPL CyDelayCycles_loop    ;   3   2\r
+    NOP                       ;   1   2  Loop alignment padding\r
+    NOP                       ;   1   2  Loop alignment padding\r
+\r
+    POP {r1}                  ;   2   2  POP r1 from stack\r
+CyDelayCycles_done:\r
+    BX lr                     ;   3   2\r
+    NOP                       ;   1   2  Alignment padding\r
+    NOP                       ;   1   2  Alignment padding\r
+CyDelayCycles_short:\r
+    SBCS r0, r0, #4           ;   1   2\r
+    BPL CyDelayCycles_short   ;   3   2\r
+    BX lr                     ;   3   2\r
+    NOP                       ;   1   2   Loop alignment padding\r
+\r
+    DATA\r
+cy_flash_cycles:\r
+byte_1 DCB 0x0B\r
+byte_2 DCB 0x05\r
+byte_3 DCB 0x07\r
+byte_4 DCB 0x09\r
+\r
+    ENDIF\r
+\r
+    END\r
index eff04c6..6c40635 100644 (file)
@@ -1,6 +1,6 @@
 ;-------------------------------------------------------------------------------\r
 ; FILENAME: CyBootAsmRv.s\r
-; Version 3.40\r
+; Version 4.0\r
 ;\r
 ;  DESCRIPTION:\r
 ;    Assembly routines for RealView.\r
 ; the software package with which this file was provided.\r
 ;-------------------------------------------------------------------------------\r
 \r
-       AREA |.text|,CODE,ALIGN=3\r
-       THUMB\r
-       EXTERN Reset\r
+    AREA |.text|,CODE,ALIGN=3\r
+    THUMB\r
+    EXTERN Reset\r
+\r
+    GET cyfitterrv.inc\r
 \r
 ;-------------------------------------------------------------------------------\r
 ; Function Name: CyDelayCycles\r
 ;\r
 ;-------------------------------------------------------------------------------\r
 ; void CyDelayCycles(uint32 cycles)\r
-       ALIGN 8\r
+    ALIGN 8\r
 CyDelayCycles FUNCTION\r
-       EXPORT CyDelayCycles\r
-                               ; cycles bytes\r
-       ADDS r0, r0, #2         ;       1       2       Round to nearest multiple of 4\r
-       LSRS r0, r0, #2         ;       1       2       Divide by 4 and set flags\r
-       BEQ CyDelayCycles_done  ;       2       2       Skip if 0\r
-       NOP                     ;       1       2       Loop alignment padding\r
+    EXPORT CyDelayCycles\r
+    IF CYDEV_INSTRUCT_CACHE_ENABLED == 1\r
+                              ; cycles bytes\r
+    ADDS r0, r0, #2           ;   1   2  Round to nearest multiple of 4\r
+    LSRS r0, r0, #2           ;   1   2  Divide by 4 and set flags\r
+    BEQ CyDelayCycles_done    ;   2   2  Skip if 0\r
+    NOP                       ;   1   2  Loop alignment padding\r
 CyDelayCycles_loop\r
-       SUBS r0, r0, #1         ;       1       2\r
-       MOV r0, r0              ;       1       2       Pad loop to power of two cycles\r
-       BNE CyDelayCycles_loop  ;       2       2\r
+    SUBS r0, r0, #1           ;   1   2\r
+    MOV r0, r0                ;   1   2  Pad loop to power of two cycles\r
+    BNE CyDelayCycles_loop    ;   2   2\r
+    NOP                       ;   1   2  Loop alignment padding\r
 CyDelayCycles_done\r
-       BX lr                   ;       3       2\r
-       ENDFUNC\r
+    BX lr                     ;   3   2\r
+\r
+    ELSE\r
+\r
+    CMP r0, #20               ;   1   2  If delay is short - jump to cycle\r
+    BLS CyDelayCycles_short   ;   1   2\r
+    PUSH {r1}                 ;   2   2  PUSH r1 to stack\r
+    MOVS r1, #1               ;   1   2\r
+\r
+    SUBS r0, r0, #20          ;   1   2  Subtract overhead\r
+    LDR r1,=CYREG_CACHE_CC_CTL;   2   2  Load flash wait cycles value\r
+    LDRB r1, [r1, #0]         ;   2   2\r
+    ANDS r1, #0xC0            ;   1   2\r
+\r
+    LSRS r1, r1, #6           ;   1   2\r
+    PUSH {r2}                 ;   1   2  PUSH r2 to stack\r
+    LDR r2, =cy_flash_cycles  ;   2   2\r
+    LDRB r1, [r2, r1]         ;   2   2\r
+\r
+    POP {r2}                  ;   2   2  POP r2 from stack\r
+    NOP                       ;   1   2  Alignment padding\r
+    NOP                       ;   1   2  Alignment padding\r
+    NOP                       ;   1   2  Alignment padding\r
+\r
+CyDelayCycles_loop\r
+    SBCS r0, r0, r1           ;   1   2\r
+    BPL CyDelayCycles_loop    ;   3   2\r
+    NOP                       ;   1   2  Loop alignment padding\r
+    NOP                       ;   1   2  Loop alignment padding\r
+\r
+    POP {r1}                  ;   2   2  POP r1 from stack\r
+CyDelayCycles_done\r
+    BX lr                     ;   3   2\r
+    NOP                       ;   1   2  Alignment padding\r
+    NOP                       ;   1   2  Alignment padding\r
+\r
+CyDelayCycles_short\r
+    SBCS r0, r0, #4           ;   1   2\r
+    BPL CyDelayCycles_short   ;   3   2\r
+    BX lr                     ;   3   2\r
+\r
+cy_flash_cycles\r
+byte_1 DCB 0x0B\r
+byte_2 DCB 0x05\r
+byte_3 DCB 0x07\r
+byte_4 DCB 0x09\r
+\r
+    ENDIF\r
+    ENDFUNC\r
 \r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -74,11 +125,11 @@ CyDelayCycles_done
 ;-------------------------------------------------------------------------------\r
 ; uint8 CyEnterCriticalSection(void)\r
 CyEnterCriticalSection FUNCTION\r
-       EXPORT CyEnterCriticalSection\r
-       MRS r0, PRIMASK         ; Save and return interrupt state\r
-       CPSID I                 ; Disable interrupts\r
-       BX lr\r
-       ENDFUNC\r
+    EXPORT CyEnterCriticalSection\r
+    MRS r0, PRIMASK         ; Save and return interrupt state\r
+    CPSID I                 ; Disable interrupts\r
+    BX lr\r
+    ENDFUNC\r
 \r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -100,11 +151,11 @@ CyEnterCriticalSection FUNCTION
 ;-------------------------------------------------------------------------------\r
 ; void CyExitCriticalSection(uint8 savedIntrStatus)\r
 CyExitCriticalSection FUNCTION\r
-       EXPORT CyExitCriticalSection\r
-       MSR PRIMASK, r0         ; Restore interrupt state\r
-       BX lr\r
-       ENDFUNC\r
+    EXPORT CyExitCriticalSection\r
+    MSR PRIMASK, r0         ; Restore interrupt state\r
+    BX lr\r
+    ENDFUNC\r
 \r
-       END\r
+    END\r
 \r
 ; [] END OF FILE\r
index e5922f6..f4983c3 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CyDmac.c\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 * Description:\r
 *  Provides an API for the DMAC component. The API includes functions for the\r
 \r
 #include "CyDmac.h"\r
 \r
-static uint8  CyDmaTdCurrentNumber;                      /* Current Number of free elements in the list */\r
-static uint8  CyDmaTdFreeIndex;                          /* Index of the first available TD */\r
-static uint32 CyDmaChannels = DMA_CHANNELS_USED__MASK0;  /* Bit map of DMA channel ownership */\r
+\r
+/*******************************************************************************\r
+* The following variables are initialized from CyDmacConfigure() function that\r
+* is executed from initialize_psoc() at the early initialization stage.\r
+* In case of IAR EW IDE, initialize_psoc() is executed before the data sections\r
+* are initialized. To avoid zeroing, these variables should be initialized\r
+* properly during segments initialization as well.\r
+*******************************************************************************/\r
+static uint8  CyDmaTdCurrentNumber = CY_DMA_NUMBEROF_TDS;           /* Current Number of free elements in the list */\r
+static uint8  CyDmaTdFreeIndex = (uint8)(CY_DMA_NUMBEROF_TDS - 1u); /* Index of the first available TD */\r
+static uint32 CyDmaChannels = DMA_CHANNELS_USED__MASK0;              /* Bit map of DMA channel ownership */\r
 \r
 \r
 /*******************************************************************************\r
@@ -55,13 +63,13 @@ void CyDmacConfigure(void)
     uint8 dmaIndex;\r
 \r
     /* Set TD list variables. */\r
-    CyDmaTdFreeIndex     = ((uint8) (CY_DMA_NUMBEROF_TDS - 1u));\r
+    CyDmaTdFreeIndex     = (uint8)(CY_DMA_NUMBEROF_TDS - 1u);\r
     CyDmaTdCurrentNumber = CY_DMA_NUMBEROF_TDS;\r
 \r
     /* Make TD free list. */\r
-    for(dmaIndex = ((uint8)(CY_DMA_NUMBEROF_TDS - 1u)); dmaIndex != 0u; dmaIndex--)\r
+    for(dmaIndex = (uint8)(CY_DMA_NUMBEROF_TDS - 1u); dmaIndex != 0u; dmaIndex--)\r
     {\r
-        CY_DMA_TDMEM_STRUCT_PTR[dmaIndex].TD0[0u] = ((uint8)(dmaIndex - 1u));\r
+        CY_DMA_TDMEM_STRUCT_PTR[dmaIndex].TD0[0u] = (uint8)(dmaIndex - 1u);\r
     }\r
 \r
     /* Make the last one point to zero. */\r
@@ -299,8 +307,22 @@ cystatus CyDmaChEnable(uint8 chHandle, uint8 preserveTds)
 \r
     if(chHandle < CY_DMA_NUMBEROF_CHANNELS)\r
     {\r
-        CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] =\r
-                (CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] & ((uint8)(~0x20u))) | ((0u != preserveTds) ? 0x21u : 0x01u);\r
+        if (0u != preserveTds)\r
+        {\r
+            /* Store the intermediate TD states separately in CHn_SEP_TD0/1 to\r
+            *  preserve the original TD chain\r
+            */\r
+            CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] |= CY_DMA_CH_BASIC_CFG_WORK_SEP;\r
+        }\r
+        else\r
+        {\r
+            /* Store the intermediate and final TD states on top of the original TD chain */\r
+            CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] &= (uint8)(~CY_DMA_CH_BASIC_CFG_WORK_SEP);\r
+        }\r
+\r
+        /* Enable channel */\r
+        CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] |= CY_DMA_CH_BASIC_CFG_EN;\r
+\r
         status = CYRET_SUCCESS;\r
     }\r
 \r
@@ -335,7 +357,16 @@ cystatus CyDmaChDisable(uint8 chHandle)
 \r
     if(chHandle < CY_DMA_NUMBEROF_CHANNELS)\r
     {\r
-        CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0] &= ((uint8) (~0x21u));\r
+        /***********************************************************************\r
+        * Should not change configuration information of a DMA channel when it\r
+        * is active (or vulnerable to becoming active).\r
+        ***********************************************************************/\r
+\r
+        /* Disable channel */\r
+        CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0] &= ((uint8) (~CY_DMA_CH_BASIC_CFG_EN));\r
+\r
+        /* Store the intermediate and final TD states on top of the original TD chain */\r
+        CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0] &= ((uint8) (~CY_DMA_CH_BASIC_CFG_WORK_SEP));\r
         status = CYRET_SUCCESS;\r
     }\r
 \r
@@ -440,6 +471,7 @@ cystatus CyDmaChSetExtendedAddress(uint8 chHandle, uint16 source, uint16 destina
     \r
 {\r
     cystatus status = CYRET_BAD_PARAM;\r
+    reg16 *convert;\r
 \r
     #if(CY_PSOC5)\r
 \r
@@ -460,11 +492,12 @@ cystatus CyDmaChSetExtendedAddress(uint8 chHandle, uint16 source, uint16 destina
     if(chHandle < CY_DMA_NUMBEROF_CHANNELS)\r
     {\r
         /* Set source address */\r
-        reg16 *convert = (reg16 *) &CY_DMA_CFGMEM_STRUCT_PTR[chHandle].CFG1[0];\r
+        convert = (reg16 *) &CY_DMA_CFGMEM_STRUCT_PTR[chHandle].CFG1[0];\r
         CY_SET_REG16(convert, source);\r
 \r
         /* Set destination address */\r
-        CY_SET_REG16((reg16 *) &CY_DMA_CFGMEM_STRUCT_PTR[chHandle].CFG1[2], destination);\r
+        convert = (reg16 *) &CY_DMA_CFGMEM_STRUCT_PTR[chHandle].CFG1[2u];\r
+        CY_SET_REG16(convert, destination);\r
         status = CYRET_SUCCESS;\r
     }\r
 \r
@@ -570,7 +603,7 @@ cystatus CyDmaChGetRequest(uint8 chHandle)
 \r
     if(chHandle < CY_DMA_NUMBEROF_CHANNELS)\r
     {\r
-        status = (cystatus) ((uint32)CY_DMA_CH_STRUCT_PTR[chHandle].action[0u] & \r
+        status = (cystatus) ((uint32)CY_DMA_CH_STRUCT_PTR[chHandle].action[0u] &\r
                             (uint32)(CY_DMA_CPU_REQ | CY_DMA_CPU_TERM_TD | CY_DMA_CPU_TERM_CHAIN));\r
     }\r
 \r
@@ -977,15 +1010,17 @@ cystatus CyDmaTdGetConfiguration(uint8 tdHandle, uint16 * transferCount, uint8 *
 cystatus CyDmaTdSetAddress(uint8 tdHandle, uint16 source, uint16 destination) \r
 {\r
     cystatus status = CYRET_BAD_PARAM;\r
+    reg16 *convert;\r
 \r
     if(tdHandle < CY_DMA_NUMBEROF_TDS)\r
     {\r
         /* Set source address */\r
-        reg16 *convert = (reg16 *) &CY_DMA_TDMEM_STRUCT_PTR[tdHandle].TD1[0];\r
+        convert = (reg16 *) &CY_DMA_TDMEM_STRUCT_PTR[tdHandle].TD1[0u];\r
         CY_SET_REG16(convert, source);\r
 \r
         /* Set destination address */\r
-        CY_SET_REG16((reg16 *) &CY_DMA_TDMEM_STRUCT_PTR[tdHandle].TD1[2], destination);\r
+        convert = (reg16 *) &CY_DMA_TDMEM_STRUCT_PTR[tdHandle].TD1[2u];\r
+        CY_SET_REG16(convert, destination);\r
 \r
         status = CYRET_SUCCESS;\r
     }\r
@@ -1023,6 +1058,7 @@ cystatus CyDmaTdSetAddress(uint8 tdHandle, uint16 source, uint16 destination)
 cystatus CyDmaTdGetAddress(uint8 tdHandle, uint16 * source, uint16 * destination) \r
 {\r
     cystatus status = CYRET_BAD_PARAM;\r
+    reg16 *convert;\r
 \r
     if(tdHandle < CY_DMA_NUMBEROF_TDS)\r
     {\r
@@ -1030,7 +1066,7 @@ cystatus CyDmaTdGetAddress(uint8 tdHandle, uint16 * source, uint16 * destination
         if(NULL != source)\r
         {\r
             /* Get source address */\r
-            reg16 *convert = (reg16 *) &CY_DMA_TDMEM_STRUCT_PTR[tdHandle].TD1[0];\r
+            convert = (reg16 *) &CY_DMA_TDMEM_STRUCT_PTR[tdHandle].TD1[0u];\r
             *source = CY_GET_REG16(convert);\r
         }\r
 \r
@@ -1038,7 +1074,8 @@ cystatus CyDmaTdGetAddress(uint8 tdHandle, uint16 * source, uint16 * destination
         if(NULL != destination)\r
         {\r
             /* Get Destination address. */\r
-            *destination = CY_GET_REG16((reg16 *) &CY_DMA_TDMEM_STRUCT_PTR[tdHandle].TD1[2]);\r
+            convert = (reg16 *) &CY_DMA_TDMEM_STRUCT_PTR[tdHandle].TD1[2u];\r
+            *destination = CY_GET_REG16(convert);\r
         }\r
 \r
         status = CYRET_SUCCESS;\r
@@ -1075,9 +1112,14 @@ cystatus CyDmaChRoundRobin(uint8 chHandle, uint8 enableRR)
 \r
     if(chHandle < CY_DMA_NUMBEROF_CHANNELS)\r
     {\r
-        CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] =\r
-                (CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] &  ((uint8)(~CY_DMA_ROUND_ROBIN_ENABLE))) |\r
-                ((0u != enableRR) ? CY_DMA_ROUND_ROBIN_ENABLE : ((uint8)(~CY_DMA_ROUND_ROBIN_ENABLE)));\r
+        if (0u != enableRR)\r
+        {\r
+            CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] |= (uint8)CY_DMA_ROUND_ROBIN_ENABLE;\r
+        }\r
+        else\r
+        {\r
+            CY_DMA_CH_STRUCT_PTR[chHandle].basic_cfg[0u] &= (uint8)(~CY_DMA_ROUND_ROBIN_ENABLE);\r
+        }\r
 \r
         status = CYRET_SUCCESS;\r
     }\r
index 82b5b1b..6a3ee85 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CyDmac.h\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 *  Description:\r
 *   Provides the function definitions for the DMA Controller.\r
@@ -43,20 +43,24 @@ cystatus CyDmaChEnable(uint8 chHandle, uint8 preserveTds) ;
 cystatus CyDmaChDisable(uint8 chHandle) ;\r
 cystatus CyDmaClearPendingDrq(uint8 chHandle) ;\r
 cystatus CyDmaChPriority(uint8 chHandle, uint8 priority) ;\r
-cystatus CyDmaChSetExtendedAddress(uint8 chHandle, uint16 source, uint16 destination);\r
+cystatus CyDmaChSetExtendedAddress(uint8 chHandle, uint16 source, uint16 destination)\\r
+;\r
 cystatus CyDmaChSetInitialTd(uint8 chHandle, uint8 startTd) ;\r
 cystatus CyDmaChSetRequest(uint8 chHandle, uint8 request) ;\r
 cystatus CyDmaChGetRequest(uint8 chHandle) ;\r
 cystatus CyDmaChStatus(uint8 chHandle, uint8 * currentTd, uint8 * state) ;\r
-cystatus CyDmaChSetConfiguration(uint8 chHandle, uint8 burstCount, uint8 requestPerBurst, uint8 tdDone0, uint8 tdDone1, uint8 tdStop) ;\r
+cystatus CyDmaChSetConfiguration(uint8 chHandle, uint8 burstCount, uint8 requestPerBurst, uint8 tdDone0,\r
+                                 uint8 tdDone1, uint8 tdStop) ;\r
 cystatus CyDmaChRoundRobin(uint8 chHandle, uint8 enableRR) ;\r
 \r
 /* Transfer Descriptor functions. */\r
 uint8    CyDmaTdAllocate(void) ;\r
 void     CyDmaTdFree(uint8 tdHandle) ;\r
 uint8    CyDmaTdFreeCount(void) ;\r
-cystatus CyDmaTdSetConfiguration(uint8 tdHandle, uint16 transferCount, uint8 nextTd, uint8 configuration) ;\r
-cystatus CyDmaTdGetConfiguration(uint8 tdHandle, uint16 * transferCount, uint8 * nextTd, uint8 * configuration) ;\r
+cystatus CyDmaTdSetConfiguration(uint8 tdHandle, uint16 transferCount, uint8 nextTd, uint8 configuration)\\r
+;\r
+cystatus CyDmaTdGetConfiguration(uint8 tdHandle, uint16 * transferCount, uint8 * nextTd, uint8 * configuration)\\r
+;\r
 cystatus CyDmaTdSetAddress(uint8 tdHandle, uint16 source, uint16 destination) ;\r
 cystatus CyDmaTdGetAddress(uint8 tdHandle, uint16 * source, uint16 * destination) ;\r
 \r
@@ -108,10 +112,7 @@ typedef struct dmac_tdmem2_struct
 #define CY_DMA_INVALID_CHANNEL      0xFFu   /* Invalid Channel ID */\r
 #define CY_DMA_INVALID_TD           0xFFu   /* Invalid TD */\r
 #define CY_DMA_END_CHAIN_TD         0xFFu   /* End of chain TD */\r
-\r
-#if(CY_PSOC3 || CY_PSOC5LP)\r
-    #define CY_DMA_DISABLE_TD       0xFEu\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+#define CY_DMA_DISABLE_TD           0xFEu\r
 \r
 #define CY_DMA_TD_SIZE              0x08u\r
 \r
@@ -146,6 +147,13 @@ typedef struct dmac_tdmem2_struct
 #define CY_DMA_ROUND_ROBIN_ENABLE   ((uint8)(1u << 4u))\r
 \r
 \r
+/*******************************************************************************\r
+* CyDmaChEnable() / CyDmaChDisable() API constants\r
+*******************************************************************************/\r
+#define CY_DMA_CH_BASIC_CFG_EN           (0x01u)\r
+#define CY_DMA_CH_BASIC_CFG_WORK_SEP     (0x20u)\r
+\r
+\r
 /***************************************\r
 * Registers\r
 ***************************************/\r
@@ -195,9 +203,7 @@ typedef struct dmac_tdmem2_struct
 #define DMAC_UNPOP_ACC              (CY_DMA_UNPOP_ACC)\r
 #define DMAC_PERIPH_ERR             (CY_DMA_PERIPH_ERR)\r
 #define ROUND_ROBIN_ENABLE          (CY_DMA_ROUND_ROBIN_ENABLE)\r
-#if(CY_PSOC3 || CY_PSOC5LP)\r
-    #define DMA_DISABLE_TD          (CY_DMA_DISABLE_TD)\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+#define DMA_DISABLE_TD              (CY_DMA_DISABLE_TD)\r
 \r
 #define DMAC_CFG                    (CY_DMA_CFG_PTR)\r
 #define DMAC_ERR                    (CY_DMA_ERR_PTR)\r
index 217f44a..e692e66 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CyFlash.c\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 *  Description:\r
 *   Provides an API for the FLASH/EEPROM.\r
@@ -42,10 +42,7 @@ static cystatus CySetTempInt(void);
 ********************************************************************************\r
 *\r
 * Summary:\r
-*  Enable the EEPROM/Flash.\r
-*\r
-*  Note: For PSoC 5, this will enable both Flash and EEPROM. For PSoC 3 and\r
-*  PSOC 5LP  this will enable only Flash.\r
+*  Enable the Flash.\r
 *\r
 * Parameters:\r
 *  None\r
@@ -56,25 +53,11 @@ static cystatus CySetTempInt(void);
 *******************************************************************************/\r
 void CyFlash_Start(void) \r
 {\r
-    #if(CY_PSOC5A)\r
-\r
-        /* Active Power Mode */\r
-        *CY_FLASH_PM_ACT_EEFLASH_PTR |= CY_FLASH_PM_FLASH_EE_MASK;\r
-\r
-        /* Standby Power Mode */\r
-        *CY_FLASH_PM_ALTACT_EEFLASH_PTR |= CY_FLASH_PM_FLASH_EE_MASK;\r
-\r
-    #endif  /* (CY_PSOC5A) */\r
-\r
-    #if(CY_PSOC3 || CY_PSOC5LP)\r
+    /* Active Power Mode */\r
+    *CY_FLASH_PM_ACT_EEFLASH_PTR |= CY_FLASH_PM_FLASH_MASK;\r
 \r
-        /* Active Power Mode */\r
-        *CY_FLASH_PM_ACT_EEFLASH_PTR |= CY_FLASH_PM_FLASH_MASK;\r
-\r
-        /* Standby Power Mode */\r
-        *CY_FLASH_PM_ALTACT_EEFLASH_PTR |= CY_FLASH_PM_FLASH_MASK;\r
-\r
-    #endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+    /* Standby Power Mode */\r
+    *CY_FLASH_PM_ALTACT_EEFLASH_PTR |= CY_FLASH_PM_FLASH_MASK;\r
 \r
     CyDelayUs(CY_FLASH_EE_STARTUP_DELAY);\r
 }\r
@@ -85,11 +68,7 @@ void CyFlash_Start(void)
 ********************************************************************************\r
 *\r
 * Summary:\r
-*  Disable the EEPROM/Flash.\r
-*\r
-*  Note:\r
-*  PSoC 5: disable both Flash and EEPROM.\r
-*  PSoC 3 and PSOC 5LP: disable only Flash. Use CyEEPROM_Stop() to stop EEPROM.\r
+*  Disable the Flash.\r
 *\r
 * Parameters:\r
 *  None\r
@@ -104,25 +83,11 @@ void CyFlash_Start(void)
 *******************************************************************************/\r
 void CyFlash_Stop(void) \r
 {\r
-    #if (CY_PSOC5A)\r
+    /* Active Power Mode */\r
+    *CY_FLASH_PM_ACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_FLASH_MASK));\r
 \r
-        /* Active Power Mode */\r
-        *CY_FLASH_PM_ACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_FLASH_EE_MASK));\r
-\r
-        /* Standby Power Mode */\r
-        *CY_FLASH_PM_ALTACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_FLASH_EE_MASK));\r
-\r
-    #endif  /* (CY_PSOC5A) */\r
-\r
-    #if (CY_PSOC3 || CY_PSOC5LP)\r
-\r
-        /* Active Power Mode */\r
-        *CY_FLASH_PM_ACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_FLASH_MASK));\r
-\r
-        /* Standby Power Mode */\r
-        *CY_FLASH_PM_ALTACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_FLASH_MASK));\r
-\r
-    #endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+    /* Standby Power Mode */\r
+    *CY_FLASH_PM_ALTACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_FLASH_MASK));\r
 }\r
 \r
 \r
@@ -158,30 +123,26 @@ static cystatus CySetTempInt(void)
     if(CySpcLock() == CYRET_SUCCESS)\r
     {\r
         /* Write the command. */\r
-        #if(CY_PSOC5A)\r
-            if(CYRET_STARTED == CySpcGetTemp(CY_TEMP_NUMBER_OF_SAMPLES, CY_TEMP_TIMER_PERIOD, CY_TEMP_CLK_DIV_SELECT))\r
-        #else\r
-            if(CYRET_STARTED == CySpcGetTemp(CY_TEMP_NUMBER_OF_SAMPLES))\r
-        #endif  /* (CY_PSOC5A) */\r
+        if(CYRET_STARTED == CySpcGetTemp(CY_TEMP_NUMBER_OF_SAMPLES))\r
+        {\r
+            do\r
             {\r
-                do\r
+                if(CySpcReadData(dieTemperature, CY_FLASH_DIE_TEMP_DATA_SIZE) == CY_FLASH_DIE_TEMP_DATA_SIZE)\r
                 {\r
-                    if(CySpcReadData(dieTemperature, CY_FLASH_DIE_TEMP_DATA_SIZE) == CY_FLASH_DIE_TEMP_DATA_SIZE)\r
-                    {\r
-                        status = CYRET_SUCCESS;\r
+                    status = CYRET_SUCCESS;\r
 \r
-                        while(CY_SPC_BUSY)\r
-                        {\r
-                            /* Spin until idle. */\r
-                            CyDelayUs(1u);\r
-                        }\r
-                        break;\r
+                    while(CY_SPC_BUSY)\r
+                    {\r
+                        /* Spin until idle. */\r
+                        CyDelayUs(1u);\r
                     }\r
+                    break;\r
+                }\r
 \r
-                } while(CY_SPC_BUSY);\r
-            }\r
+            } while(CY_SPC_BUSY);\r
+        }\r
 \r
-            CySpcUnlock();\r
+        CySpcUnlock();\r
     }\r
     else\r
     {\r
@@ -288,15 +249,17 @@ cystatus CySetFlashEEBuffer(uint8 * buffer)
     ********************************************************************************\r
     *\r
     * Summary:\r
-    *   Sends a command to the SPC to load and program a row of data in flash.\r
+    *  Sends a command to the SPC to load and program a row of data in\r
+    *  Flash or EEPROM.\r
     *\r
     * Parameters:\r
-    *  arrayID:\r
-    *   ID of the array to write.\r
-    *  rowAddress:\r
-    *   rowAddress of flash row to program.\r
-    *  rowData:\r
-    *   Array of bytes to write.\r
+    *  arrayID:    ID of the array to write.\r
+    *   The type of write, Flash or EEPROM, is determined from the array ID.\r
+    *   The arrays in the part are sequential starting at the first ID for the\r
+    *   specific memory type. The array ID for the Flash memory lasts from 0x00 to\r
+    *   0x3F and for the EEPROM memory it lasts from 0x40 to 0x7F.\r
+    *  rowAddress: rowAddress of flash row to program.\r
+    *  rowData:    Array of bytes to write.\r
     *\r
     * Return:\r
     *  status:\r
@@ -324,10 +287,15 @@ cystatus CySetFlashEEBuffer(uint8 * buffer)
     ********************************************************************************\r
     *\r
     * Summary:\r
-    *   Sends a command to the SPC to load and program a row of data in flash.\r
+    *   Sends a command to the SPC to load and program a row of data in\r
+    *   Flash or EEPROM.\r
     *\r
     * Parameters:\r
     *  arrayID      : ID of the array to write.\r
+    *   The type of write, Flash or EEPROM, is determined from the array ID.\r
+    *   The arrays in the part are sequential starting at the first ID for the\r
+    *   specific memory type. The array ID for the Flash memory lasts from 0x00 to\r
+    *   0x3F and for the EEPROM memory it lasts from 0x40 to 0x7F.\r
     *  rowAddress   : rowAddress of flash row to program.\r
     *  rowData      : Array of bytes to write.\r
     *\r
@@ -346,30 +314,41 @@ cystatus CySetFlashEEBuffer(uint8 * buffer)
         uint16 rowSize;\r
         cystatus status;\r
 \r
-        rowSize = (arrayId > CY_SPC_LAST_FLASH_ARRAYID) ? \\r
-                    CYDEV_EEPROM_ROW_SIZE : \\r
-                    (CYDEV_FLS_ROW_SIZE + CYDEV_ECC_ROW_SIZE);\r
-\r
-        if(rowSize != CYDEV_EEPROM_ROW_SIZE)\r
+        /* Check whether rowBuffer pointer has been initialized by CySetFlashEEBuffer() */\r
+        if(NULL != rowBuffer)\r
         {\r
-            /* Save the ECC area. */\r
-            offset = CYDEV_ECC_BASE + ((uint32) arrayId * CYDEV_ECC_SECTOR_SIZE) +\r
-                    ((uint32) rowAddress * CYDEV_ECC_ROW_SIZE);\r
-\r
-            for (i = 0u; i < CYDEV_ECC_ROW_SIZE; i++)\r
+            if(arrayId > CY_SPC_LAST_FLASH_ARRAYID)\r
             {\r
-                *(rowBuffer + CYDEV_FLS_ROW_SIZE + i) = CY_GET_XTND_REG8((void CYFAR *)(offset + i));\r
+                rowSize = CYDEV_EEPROM_ROW_SIZE;\r
             }\r
-        }\r
+            else\r
+            {\r
+                rowSize = CYDEV_FLS_ROW_SIZE + CYDEV_ECC_ROW_SIZE;\r
 \r
-        /* Copy the rowdata to the temporary buffer. */\r
+                /* Save the ECC area. */\r
+                offset = CYDEV_ECC_BASE +\r
+                        ((uint32)arrayId * CYDEV_ECC_SECTOR_SIZE) +\r
+                        ((uint32)rowAddress * CYDEV_ECC_ROW_SIZE);\r
+\r
+                for(i = 0u; i < CYDEV_ECC_ROW_SIZE; i++)\r
+                {\r
+                    *(rowBuffer + CYDEV_FLS_ROW_SIZE + i) = CY_GET_XTND_REG8((void CYFAR *)(offset + i));\r
+                }\r
+            }\r
+\r
+            /* Copy the rowdata to the temporary buffer. */\r
         #if(CY_PSOC3)\r
             (void) memcpy((void *) rowBuffer, (void *)((uint32) rowData), (int16) CYDEV_FLS_ROW_SIZE);\r
         #else\r
             (void) memcpy((void *) rowBuffer, (const void *) rowData, CYDEV_FLS_ROW_SIZE);\r
         #endif  /* (CY_PSOC3) */\r
 \r
-        status = CyWriteRowFull(arrayId, rowAddress, rowBuffer, rowSize);\r
+            status = CyWriteRowFull(arrayId, rowAddress, rowBuffer, rowSize);\r
+        }\r
+        else\r
+        {\r
+            status = CYRET_UNKNOWN;\r
+        }\r
 \r
         return(status);\r
     }\r
@@ -388,12 +367,12 @@ cystatus CySetFlashEEBuffer(uint8 * buffer)
     *  This function is only valid for Flash array IDs (not for EEPROM).\r
     *\r
     * Parameters:\r
-    *  arrayId:\r
-    *   ID of the array to write\r
-    *  rowAddress:\r
-    *   Address of the sector to erase.\r
-    *  rowECC:\r
-    *   Array of bytes to write.\r
+    *  arrayId:      ID of the array to write\r
+    *   The arrays in the part are sequential starting at the first ID for the\r
+    *   specific memory type. The array ID for the Flash memory lasts\r
+    *   from 0x00 to 0x3F.\r
+    *  rowAddress:   Address of the sector to erase.\r
+    *  rowECC:       Array of bytes to write.\r
     *\r
     * Return:\r
     *  status:\r
@@ -403,32 +382,45 @@ cystatus CySetFlashEEBuffer(uint8 * buffer)
     *   CYRET_UNKNOWN if there was an SPC error.\r
     *\r
     *******************************************************************************/\r
-    cystatus CyWriteRowConfig(uint8 arrayId, uint16 rowAddress, const uint8 * rowECC) \r
+    cystatus CyWriteRowConfig(uint8 arrayId, uint16 rowAddress, const uint8 * rowECC)\\r
+    \r
     {\r
         uint32 offset;\r
         uint16 i;\r
         cystatus status;\r
 \r
-        /* Read the existing flash data. */\r
-        offset = ((uint32) arrayId * CYDEV_FLS_SECTOR_SIZE) +\r
-            ((uint32) rowAddress * CYDEV_FLS_ROW_SIZE);\r
-            \r
-        #if (CYDEV_FLS_BASE != 0u)\r
-            offset += CYDEV_FLS_BASE;\r
-        #endif\r
-\r
-        for (i = 0u; i < CYDEV_FLS_ROW_SIZE; i++)\r
+        /* Check whether rowBuffer pointer has been initialized by CySetFlashEEBuffer() */\r
+        if(NULL != rowBuffer)\r
         {\r
-            rowBuffer[i] = CY_GET_XTND_REG8((void CYFAR *)(offset + i));\r
-        }\r
+            /* Read the existing flash data. */\r
+            offset = ((uint32)arrayId * CYDEV_FLS_SECTOR_SIZE) +\r
+                     ((uint32)rowAddress * CYDEV_FLS_ROW_SIZE);\r
 \r
-        #if(CY_PSOC3)\r
-            (void) memcpy((void *) &rowBuffer[CYDEV_FLS_ROW_SIZE], (void *)((uint32)rowECC), (int16) CYDEV_ECC_ROW_SIZE);\r
-        #else\r
-            (void) memcpy((void *) &rowBuffer[CYDEV_FLS_ROW_SIZE], (const void *) rowECC, CYDEV_ECC_ROW_SIZE);\r
-        #endif  /* (CY_PSOC3) */\r
+            #if (CYDEV_FLS_BASE != 0u)\r
+                offset += CYDEV_FLS_BASE;\r
+            #endif  /* (CYDEV_FLS_BASE != 0u) */\r
 \r
-        status = CyWriteRowFull(arrayId, rowAddress, rowBuffer, CYDEV_FLS_ROW_SIZE + CYDEV_ECC_ROW_SIZE);\r
+            for (i = 0u; i < CYDEV_FLS_ROW_SIZE; i++)\r
+            {\r
+                rowBuffer[i] = CY_GET_XTND_REG8((void CYFAR *)(offset + i));\r
+            }\r
+\r
+            #if(CY_PSOC3)\r
+                (void) memcpy((void *)&rowBuffer[CYDEV_FLS_ROW_SIZE],\r
+                              (void *)(uint32)rowECC,\r
+                              (int16)CYDEV_ECC_ROW_SIZE);\r
+            #else\r
+                (void) memcpy((void *)&rowBuffer[CYDEV_FLS_ROW_SIZE],\r
+                              (const void *)rowECC,\r
+                              CYDEV_ECC_ROW_SIZE);\r
+            #endif  /* (CY_PSOC3) */\r
+\r
+            status = CyWriteRowFull(arrayId, rowAddress, rowBuffer, CYDEV_FLS_ROW_SIZE + CYDEV_ECC_ROW_SIZE);\r
+        }\r
+        else\r
+        {\r
+            status = CYRET_UNKNOWN;\r
+        }\r
 \r
         return (status);\r
     }\r
@@ -441,20 +433,20 @@ cystatus CySetFlashEEBuffer(uint8 * buffer)
 * Function Name: CyWriteRowFull\r
 ********************************************************************************\r
 * Summary:\r
-*   Sends a command to the SPC to load and program a row of data in flash.\r
-*   rowData array is expected to contain Flash and ECC data if needed.\r
+*  Sends a command to the SPC to load and program a row of data in flash.\r
+*  rowData array is expected to contain Flash and ECC data if needed.\r
 *\r
 * Parameters:\r
-*       arrayId: FLASH or EEPROM array id.\r
-*       rowData: pointer to a row of data to write.\r
-*       rowNumber: Zero based number of the row.\r
-*       rowSize: Size of the row.\r
+*  arrayId:    FLASH or EEPROM array id.\r
+*  rowData:    Pointer to a row of data to write.\r
+*  rowNumber:  Zero based number of the row.\r
+*  rowSize:    Size of the row.\r
 *\r
 * Return:\r
-*   CYRET_SUCCESS if successful.\r
-*   CYRET_LOCKED if the SPC is already in use.\r
-*   CYRET_CANCELED if command not accepted\r
-*   CYRET_UNKNOWN if there was an SPC error.\r
+*  CYRET_SUCCESS if successful.\r
+*  CYRET_LOCKED if the SPC is already in use.\r
+*  CYRET_CANCELED if command not accepted\r
+*  CYRET_UNKNOWN if there was an SPC error.\r
 *\r
 *******************************************************************************/\r
 cystatus CyWriteRowFull(uint8 arrayId, uint16 rowNumber, const uint8* rowData, uint16 rowSize) \\r
@@ -575,7 +567,7 @@ void CyFlash_SetWaitCycles(uint8 freq)
     #endif  /* (CY_PSOC3) */\r
 \r
 \r
-    #if (CY_PSOC5A)\r
+    #if (CY_PSOC5)\r
 \r
         if (freq <= 16u)\r
         {\r
@@ -598,89 +590,59 @@ void CyFlash_SetWaitCycles(uint8 freq)
                 ((uint8)(CY_FLASH_GREATER_51MHz << CY_FLASH_CYCLES_MASK_SHIFT)));\r
         }\r
 \r
-    #endif  /* (CY_PSOC5A) */\r
-\r
-\r
-    #if (CY_PSOC5LP)\r
-\r
-        if (freq <= 16u)\r
-        {\r
-            *CY_FLASH_CONTROL_PTR = ((*CY_FLASH_CONTROL_PTR & ((uint8)(~CY_FLASH_CYCLES_MASK))) |\r
-                ((uint8)(CY_FLASH_LESSER_OR_EQUAL_16MHz << CY_FLASH_CYCLES_MASK_SHIFT)));\r
-        }\r
-        else if (freq <= 33u)\r
-        {\r
-            *CY_FLASH_CONTROL_PTR = ((*CY_FLASH_CONTROL_PTR & ((uint8)(~CY_FLASH_CYCLES_MASK))) |\r
-                ((uint8)(CY_FLASH_LESSER_OR_EQUAL_33MHz << CY_FLASH_CYCLES_MASK_SHIFT)));\r
-        }\r
-        else if (freq <= 50u)\r
-        {\r
-            *CY_FLASH_CONTROL_PTR = ((*CY_FLASH_CONTROL_PTR & ((uint8)(~CY_FLASH_CYCLES_MASK))) |\r
-                ((uint8)(CY_FLASH_LESSER_OR_EQUAL_50MHz << CY_FLASH_CYCLES_MASK_SHIFT)));\r
-        }\r
-        else\r
-        {\r
-            *CY_FLASH_CONTROL_PTR = ((*CY_FLASH_CONTROL_PTR & ((uint8)(~CY_FLASH_CYCLES_MASK))) |\r
-                ((uint8)(CY_FLASH_GREATER_51MHz << CY_FLASH_CYCLES_MASK_SHIFT)));\r
-        }\r
-\r
-    #endif  /* (CY_PSOC5LP) */\r
+    #endif  /* (CY_PSOC5) */\r
 \r
     /* Restore global interrupt enable state */\r
     CyExitCriticalSection(interruptState);\r
 }\r
 \r
 \r
-#if (CY_PSOC3 || CY_PSOC5LP)\r
-\r
-    /*******************************************************************************\r
-    * Function Name: CyEEPROM_Start\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Enable the EEPROM.\r
-    *\r
-    * Parameters:\r
-    *  None\r
-    *\r
-    * Return:\r
-    *  None\r
-    *\r
-    *******************************************************************************/\r
-    void CyEEPROM_Start(void) \r
-    {\r
-        /* Active Power Mode */\r
-        *CY_FLASH_PM_ACT_EEFLASH_PTR |= CY_FLASH_PM_EE_MASK;\r
-\r
-        /* Standby Power Mode */\r
-        *CY_FLASH_PM_ALTACT_EEFLASH_PTR |= CY_FLASH_PM_EE_MASK;\r
-    }\r
+/*******************************************************************************\r
+* Function Name: CyEEPROM_Start\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Enable the EEPROM.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void CyEEPROM_Start(void) \r
+{\r
+    /* Active Power Mode */\r
+    *CY_FLASH_PM_ACT_EEFLASH_PTR |= CY_FLASH_PM_EE_MASK;\r
 \r
+    /* Standby Power Mode */\r
+    *CY_FLASH_PM_ALTACT_EEFLASH_PTR |= CY_FLASH_PM_EE_MASK;\r
+}\r
 \r
-    /*******************************************************************************\r
-    * Function Name: CyEEPROM_Stop\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Disable the EEPROM.\r
-    *\r
-    * Parameters:\r
-    *  None\r
-    *\r
-    * Return:\r
-    *  None\r
-    *\r
-    *******************************************************************************/\r
-    void CyEEPROM_Stop (void) \r
-    {\r
-        /* Active Power Mode */\r
-        *CY_FLASH_PM_ACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_EE_MASK));\r
 \r
-        /* Standby Power Mode */\r
-        *CY_FLASH_PM_ALTACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_EE_MASK));\r
-    }\r
+/*******************************************************************************\r
+* Function Name: CyEEPROM_Stop\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Disable the EEPROM.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void CyEEPROM_Stop (void) \r
+{\r
+    /* Active Power Mode */\r
+    *CY_FLASH_PM_ACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_EE_MASK));\r
 \r
-#endif /* (CY_PSOC3 || CY_PSOC5LP) */\r
+    /* Standby Power Mode */\r
+    *CY_FLASH_PM_ALTACT_EEFLASH_PTR &= ((uint8)(~CY_FLASH_PM_EE_MASK));\r
+}\r
 \r
 \r
 /*******************************************************************************\r
index a44e27d..69f8c88 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CyFlash.h\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 *  Description:\r
 *   Provides the function definitions for the FLASH/EEPROM.\r
@@ -75,10 +75,8 @@ cystatus CyWriteRowData(uint8 arrayId, uint16 rowAddress, const uint8 * rowData)
 void CyFlash_SetWaitCycles(uint8 freq) ;\r
 \r
 /* EEPROM Functions */\r
-#if (CY_PSOC3 || CY_PSOC5LP)\r
-    void CyEEPROM_Start(void) ;\r
-    void CyEEPROM_Stop(void) ;\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+void CyEEPROM_Start(void) ;\r
+void CyEEPROM_Stop(void) ;\r
 \r
 void CyEEPROM_ReadReserve(void) ;\r
 void CyEEPROM_ReadRelease(void) ;\r
@@ -87,31 +85,13 @@ void CyEEPROM_ReadRelease(void) ;
 /***************************************\r
 *     Registers\r
 ***************************************/\r
+/* Active Power Mode Configuration Register 12 */\r
+#define CY_FLASH_PM_ACT_EEFLASH_REG         (* (reg8 *) CYREG_PM_ACT_CFG12)\r
+#define CY_FLASH_PM_ACT_EEFLASH_PTR         (  (reg8 *) CYREG_PM_ACT_CFG12)\r
 \r
-#if (CY_PSOC5A)\r
-\r
-    /* Active Power Mode Configuration Register 0 */\r
-    #define CY_FLASH_PM_ACT_EEFLASH_REG         (* (reg8 *) CYREG_PM_ACT_CFG0)\r
-    #define CY_FLASH_PM_ACT_EEFLASH_PTR         (  (reg8 *) CYREG_PM_ACT_CFG0)\r
-\r
-    /* Alternate Active Power Mode Configuration Register 0 */\r
-    #define CY_FLASH_PM_ALTACT_EEFLASH_REG      (* (reg8 *) CYREG_PM_STBY_CFG0)\r
-    #define CY_FLASH_PM_ALTACT_EEFLASH_PTR      (  (reg8 *) CYREG_PM_STBY_CFG0)\r
-\r
-#endif  /* (CY_PSOC5A) */\r
-\r
-\r
-#if (CY_PSOC3 || CY_PSOC5LP)\r
-\r
-    /* Active Power Mode Configuration Register 12 */\r
-    #define CY_FLASH_PM_ACT_EEFLASH_REG         (* (reg8 *) CYREG_PM_ACT_CFG12)\r
-    #define CY_FLASH_PM_ACT_EEFLASH_PTR         (  (reg8 *) CYREG_PM_ACT_CFG12)\r
-\r
-    /* Alternate Active Power Mode Configuration Register 12 */\r
-    #define CY_FLASH_PM_ALTACT_EEFLASH_REG      (* (reg8 *) CYREG_PM_STBY_CFG12)\r
-    #define CY_FLASH_PM_ALTACT_EEFLASH_PTR      (  (reg8 *) CYREG_PM_STBY_CFG12)\r
-\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+/* Alternate Active Power Mode Configuration Register 12 */\r
+#define CY_FLASH_PM_ALTACT_EEFLASH_REG      (* (reg8 *) CYREG_PM_STBY_CFG12)\r
+#define CY_FLASH_PM_ALTACT_EEFLASH_PTR      (  (reg8 *) CYREG_PM_STBY_CFG12)\r
 \r
 \r
 /* Cache Control Register */\r
@@ -139,19 +119,8 @@ void CyEEPROM_ReadRelease(void) ;
 ***************************************/\r
 \r
 /* Power Mode Masks */\r
-#if(CY_PSOC5A)\r
-\r
-    #define CY_FLASH_PM_FLASH_EE_MASK           (0x80u)\r
-\r
-#endif  /* (CY_PSOC5A) */\r
-\r
-#if (CY_PSOC3 || CY_PSOC5LP)\r
-\r
-    #define CY_FLASH_PM_EE_MASK                 (0x10u)\r
-    #define CY_FLASH_PM_FLASH_MASK              (0x01u)\r
-\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
-\r
+#define CY_FLASH_PM_EE_MASK                 (0x10u)\r
+#define CY_FLASH_PM_FLASH_MASK              (0x01u)\r
 \r
 /* Frequency Constants */\r
 #if (CY_PSOC3)\r
@@ -162,23 +131,14 @@ void CyEEPROM_ReadRelease(void) ;
 \r
 #endif  /* (CY_PSOC3) */\r
 \r
-#if (CY_PSOC5A)\r
-\r
-    #define CY_FLASH_LESSER_OR_EQUAL_16MHz      (0x01u)\r
-    #define CY_FLASH_LESSER_OR_EQUAL_33MHz      (0x02u)\r
-    #define CY_FLASH_LESSER_OR_EQUAL_50MHz      (0x03u)\r
-    #define CY_FLASH_GREATER_51MHz              (0x00u)\r
-\r
-#endif  /* (CY_PSOC5A) */\r
-\r
-#if (CY_PSOC5LP)\r
+#if (CY_PSOC5)\r
 \r
     #define CY_FLASH_LESSER_OR_EQUAL_16MHz      (0x01u)\r
     #define CY_FLASH_LESSER_OR_EQUAL_33MHz      (0x02u)\r
     #define CY_FLASH_LESSER_OR_EQUAL_50MHz      (0x03u)\r
     #define CY_FLASH_GREATER_51MHz              (0x00u)\r
 \r
-#endif  /* (CY_PSOC5LP) */\r
+#endif  /* (CY_PSOC5) */\r
 \r
 #define CY_FLASH_CYCLES_MASK_SHIFT              (0x06u)\r
 #define CY_FLASH_CYCLES_MASK                    ((uint8)(0x03u << (CY_FLASH_CYCLES_MASK_SHIFT)))\r
@@ -238,37 +198,14 @@ void CyEEPROM_ReadRelease(void) ;
 #define ECC_ADDR                    (0x80u)\r
 \r
 \r
-#if (CY_PSOC5A)\r
-\r
-    #define PM_ACT_EEFLASH          (CY_FLASH_PM_ACT_EEFLASH_PTR)\r
-    #define PM_STBY_EEFLASH         (CY_FLASH_PM_ALTACT_EEFLASH_PTR)\r
-\r
-#endif  /* (CY_PSOC5A) */\r
-\r
-#if (CY_PSOC3 || CY_PSOC5LP)\r
-\r
-    #define PM_ACT_EE_PTR           (CY_FLASH_PM_ACT_EEFLASH_PTR)\r
-    #define PM_ACT_FLASH_PTR        (CY_FLASH_PM_ACT_EEFLASH_PTR)\r
-\r
-    #define PM_STBY_EE_PTR          (CY_FLASH_PM_ALTACT_EEFLASH_PTR)\r
-    #define PM_STBY_FLASH_PTR       (CY_FLASH_PM_ALTACT_EEFLASH_PTR)\r
-\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
-\r
-\r
-#if(CY_PSOC5A)\r
-\r
-    #define PM_FLASH_EE_MASK        (CY_FLASH_PM_FLASH_EE_MASK)\r
+#define PM_ACT_EE_PTR           (CY_FLASH_PM_ACT_EEFLASH_PTR)\r
+#define PM_ACT_FLASH_PTR        (CY_FLASH_PM_ACT_EEFLASH_PTR)\r
 \r
-#endif  /* (CY_PSOC5A) */\r
-\r
-#if (CY_PSOC3 || CY_PSOC5LP)\r
-\r
-    #define PM_EE_MASK              (CY_FLASH_PM_EE_MASK)\r
-    #define PM_FLASH_MASK           (CY_FLASH_PM_FLASH_MASK)\r
-\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+#define PM_STBY_EE_PTR          (CY_FLASH_PM_ALTACT_EEFLASH_PTR)\r
+#define PM_STBY_FLASH_PTR       (CY_FLASH_PM_ALTACT_EEFLASH_PTR)\r
 \r
+#define PM_EE_MASK              (CY_FLASH_PM_EE_MASK)\r
+#define PM_FLASH_MASK           (CY_FLASH_PM_FLASH_MASK)\r
 \r
 #define FLASH_CYCLES_MASK_SHIFT     (CY_FLASH_CYCLES_MASK_SHIFT)\r
 #define FLASH_CYCLES_MASK           (CY_FLASH_CYCLES_MASK)\r
@@ -282,16 +219,7 @@ void CyEEPROM_ReadRelease(void) ;
 \r
 #endif  /* (CY_PSOC3) */\r
 \r
-#if (CY_PSOC5A)\r
-\r
-    #define LESSER_OR_EQUAL_16MHz   (CY_FLASH_LESSER_OR_EQUAL_16MHz)\r
-    #define LESSER_OR_EQUAL_33MHz   (CY_FLASH_LESSER_OR_EQUAL_33MHz)\r
-    #define LESSER_OR_EQUAL_50MHz   (CY_FLASH_LESSER_OR_EQUAL_50MHz)\r
-    #define GREATER_51MHz           (CY_FLASH_GREATER_51MHz)\r
-\r
-#endif  /* (CY_PSOC5A) */\r
-\r
-#if (CY_PSOC5LP)\r
+#if (CY_PSOC5)\r
 \r
     #define LESSER_OR_EQUAL_16MHz   (CY_FLASH_LESSER_OR_EQUAL_16MHz)\r
     #define LESSER_OR_EQUAL_33MHz   (CY_FLASH_LESSER_OR_EQUAL_33MHz)\r
@@ -300,7 +228,7 @@ void CyEEPROM_ReadRelease(void) ;
     #define GREATER_67MHz           (CY_FLASH_GREATER_67MHz)\r
     #define GREATER_51MHz           (CY_FLASH_GREATER_51MHz)\r
 \r
-#endif  /* (CY_PSOC5LP) */\r
+#endif  /* (CY_PSOC5) */\r
 \r
 #define AHUB_EE_REQ_ACK_PTR         (CY_FLASH_EE_SCR_PTR)\r
 \r
index 4f56380..206c6cb 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CyLib.c\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 *  Description:\r
 *   Provides system API for the clocking, interrupts and watchdog timer.\r
 \r
 /*******************************************************************************\r
 * The CyResetStatus variable is used to obtain value of RESET_SR0 register after\r
-* a device reset.\r
+* a device reset. It is set from initialize_psoc() at the early initialization\r
+* stage. In case of IAR EW IDE, initialize_psoc() is executed before the data\r
+* sections are initialized. To avoid zeroing, CyResetStatus should be placed\r
+* to the .noinit section.\r
 *******************************************************************************/\r
-uint8 CYXDATA CyResetStatus;\r
+CY_NOINIT uint8 CYXDATA CyResetStatus;\r
 \r
 \r
-#if(!CY_PSOC5A)\r
+/* Variable Vdda */\r
+#if(CYDEV_VARIABLE_VDDA == 1)\r
 \r
-    /* Variable Vdda */\r
-    #if(CYDEV_VARIABLE_VDDA == 1)\r
+    uint8 CyScPumpEnabled = (uint8)(CYDEV_VDDA_MV < 2700);\r
 \r
-        uint8 CyScPumpEnabled = (uint8)(CYDEV_VDDA_MV < 2700);\r
-\r
-    #endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
-\r
-#endif /* (!CY_PSOC5A) */\r
+#endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
 \r
 \r
 /* Do not use these definitions directly in your application */\r
@@ -102,16 +101,15 @@ cystatus CyPLL_OUT_Start(uint8 wait)
     if(wait != 0u)\r
     {\r
         /* Save 100 KHz ILO, FTW interval, enable and interrupt enable */\r
-        iloEnableState = SLOWCLK_ILO_CR0;\r
-        pmTwCfg0State = CY_PM_TW_CFG0_REG;\r
-        pmTwCfg2State = CY_PM_TW_CFG2_REG;\r
+        iloEnableState = CY_LIB_SLOWCLK_ILO_CR0_REG & CY_LIB_SLOWCLK_ILO_CR0_EN_100KHZ;\r
+        pmTwCfg0State = CY_LIB_PM_TW_CFG0_REG;\r
+        pmTwCfg2State = CY_LIB_PM_TW_CFG2_REG;\r
 \r
         CyPmFtwSetInterval(CY_CLK_PLL_FTW_INTERVAL);\r
 \r
         status = CYRET_TIMEOUT;\r
 \r
-\r
-        while(CyPmReadStatus(CY_PM_FTW_INT) != CY_PM_FTW_INT)\r
+        while(0u == (CY_PM_FTW_INT & CyPmReadStatus(CY_PM_FTW_INT)))\r
         {\r
             /* Wait for the interrupt status */\r
             if(0u != (CY_CLK_PLL_SR_REG & CY_CLK_PLL_LOCK_STATUS))\r
@@ -124,14 +122,14 @@ cystatus CyPLL_OUT_Start(uint8 wait)
             }\r
         }\r
 \r
-\r
         /* Restore 100 KHz ILO, FTW interval, enable and interrupt enable */\r
-        if(0u == (iloEnableState & ILO_CONTROL_100KHZ_ON))\r
+        if(0u == iloEnableState)\r
         {\r
             CyILO_Stop100K();\r
         }\r
-        CY_PM_TW_CFG0_REG = pmTwCfg0State;\r
-        CY_PM_TW_CFG2_REG = pmTwCfg2State;\r
+\r
+        CY_LIB_PM_TW_CFG0_REG = pmTwCfg0State;\r
+        CY_LIB_PM_TW_CFG2_REG = pmTwCfg2State;\r
     }\r
 \r
     return(status);\r
@@ -229,9 +227,9 @@ void CyPLL_OUT_SetPQ(uint8 pDiv, uint8 qDiv, uint8 current)
 *\r
 * Parameters:\r
 *   source: One of the three available PLL clock sources\r
-*            0 :        IMO\r
-*            1 :        MHz Crystal\r
-*            2 :        DSI\r
+*    CY_PLL_SOURCE_IMO  :   IMO\r
+*    CY_PLL_SOURCE_XTAL :   MHz Crystal\r
+*    CY_PLL_SOURCE_DSI  :   DSI\r
 *\r
 * Return:\r
 *  None\r
@@ -299,51 +297,33 @@ void CyIMO_Start(uint8 wait)
 {\r
     uint8 pmFtwCfg2Reg;\r
     uint8 pmFtwCfg0Reg;\r
-    uint8 iloControlReg;\r
+    uint8 ilo100KhzEnable;\r
+\r
 \r
-    /* Set the bit to enable the clock. */\r
-    PM_ACT_CFG0 |= IMO_PM_ENABLE;\r
+    CY_LIB_PM_ACT_CFG0_REG  |= CY_LIB_PM_ACT_CFG0_IMO_EN;\r
+    CY_LIB_PM_STBY_CFG0_REG |= CY_LIB_PM_STBY_CFG0_IMO_EN;\r
 \r
-    /* Wait for 6 us */\r
     if(0u != wait)\r
     {\r
         /* Need to turn on the 100KHz ILO if it happens to not already be running.*/\r
-        iloControlReg = SLOWCLK_ILO_CR0;\r
-\r
-        if(0u == (iloControlReg & ILO_CONTROL_100KHZ_ON))\r
-        {\r
-            CyILO_Start100K();\r
-        }\r
-\r
-        /* Use ILO 100 KHz */\r
-        pmFtwCfg2Reg = PM_TW_CFG2;\r
-        pmFtwCfg0Reg = PM_TW_CFG0;\r
-\r
-        /* FTW_EN (bit 0) must be clear to change the period*/\r
-        PM_TW_CFG2 &= FTW_CLEAR_FTW_BITS;\r
-\r
-        /* Set the FTW interval of 1 100KHz ILO clocks\r
-        Should result in status getting set at a (100/1)KHz rate*/\r
-        PM_TW_CFG0 = 0u;\r
+        ilo100KhzEnable = CY_LIB_SLOWCLK_ILO_CR0_REG & CY_LIB_SLOWCLK_ILO_CR0_EN_100KHZ;\r
+        pmFtwCfg0Reg = CY_LIB_PM_TW_CFG0_REG;\r
+        pmFtwCfg2Reg = CY_LIB_PM_TW_CFG2_REG;\r
 \r
-        /* Enable FTW, but not the interrupt */\r
-        PM_TW_CFG2 = FTW_ENABLE;\r
+        CyPmFtwSetInterval(CY_LIB_CLK_IMO_FTW_TIMEOUT);\r
 \r
-        /* Read FTW value */\r
-        while (CyPmReadStatus(CY_PM_FTW_INT) == 0u)\r
+        while (0u == (CY_PM_FTW_INT & CyPmReadStatus(CY_PM_FTW_INT)))\r
         {\r
             /* Wait for the interrupt status */\r
         }\r
 \r
-        /* Reset the clock */\r
-        if(0u == (iloControlReg & ILO_CONTROL_100KHZ_ON))\r
+        if(0u == ilo100KhzEnable)\r
         {\r
             CyILO_Stop100K();\r
         }\r
 \r
-        /* Restore the FTW */\r
-        PM_TW_CFG0 = pmFtwCfg0Reg;\r
-        PM_TW_CFG2 = pmFtwCfg2Reg;\r
+        CY_LIB_PM_TW_CFG0_REG = pmFtwCfg0Reg;\r
+        CY_LIB_PM_TW_CFG2_REG = pmFtwCfg2Reg;\r
     }\r
 }\r
 \r
@@ -364,8 +344,8 @@ void CyIMO_Start(uint8 wait)
 *******************************************************************************/\r
 void CyIMO_Stop(void) \r
 {\r
-    /* Clear the bit to disable the clock. */\r
-    PM_ACT_CFG0 &= ((uint8)(~IMO_PM_ENABLE));\r
+    CY_LIB_PM_ACT_CFG0_REG  &= ((uint8) (~CY_LIB_PM_ACT_CFG0_IMO_EN));\r
+    CY_LIB_PM_STBY_CFG0_REG &= ((uint8) (~CY_LIB_PM_STBY_CFG0_IMO_EN));\r
 }\r
 \r
 \r
@@ -389,9 +369,9 @@ static uint8 CyUSB_PowerOnCheck(void)
 \r
     /* Check whether device is in Active or AltActiv and if USB is powered on */\r
     if((((CY_PM_MODE_CSR_REG & CY_PM_MODE_CSR_MASK) == CY_PM_MODE_CSR_ACTIVE ) &&\r
-       (0u != (CY_PM_ACT_CFG5_REG & CY_ACT_USB_ENABLED     )))  ||\r
+       (0u != (CY_LIB_PM_ACT_CFG5_REG & CY_ACT_USB_ENABLED     )))  ||\r
        (((CY_PM_MODE_CSR_REG & CY_PM_MODE_CSR_MASK) == CY_PM_MODE_CSR_ALT_ACT) &&\r
-       (0u != (CY_PM_STBY_CFG5_REG & CY_ALT_ACT_USB_ENABLED))))\r
+       (0u != (CY_LIB_PM_STBY_CFG5_REG & CY_ALT_ACT_USB_ENABLED))))\r
     {\r
         poweredOn = 1u;\r
     }\r
@@ -416,53 +396,54 @@ static uint8 CyUSB_PowerOnCheck(void)
 *******************************************************************************/\r
 static void CyIMO_SetTrimValue(uint8 freq) \r
 {\r
-    uint8 usb_power_on = CyUSB_PowerOnCheck();\r
+    uint8 usbPowerOn = CyUSB_PowerOnCheck();\r
 \r
     /* If USB is powered */\r
-    if(usb_power_on == 1u)\r
+    if(usbPowerOn == 1u)\r
     {\r
         /* Unlock USB write */\r
-        CY_USB_CR1 &= ((uint8)(~CLOCK_USB_ENABLE));\r
+        CY_LIB_USB_CR1_REG &= ((uint8)(~CY_LIB_USB_CLK_EN));\r
     }\r
     switch(freq)\r
     {\r
     case CY_IMO_FREQ_3MHZ:\r
-        IMO_TR1 = CY_GET_XTND_REG8(FLSHID_CUST_TABLES_IMO_3MHZ_PTR);\r
+        CY_LIB_IMO_TR1_REG = CY_GET_XTND_REG8(CY_LIB_TRIM_IMO_3MHZ_PTR);\r
         break;\r
 \r
     case CY_IMO_FREQ_6MHZ:\r
-        IMO_TR1 = CY_GET_XTND_REG8(FLSHID_CUST_TABLES_IMO_6MHZ_PTR);\r
+        CY_LIB_IMO_TR1_REG = CY_GET_XTND_REG8(CY_LIB_TRIM_IMO_6MHZ_PTR);\r
         break;\r
 \r
     case CY_IMO_FREQ_12MHZ:\r
-        IMO_TR1 = CY_GET_XTND_REG8(FLSHID_CUST_TABLES_IMO_12MHZ_PTR);\r
+        CY_LIB_IMO_TR1_REG = CY_GET_XTND_REG8(CY_LIB_TRIM_IMO_12MHZ_PTR);\r
         break;\r
 \r
     case CY_IMO_FREQ_24MHZ:\r
-        IMO_TR1 = CY_GET_XTND_REG8(FLSHID_CUST_TABLES_IMO_24MHZ_PTR);\r
+        CY_LIB_IMO_TR1_REG = CY_GET_XTND_REG8(CY_LIB_TRIM_IMO_24MHZ_PTR);\r
         break;\r
 \r
     case CY_IMO_FREQ_48MHZ:\r
-        IMO_TR1 = CY_GET_XTND_REG8(FLSHID_MFG_CFG_IMO_TR1_PTR);\r
+        CY_LIB_IMO_TR1_REG = CY_GET_XTND_REG8(CY_LIB_TRIM_IMO_TR1_PTR);\r
         break;\r
 \r
-    /* The IMO frequencies above 48 MHz are not supported by PSoC5 */\r
-    #if(!CY_PSOC5A)\r
-\r
-        case CY_IMO_FREQ_62MHZ:\r
-            IMO_TR1 = CY_GET_XTND_REG8(FLSHID_CUST_TABLES_IMO_67MHZ_PTR);\r
-            break;\r
+    case CY_IMO_FREQ_62MHZ:\r
+        CY_LIB_IMO_TR1_REG = CY_GET_XTND_REG8(CY_LIB_TRIM_IMO_67MHZ_PTR);\r
+        break;\r
 \r
-    #endif  /* (!CY_PSOC5A) */\r
+#if(CY_PSOC5)\r
+    case CY_IMO_FREQ_74MHZ:\r
+        CY_LIB_IMO_TR1_REG = CY_GET_XTND_REG8(CY_LIB_TRIM_IMO_80MHZ_PTR);\r
+        break;\r
+#endif  /* (CY_PSOC5) */\r
 \r
     case CY_IMO_FREQ_USB:\r
-        IMO_TR1 = CY_GET_XTND_REG8(FLSHID_CUST_TABLES_IMO_USB_PTR);\r
+        CY_LIB_IMO_TR1_REG = CY_GET_XTND_REG8(CY_LIB_TRIM_IMO_USB_PTR);\r
 \r
         /* If USB is powered */\r
-        if(usb_power_on == 1u)\r
+        if(usbPowerOn == 1u)\r
         {\r
             /* Lock the USB Oscillator */\r
-            CY_USB_CR1 |= CLOCK_USB_ENABLE;\r
+            CY_LIB_USB_CR1_REG |= CY_LIB_USB_CLK_EN;\r
         }\r
         break;\r
 \r
@@ -488,7 +469,8 @@ static void CyIMO_SetTrimValue(uint8 freq)
 *       CY_IMO_FREQ_12MHZ to set 12   MHz\r
 *       CY_IMO_FREQ_24MHZ to set 24   MHz\r
 *       CY_IMO_FREQ_48MHZ to set 48   MHz\r
-*       CY_IMO_FREQ_62MHZ to set 62 MHz (unsupported by PSoC 5)\r
+*       CY_IMO_FREQ_62MHZ to set 62.6 MHz\r
+*       CY_IMO_FREQ_74MHZ to set 74.7 MHz (not applicable for PSoC 3)\r
 *       CY_IMO_FREQ_USB   to set 24   MHz (Trimmed for USB operation)\r
 *\r
 * Return:\r
@@ -546,14 +528,15 @@ void CyIMO_SetFreq(uint8 freq)
         currentFreq = CY_IMO_FREQ_48MHZ;\r
         break;\r
 \r
-    /* The IMO frequencies above 48 MHz are not supported by PSoC5 */\r
-    #if(!CY_PSOC5A)\r
-\r
-        case 5u:\r
-            currentFreq = CY_IMO_FREQ_62MHZ;\r
-            break;\r
+    case 5u:\r
+        currentFreq = CY_IMO_FREQ_62MHZ;\r
+        break;\r
 \r
-    #endif  /* (!CY_PSOC5A) */\r
+#if(CY_PSOC5)\r
+    case 6u:\r
+        currentFreq = CY_IMO_FREQ_74MHZ;\r
+        break;\r
+#endif  /* (CY_PSOC5) */\r
 \r
     default:\r
         CYASSERT(0u != 0u);\r
@@ -571,42 +554,44 @@ void CyIMO_SetFreq(uint8 freq)
     {\r
     case CY_IMO_FREQ_3MHZ:\r
         CY_LIB_FASTCLK_IMO_CR_REG = ((CY_LIB_FASTCLK_IMO_CR_REG & CY_LIB_FASTCLK_IMO_CR_RANGE_MASK) |\r
-            CLOCK_IMO_3MHZ_VALUE) & ((uint8)(~FASTCLK_IMO_USBCLK_ON_SET));\r
+            CY_LIB_IMO_3MHZ_VALUE) & ((uint8)(~CY_LIB_IMO_USBCLK_ON_SET));\r
         break;\r
 \r
     case CY_IMO_FREQ_6MHZ:\r
         CY_LIB_FASTCLK_IMO_CR_REG = ((CY_LIB_FASTCLK_IMO_CR_REG & CY_LIB_FASTCLK_IMO_CR_RANGE_MASK) |\r
-            CLOCK_IMO_6MHZ_VALUE) & ((uint8)(~FASTCLK_IMO_USBCLK_ON_SET));\r
+            CY_LIB_IMO_6MHZ_VALUE) & ((uint8)(~CY_LIB_IMO_USBCLK_ON_SET));\r
         break;\r
 \r
     case CY_IMO_FREQ_12MHZ:\r
         CY_LIB_FASTCLK_IMO_CR_REG = ((CY_LIB_FASTCLK_IMO_CR_REG & CY_LIB_FASTCLK_IMO_CR_RANGE_MASK) |\r
-            CLOCK_IMO_12MHZ_VALUE) & ((uint8)(~FASTCLK_IMO_USBCLK_ON_SET));\r
+            CY_LIB_IMO_12MHZ_VALUE) & ((uint8)(~CY_LIB_IMO_USBCLK_ON_SET));\r
         break;\r
 \r
     case CY_IMO_FREQ_24MHZ:\r
         CY_LIB_FASTCLK_IMO_CR_REG = ((CY_LIB_FASTCLK_IMO_CR_REG & CY_LIB_FASTCLK_IMO_CR_RANGE_MASK) |\r
-            CLOCK_IMO_24MHZ_VALUE) & ((uint8)(~FASTCLK_IMO_USBCLK_ON_SET));\r
+            CY_LIB_IMO_24MHZ_VALUE) & ((uint8)(~CY_LIB_IMO_USBCLK_ON_SET));\r
         break;\r
 \r
     case CY_IMO_FREQ_48MHZ:\r
         CY_LIB_FASTCLK_IMO_CR_REG = ((CY_LIB_FASTCLK_IMO_CR_REG & CY_LIB_FASTCLK_IMO_CR_RANGE_MASK) |\r
-            CLOCK_IMO_48MHZ_VALUE) & ((uint8)(~FASTCLK_IMO_USBCLK_ON_SET));\r
+            CY_LIB_IMO_48MHZ_VALUE) & ((uint8)(~CY_LIB_IMO_USBCLK_ON_SET));\r
         break;\r
 \r
-    /* The IMO frequencies above 48 MHz are not supported by PSoC5 */\r
-    #if(!CY_PSOC5A)\r
-\r
     case CY_IMO_FREQ_62MHZ:\r
         CY_LIB_FASTCLK_IMO_CR_REG = ((CY_LIB_FASTCLK_IMO_CR_REG & CY_LIB_FASTCLK_IMO_CR_RANGE_MASK) |\r
-            CLOCK_IMO_62MHZ_VALUE) & ((uint8)(~FASTCLK_IMO_USBCLK_ON_SET));\r
+            CY_LIB_IMO_62MHZ_VALUE) & ((uint8)(~CY_LIB_IMO_USBCLK_ON_SET));\r
         break;\r
 \r
-    #endif  /* (!CY_PSOC5A) */\r
+#if(CY_PSOC5)\r
+    case CY_IMO_FREQ_74MHZ:\r
+        CY_LIB_FASTCLK_IMO_CR_REG = ((CY_LIB_FASTCLK_IMO_CR_REG & CY_LIB_FASTCLK_IMO_CR_RANGE_MASK) |\r
+            CY_LIB_IMO_74MHZ_VALUE) & ((uint8)(~CY_LIB_IMO_USBCLK_ON_SET));\r
+        break;\r
+#endif  /* (CY_PSOC5) */\r
 \r
     case CY_IMO_FREQ_USB:\r
         CY_LIB_FASTCLK_IMO_CR_REG = ((CY_LIB_FASTCLK_IMO_CR_REG & CY_LIB_FASTCLK_IMO_CR_RANGE_MASK) |\r
-            CLOCK_IMO_24MHZ_VALUE) | FASTCLK_IMO_USBCLK_ON_SET;\r
+            CY_LIB_IMO_24MHZ_VALUE) | CY_LIB_IMO_USBCLK_ON_SET;\r
         break;\r
 \r
     default:\r
@@ -643,7 +628,7 @@ void CyIMO_SetFreq(uint8 freq)
 *  Crystal or a DSI input can be the source of the IMO output instead.\r
 *\r
 * Parameters:\r
-*   source, CY_IMO_SOURCE_DSI to set the DSI as source.\r
+*   source: CY_IMO_SOURCE_DSI to set the DSI as source.\r
 *           CY_IMO_SOURCE_XTAL to set the MHz as source.\r
 *           CY_IMO_SOURCE_IMO to set the IMO itself.\r
 *\r
@@ -758,33 +743,8 @@ void CyIMO_DisableDoubler(void)
 *******************************************************************************/\r
 void CyMasterClk_SetSource(uint8 source) \r
 {\r
-    #if(CY_PSOC5A)\r
-\r
-        uint8 masterReg0;\r
-\r
-        /* Read the current setting */\r
-        masterReg0 = CY_LIB_CLKDIST_MSTR0_REG;\r
-\r
-        /* Write a non-zero period to the master mux clock divider */\r
-        if (masterReg0 == 0x00u)\r
-        {\r
-            CY_LIB_CLKDIST_MSTR0_REG = 3u;\r
-        }\r
-\r
-    #endif  /* (CY_PSOC5A) */\r
-\r
     CY_LIB_CLKDIST_MSTR1_REG = (CY_LIB_CLKDIST_MSTR1_REG & MASTER_CLK_SRC_CLEAR) |\r
                                 (source & ((uint8)(~MASTER_CLK_SRC_CLEAR)));\r
-\r
-    #if(CY_PSOC5A)\r
-\r
-        /* Restore zero period (if desired) to the master mux clock divider */\r
-        if (masterReg0 == 0x00u)\r
-        {\r
-            CY_LIB_CLKDIST_MSTR0_REG = 0u;\r
-        }\r
-\r
-    #endif  /* (CY_PSOC5A) */\r
 }\r
 \r
 \r
@@ -894,7 +854,8 @@ void CyBusClk_SetDivider(uint16 divider)
     interruptState = CyEnterCriticalSection();\r
 \r
     /* Work around to set the bus clock divider value */\r
-    busClkDiv = ((uint16)(((uint16)(CY_LIB_CLKDIST_BCFG_MSB_REG)) << 8u)) | CY_LIB_CLKDIST_BCFG_LSB_REG;\r
+    busClkDiv = (uint16)((uint16)CY_LIB_CLKDIST_BCFG_MSB_REG << 8u);\r
+    busClkDiv |= CY_LIB_CLKDIST_BCFG_LSB_REG;\r
 \r
     if ((divider == 0u) || (busClkDiv == 0u))\r
     {\r
@@ -959,8 +920,8 @@ void CyBusClk_SetDivider(uint16 divider)
     *******************************************************************************/\r
     void CyCpuClk_SetDivider(uint8 divider) \r
     {\r
-            CLKDIST_MSTR1 = (CLKDIST_MSTR1 & CLKDIST_MSTR1_DIV_CLEAR) |\r
-                                ((uint8)(divider << CLKDIST_DIV_POSITION));\r
+            CY_LIB_CLKDIST_MSTR1_REG = (CY_LIB_CLKDIST_MSTR1_REG & CY_LIB_CLKDIST_MSTR1_DIV_MASK) |\r
+                                ((uint8)(divider << CY_LIB_CLKDIST_DIV_POSITION));\r
     }\r
 \r
 #endif /* (CY_PSOC3) */\r
@@ -975,10 +936,10 @@ void CyBusClk_SetDivider(uint16 divider)
 *\r
 * Parameters:\r
 *  source: One of the four available USB clock sources\r
-*             USB_CLK_IMO2X     - IMO 2x\r
-*             USB_CLK_IMO       - IMO\r
-*             USB_CLK_PLL       - PLL\r
-*             USB_CLK_DSI       - DSI\r
+*    CY_LIB_USB_CLK_IMO2X     - IMO 2x\r
+*    CY_LIB_USB_CLK_IMO       - IMO\r
+*    CY_LIB_USB_CLK_PLL       - PLL\r
+*    CY_LIB_USB_CLK_DSI       - DSI\r
 *\r
 * Return:\r
 *  None\r
@@ -986,8 +947,8 @@ void CyBusClk_SetDivider(uint16 divider)
 *******************************************************************************/\r
 void CyUsbClk_SetSource(uint8 source) \r
 {\r
-    CLKDIST_UCFG = (CLKDIST_UCFG & ((uint8)(~USB_CLKDIST_CONFIG_MASK))) |\r
-                        (USB_CLKDIST_CONFIG_MASK & source);\r
+    CY_LIB_CLKDIST_UCFG_REG = (CY_LIB_CLKDIST_UCFG_REG & ((uint8)(~CY_LIB_CLKDIST_UCFG_SRC_SEL_MASK))) |\r
+                        (CY_LIB_CLKDIST_UCFG_SRC_SEL_MASK & source);\r
 }\r
 \r
 \r
@@ -1012,7 +973,7 @@ void CyUsbClk_SetSource(uint8 source)
 void CyILO_Start1K(void) \r
 {\r
     /* Set the bit 1 of ILO RS */\r
-    SLOWCLK_ILO_CR0 |= ILO_CONTROL_1KHZ_ON;\r
+    CY_LIB_SLOWCLK_ILO_CR0_REG |= CY_LIB_SLOWCLK_ILO_CR0_EN_1KHZ;\r
 }\r
 \r
 \r
@@ -1040,7 +1001,7 @@ void CyILO_Start1K(void)
 void CyILO_Stop1K(void) \r
 {\r
     /* Clear the bit 1 of ILO RS */\r
-    SLOWCLK_ILO_CR0 &= ((uint8)(~ILO_CONTROL_1KHZ_ON));\r
+    CY_LIB_SLOWCLK_ILO_CR0_REG &= ((uint8)(~CY_LIB_SLOWCLK_ILO_CR0_EN_1KHZ));\r
 }\r
 \r
 \r
@@ -1060,8 +1021,7 @@ void CyILO_Stop1K(void)
 *******************************************************************************/\r
 void CyILO_Start100K(void) \r
 {\r
-    /* Set the bit 2 of ILO RS */\r
-    SLOWCLK_ILO_CR0 |= ILO_CONTROL_100KHZ_ON;\r
+    CY_LIB_SLOWCLK_ILO_CR0_REG |= CY_LIB_SLOWCLK_ILO_CR0_EN_100KHZ;\r
 }\r
 \r
 \r
@@ -1081,8 +1041,7 @@ void CyILO_Start100K(void)
 *******************************************************************************/\r
 void CyILO_Stop100K(void) \r
 {\r
-    /* Clear the bit 2 of ILO RS */\r
-    SLOWCLK_ILO_CR0 &= ((uint8)(~ILO_CONTROL_100KHZ_ON));\r
+    CY_LIB_SLOWCLK_ILO_CR0_REG &= ((uint8)(~CY_LIB_SLOWCLK_ILO_CR0_EN_100KHZ));\r
 }\r
 \r
 \r
@@ -1106,7 +1065,7 @@ void CyILO_Stop100K(void)
 void CyILO_Enable33K(void) \r
 {\r
     /* Set the bit 5 of ILO RS */\r
-    SLOWCLK_ILO_CR0 |= ILO_CONTROL_33KHZ_ON;\r
+    CY_LIB_SLOWCLK_ILO_CR0_REG |= CY_LIB_SLOWCLK_ILO_CR0_EN_33KHZ;\r
 }\r
 \r
 \r
@@ -1129,8 +1088,7 @@ void CyILO_Enable33K(void)
 *******************************************************************************/\r
 void CyILO_Disable33K(void) \r
 {\r
-    /* Clear the bit 5 of ILO RS */\r
-    SLOWCLK_ILO_CR0 &= ((uint8)(~ILO_CONTROL_33KHZ_ON));\r
+    CY_LIB_SLOWCLK_ILO_CR0_REG &= ((uint8)(~CY_LIB_SLOWCLK_ILO_CR0_EN_33KHZ));\r
 }\r
 \r
 \r
@@ -1154,7 +1112,7 @@ void CyILO_Disable33K(void)
 *******************************************************************************/\r
 void CyILO_SetSource(uint8 source) \r
 {\r
-    CLKDIST_CR = (CLKDIST_CR & CY_ILO_SOURCE_BITS_CLEAR) |\r
+    CY_LIB_CLKDIST_CR_REG = (CY_LIB_CLKDIST_CR_REG & CY_ILO_SOURCE_BITS_CLEAR) |\r
                     (((uint8) (source << 2u)) & ((uint8)(~CY_ILO_SOURCE_BITS_CLEAR)));\r
 }\r
 \r
@@ -1181,20 +1139,20 @@ uint8 CyILO_SetPowerMode(uint8 mode)
     uint8 state;\r
 \r
     /* Get current state. */\r
-    state = SLOWCLK_ILO_CR0;\r
+    state = CY_LIB_SLOWCLK_ILO_CR0_REG;\r
 \r
     /* Set the the oscillator power mode. */\r
     if(mode != CY_ILO_FAST_START)\r
     {\r
-        SLOWCLK_ILO_CR0 = (state | ILO_CONTROL_PD_MODE);\r
+        CY_LIB_SLOWCLK_ILO_CR0_REG = (state | CY_ILO_CONTROL_PD_MODE);\r
     }\r
     else\r
     {\r
-        SLOWCLK_ILO_CR0 = (state & ((uint8)(~ILO_CONTROL_PD_MODE)));\r
+        CY_LIB_SLOWCLK_ILO_CR0_REG = (state & ((uint8)(~CY_ILO_CONTROL_PD_MODE)));\r
     }\r
 \r
     /* Return the old mode. */\r
-    return ((state & ILO_CONTROL_PD_MODE) >> ILO_CONTROL_PD_POSITION);\r
+    return ((state & CY_ILO_CONTROL_PD_MODE) >> CY_ILO_CONTROL_PD_POSITION);\r
 }\r
 \r
 \r
@@ -1260,7 +1218,8 @@ void CyXTAL_32KHZ_Stop(void)
 {\r
     CY_CLK_XTAL32_TST_REG  = CY_CLK_XTAL32_TST_DEFAULT;\r
     CY_CLK_XTAL32_TR_REG   = CY_CLK_XTAL32_TR_POWERDOWN;\r
-    CY_CLK_XTAL32_CFG_REG = (CY_CLK_XTAL32_CFG_REG & ((uint8)(~CY_CLK_XTAL32_CFG_LP_MASK))) | CY_CLK_XTAL32_CFG_LP_DEFAULT;\r
+    CY_CLK_XTAL32_CFG_REG = (CY_CLK_XTAL32_CFG_REG & ((uint8)(~CY_CLK_XTAL32_CFG_LP_MASK))) |\r
+                             CY_CLK_XTAL32_CFG_LP_DEFAULT;\r
     CY_CLK_XTAL32_CR_REG &= ((uint8)(~(CY_CLK_XTAL32_CR_EN | CY_CLK_XTAL32_CR_LPM)));\r
 \r
     #if(CY_PSOC3)\r
@@ -1321,7 +1280,8 @@ uint8 CyXTAL_32KHZ_SetPowerMode(uint8 mode)
         /* Low power mode during Sleep */\r
         CY_CLK_XTAL32_TR_REG  = CY_CLK_XTAL32_TR_LOW_POWER;\r
         CyDelayUs(10u);\r
-        CY_CLK_XTAL32_CFG_REG = (CY_CLK_XTAL32_CFG_REG & ((uint8)(~CY_CLK_XTAL32_CFG_LP_MASK))) | CY_CLK_XTAL32_CFG_LP_LOWPOWER;\r
+        CY_CLK_XTAL32_CFG_REG = (CY_CLK_XTAL32_CFG_REG & ((uint8)(~CY_CLK_XTAL32_CFG_LP_MASK))) |\r
+                                CY_CLK_XTAL32_CFG_LP_LOWPOWER;\r
         CyDelayUs(20u);\r
         CY_CLK_XTAL32_CR_REG |= CY_CLK_XTAL32_CR_LPM;\r
     }\r
@@ -1330,7 +1290,8 @@ uint8 CyXTAL_32KHZ_SetPowerMode(uint8 mode)
         /* High power mode */\r
         CY_CLK_XTAL32_TR_REG  = CY_CLK_XTAL32_TR_HIGH_POWER;\r
         CyDelayUs(10u);\r
-        CY_CLK_XTAL32_CFG_REG = (CY_CLK_XTAL32_CFG_REG & ((uint8)(~CY_CLK_XTAL32_CFG_LP_MASK))) | CY_CLK_XTAL32_CFG_LP_DEFAULT;\r
+        CY_CLK_XTAL32_CFG_REG = (CY_CLK_XTAL32_CFG_REG & ((uint8)(~CY_CLK_XTAL32_CFG_LP_MASK))) |\r
+                                CY_CLK_XTAL32_CFG_LP_DEFAULT;\r
         CY_CLK_XTAL32_CR_REG &= ((uint8)(~CY_CLK_XTAL32_CR_LPM));\r
     }\r
 \r
@@ -1345,15 +1306,10 @@ uint8 CyXTAL_32KHZ_SetPowerMode(uint8 mode)
 * Summary:\r
 *  Enables the megahertz crystal.\r
 *\r
-*  PSoC3:\r
+*  PSoC 3:\r
 *  Waits until the XERR bit is low (no error) for a millisecond or until the\r
 *  number of milliseconds specified by the wait parameter has expired.\r
 *\r
-*  PSoC5:\r
-*  Waits for CY_CLK_XMHZ_MIN_TIMEOUT milliseconds (or number of milliseconds\r
-*  specified by parameter if it is greater than CY_CLK_XMHZ_MIN_TIMEOUT. The\r
-*  XERR bit status is not checked.\r
-*\r
 * Parameters:\r
 *   wait: Valid range [0-255].\r
 *   This is the timeout value in milliseconds.\r
@@ -1382,13 +1338,7 @@ uint8 CyXTAL_32KHZ_SetPowerMode(uint8 mode)
 cystatus CyXTAL_Start(uint8 wait) \r
 {\r
     cystatus status = CYRET_SUCCESS;\r
-\r
-    #if(CY_PSOC5A)\r
-        volatile uint8  timeout = (wait < CY_CLK_XMHZ_MIN_TIMEOUT) ? CY_CLK_XMHZ_MIN_TIMEOUT : wait;\r
-    #else\r
-        volatile uint8  timeout = wait;\r
-    #endif  /* (CY_PSOC5A) */\r
-\r
+    volatile uint8  timeout = wait;\r
     volatile uint8 count;\r
     uint8 iloEnableState;\r
     uint8 pmTwCfg0Tmp;\r
@@ -1402,9 +1352,9 @@ cystatus CyXTAL_Start(uint8 wait)
     if(wait > 0u)\r
     {\r
         /* Save 100 KHz ILO, FTW interval, enable and interrupt enable */\r
-        iloEnableState = SLOWCLK_ILO_CR0;\r
-        pmTwCfg0Tmp = CY_PM_TW_CFG0_REG;\r
-        pmTwCfg2Tmp = CY_PM_TW_CFG2_REG;\r
+        iloEnableState = CY_LIB_SLOWCLK_ILO_CR0_REG;\r
+        pmTwCfg0Tmp = CY_LIB_PM_TW_CFG0_REG;\r
+        pmTwCfg2Tmp = CY_LIB_PM_TW_CFG2_REG;\r
 \r
         /* Set 250 us interval */\r
         CyPmFtwSetInterval(CY_CLK_XMHZ_FTW_INTERVAL);\r
@@ -1413,47 +1363,38 @@ cystatus CyXTAL_Start(uint8 wait)
 \r
         for( ; timeout > 0u; timeout--)\r
         {\r
-            #if(!CY_PSOC5A)\r
-\r
-                /* Read XERR bit to clear it */\r
-                (void) CY_CLK_XMHZ_CSR_REG;\r
-\r
-            #endif  /* (!CY_PSOC5A) */\r
-\r
+            /* Read XERR bit to clear it */\r
+            (void) CY_CLK_XMHZ_CSR_REG;\r
 \r
             /* Wait for a millisecond - 4 x 250 us */\r
             for(count = 4u; count > 0u; count--)\r
             {\r
-                while(!(CY_PM_FTW_INT == CyPmReadStatus(CY_PM_FTW_INT)))\r
+                while(0u == (CY_PM_FTW_INT & CyPmReadStatus(CY_PM_FTW_INT)))\r
                 {\r
                     /* Wait for the FTW interrupt event */\r
                 }\r
             }\r
 \r
 \r
-            #if(!CY_PSOC5A)\r
-\r
-                /*******************************************************************\r
-                * High output indicates oscillator failure.\r
-                * Only can be used after start-up interval (1 ms) is completed.\r
-                *******************************************************************/\r
-                if(0u == (CY_CLK_XMHZ_CSR_REG & CY_CLK_XMHZ_CSR_XERR))\r
-                {\r
-                    status = CYRET_SUCCESS;\r
-                    break;\r
-                }\r
-\r
-            #endif  /* (!CY_PSOC5A) */\r
+            /*******************************************************************\r
+            * High output indicates oscillator failure.\r
+            * Only can be used after start-up interval (1 ms) is completed.\r
+            *******************************************************************/\r
+            if(0u == (CY_CLK_XMHZ_CSR_REG & CY_CLK_XMHZ_CSR_XERR))\r
+            {\r
+                status = CYRET_SUCCESS;\r
+                break;\r
+            }\r
         }\r
 \r
 \r
         /* Restore 100 KHz ILO, FTW interval, enable and interrupt enable */\r
-        if(0u == (iloEnableState & ILO_CONTROL_100KHZ_ON))\r
+        if(0u == (iloEnableState & CY_LIB_SLOWCLK_ILO_CR0_EN_100KHZ))\r
         {\r
             CyILO_Stop100K();\r
         }\r
-        CY_PM_TW_CFG0_REG = pmTwCfg0Tmp;\r
-        CY_PM_TW_CFG2_REG = pmTwCfg2Tmp;\r
+        CY_LIB_PM_TW_CFG0_REG = pmTwCfg0Tmp;\r
+        CY_LIB_PM_TW_CFG2_REG = pmTwCfg2Tmp;\r
     }\r
 \r
     return(status);\r
@@ -1481,124 +1422,121 @@ void CyXTAL_Stop(void)
 }\r
 \r
 \r
-#if(!CY_PSOC5A)\r
-\r
-    /*******************************************************************************\r
-    * Function Name: CyXTAL_EnableErrStatus\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Enables the generation of the XERR status bit for the megahertz crystal.\r
-    *  This function is not available for PSoC5.\r
-    *\r
-    * Parameters:\r
-    *  None\r
-    *\r
-    * Return:\r
-    *  None\r
-    *\r
-    *******************************************************************************/\r
-    void CyXTAL_EnableErrStatus(void) \r
-    {\r
-        /* If oscillator has insufficient amplitude, XERR bit will be high. */\r
-        CY_CLK_XMHZ_CSR_REG &= ((uint8)(~CY_CLK_XMHZ_CSR_XFB));\r
-    }\r
+/*******************************************************************************\r
+* Function Name: CyXTAL_EnableErrStatus\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Enables the generation of the XERR status bit for the megahertz crystal.\r
+*  This function is not available for PSoC5.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void CyXTAL_EnableErrStatus(void) \r
+{\r
+    /* If oscillator has insufficient amplitude, XERR bit will be high. */\r
+    CY_CLK_XMHZ_CSR_REG &= ((uint8)(~CY_CLK_XMHZ_CSR_XFB));\r
+}\r
 \r
 \r
-    /*******************************************************************************\r
-    * Function Name: CyXTAL_DisableErrStatus\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Disables the generation of the XERR status bit for the megahertz crystal.\r
-    *  This function is not available for PSoC5.\r
-    *\r
-    * Parameters:\r
-    *  None\r
-    *\r
-    * Return:\r
-    *  None\r
-    *\r
-    *******************************************************************************/\r
-    void CyXTAL_DisableErrStatus(void) \r
-    {\r
-        /* If oscillator has insufficient amplitude, XERR bit will be high. */\r
-        CY_CLK_XMHZ_CSR_REG |= CY_CLK_XMHZ_CSR_XFB;\r
-    }\r
+/*******************************************************************************\r
+* Function Name: CyXTAL_DisableErrStatus\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Disables the generation of the XERR status bit for the megahertz crystal.\r
+*  This function is not available for PSoC5.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void CyXTAL_DisableErrStatus(void) \r
+{\r
+    /* If oscillator has insufficient amplitude, XERR bit will be high. */\r
+    CY_CLK_XMHZ_CSR_REG |= CY_CLK_XMHZ_CSR_XFB;\r
+}\r
 \r
 \r
-    /*******************************************************************************\r
-    * Function Name: CyXTAL_ReadStatus\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Reads the XERR status bit for the megahertz crystal. This status bit is a\r
-    *  sticky clear on read value. This function is not available for PSoC5.\r
-    *\r
-    * Parameters:\r
-    *  None\r
-    *\r
-    * Return:\r
-    *   Status\r
-    *    0: No error\r
-    *    1: Error\r
-    *\r
-    *******************************************************************************/\r
-    uint8 CyXTAL_ReadStatus(void) \r
-    {\r
-        /***************************************************************************\r
-        * High output indicates oscillator failure. Only use this after start-up\r
-        * interval is completed. This can be used for status and failure recovery.\r
-        ***************************************************************************/\r
-        return((0u != (CY_CLK_XMHZ_CSR_REG & CY_CLK_XMHZ_CSR_XERR)) ? 1u : 0u);\r
-    }\r
+/*******************************************************************************\r
+* Function Name: CyXTAL_ReadStatus\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Reads the XERR status bit for the megahertz crystal. This status bit is a\r
+*  sticky clear on read value. This function is not available for PSoC5.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*   Status\r
+*    0: No error\r
+*    1: Error\r
+*\r
+*******************************************************************************/\r
+uint8 CyXTAL_ReadStatus(void) \r
+{\r
+    /***************************************************************************\r
+    * High output indicates oscillator failure. Only use this after start-up\r
+    * interval is completed. This can be used for status and failure recovery.\r
+    ***************************************************************************/\r
+    return((0u != (CY_CLK_XMHZ_CSR_REG & CY_CLK_XMHZ_CSR_XERR)) ? 1u : 0u);\r
+}\r
 \r
 \r
-    /*******************************************************************************\r
-    * Function Name: CyXTAL_EnableFaultRecovery\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Enables the fault recovery circuit which will switch to the IMO in the case\r
-    *  of a fault in the megahertz crystal circuit. The crystal must be up and\r
-    *  running with the XERR bit at 0, before calling this function to prevent\r
-    *  immediate fault switchover. This function is not available for PSoC5.\r
-    *\r
-    * Parameters:\r
-    *  None\r
-    *\r
-    * Return:\r
-    *  None\r
-    *\r
-    *******************************************************************************/\r
-    void CyXTAL_EnableFaultRecovery(void) \r
-    {\r
-        CY_CLK_XMHZ_CSR_REG |= CY_CLK_XMHZ_CSR_XPROT;\r
-    }\r
+/*******************************************************************************\r
+* Function Name: CyXTAL_EnableFaultRecovery\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Enables the fault recovery circuit which will switch to the IMO in the case\r
+*  of a fault in the megahertz crystal circuit. The crystal must be up and\r
+*  running with the XERR bit at 0, before calling this function to prevent\r
+*  immediate fault switchover. This function is not available for PSoC5.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void CyXTAL_EnableFaultRecovery(void) \r
+{\r
+    CY_CLK_XMHZ_CSR_REG |= CY_CLK_XMHZ_CSR_XPROT;\r
+}\r
 \r
 \r
-    /*******************************************************************************\r
-    * Function Name: CyXTAL_DisableFaultRecovery\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Disables the fault recovery circuit which will switch to the IMO in the case\r
-    *  of a fault in the megahertz crystal circuit. This function is not available\r
-    *  for PSoC5.\r
-    *\r
-    * Parameters:\r
-    *  None\r
-    *\r
-    * Return:\r
-    *  None\r
-    *\r
-    *******************************************************************************/\r
-    void CyXTAL_DisableFaultRecovery(void) \r
-    {\r
-        CY_CLK_XMHZ_CSR_REG &= ((uint8)(~CY_CLK_XMHZ_CSR_XPROT));\r
-    }\r
+/*******************************************************************************\r
+* Function Name: CyXTAL_DisableFaultRecovery\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Disables the fault recovery circuit which will switch to the IMO in the case\r
+*  of a fault in the megahertz crystal circuit. This function is not available\r
+*  for PSoC5.\r
+*\r
+* Parameters:\r
+*  None\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void CyXTAL_DisableFaultRecovery(void) \r
+{\r
+    CY_CLK_XMHZ_CSR_REG &= ((uint8)(~CY_CLK_XMHZ_CSR_XPROT));\r
+}\r
 \r
-#endif  /* (!CY_PSOC5A) */\r
 \r
 /*******************************************************************************\r
 * Function Name: CyXTAL_SetStartup\r
@@ -1627,53 +1565,51 @@ void CyXTAL_SetStartup(uint8 setting)
 }\r
 \r
 \r
-#if(CY_PSOC3 || CY_PSOC5LP)\r
-    /*******************************************************************************\r
-    * Function Name: CyXTAL_SetFbVoltage\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Sets the feedback reference voltage to use for the crystal circuit.\r
-    *  This function is only available for PSoC3 and PSoC 5LP.\r
-    *\r
-    * Parameters:\r
-    *  setting: Valid range [0-15].\r
-    *  Refer to the device TRM and datasheet for more information.\r
-    *\r
-    * Return:\r
-    *  None\r
-    *\r
-    *******************************************************************************/\r
-    void CyXTAL_SetFbVoltage(uint8 setting) \r
-    {\r
-        CY_CLK_XMHZ_CFG1_REG = ((CY_CLK_XMHZ_CFG1_REG & ((uint8)(~CY_CLK_XMHZ_CFG1_VREF_FB_MASK))) |\r
-                                (setting & CY_CLK_XMHZ_CFG1_VREF_FB_MASK));\r
-    }\r
 \r
+/*******************************************************************************\r
+* Function Name: CyXTAL_SetFbVoltage\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Sets the feedback reference voltage to use for the crystal circuit.\r
+*  This function is only available for PSoC3 and PSoC 5LP.\r
+*\r
+* Parameters:\r
+*  setting: Valid range [0-15].\r
+*  Refer to the device TRM and datasheet for more information.\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void CyXTAL_SetFbVoltage(uint8 setting) \r
+{\r
+    CY_CLK_XMHZ_CFG1_REG = ((CY_CLK_XMHZ_CFG1_REG & ((uint8)(~CY_CLK_XMHZ_CFG1_VREF_FB_MASK))) |\r
+                            (setting & CY_CLK_XMHZ_CFG1_VREF_FB_MASK));\r
+}\r
 \r
-    /*******************************************************************************\r
-    * Function Name: CyXTAL_SetWdVoltage\r
-    ********************************************************************************\r
-    *\r
-    * Summary:\r
-    *  Sets the reference voltage used by the watchdog to detect a failure in the\r
-    *  crystal circuit. This function is only available for PSoC3 and PSoC 5LP.\r
-    *\r
-    * Parameters:\r
-    *  setting: Valid range [0-7].\r
-    *  Refer to the device TRM and datasheet for more information.\r
-    *\r
-    * Return:\r
-    *  None\r
-    *\r
-    *******************************************************************************/\r
-    void CyXTAL_SetWdVoltage(uint8 setting) \r
-    {\r
-        CY_CLK_XMHZ_CFG1_REG = ((CY_CLK_XMHZ_CFG1_REG & ((uint8)(~CY_CLK_XMHZ_CFG1_VREF_WD_MASK))) |\r
-                                (((uint8)(setting << 4u)) & CY_CLK_XMHZ_CFG1_VREF_WD_MASK));\r
-    }\r
 \r
-#endif /* (CY_PSOC3 || CY_PSOC5LP) */\r
+/*******************************************************************************\r
+* Function Name: CyXTAL_SetWdVoltage\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Sets the reference voltage used by the watchdog to detect a failure in the\r
+*  crystal circuit. This function is only available for PSoC3 and PSoC 5LP.\r
+*\r
+* Parameters:\r
+*  setting: Valid range [0-7].\r
+*  Refer to the device TRM and datasheet for more information.\r
+*\r
+* Return:\r
+*  None\r
+*\r
+*******************************************************************************/\r
+void CyXTAL_SetWdVoltage(uint8 setting) \r
+{\r
+    CY_CLK_XMHZ_CFG1_REG = ((CY_CLK_XMHZ_CFG1_REG & ((uint8)(~CY_CLK_XMHZ_CFG1_VREF_WD_MASK))) |\r
+                            (((uint8)(setting << 4u)) & CY_CLK_XMHZ_CFG1_VREF_WD_MASK));\r
+}\r
 \r
 \r
 /*******************************************************************************\r
@@ -1699,7 +1635,7 @@ void CyHalt(uint8 reason) CYREENTRANT
 \r
     #if defined (__ARMCC_VERSION)\r
         __breakpoint(0x0);\r
-    #elif defined(__GNUC__)\r
+    #elif defined(__GNUC__) || defined (__ICCARM__)\r
         __asm("    bkpt    1");\r
     #elif defined(__C51__)\r
         CYDEV_HALT_CPU;\r
@@ -1723,8 +1659,7 @@ void CyHalt(uint8 reason) CYREENTRANT
 *******************************************************************************/\r
 void CySoftwareReset(void) \r
 {\r
-    /* Perform software reset */\r
-    *RESET_CR2 = 0x1u;\r
+    CY_LIB_RESET_CR2_REG |= CY_LIB_RESET_CR2_RESET;\r
 }\r
 \r
 \r
@@ -1884,10 +1819,6 @@ void CyDelayFreq(uint32 freq) CYREENTRANT
 *******************************************************************************/\r
 void CyWdtStart(uint8 ticks, uint8 lpMode) \r
 {\r
-    #if(CY_PSOC5A)\r
-        CyILO_Start1K();\r
-    #endif  /* (CY_PSOC5A) */\r
-\r
     /* Set WDT interval */\r
     CY_WDT_CFG_REG = (CY_WDT_CFG_REG & ((uint8)(~CY_WDT_CFG_INTERVAL_MASK))) | (ticks & CY_WDT_CFG_INTERVAL_MASK);\r
 \r
@@ -1895,19 +1826,9 @@ void CyWdtStart(uint8 ticks, uint8 lpMode)
     CY_WDT_CFG_REG |= CY_WDT_CFG_CTW_RESET;\r
     CY_WDT_CFG_REG &= ((uint8)(~CY_WDT_CFG_CTW_RESET));\r
 \r
-    #if(!CY_PSOC5A)\r
-\r
-        /* Setting the low power mode */\r
-        CY_WDT_CFG_REG = (((uint8)(lpMode << CY_WDT_CFG_LPMODE_SHIFT)) & CY_WDT_CFG_LPMODE_MASK) |\r
-                          (CY_WDT_CFG_REG & ((uint8)(~CY_WDT_CFG_LPMODE_MASK)));\r
-    #else\r
-\r
-        if(0u != lpMode)\r
-        {\r
-            /* To remove unreferenced local variable warning */\r
-        }\r
-\r
-    #endif  /* (!CY_PSOC5A) */\r
+    /* Setting the low power mode */\r
+    CY_WDT_CFG_REG = (((uint8)(lpMode << CY_WDT_CFG_LPMODE_SHIFT)) & CY_WDT_CFG_LPMODE_MASK) |\r
+                       (CY_WDT_CFG_REG & ((uint8)(~CY_WDT_CFG_LPMODE_MASK)));\r
 \r
     /* Enables the watchdog reset */\r
     CY_WDT_CFG_REG |= CY_WDT_CFG_WDR_EN;\r
@@ -1930,19 +1851,7 @@ void CyWdtStart(uint8 ticks, uint8 lpMode)
 *******************************************************************************/\r
 void CyWdtClear(void) \r
 {\r
-    #if(CY_PSOC5A)\r
-\r
-        /* PSoC5 ES1 watchdog time clear requires workaround */\r
-        uint8 wdtCfg = CY_WDT_CFG_REG;\r
-        CY_WDT_CR_REG  = CY_WDT_CR_FEED;\r
-        CY_WDT_CFG_REG = CY_WDT_CFG_CLEAR_ALL;\r
-        CY_WDT_CFG_REG = wdtCfg;\r
-\r
-    #else\r
-\r
-        CY_WDT_CR_REG = CY_WDT_CR_FEED;\r
-\r
-    #endif  /* (CY_PSOC5A) */\r
+    CY_WDT_CR_REG = CY_WDT_CR_FEED;\r
 }\r
 \r
 \r
@@ -1959,11 +1868,10 @@ void CyWdtClear(void)
 *  reset: Option to reset device at a specified Vddd threshold:\r
 *           0 - Device is not reset.\r
 *           1 - Device is reset.\r
-*         This option is applicable for PSoC 3/PSoC 5LP devices only.\r
 *\r
 *  threshold: Sets the trip level for the voltage monitor.\r
-*  Values from 1.70 V to 5.45 V(for PSoC 3/PSoC 5LP) and from 2.45 V to 5.45 V\r
-*  (for PSoC 5TM) are accepted with the approximately 250 mV interval.\r
+*  Values from 1.70 V to 5.45 V are accepted with the approximately 250 mV\r
+*  interval.\r
 *\r
 * Return:\r
 *  None\r
@@ -1973,9 +1881,7 @@ void CyVdLvDigitEnable(uint8 reset, uint8 threshold)
 {\r
     *CY_INT_CLEAR_PTR = 0x01u;\r
 \r
-    #if(!CY_PSOC5A)\r
-        CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESD_EN));\r
-    #endif /*(!CY_PSOC5A)*/\r
+    CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESD_EN));\r
 \r
     CY_VD_LVI_TRIP_REG = (threshold & CY_VD_LVI_TRIP_LVID_MASK) |\r
                             (CY_VD_LVI_TRIP_REG & ((uint8)(~CY_VD_LVI_TRIP_LVID_MASK)));\r
@@ -1984,25 +1890,16 @@ void CyVdLvDigitEnable(uint8 reset, uint8 threshold)
     /* Timeout to eliminate glitches on the LVI/HVI when enabling */\r
     CyDelayUs(1u);\r
 \r
-       (void)CY_VD_PERSISTENT_STATUS_REG;\r
+    (void)CY_VD_PERSISTENT_STATUS_REG;\r
 \r
-    #if(!CY_PSOC5A)\r
-        if(0u != reset)\r
-        {\r
-            CY_VD_PRES_CONTROL_REG |= CY_VD_PRESD_EN;\r
-        }\r
-        else\r
-        {\r
-            CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESD_EN));\r
-        }\r
-    #else\r
-\r
-        if(0u != reset)\r
-        {\r
-            /* To remove unreferenced local variable warning */\r
-        }\r
-\r
-    #endif /*(!CY_PSOC5A)*/\r
+    if(0u != reset)\r
+    {\r
+        CY_VD_PRES_CONTROL_REG |= CY_VD_PRESD_EN;\r
+    }\r
+    else\r
+    {\r
+        CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESD_EN));\r
+    }\r
 \r
     *CY_INT_CLR_PEND_PTR = 0x01u;\r
     *CY_INT_ENABLE_PTR   = 0x01u;\r
@@ -2021,11 +1918,10 @@ void CyVdLvDigitEnable(uint8 reset, uint8 threshold)
 *  reset: Option to reset device at a specified Vdda threshold:\r
 *           0 - Device is not reset.\r
 *           1 - Device is reset.\r
-*         This option is applicable for PSoC 3/PSoC 5LP devices only.\r
 *\r
 *  threshold: Sets the trip level for the voltage monitor.\r
-*  Values from 1.70 V to 5.45 V(for PSoC 3/PSoC 5LP) and from 2.45 V to 5.45 V\r
-*  (for PSoC 5TM) are accepted with the approximately 250 mV interval.\r
+*  Values from 1.70 V to 5.45 V are accepted with the approximately 250 mV\r
+*  interval.\r
 *\r
 * Return:\r
 *  None\r
@@ -2035,9 +1931,7 @@ void CyVdLvAnalogEnable(uint8 reset, uint8 threshold)
 {\r
     *CY_INT_CLEAR_PTR = 0x01u;\r
 \r
-    #if(!CY_PSOC5A)\r
-        CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESA_EN));\r
-    #endif /*(!CY_PSOC5A)*/\r
+    CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESA_EN));\r
 \r
     CY_VD_LVI_TRIP_REG = ((uint8)(threshold << 4u)) | (CY_VD_LVI_TRIP_REG & 0x0Fu);\r
     CY_VD_LVI_HVI_CONTROL_REG |= CY_VD_LVIA_EN;\r
@@ -2045,25 +1939,16 @@ void CyVdLvAnalogEnable(uint8 reset, uint8 threshold)
     /* Timeout to eliminate glitches on the LVI/HVI when enabling */\r
     CyDelayUs(1u);\r
 \r
-       (void)CY_VD_PERSISTENT_STATUS_REG;\r
-\r
-    #if(!CY_PSOC5A)\r
-        if(0u != reset)\r
-        {\r
-            CY_VD_PRES_CONTROL_REG |= CY_VD_PRESA_EN;\r
-        }\r
-        else\r
-        {\r
-            CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESA_EN));\r
-        }\r
-    #else\r
-\r
-        if(0u != reset)\r
-        {\r
-            /* To remove unreferenced local variable warning */\r
-        }\r
+    (void)CY_VD_PERSISTENT_STATUS_REG;\r
 \r
-    #endif /*(!CY_PSOC5A)*/\r
+    if(0u != reset)\r
+    {\r
+        CY_VD_PRES_CONTROL_REG |= CY_VD_PRESA_EN;\r
+    }\r
+    else\r
+    {\r
+        CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESA_EN));\r
+    }\r
 \r
     *CY_INT_CLR_PEND_PTR = 0x01u;\r
     *CY_INT_ENABLE_PTR   = 0x01u;\r
@@ -2089,9 +1974,7 @@ void CyVdLvDigitDisable(void)
 {\r
     CY_VD_LVI_HVI_CONTROL_REG &= ((uint8)(~CY_VD_LVID_EN));\r
 \r
-    #if(!CY_PSOC5A)\r
-        CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESD_EN));\r
-    #endif /*(!CY_PSOC5A)*/\r
+    CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESD_EN));\r
 \r
     while(0u != (CY_VD_PERSISTENT_STATUS_REG & 0x07u))\r
     {\r
@@ -2105,8 +1988,8 @@ void CyVdLvDigitDisable(void)
 ********************************************************************************\r
 *\r
 * Summary:\r
-*  Disables the analog low voltage monitor\r
-*  (interrupt and device reset are disabled).\r
+*  Disables the analog low voltage monitor (interrupt and device reset are\r
+*  disabled).\r
 *\r
 * Parameters:\r
 *  None\r
@@ -2119,9 +2002,7 @@ void CyVdLvAnalogDisable(void)
 {\r
     CY_VD_LVI_HVI_CONTROL_REG &= ((uint8)(~CY_VD_LVIA_EN));\r
 \r
-    #if(!CY_PSOC5A)\r
-        CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESA_EN));\r
-    #endif /*(!CY_PSOC5A)*/\r
+    CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESA_EN));\r
 \r
     while(0u != (CY_VD_PERSISTENT_STATUS_REG & 0x07u))\r
     {\r
@@ -2149,16 +2030,14 @@ void CyVdHvAnalogEnable(void)
 {\r
     *CY_INT_CLEAR_PTR = 0x01u;\r
 \r
-    #if(!CY_PSOC5A)\r
-        CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESA_EN));\r
-    #endif /*(!CY_PSOC5A)*/\r
+    CY_VD_PRES_CONTROL_REG &= ((uint8)(~CY_VD_PRESA_EN));\r
 \r
     CY_VD_LVI_HVI_CONTROL_REG |= CY_VD_HVIA_EN;\r
 \r
     /* Timeout to eliminate glitches on the LVI/HVI when enabling */\r
     CyDelayUs(1u);\r
 \r
-       (void) CY_VD_PERSISTENT_STATUS_REG;\r
+    (void) CY_VD_PERSISTENT_STATUS_REG;\r
 \r
     *CY_INT_CLR_PEND_PTR = 0x01u;\r
     *CY_INT_ENABLE_PTR   = 0x01u;\r
@@ -2197,10 +2076,10 @@ void CyVdHvAnalogDisable(void)
 *\r
 * Parameters:\r
 *  mask: Bits in the shadow register to clear.\r
-*       Value        Define                Bit To Clear\r
-*       0x01         CY_VD_LVID            LVID\r
-*       0x02         CY_VD_LVIA            LVIA\r
-*       0x04         CY_VD_HVIA            HVIA\r
+*   Define                  Definition\r
+*   CY_VD_LVID            Persistent status of digital LVI.\r
+*   CY_VD_LVIA            Persistent status of analog LVI.\r
+*   CY_VD_HVIA            Persistent status of analog HVI.\r
 *\r
 * Return:\r
 *  Status.  Same enumerated bit values as used for the mask parameter.\r
@@ -2228,7 +2107,11 @@ uint8 CyVdStickyStatus(uint8 mask)
 *  None\r
 *\r
 * Return:\r
-*  Status. Same enumerated bit values as used for the mask parameter.\r
+*  Status:\r
+*   Define                  Definition\r
+*   CY_VD_LVID            Persistent status of digital LVI.\r
+*   CY_VD_LVIA            Persistent status of analog LVI.\r
+*   CY_VD_HVIA            Persistent status of analog HVI.\r
 *\r
 *******************************************************************************/\r
 uint8 CyVdRealTimeStatus(void) \r
@@ -2737,110 +2620,91 @@ void CyEnableInts(uint32 mask)
 #endif  /* (CY_PSOC5) */\r
 \r
 \r
-#if(!CY_PSOC5A)\r
-\r
-    #if(CYDEV_VARIABLE_VDDA == 1)\r
-\r
-\r
-        /*******************************************************************************\r
-        * Function Name: CySetScPumps\r
-        ********************************************************************************\r
-        *\r
-        * Summary:\r
-        *  If 1 is passed as a parameter:\r
-        *   - if any of the SC blocks are used - enable pumps for the SC blocks and\r
-        *     start boost clock.\r
-        *   - For the each enabled SC block set boost clock index and enable boost clock.\r
-        *\r
-        *  If non-1 value is passed as a parameter:\r
-        *   - If all SC blocks are not used - disable pumps for the SC blocks and\r
-        *     stop boost clock.\r
-        *   - For the each enabled SC block clear boost clock index and disable boost\r
-        *     clock.\r
-               *\r
-        *  The global variable CyScPumpEnabled is updated to be equal to passed\r
-        *  parameter.\r
-        *\r
-        * Parameters:\r
-        *   uint8 enable: Enable/disable SC pumps and boost clock for enabled SC block.\r
-        *                 1 - Enable\r
-        *                 0 - Disable\r
-        *\r
-        * Return:\r
-        *   None\r
-        *\r
-        *******************************************************************************/\r
-        void CySetScPumps(uint8 enable) \r
-        {\r
+#if(CYDEV_VARIABLE_VDDA == 1)\r
 \r
-            if(1u == enable)\r
+    /*******************************************************************************\r
+    * Function Name: CySetScPumps\r
+    ********************************************************************************\r
+    *\r
+    * Summary:\r
+    *  If 1 is passed as a parameter:\r
+    *   - if any of the SC blocks are used - enable pumps for the SC blocks and\r
+    *     start boost clock.\r
+    *   - For the each enabled SC block set boost clock index and enable boost\r
+    *     clock.\r
+    *\r
+    *  If non-1 value is passed as a parameter:\r
+    *   - If all SC blocks are not used - disable pumps for the SC blocks and\r
+    *     stop boost clock.\r
+    *   - For the each enabled SC block clear boost clock index and disable boost\r
+    *     clock.\r
+    *\r
+    *  The global variable CyScPumpEnabled is updated to be equal to passed\r
+    *  parameter.\r
+    *\r
+    * Parameters:\r
+    *   uint8 enable: Enable/disable SC pumps and boost clock for enabled SC block.\r
+    *                 1 - Enable\r
+    *                 0 - Disable\r
+    *\r
+    * Return:\r
+    *   None\r
+    *\r
+    *******************************************************************************/\r
+    void CySetScPumps(uint8 enable) \r
+    {\r
+        if(1u == enable)\r
+        {\r
+            /* The SC pumps should be enabled */\r
+            CyScPumpEnabled = 1u;\r
+            /* Enable pumps if any of SC blocks are used */\r
+            if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAPS_MASK))\r
             {\r
-                /* The SC pumps should be enabled */\r
-                CyScPumpEnabled = 1u;\r
-\r
-\r
-                /* Enable pumps if any of SC blocks are used */\r
-                if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAPS_MASK))\r
-                {\r
-\r
-                    CY_LIB_SC_MISC_REG |= CY_LIB_SC_MISC_PUMP_FORCE;\r
-\r
-                    CyScBoostClk_Start();\r
-                }\r
-\r
-\r
-                /* Set positive pump for each enabled SC block: set clock index and enable it */\r
-                if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAP0_EN))\r
-                {\r
-                    CY_LIB_SC0_BST_REG = (CY_LIB_SC0_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK) | CyScBoostClk__INDEX;\r
-                    CY_LIB_SC0_BST_REG |= CY_LIB_SC_BST_CLK_EN;\r
-                }\r
-\r
-                if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAP1_EN))\r
-                {\r
-                    CY_LIB_SC1_BST_REG = (CY_LIB_SC1_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK) | CyScBoostClk__INDEX;\r
-                    CY_LIB_SC1_BST_REG |= CY_LIB_SC_BST_CLK_EN;\r
-                }\r
-\r
-                if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAP2_EN))\r
-                {\r
-                    CY_LIB_SC2_BST_REG = (CY_LIB_SC2_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK) | CyScBoostClk__INDEX;\r
-                    CY_LIB_SC2_BST_REG |= CY_LIB_SC_BST_CLK_EN;\r
-                }\r
-\r
-                if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAP3_EN))\r
-                {\r
-                    CY_LIB_SC3_BST_REG = (CY_LIB_SC3_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK) | CyScBoostClk__INDEX;\r
-                    CY_LIB_SC3_BST_REG |= CY_LIB_SC_BST_CLK_EN;\r
-                }\r
+                CY_LIB_SC_MISC_REG |= CY_LIB_SC_MISC_PUMP_FORCE;\r
+                CyScBoostClk_Start();\r
             }\r
-            else\r
+            /* Set positive pump for each enabled SC block: set clock index and enable it */\r
+            if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAP0_EN))\r
             {\r
-                /* The SC pumps should be disabled */\r
-                CyScPumpEnabled = 0u;\r
-\r
-                /* Disable pumps for all SC blocks and stop boost clock */\r
-                CY_LIB_SC_MISC_REG &= ((uint8)(~CY_LIB_SC_MISC_PUMP_FORCE));\r
-                CyScBoostClk_Stop();\r
-\r
-                /* Disable boost clock and clear clock index for each SC block */\r
-                CY_LIB_SC0_BST_REG &= ((uint8)(~CY_LIB_SC_BST_CLK_EN));\r
-                CY_LIB_SC0_BST_REG = CY_LIB_SC0_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK;\r
-\r
-                CY_LIB_SC1_BST_REG &= ((uint8)(~CY_LIB_SC_BST_CLK_EN));\r
-                CY_LIB_SC1_BST_REG = CY_LIB_SC1_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK;\r
-\r
-                CY_LIB_SC2_BST_REG &= ((uint8)(~CY_LIB_SC_BST_CLK_EN));\r
-                CY_LIB_SC2_BST_REG = CY_LIB_SC2_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK;\r
-\r
-                CY_LIB_SC3_BST_REG &= ((uint8)(~CY_LIB_SC_BST_CLK_EN));\r
-                CY_LIB_SC3_BST_REG = CY_LIB_SC3_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK;\r
+                CY_LIB_SC0_BST_REG = (CY_LIB_SC0_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK) | CyScBoostClk__INDEX;\r
+                CY_LIB_SC0_BST_REG |= CY_LIB_SC_BST_CLK_EN;\r
+            }\r
+            if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAP1_EN))\r
+            {\r
+                CY_LIB_SC1_BST_REG = (CY_LIB_SC1_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK) | CyScBoostClk__INDEX;\r
+                CY_LIB_SC1_BST_REG |= CY_LIB_SC_BST_CLK_EN;\r
+            }\r
+            if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAP2_EN))\r
+            {\r
+                CY_LIB_SC2_BST_REG = (CY_LIB_SC2_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK) | CyScBoostClk__INDEX;\r
+                CY_LIB_SC2_BST_REG |= CY_LIB_SC_BST_CLK_EN;\r
+            }\r
+            if(0u != (CY_LIB_ACT_CFG9_REG & CY_LIB_ACT_CFG9_SWCAP3_EN))\r
+            {\r
+                CY_LIB_SC3_BST_REG = (CY_LIB_SC3_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK) | CyScBoostClk__INDEX;\r
+                CY_LIB_SC3_BST_REG |= CY_LIB_SC_BST_CLK_EN;\r
             }\r
         }\r
+        else\r
+        {\r
+            /* The SC pumps should be disabled */\r
+            CyScPumpEnabled = 0u;\r
+            /* Disable pumps for all SC blocks and stop boost clock */\r
+            CY_LIB_SC_MISC_REG &= ((uint8)(~CY_LIB_SC_MISC_PUMP_FORCE));\r
+            CyScBoostClk_Stop();\r
+            /* Disable boost clock and clear clock index for each SC block */\r
+            CY_LIB_SC0_BST_REG &= ((uint8)(~CY_LIB_SC_BST_CLK_EN));\r
+            CY_LIB_SC0_BST_REG = CY_LIB_SC0_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK;\r
+            CY_LIB_SC1_BST_REG &= ((uint8)(~CY_LIB_SC_BST_CLK_EN));\r
+            CY_LIB_SC1_BST_REG = CY_LIB_SC1_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK;\r
+            CY_LIB_SC2_BST_REG &= ((uint8)(~CY_LIB_SC_BST_CLK_EN));\r
+            CY_LIB_SC2_BST_REG = CY_LIB_SC2_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK;\r
+            CY_LIB_SC3_BST_REG &= ((uint8)(~CY_LIB_SC_BST_CLK_EN));\r
+            CY_LIB_SC3_BST_REG = CY_LIB_SC3_BST_REG & CY_LIB_SC_BST_CLK_INDEX_MASK;\r
+        }\r
+    }\r
 \r
-    #endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
-\r
-#endif /* (!CY_PSOC5A) */\r
+#endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
 \r
 \r
 /* [] END OF FILE */\r
index cefca8d..8a69921 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CyLib.h\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 * Description:\r
 *  Provides the function definitions for the system, clocking, interrupts and\r
 #endif  /* (CY_PSOC3) */\r
 \r
 \r
-#if(!CY_PSOC5A)\r
+#if(CYDEV_VARIABLE_VDDA == 1)\r
 \r
-    #if(CYDEV_VARIABLE_VDDA == 1)\r
+    #include "CyScBoostClk.h"\r
 \r
-        #include "CyScBoostClk.h"\r
-\r
-    #endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
-\r
-#endif /* (!CY_PSOC5A) */\r
+#endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
 \r
 \r
 /* Global variable with preserved reset status */\r
 extern uint8 CYXDATA CyResetStatus;\r
 \r
 \r
-#if(!CY_PSOC5A)\r
-\r
-    /* Variable Vdda */\r
-    #if(CYDEV_VARIABLE_VDDA == 1)\r
-\r
-        extern uint8 CyScPumpEnabled;\r
+/* Variable Vdda */\r
+#if(CYDEV_VARIABLE_VDDA == 1)\r
 \r
-    #endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
+    extern uint8 CyScPumpEnabled;\r
 \r
-#endif /* (!CY_PSOC5A) */\r
+#endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
 \r
 \r
 /* Do not use these definitions directly in your application */\r
@@ -110,18 +102,15 @@ void  CyXTAL_32KHZ_Stop(void) ;
 cystatus CyXTAL_Start(uint8 wait) ;\r
 void  CyXTAL_Stop(void) ;\r
 void  CyXTAL_SetStartup(uint8 setting) ;\r
-#if(!CY_PSOC5A)\r
-    void  CyXTAL_EnableErrStatus(void) ;\r
-    void  CyXTAL_DisableErrStatus(void) ;\r
-    uint8 CyXTAL_ReadStatus(void) ;\r
-    void  CyXTAL_EnableFaultRecovery(void) ;\r
-    void  CyXTAL_DisableFaultRecovery(void) ;\r
-#endif  /* (!CY_PSOC5A) */\r
-\r
-#if(CY_PSOC3 || CY_PSOC5LP)\r
-    void CyXTAL_SetFbVoltage(uint8 setting) ;\r
-    void CyXTAL_SetWdVoltage(uint8 setting) ;\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+\r
+void  CyXTAL_EnableErrStatus(void) ;\r
+void  CyXTAL_DisableErrStatus(void) ;\r
+uint8 CyXTAL_ReadStatus(void) ;\r
+void  CyXTAL_EnableFaultRecovery(void) ;\r
+void  CyXTAL_DisableFaultRecovery(void) ;\r
+\r
+void CyXTAL_SetFbVoltage(uint8 setting) ;\r
+void CyXTAL_SetWdVoltage(uint8 setting) ;\r
 \r
 void CyWdtStart(uint8 ticks, uint8 lpMode) ;\r
 void CyWdtClear(void) ;\r
@@ -172,11 +161,7 @@ void CyVdHvAnalogDisable(void) ;
 uint8 CyVdStickyStatus(uint8 mask) ;\r
 uint8 CyVdRealTimeStatus(void) ;\r
 \r
-#if(!CY_PSOC5A)\r
-\r
-    void CySetScPumps(uint8 enable) ;\r
-\r
-#endif /* (!CY_PSOC5A) */\r
+void CySetScPumps(uint8 enable) ;\r
 \r
 \r
 /***************************************\r
@@ -207,7 +192,6 @@ uint8 CyVdRealTimeStatus(void) ;
 *******************************************************************************/\r
 #define CY_XTAL32K_ANA_STAT             (0x20u)\r
 \r
-\r
 #define CY_CLK_XTAL32_CR_LPM            (0x02u)\r
 #define CY_CLK_XTAL32_CR_EN             (0x01u)\r
 #if(CY_PSOC3)\r
@@ -285,49 +269,48 @@ uint8 CyVdRealTimeStatus(void) ;
 \r
 \r
 /*******************************************************************************\r
-*    Variable VDDA\r
+*    Variable VDDA API Constants\r
 *******************************************************************************/\r
-#if(!CY_PSOC5A)\r
-\r
-    #if(CYDEV_VARIABLE_VDDA == 1)\r
+#if(CYDEV_VARIABLE_VDDA == 1)\r
 \r
-        /* Active Power Mode Configuration Register 9 */\r
-        #define CY_LIB_ACT_CFG9_SWCAP0_EN        (0x01u)\r
-        #define CY_LIB_ACT_CFG9_SWCAP1_EN        (0x02u)\r
-        #define CY_LIB_ACT_CFG9_SWCAP2_EN        (0x04u)\r
-        #define CY_LIB_ACT_CFG9_SWCAP3_EN        (0x08u)\r
-        #define CY_LIB_ACT_CFG9_SWCAPS_MASK      (0x0Fu)\r
+    /* Active Power Mode Configuration Register 9 */\r
+    #define CY_LIB_ACT_CFG9_SWCAP0_EN        (0x01u)\r
+    #define CY_LIB_ACT_CFG9_SWCAP1_EN        (0x02u)\r
+    #define CY_LIB_ACT_CFG9_SWCAP2_EN        (0x04u)\r
+    #define CY_LIB_ACT_CFG9_SWCAP3_EN        (0x08u)\r
+    #define CY_LIB_ACT_CFG9_SWCAPS_MASK      (0x0Fu)\r
 \r
-        /* Switched Cap Miscellaneous Control Register */\r
-        #define CY_LIB_SC_MISC_PUMP_FORCE        (0x20u)\r
+    /* Switched Cap Miscellaneous Control Register */\r
+    #define CY_LIB_SC_MISC_PUMP_FORCE        (0x20u)\r
 \r
-        /* Switched Capacitor 0 Boost Clock Selection Register */\r
-        #define CY_LIB_SC_BST_CLK_EN             (0x08u)\r
-        #define CY_LIB_SC_BST_CLK_INDEX_MASK     (0xF8u)\r
+    /* Switched Capacitor 0 Boost Clock Selection Register */\r
+    #define CY_LIB_SC_BST_CLK_EN             (0x08u)\r
+    #define CY_LIB_SC_BST_CLK_INDEX_MASK     (0xF8u)\r
 \r
-    #endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
-\r
-#endif /* (!CY_PSOC5A) */\r
+#endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
 \r
 \r
 /*******************************************************************************\r
-* Clock Distribution Constants\r
+* Clock Distribution API Constants\r
 *******************************************************************************/\r
 #define CY_LIB_CLKDIST_AMASK_MASK       (0xF0u)\r
 #define CY_LIB_CLKDIST_DMASK_MASK       (0x00u)\r
 #define CY_LIB_CLKDIST_LD_LOAD          (0x01u)\r
-#define CY_LIB_CLKDIST_BCFG2_MASK       (0x80u) /* Enable shadow loads */\r
+#define CY_LIB_CLKDIST_BCFG2_MASK       (0x80u)\r
 #define CY_LIB_CLKDIST_MASTERCLK_DIV    (7u)\r
-#define CY_LIB_CLKDIST_BCFG2_SSS        (0x40u) /* Sync source is same frequency */\r
+#define CY_LIB_CLKDIST_BCFG2_SSS        (0x40u)\r
 #define CY_LIB_CLKDIST_MSTR1_SRC_MASK   (0xFCu)\r
 #define CY_LIB_FASTCLK_IMO_DOUBLER      (0x10u)\r
 #define CY_LIB_FASTCLK_IMO_IMO          (0x20u)\r
 #define CY_LIB_CLKDIST_CR_IMO2X         (0x40u)\r
 #define CY_LIB_FASTCLK_IMO_CR_RANGE_MASK (0xF8u)\r
 \r
-#define CY_LIB_CLKDIST_CR_PLL_SCR_MASK   (0xFCu)\r
+#define CY_LIB_CLKDIST_CR_PLL_SCR_MASK  (0xFCu)\r
 \r
-#define ILO_CONTROL_PD_MODE             (0x10u)\r
+\r
+/* CyILO_SetPowerMode() */\r
+#define CY_ILO_CONTROL_PD_MODE          (0x10u)\r
+#define CY_ILO_CONTROL_PD_POSITION      (4u)\r
 \r
 #define CY_ILO_SOURCE_100K              (0u)\r
 #define CY_ILO_SOURCE_33K               (1u)\r
@@ -341,7 +324,6 @@ uint8 CyVdRealTimeStatus(void) ;
 #define CY_ILO_SOURCE_33K_SET           (0x04u)\r
 #define CY_ILO_SOURCE_100K_SET          (0x00u)\r
 \r
-\r
 #define CY_MASTER_SOURCE_IMO            (0u)\r
 #define CY_MASTER_SOURCE_PLL            (1u)\r
 #define CY_MASTER_SOURCE_XTAL           (2u)\r
@@ -350,16 +332,21 @@ uint8 CyVdRealTimeStatus(void) ;
 #define CY_IMO_SOURCE_IMO               (0u)\r
 #define CY_IMO_SOURCE_XTAL              (1u)\r
 #define CY_IMO_SOURCE_DSI               (2u)\r
-#define IMO_PM_ENABLE                   (0x10u)    /* Enable IMO clock source. */\r
-#define FASTCLK_IMO_USBCLK_ON_SET       (0x40u)\r
 \r
-#define CLOCK_IMO_3MHZ_VALUE            (0x03u)\r
-#define CLOCK_IMO_6MHZ_VALUE            (0x01u)\r
-#define CLOCK_IMO_12MHZ_VALUE           (0x00u)\r
-#define CLOCK_IMO_24MHZ_VALUE           (0x02u)\r
-#define CLOCK_IMO_48MHZ_VALUE           (0x04u)\r
-#define CLOCK_IMO_62MHZ_VALUE           (0x05u)\r
-#define CLOCK_IMO_74MHZ_VALUE           (0x06u)\r
+\r
+/* CyIMO_Start() */\r
+#define CY_LIB_PM_ACT_CFG0_IMO_EN       (0x10u)\r
+#define CY_LIB_PM_STBY_CFG0_IMO_EN      (0x10u)\r
+#define CY_LIB_CLK_IMO_FTW_TIMEOUT      (0x00u)\r
+\r
+#define CY_LIB_IMO_3MHZ_VALUE           (0x03u)\r
+#define CY_LIB_IMO_6MHZ_VALUE           (0x01u)\r
+#define CY_LIB_IMO_12MHZ_VALUE          (0x00u)\r
+#define CY_LIB_IMO_24MHZ_VALUE          (0x02u)\r
+#define CY_LIB_IMO_48MHZ_VALUE          (0x04u)\r
+#define CY_LIB_IMO_62MHZ_VALUE          (0x05u)\r
+#define CY_LIB_IMO_74MHZ_VALUE          (0x06u)\r
+\r
 \r
 /* CyIMO_SetFreq() */\r
 #define CY_IMO_FREQ_3MHZ                (0u)\r
@@ -367,42 +354,48 @@ uint8 CyVdRealTimeStatus(void) ;
 #define CY_IMO_FREQ_12MHZ               (2u)\r
 #define CY_IMO_FREQ_24MHZ               (3u)\r
 #define CY_IMO_FREQ_48MHZ               (4u)\r
-#if(!CY_PSOC5A)\r
-    #define CY_IMO_FREQ_62MHZ           (5u)\r
-#endif  /* (!CY_PSOC5A) */\r
+#define CY_IMO_FREQ_62MHZ               (5u)\r
+#if(CY_PSOC5)\r
+    #define CY_IMO_FREQ_74MHZ           (6u)\r
+#endif  /* (CY_PSOC5) */\r
 #define CY_IMO_FREQ_USB                 (8u)\r
 \r
+#define CY_LIB_IMO_USBCLK_ON_SET        (0x40u)\r
 \r
-#define SFR_USER_CPUCLK_DIV_MASK        (0x0Fu)\r
-#define CLKDIST_DIV_POSITION            (4u)\r
-#define CLKDIST_MSTR1_DIV_CLEAR         (0x0Fu)\r
-#define CLOCK_USB_ENABLE                (0x02u)\r
-#define CLOCK_IMO_OUT_X2                (0x10u)\r
-#define CLOCK_IMO_OUT_X1                ((uint8)(~CLOCK_IMO_OUT_X2))\r
+\r
+/* CyCpuClk_SetDivider() */\r
+#define CY_LIB_CLKDIST_DIV_POSITION     (4u)\r
+#define CY_LIB_CLKDIST_MSTR1_DIV_MASK   (0x0Fu)\r
+\r
+\r
+/* CyIMO_SetTrimValue() */\r
+#define CY_LIB_USB_CLK_EN               (0x02u)\r
+\r
+\r
+/* CyPLL_OUT_SetSource() - parameters */\r
 #define CY_PLL_SOURCE_IMO               (0u)\r
 #define CY_PLL_SOURCE_XTAL              (1u)\r
 #define CY_PLL_SOURCE_DSI               (2u)\r
 \r
-#define CLOCK_IMO2X_ECO                 ((uint8)(~CLOCK_IMO2X_DSI))\r
 \r
-#define ILO_CONTROL_PD_POSITION         (4u)\r
-#define ILO_CONTROL_1KHZ_ON             (0x02u)\r
-#define ILO_CONTROL_100KHZ_ON           (0x04u)\r
-#define ILO_CONTROL_33KHZ_ON            (0x20u)\r
+/* CyILO_[Start|Stop][1|100K](), CyILO_[Enable|Disable]33K() */\r
+#define CY_LIB_SLOWCLK_ILO_CR0_EN_1KHZ   (0x02u)\r
+#define CY_LIB_SLOWCLK_ILO_CR0_EN_33KHZ  (0x20u)\r
+#define CY_LIB_SLOWCLK_ILO_CR0_EN_100KHZ (0x04u)\r
 \r
-#define USB_CLKDIST_CONFIG_MASK         (0x03u)\r
-#define USB_CLK_IMO2X                   (0x00u)\r
-#define USB_CLK_IMO                     (0x01u)\r
-#define USB_CLK_PLL                     (0x02u)\r
-#define USB_CLK_DSI                     (0x03u)\r
-#define USB_CLK_DIV2_ON                 (0x04u)\r
-#define USB_CLK_STOP_FLAG               (0x00u)\r
-#define USB_CLK_START_FLAG              (0x01u)\r
 \r
-#define FTW_CLEAR_ALL_BITS              (0x00u) /* To clear all bits of PM_TW_CFG2 */\r
-#define FTW_CLEAR_FTW_BITS              (0xFCu) /* To clear FTW bits of PM_TW_CFG2 */\r
-#define FTW_ENABLE                      (0x01u) /* To enable FTW, no interrupt */\r
+/* CyUsbClk_SetSource() */\r
+#define CY_LIB_CLKDIST_UCFG_SRC_SEL_MASK (0x03u)\r
+\r
 \r
+/* CyUsbClk_SetSource() - parameters */\r
+#define CY_LIB_USB_CLK_IMO2X            (0x00u)\r
+#define CY_LIB_USB_CLK_IMO              (0x01u)\r
+#define CY_LIB_USB_CLK_PLL              (0x02u)\r
+#define CY_LIB_USB_CLK_DSI              (0x03u)\r
+\r
+\r
+/* CyUSB_PowerOnCheck() */\r
 #define CY_ACT_USB_ENABLED              (0x01u)\r
 #define CY_ALT_ACT_USB_ENABLED          (0x01u)\r
 \r
@@ -412,6 +405,72 @@ uint8 CyVdRealTimeStatus(void) ;
 ***************************************/\r
 \r
 \r
+/*******************************************************************************\r
+* System Registers\r
+*******************************************************************************/\r
+\r
+/* Software Reset Control Register */\r
+#define CY_LIB_RESET_CR2_REG         (* (reg8 *) CYREG_RESET_CR2)\r
+#define CY_LIB_RESET_CR2_PTR         (  (reg8 *) CYREG_RESET_CR2)\r
+\r
+/* Timewheel Configuration Register 0 */\r
+#define CY_LIB_PM_TW_CFG0_REG           (*(reg8 *) CYREG_PM_TW_CFG0)\r
+#define CY_LIB_PM_TW_CFG0_PTR           ( (reg8 *) CYREG_PM_TW_CFG0)\r
+\r
+/* Timewheel Configuration Register 2 */\r
+#define CY_LIB_PM_TW_CFG2_REG           (*(reg8 *) CYREG_PM_TW_CFG2)\r
+#define CY_LIB_PM_TW_CFG2_PTR           ( (reg8 *) CYREG_PM_TW_CFG2)\r
+\r
+/* USB Configuration Register */\r
+#define CY_LIB_CLKDIST_UCFG_REG         (*(reg8 *) CYREG_CLKDIST_UCFG)\r
+#define CY_LIB_CLKDIST_UCFG_PTR         ( (reg8 *) CYREG_CLKDIST_UCFG)\r
+\r
+/* Internal Main Oscillator Trim Register 1 */\r
+#define CY_LIB_IMO_TR1_REG              (*(reg8 *) CYREG_IMO_TR1)\r
+#define CY_LIB_IMO_TR1_PTR              ( (reg8 *) CYREG_IMO_TR1)\r
+\r
+/* USB control 1 Register */\r
+#define CY_LIB_USB_CR1_REG              (*(reg8 *) CYREG_USB_CR1 )\r
+#define CY_LIB_USB_CR1_PTR              ( (reg8 *) CYREG_USB_CR1 )\r
+\r
+/* Active Power Mode Configuration Register 0 */\r
+#define CY_LIB_PM_ACT_CFG0_REG          (*(reg8 *) CYREG_PM_ACT_CFG0)\r
+#define CY_LIB_PM_ACT_CFG0_PTR          ( (reg8 *) CYREG_PM_ACT_CFG0)\r
+\r
+/* Standby Power Mode Configuration Register 0 */\r
+#define CY_LIB_PM_STBY_CFG0_REG          (*(reg8 *) CYREG_PM_STBY_CFG0)\r
+#define CY_LIB_PM_STBY_CFG0_PTR          ( (reg8 *) CYREG_PM_STBY_CFG0)\r
+\r
+/* Active Power Mode Configuration Register 5 */\r
+#define CY_LIB_PM_ACT_CFG5_REG              (* (reg8 *) CYREG_PM_ACT_CFG5 )\r
+#define CY_LIB_PM_ACT_CFG5_PTR              (  (reg8 *) CYREG_PM_ACT_CFG5 )\r
+\r
+/* Standby Power Mode Configuration Register 5 */\r
+#define CY_LIB_PM_STBY_CFG5_REG             (* (reg8 *) CYREG_PM_STBY_CFG5 )\r
+#define CY_LIB_PM_STBY_CFG5_PTR             (  (reg8 *) CYREG_PM_STBY_CFG5 )\r
+\r
+/* CyIMO_SetTrimValue() */\r
+#if(CY_PSOC3)\r
+    #define CY_LIB_TRIM_IMO_3MHZ_PTR         ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_3MHZ)\r
+    #define CY_LIB_TRIM_IMO_6MHZ_PTR         ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_6MHZ)\r
+    #define CY_LIB_TRIM_IMO_12MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_12MHZ)\r
+    #define CY_LIB_TRIM_IMO_24MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_24MHZ)\r
+    #define CY_LIB_TRIM_IMO_67MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_67MHZ)\r
+    #define CY_LIB_TRIM_IMO_80MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_80MHZ)\r
+    #define CY_LIB_TRIM_IMO_USB_PTR          ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_USB)\r
+    #define CY_LIB_TRIM_IMO_TR1_PTR          ((void far *) (CYREG_FLSHID_MFG_CFG_IMO_TR1 + 1u))\r
+ #else\r
+    #define CY_LIB_TRIM_IMO_3MHZ_PTR         ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_3MHZ)\r
+    #define CY_LIB_TRIM_IMO_6MHZ_PTR         ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_6MHZ)\r
+    #define CY_LIB_TRIM_IMO_12MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_12MHZ)\r
+    #define CY_LIB_TRIM_IMO_24MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_24MHZ)\r
+    #define CY_LIB_TRIM_IMO_67MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_67MHZ)\r
+    #define CY_LIB_TRIM_IMO_80MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_80MHZ)\r
+    #define CY_LIB_TRIM_IMO_USB_PTR          ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_USB)\r
+    #define CY_LIB_TRIM_IMO_TR1_PTR          ((reg8 *) (CYREG_FLSHID_MFG_CFG_IMO_TR1 + 1u))\r
+#endif  /* (CY_PSOC3) */\r
+\r
+\r
 /*******************************************************************************\r
 * PLL Registers\r
 *******************************************************************************/\r
@@ -442,16 +501,16 @@ uint8 CyVdRealTimeStatus(void) ;
 *******************************************************************************/\r
 \r
 /* External MHz Crystal Oscillator Status and Control Register */\r
-#define CY_CLK_XMHZ_CSR_REG           (*(reg8 *) CYREG_FASTCLK_XMHZ_CSR)\r
-#define CY_CLK_XMHZ_CSR_PTR           ( (reg8 *) CYREG_FASTCLK_XMHZ_CSR)\r
+#define CY_CLK_XMHZ_CSR_REG         (*(reg8 *) CYREG_FASTCLK_XMHZ_CSR)\r
+#define CY_CLK_XMHZ_CSR_PTR         ( (reg8 *) CYREG_FASTCLK_XMHZ_CSR)\r
 \r
 /* External MHz Crystal Oscillator Configuration Register 0 */\r
-#define CY_CLK_XMHZ_CFG0_REG           (*(reg8 *) CYREG_FASTCLK_XMHZ_CFG0)\r
-#define CY_CLK_XMHZ_CFG0_PTR           ( (reg8 *) CYREG_FASTCLK_XMHZ_CFG0)\r
+#define CY_CLK_XMHZ_CFG0_REG        (*(reg8 *) CYREG_FASTCLK_XMHZ_CFG0)\r
+#define CY_CLK_XMHZ_CFG0_PTR        ( (reg8 *) CYREG_FASTCLK_XMHZ_CFG0)\r
 \r
 /* External MHz Crystal Oscillator Configuration Register 1 */\r
-#define CY_CLK_XMHZ_CFG1_REG           (*(reg8 *) CYREG_FASTCLK_XMHZ_CFG1)\r
-#define CY_CLK_XMHZ_CFG1_PTR           ( (reg8 *) CYREG_FASTCLK_XMHZ_CFG1)\r
+#define CY_CLK_XMHZ_CFG1_REG        (*(reg8 *) CYREG_FASTCLK_XMHZ_CFG1)\r
+#define CY_CLK_XMHZ_CFG1_PTR        ( (reg8 *) CYREG_FASTCLK_XMHZ_CFG1)\r
 \r
 \r
 /*******************************************************************************\r
@@ -459,20 +518,20 @@ uint8 CyVdRealTimeStatus(void) ;
 *******************************************************************************/\r
 \r
 /* 32 kHz Watch Crystal Oscillator Trim Register */\r
-#define CY_CLK_XTAL32_TR_REG            (*(reg8 *) CYREG_X32_TR)\r
-#define CY_CLK_XTAL32_TR_PTR            ( (reg8 *) CYREG_X32_TR)\r
+#define CY_CLK_XTAL32_TR_REG        (*(reg8 *) CYREG_X32_TR)\r
+#define CY_CLK_XTAL32_TR_PTR        ( (reg8 *) CYREG_X32_TR)\r
 \r
 /* External 32kHz Crystal Oscillator Test Register */\r
-#define CY_CLK_XTAL32_TST_REG           (*(reg8 *) CYREG_SLOWCLK_X32_TST)\r
-#define CY_CLK_XTAL32_TST_PTR           ( (reg8 *) CYREG_SLOWCLK_X32_TST)\r
+#define CY_CLK_XTAL32_TST_REG       (*(reg8 *) CYREG_SLOWCLK_X32_TST)\r
+#define CY_CLK_XTAL32_TST_PTR       ( (reg8 *) CYREG_SLOWCLK_X32_TST)\r
 \r
 /* External 32kHz Crystal Oscillator Control Register */\r
-#define CY_CLK_XTAL32_CR_REG            (*(reg8 *) CYREG_SLOWCLK_X32_CR)\r
-#define CY_CLK_XTAL32_CR_PTR            ( (reg8 *) CYREG_SLOWCLK_X32_CR)\r
+#define CY_CLK_XTAL32_CR_REG        (*(reg8 *) CYREG_SLOWCLK_X32_CR)\r
+#define CY_CLK_XTAL32_CR_PTR        ( (reg8 *) CYREG_SLOWCLK_X32_CR)\r
 \r
 /* External 32kHz Crystal Oscillator Configuration Register */\r
-#define CY_CLK_XTAL32_CFG_REG           (*(reg8 *) CYREG_SLOWCLK_X32_CFG)\r
-#define CY_CLK_XTAL32_CFG_PTR           ( (reg8 *) CYREG_SLOWCLK_X32_CFG)\r
+#define CY_CLK_XTAL32_CFG_REG       (*(reg8 *) CYREG_SLOWCLK_X32_CFG)\r
+#define CY_CLK_XTAL32_CFG_PTR       ( (reg8 *) CYREG_SLOWCLK_X32_CFG)\r
 \r
 \r
 /*******************************************************************************\r
@@ -492,56 +551,52 @@ uint8 CyVdRealTimeStatus(void) ;
 *    LVI/HVI Registers\r
 *******************************************************************************/\r
 \r
-#define CY_VD_LVI_TRIP_REG             (* (reg8 *) CYDEV_RESET_CR0)\r
-#define CY_VD_LVI_TRIP_PTR             (  (reg8 *) CYDEV_RESET_CR0)\r
+#define CY_VD_LVI_TRIP_REG          (* (reg8 *) CYREG_RESET_CR0)\r
+#define CY_VD_LVI_TRIP_PTR          (  (reg8 *) CYREG_RESET_CR0)\r
 \r
-#define CY_VD_LVI_HVI_CONTROL_REG      (* (reg8 *) CYDEV_RESET_CR1)\r
-#define CY_VD_LVI_HVI_CONTROL_PTR      (  (reg8 *) CYDEV_RESET_CR1)\r
+#define CY_VD_LVI_HVI_CONTROL_REG   (* (reg8 *) CYREG_RESET_CR1)\r
+#define CY_VD_LVI_HVI_CONTROL_PTR   (  (reg8 *) CYREG_RESET_CR1)\r
 \r
-#define CY_VD_PRES_CONTROL_REG         (* (reg8 *) CYDEV_RESET_CR3)\r
-#define CY_VD_PRES_CONTROL_PTR         (  (reg8 *) CYDEV_RESET_CR3)\r
+#define CY_VD_PRES_CONTROL_REG      (* (reg8 *) CYREG_RESET_CR3)\r
+#define CY_VD_PRES_CONTROL_PTR      (  (reg8 *) CYREG_RESET_CR3)\r
 \r
-#define CY_VD_PERSISTENT_STATUS_REG    (* (reg8 *) CYDEV_RESET_SR0)\r
-#define CY_VD_PERSISTENT_STATUS_PTR    (  (reg8 *) CYDEV_RESET_SR0)\r
+#define CY_VD_PERSISTENT_STATUS_REG (* (reg8 *) CYREG_RESET_SR0)\r
+#define CY_VD_PERSISTENT_STATUS_PTR (  (reg8 *) CYREG_RESET_SR0)\r
 \r
-#define CY_VD_RT_STATUS_REG            (* (reg8 *) CYDEV_RESET_SR2)\r
-#define CY_VD_RT_STATUS_PTR            (  (reg8 *) CYDEV_RESET_SR2)\r
+#define CY_VD_RT_STATUS_REG         (* (reg8 *) CYREG_RESET_SR2)\r
+#define CY_VD_RT_STATUS_PTR         (  (reg8 *) CYREG_RESET_SR2)\r
 \r
 \r
 /*******************************************************************************\r
 *    Variable VDDA\r
 *******************************************************************************/\r
-#if(!CY_PSOC5A)\r
-\r
-    #if(CYDEV_VARIABLE_VDDA == 1)\r
-\r
-        /* Active Power Mode Configuration Register 9 */\r
-        #define CY_LIB_ACT_CFG9_REG             (* (reg8 *) CYREG_PM_ACT_CFG9 )\r
-        #define CY_LIB_ACT_CFG9_PTR             (  (reg8 *) CYREG_PM_ACT_CFG9 )\r
+#if(CYDEV_VARIABLE_VDDA == 1)\r
 \r
-        /* Switched Capacitor 0 Boost Clock Selection Register */\r
-        #define CY_LIB_SC0_BST_REG             (* (reg8 *) CYREG_SC0_BST )\r
-        #define CY_LIB_SC0_BST_PTR             (  (reg8 *) CYREG_SC0_BST )\r
+    /* Active Power Mode Configuration Register 9 */\r
+    #define CY_LIB_ACT_CFG9_REG            (* (reg8 *) CYREG_PM_ACT_CFG9 )\r
+    #define CY_LIB_ACT_CFG9_PTR            (  (reg8 *) CYREG_PM_ACT_CFG9 )\r
 \r
-        /* Switched Capacitor 1 Boost Clock Selection Register */\r
-        #define CY_LIB_SC1_BST_REG             (* (reg8 *) CYREG_SC1_BST )\r
-        #define CY_LIB_SC1_BST_PTR             (  (reg8 *) CYREG_SC1_BST )\r
+    /* Switched Capacitor 0 Boost Clock Selection Register */\r
+    #define CY_LIB_SC0_BST_REG             (* (reg8 *) CYREG_SC0_BST )\r
+    #define CY_LIB_SC0_BST_PTR             (  (reg8 *) CYREG_SC0_BST )\r
 \r
-        /* Switched Capacitor 2 Boost Clock Selection Register */\r
-        #define CY_LIB_SC2_BST_REG             (* (reg8 *) CYREG_SC2_BST )\r
-        #define CY_LIB_SC2_BST_PTR             (  (reg8 *) CYREG_SC2_BST )\r
+    /* Switched Capacitor 1 Boost Clock Selection Register */\r
+    #define CY_LIB_SC1_BST_REG             (* (reg8 *) CYREG_SC1_BST )\r
+    #define CY_LIB_SC1_BST_PTR             (  (reg8 *) CYREG_SC1_BST )\r
 \r
-        /* Switched Capacitor 3 Boost Clock Selection Register */\r
-        #define CY_LIB_SC3_BST_REG             (* (reg8 *) CYREG_SC3_BST )\r
-        #define CY_LIB_SC3_BST_PTR             (  (reg8 *) CYREG_SC3_BST )\r
+    /* Switched Capacitor 2 Boost Clock Selection Register */\r
+    #define CY_LIB_SC2_BST_REG             (* (reg8 *) CYREG_SC2_BST )\r
+    #define CY_LIB_SC2_BST_PTR             (  (reg8 *) CYREG_SC2_BST )\r
 \r
-        /* Switched Cap Miscellaneous Control Register */\r
-        #define CY_LIB_SC_MISC_REG             (* (reg8 *) CYREG_SC_MISC )\r
-        #define CY_LIB_SC_MISC_PTR             (  (reg8 *) CYREG_SC_MISC )\r
+    /* Switched Capacitor 3 Boost Clock Selection Register */\r
+    #define CY_LIB_SC3_BST_REG             (* (reg8 *) CYREG_SC3_BST )\r
+    #define CY_LIB_SC3_BST_PTR             (  (reg8 *) CYREG_SC3_BST )\r
 \r
-    #endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
+    /* Switched Cap Miscellaneous Control Register */\r
+    #define CY_LIB_SC_MISC_REG             (* (reg8 *) CYREG_SC_MISC )\r
+    #define CY_LIB_SC_MISC_PTR             (  (reg8 *) CYREG_SC_MISC )\r
 \r
-#endif /* (!CY_PSOC5A) */\r
+#endif  /* (CYDEV_VARIABLE_VDDA == 1) */\r
 \r
 \r
 /*******************************************************************************\r
@@ -596,71 +651,9 @@ uint8 CyVdRealTimeStatus(void) ;
 #define CY_LIB_CLKDIST_CR_REG           (*(reg8 *) CYREG_CLKDIST_CR)\r
 #define CY_LIB_CLKDIST_CR_PTR           ( (reg8 *) CYREG_CLKDIST_CR)\r
 \r
-\r
-#define SLOWCLK_ILO_CR0_PTR            ( (reg8 *) CYREG_SLOWCLK_ILO_CR0)\r
-#define SLOWCLK_ILO_CR0                (*(reg8 *) CYREG_SLOWCLK_ILO_CR0)\r
-#define CLKDIST_UCFG_PTR               ( (reg8 *) CYREG_CLKDIST_UCFG)\r
-#define CLKDIST_UCFG                   (*(reg8 *) CYREG_CLKDIST_UCFG)\r
-\r
-#define PM_TW_CFG0_PTR                 ( (reg8 *) CYREG_PM_TW_CFG0)\r
-#define PM_TW_CFG0                     (*(reg8 *) CYREG_PM_TW_CFG0)\r
-\r
-#define PM_TW_CFG2_PTR                 ( (reg8 *) CYREG_PM_TW_CFG2)\r
-#define PM_TW_CFG2                     (*(reg8 *) CYREG_PM_TW_CFG2)\r
-\r
-#define CLKDIST_MSTR1_PTR              ( (reg8 *) CYREG_CLKDIST_MSTR1)\r
-#define CLKDIST_MSTR1                  (*(reg8 *) CYREG_CLKDIST_MSTR1)\r
-\r
-\r
-\r
-#define SFR_USER_CPUCLK_DIV_PTR        ((void far *) CYREG_SFR_USER_CPUCLK_DIV)\r
-\r
-#define CLOCK_CONTROL                  ( (reg8 *) CYREG_CLKDIST_CR)\r
-#define IMO_TR1_PTR                    ( (reg8 *) CYREG_IMO_TR1)\r
-#define IMO_TR1                        (*(reg8 *) CYREG_IMO_TR1)\r
-#define CY_USB_CR1_PTR                 ( (reg8 *) CYREG_USB_CR1 )\r
-#define CY_USB_CR1                     (*(reg8 *) CYREG_USB_CR1 )\r
-\r
-#define PM_ACT_CFG0_PTR                ( (reg8 *) CYREG_PM_ACT_CFG0)\r
-#define PM_ACT_CFG0                    (*(reg8 *) CYREG_PM_ACT_CFG0)\r
-#define PM_STBY_CFG0_PTR               ( (reg8 *) CYREG_PM_STBY_CFG0)\r
-#define PM_STBY_CFG0                   (*(reg8 *) CYREG_PM_STBY_CFG0)\r
-#define PM_AVAIL_CR2_PTR               ( (reg8 *) CYREG_PM_AVAIL_CR2)\r
-#define PM_AVAIL_CR2                   (*(reg8 *) CYREG_PM_AVAIL_CR2)\r
-\r
-\r
-/* Active Power Mode Configuration Register 5 */\r
-#define CY_PM_ACT_CFG5_REG             (* (reg8 *) CYREG_PM_ACT_CFG5 )\r
-#define CY_PM_ACT_CFG5_PTR             (  (reg8 *) CYREG_PM_ACT_CFG5 )\r
-\r
-/* Standby Power Mode Configuration Register 5 */\r
-#define CY_PM_STBY_CFG5_REG             (* (reg8 *) CYREG_PM_STBY_CFG5 )\r
-#define CY_PM_STBY_CFG5_PTR             (  (reg8 *) CYREG_PM_STBY_CFG5 )\r
-\r
-\r
-#if(CY_PSOC3)\r
-    #define FLSHID_CUST_TABLES_IMO_3MHZ_PTR         ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_3MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_6MHZ_PTR         ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_6MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_12MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_12MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_24MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_24MHZ)\r
-    #define FLSHID_MFG_CFG_IMO_TR1_PTR              ((void far *) (CYREG_FLSHID_MFG_CFG_IMO_TR1 + 1u))\r
-    #define FLSHID_CUST_TABLES_IMO_67MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_67MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_80MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_80MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_USB_PTR          ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_USB)\r
- #else\r
-    #define FLSHID_CUST_TABLES_IMO_3MHZ_PTR         ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_3MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_6MHZ_PTR         ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_6MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_12MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_12MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_24MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_24MHZ)\r
-    #define FLSHID_MFG_CFG_IMO_TR1_PTR              ((reg8 *) (CYREG_FLSHID_MFG_CFG_IMO_TR1 + 1u))\r
-    #define FLSHID_CUST_TABLES_IMO_67MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_67MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_80MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_80MHZ)\r
-    #define FLSHID_CUST_TABLES_IMO_USB_PTR          ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_USB)\r
-#endif  /* (CY_PSOC3) */\r
-\r
-\r
-#define USB_CLKDIST_CONFIG_PTR         ( (reg8 *) CYREG_CLKDIST_UCFG)\r
-#define USB_CLKDIST_CONFIG             (*(reg8 *) CYREG_CLKDIST_UCFG)\r
+/* Internal Low-speed Oscillator Control Register 0 */\r
+#define CY_LIB_SLOWCLK_ILO_CR0_REG      (*(reg8 *) CYREG_SLOWCLK_ILO_CR0)\r
+#define CY_LIB_SLOWCLK_ILO_CR0_PTR      ( (reg8 *) CYREG_SLOWCLK_ILO_CR0)\r
 \r
 \r
 /*******************************************************************************\r
@@ -709,33 +702,33 @@ uint8 CyVdRealTimeStatus(void) ;
     #define CY_INT_ENABLE_REG           (* (reg8 *) CYREG_INTC_SET_EN0)\r
     #define CY_INT_ENABLE_PTR           (  (reg8 *) CYREG_INTC_SET_EN0)\r
 \r
-    #define CY_INT_SET_EN0_REG           (* (reg8 *) CYREG_INTC_SET_EN0)\r
-    #define CY_INT_SET_EN0_PTR           (  (reg8 *) CYREG_INTC_SET_EN0)\r
+    #define CY_INT_SET_EN0_REG          (* (reg8 *) CYREG_INTC_SET_EN0)\r
+    #define CY_INT_SET_EN0_PTR          (  (reg8 *) CYREG_INTC_SET_EN0)\r
 \r
-    #define CY_INT_SET_EN1_REG           (* (reg8 *) CYREG_INTC_SET_EN1)\r
-    #define CY_INT_SET_EN1_PTR           (  (reg8 *) CYREG_INTC_SET_EN1)\r
+    #define CY_INT_SET_EN1_REG          (* (reg8 *) CYREG_INTC_SET_EN1)\r
+    #define CY_INT_SET_EN1_PTR          (  (reg8 *) CYREG_INTC_SET_EN1)\r
 \r
-    #define CY_INT_SET_EN2_REG           (* (reg8 *) CYREG_INTC_SET_EN2)\r
-    #define CY_INT_SET_EN2_PTR           (  (reg8 *) CYREG_INTC_SET_EN2)\r
+    #define CY_INT_SET_EN2_REG          (* (reg8 *) CYREG_INTC_SET_EN2)\r
+    #define CY_INT_SET_EN2_PTR          (  (reg8 *) CYREG_INTC_SET_EN2)\r
 \r
-    #define CY_INT_SET_EN3_REG           (* (reg8 *) CYREG_INTC_SET_EN3)\r
-    #define CY_INT_SET_EN3_PTR           (  (reg8 *) CYREG_INTC_SET_EN3)\r
+    #define CY_INT_SET_EN3_REG          (* (reg8 *) CYREG_INTC_SET_EN3)\r
+    #define CY_INT_SET_EN3_PTR          (  (reg8 *) CYREG_INTC_SET_EN3)\r
 \r
     /* Interrrupt Controller Clear Enable Registers */\r
     #define CY_INT_CLEAR_REG            (* (reg8 *) CYREG_INTC_CLR_EN0)\r
     #define CY_INT_CLEAR_PTR            (  (reg8 *) CYREG_INTC_CLR_EN0)\r
 \r
-    #define CY_INT_CLR_EN0_REG            (* (reg8 *) CYREG_INTC_CLR_EN0)\r
-    #define CY_INT_CLR_EN0_PTR            (  (reg8 *) CYREG_INTC_CLR_EN0)\r
+    #define CY_INT_CLR_EN0_REG          (* (reg8 *) CYREG_INTC_CLR_EN0)\r
+    #define CY_INT_CLR_EN0_PTR          (  (reg8 *) CYREG_INTC_CLR_EN0)\r
 \r
-    #define CY_INT_CLR_EN1_REG            (* (reg8 *) CYREG_INTC_CLR_EN1)\r
-    #define CY_INT_CLR_EN1_PTR            (  (reg8 *) CYREG_INTC_CLR_EN1)\r
+    #define CY_INT_CLR_EN1_REG          (* (reg8 *) CYREG_INTC_CLR_EN1)\r
+    #define CY_INT_CLR_EN1_PTR          (  (reg8 *) CYREG_INTC_CLR_EN1)\r
 \r
-    #define CY_INT_CLR_EN2_REG            (* (reg8 *) CYREG_INTC_CLR_EN2)\r
-    #define CY_INT_CLR_EN2_PTR            (  (reg8 *) CYREG_INTC_CLR_EN2)\r
+    #define CY_INT_CLR_EN2_REG          (* (reg8 *) CYREG_INTC_CLR_EN2)\r
+    #define CY_INT_CLR_EN2_PTR          (  (reg8 *) CYREG_INTC_CLR_EN2)\r
 \r
-    #define CY_INT_CLR_EN3_REG            (* (reg8 *) CYREG_INTC_CLR_EN3)\r
-    #define CY_INT_CLR_EN3_PTR            (  (reg8 *) CYREG_INTC_CLR_EN3)\r
+    #define CY_INT_CLR_EN3_REG          (* (reg8 *) CYREG_INTC_CLR_EN3)\r
+    #define CY_INT_CLR_EN3_PTR          (  (reg8 *) CYREG_INTC_CLR_EN3)\r
 \r
 \r
     /* Interrrupt Controller Set Pend Registers */\r
@@ -810,7 +803,7 @@ uint8 CyVdRealTimeStatus(void) ;
 #if defined(__ARMCC_VERSION)\r
     #define CyGlobalIntEnable           {__enable_irq();}\r
     #define CyGlobalIntDisable          {__disable_irq();}\r
-#elif defined(__GNUC__)\r
+#elif defined(__GNUC__) || defined (__ICCARM__)\r
     #define CyGlobalIntEnable           {__asm("CPSIE   i");}\r
     #define CyGlobalIntDisable          {__asm("CPSID   i");}\r
 #elif defined(__C51__)\r
@@ -824,6 +817,10 @@ uint8 CyVdRealTimeStatus(void) ;
                                             CY_NOP; \\r
                                             EA = 0u;\\r
                                         }\r
+#else\r
+    #error No compiler toolchain defined\r
+    #define CyGlobalIntEnable\r
+    #define CyGlobalIntDisable\r
 #endif  /* (__ARMCC_VERSION) */\r
 \r
 \r
@@ -840,13 +837,12 @@ uint8 CyVdRealTimeStatus(void) ;
     #define CYDEV_CHIP_REV_ACTUAL       (CY_GET_REG8(CYREG_MLOGIC_REV_ID))\r
 #endif  /* (CYREG_MLOGIC_REV_ID_REV_ID) */\r
 \r
-#define RESET_CR2               ((reg8 *) CYREG_RESET_CR2)\r
-\r
 \r
 /*******************************************************************************\r
 * System API constants\r
 *******************************************************************************/\r
 #define CY_CACHE_CONTROL_FLUSH          (0x0004u)\r
+#define CY_LIB_RESET_CR2_RESET          (0x01u)\r
 \r
 \r
 /*******************************************************************************\r
@@ -1057,9 +1053,7 @@ uint8 CyVdRealTimeStatus(void) ;
 #define X32_CONTROL_LPM                 (CY_CLK_XTAL32_CR_LPM)\r
 #define X32_CONTROL_LPM_POSITION        (1u)\r
 #define X32_CONTROL_X32EN               (CY_CLK_XTAL32_CR_EN)\r
-#if(CY_PSOC3 || CY_PSOC5LP)\r
-    #define X32_CONTROL_PDBEN           (CY_CLK_XTAL32_CR_PDBEN)\r
-#endif  /* (CY_PSOC3 || CY_PSOC5LP) */\r
+#define X32_CONTROL_PDBEN           (CY_CLK_XTAL32_CR_PDBEN)\r
 #define X32_TR_DPMODE                   (CY_CLK_XTAL32_TR_STARTUP)\r
 #define X32_TR_CLEAR                    (CY_CLK_XTAL32_TR_POWERDOWN)\r
 #define X32_TR_HPMODE                   (CY_CLK_XTAL32_TR_HIGH_POWER)\r
@@ -1195,6 +1189,92 @@ uint8 CyVdRealTimeStatus(void) ;
 #define CLKDIST_CR_PTR                 ( (reg8 *) CYREG_CLKDIST_CR)\r
 #define CLKDIST_CR                     (*(reg8 *) CYREG_CLKDIST_CR)\r
 \r
+\r
+/*******************************************************************************\r
+* Following code are OBSOLETE and must not be used starting from cy_boot 3.50\r
+*******************************************************************************/\r
+#define IMO_PM_ENABLE                   (0x10u)\r
+#define PM_ACT_CFG0_PTR                ( (reg8 *) CYREG_PM_ACT_CFG0)\r
+#define PM_ACT_CFG0                    (*(reg8 *) CYREG_PM_ACT_CFG0)\r
+#define SLOWCLK_ILO_CR0_PTR            ( (reg8 *) CYREG_SLOWCLK_ILO_CR0)\r
+#define SLOWCLK_ILO_CR0                (*(reg8 *) CYREG_SLOWCLK_ILO_CR0)\r
+#define ILO_CONTROL_PD_MODE             (0x10u)\r
+#define ILO_CONTROL_PD_POSITION         (4u)\r
+#define ILO_CONTROL_1KHZ_ON             (0x02u)\r
+#define ILO_CONTROL_100KHZ_ON           (0x04u)\r
+#define ILO_CONTROL_33KHZ_ON            (0x20u)\r
+#define PM_TW_CFG0_PTR                 ( (reg8 *) CYREG_PM_TW_CFG0)\r
+#define PM_TW_CFG0                     (*(reg8 *) CYREG_PM_TW_CFG0)\r
+#define PM_TW_CFG2_PTR                 ( (reg8 *) CYREG_PM_TW_CFG2)\r
+#define PM_TW_CFG2                     (*(reg8 *) CYREG_PM_TW_CFG2)\r
+#define RESET_CR2               ((reg8 *) CYREG_RESET_CR2)\r
+#define FASTCLK_IMO_USBCLK_ON_SET       (0x40u)\r
+#define CLOCK_IMO_3MHZ_VALUE            (0x03u)\r
+#define CLOCK_IMO_6MHZ_VALUE            (0x01u)\r
+#define CLOCK_IMO_12MHZ_VALUE           (0x00u)\r
+#define CLOCK_IMO_24MHZ_VALUE           (0x02u)\r
+#define CLOCK_IMO_48MHZ_VALUE           (0x04u)\r
+#define CLOCK_IMO_62MHZ_VALUE           (0x05u)\r
+#define CLOCK_IMO_74MHZ_VALUE           (0x06u)\r
+#define CLKDIST_DIV_POSITION            (4u)\r
+#define CLKDIST_MSTR1_DIV_CLEAR         (0x0Fu)\r
+#define SFR_USER_CPUCLK_DIV_MASK        (0x0Fu)\r
+#define CLOCK_USB_ENABLE                (0x02u)\r
+#define CLOCK_IMO_OUT_X2                (0x10u)\r
+#define CLOCK_IMO_OUT_X1                ((uint8)(~CLOCK_IMO_OUT_X2))\r
+#define CLOCK_IMO2X_ECO                 ((uint8)(~CLOCK_IMO2X_DSI))\r
+#define USB_CLKDIST_CONFIG_MASK         (0x03u)\r
+#define USB_CLK_IMO2X                   (0x00u)\r
+#define USB_CLK_IMO                     (0x01u)\r
+#define USB_CLK_PLL                     (0x02u)\r
+#define USB_CLK_DSI                     (0x03u)\r
+#define USB_CLK_DIV2_ON                 (0x04u)\r
+#define USB_CLK_STOP_FLAG               (0x00u)\r
+#define USB_CLK_START_FLAG              (0x01u)\r
+#define FTW_CLEAR_ALL_BITS              (0x00u)\r
+#define FTW_CLEAR_FTW_BITS              (0xFCu)\r
+#define FTW_ENABLE                      (0x01u)\r
+#define PM_STBY_CFG0_PTR               ( (reg8 *) CYREG_PM_STBY_CFG0)\r
+#define PM_STBY_CFG0                   (*(reg8 *) CYREG_PM_STBY_CFG0)\r
+#define PM_AVAIL_CR2_PTR               ( (reg8 *) CYREG_PM_AVAIL_CR2)\r
+#define PM_AVAIL_CR2                   (*(reg8 *) CYREG_PM_AVAIL_CR2)\r
+#define CLKDIST_UCFG_PTR               ( (reg8 *) CYREG_CLKDIST_UCFG)\r
+#define CLKDIST_UCFG                   (*(reg8 *) CYREG_CLKDIST_UCFG)\r
+#define CLKDIST_MSTR1_PTR              ( (reg8 *) CYREG_CLKDIST_MSTR1)\r
+#define CLKDIST_MSTR1                  (*(reg8 *) CYREG_CLKDIST_MSTR1)\r
+#define SFR_USER_CPUCLK_DIV_PTR        ((void far *) CYREG_SFR_USER_CPUCLK_DIV)\r
+#define IMO_TR1_PTR                    ( (reg8 *) CYREG_IMO_TR1)\r
+#define IMO_TR1                        (*(reg8 *) CYREG_IMO_TR1)\r
+#define CLOCK_CONTROL                  ( (reg8 *) CYREG_CLKDIST_CR)\r
+#define CY_USB_CR1_PTR                 ( (reg8 *) CYREG_USB_CR1 )\r
+#define CY_USB_CR1                     (*(reg8 *) CYREG_USB_CR1 )\r
+#define USB_CLKDIST_CONFIG_PTR         ( (reg8 *) CYREG_CLKDIST_UCFG)\r
+#define USB_CLKDIST_CONFIG             (*(reg8 *) CYREG_CLKDIST_UCFG)\r
+#define CY_PM_ACT_CFG5_REG              (* (reg8 *) CYREG_PM_ACT_CFG5 )\r
+#define CY_PM_ACT_CFG5_PTR              (  (reg8 *) CYREG_PM_ACT_CFG5 )\r
+#define CY_PM_STBY_CFG5_REG             (* (reg8 *) CYREG_PM_STBY_CFG5 )\r
+#define CY_PM_STBY_CFG5_PTR             (  (reg8 *) CYREG_PM_STBY_CFG5 )\r
+#if(CY_PSOC3)\r
+    #define FLSHID_CUST_TABLES_IMO_3MHZ_PTR         ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_3MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_6MHZ_PTR         ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_6MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_12MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_12MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_24MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_24MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_67MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_67MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_80MHZ_PTR        ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_80MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_USB_PTR          ((void far *) CYREG_FLSHID_CUST_TABLES_IMO_USB)\r
+    #define FLSHID_MFG_CFG_IMO_TR1_PTR              ((void far *) (CYREG_FLSHID_MFG_CFG_IMO_TR1 + 1u))\r
+ #else\r
+    #define FLSHID_CUST_TABLES_IMO_3MHZ_PTR         ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_3MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_6MHZ_PTR         ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_6MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_12MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_12MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_24MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_24MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_67MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_67MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_80MHZ_PTR        ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_80MHZ)\r
+    #define FLSHID_CUST_TABLES_IMO_USB_PTR          ((reg8 *) CYREG_FLSHID_CUST_TABLES_IMO_USB)\r
+    #define FLSHID_MFG_CFG_IMO_TR1_PTR              ((reg8 *) (CYREG_FLSHID_MFG_CFG_IMO_TR1 + 1u))\r
+#endif  /* (CY_PSOC3) */\r
+\r
+\r
 #endif  /* (CY_BOOT_CYLIB_H) */\r
 \r
 \r
index 759f7a7..0d2b930 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CySpc.c\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 *  Description:\r
 *   Provides an API for the System Performance Component.\r
@@ -48,7 +48,7 @@
 uint8 SpcLockState = CY_SPC_UNLOCKED;\r
 \r
 \r
-#if(CY_PSOC5LP)\r
+#if(CY_PSOC5)\r
 \r
     /***************************************************************************\r
     * The wait-state pipeline must be enabled prior to accessing the SPC\r
@@ -57,9 +57,9 @@ uint8 SpcLockState = CY_SPC_UNLOCKED;
     * function, which must be called after SPC transaction, restores original\r
     * state.\r
     ***************************************************************************/\r
-    static uint8 spcWaitPipeBypass = 0u;\r
+    static uint32 spcWaitPipeBypass = 0u;\r
 \r
-#endif  /* (CY_PSOC5LP) */\r
+#endif  /* (CY_PSOC5) */\r
 \r
 \r
 /*******************************************************************************\r
@@ -175,7 +175,8 @@ uint8 CySpcReadData(uint8 buffer[], uint8 size)
 *  CYRET_BAD_PARAM\r
 *\r
 *******************************************************************************/\r
-cystatus CySpcLoadMultiByte(uint8 array, uint16 address, const uint8 buffer[], uint8 size) \r
+cystatus CySpcLoadMultiByte(uint8 array, uint16 address, const uint8 buffer[], uint8 size)\\r
+\r
 {\r
     cystatus status = CYRET_STARTED;\r
     uint8 i;\r
@@ -312,7 +313,8 @@ cystatus CySpcLoadRow(uint8 array, const uint8 buffer[], uint16 size)
 *  CYRET_LOCKED\r
 *\r
 *******************************************************************************/\r
-cystatus CySpcWriteRow(uint8 array, uint16 address, uint8 tempPolarity, uint8 tempMagnitude)\r
+cystatus CySpcWriteRow(uint8 array, uint16 address, uint8 tempPolarity, uint8 tempMagnitude)\\r
+\r
 {\r
     cystatus status = CYRET_STARTED;\r
 \r
@@ -420,11 +422,7 @@ cystatus CySpcEraseSector(uint8 array, uint8 sectorNumber)
 *  CYRET_LOCKED\r
 *\r
 *******************************************************************************/\r
-#if(CY_PSOC5A)\r
-cystatus CySpcGetTemp(uint8 numSamples, uint16 timerPeriod, uint8 clkDivSelect)\r
-#else\r
 cystatus CySpcGetTemp(uint8 numSamples)\r
-#endif  /* (CY_PSOC5A) */\r
 {\r
     cystatus status = CYRET_STARTED;\r
 \r
@@ -439,12 +437,6 @@ cystatus CySpcGetTemp(uint8 numSamples)
         if(CY_SPC_BUSY)\r
         {\r
             CY_SPC_CPU_DATA_REG = numSamples;\r
-\r
-            #if(CY_PSOC5A)\r
-                CY_SPC_CPU_DATA_REG = HI8(timerPeriod);\r
-                CY_SPC_CPU_DATA_REG = LO8(timerPeriod);\r
-                CY_SPC_CPU_DATA_REG = clkDivSelect;\r
-            #endif  /* (CY_PSOC5A) */\r
         }\r
         else\r
         {\r
@@ -488,7 +480,7 @@ cystatus CySpcLock(void)
         SpcLockState = CY_SPC_LOCKED;\r
         status = CYRET_SUCCESS;\r
 \r
-        #if(CY_PSOC5LP)\r
+        #if(CY_PSOC5)\r
 \r
             if(0u != (CY_SPC_CPU_WAITPIPE_REG & CY_SPC_CPU_WAITPIPE_BYPASS))\r
             {\r
@@ -503,7 +495,7 @@ cystatus CySpcLock(void)
                 spcWaitPipeBypass = CY_SPC_CPU_WAITPIPE_BYPASS;\r
             }\r
 \r
-        #endif  /* (CY_PSOC5LP) */\r
+        #endif  /* (CY_PSOC5) */\r
     }\r
 \r
     /* Exit critical section */\r
@@ -537,7 +529,7 @@ void CySpcUnlock(void)
     /* Release the SPC object */\r
     SpcLockState = CY_SPC_UNLOCKED;\r
 \r
-    #if(CY_PSOC5LP)\r
+    #if(CY_PSOC5)\r
 \r
         if(CY_SPC_CPU_WAITPIPE_BYPASS == spcWaitPipeBypass)\r
         {\r
@@ -552,7 +544,7 @@ void CySpcUnlock(void)
             spcWaitPipeBypass = 0u;\r
         }\r
 \r
-    #endif  /* (CY_PSOC5LP) */\r
+    #endif  /* (CY_PSOC5) */\r
 \r
     /* Exit critical section */\r
     CyExitCriticalSection(interruptState);\r
index eb3683e..6a5828c 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: CySpc.c\r
-* Version 3.40\r
+* Version 4.0\r
 *\r
 * Description:\r
 *  Provides definitions for the System Performance Component API.\r
@@ -34,18 +34,13 @@ extern uint8 SpcLockState;
 void     CySpcStart(void);\r
 void     CySpcStop(void);\r
 uint8    CySpcReadData(uint8 buffer[], uint8 size);\r
-cystatus CySpcLoadMultiByte(uint8 array, uint16 address, const uint8 buffer[], uint8 size) ;\r
+cystatus CySpcLoadMultiByte(uint8 array, uint16 address, const uint8 buffer[], uint8 size)\\r
+;\r
 cystatus CySpcLoadRow(uint8 array, const uint8 buffer[], uint16 size);\r
-cystatus CySpcWriteRow(uint8 array, uint16 address, uint8 tempPolarity, uint8 tempMagnitude) ;\r
+cystatus CySpcWriteRow(uint8 array, uint16 address, uint8 tempPolarity, uint8 tempMagnitude)\\r
+;\r
 cystatus CySpcEraseSector(uint8 array, uint8 sectorNumber);\r
-\r
-#if(CY_PSOC5A)\r
-    cystatus CySpcGetTemp(uint8 numSamples, uint16 timerPeriod, uint8 clkDivSelect);\r
-#else\r
-    cystatus CySpcGetTemp(uint8 numSamples);\r
-#endif  /* (CY_PSOC5A) */\r
-\r
-\r
+cystatus CySpcGetTemp(uint8 numSamples);\r
 cystatus CySpcLock(void);\r
 void     CySpcUnlock(void);\r
 \r
@@ -91,12 +86,12 @@ void     CySpcUnlock(void);
 #define CY_SPC_STATUS_TADC_INPUT            (0x0Du)   /* Invalid input value for Get Temp & Get ADC commands */\r
 #define CY_SPC_STATUS_BUSY                  (0xFFu)   /* SPC is busy */\r
 \r
-#if(CY_PSOC5LP)\r
+#if(CY_PSOC5)\r
 \r
     /* Wait-state pipeline */\r
     #define CY_SPC_CPU_WAITPIPE_BYPASS      ((uint32)0x01u)\r
 \r
-#endif  /* (CY_PSOC5LP) */\r
+#endif  /* (CY_PSOC5) */\r
 \r
 \r
 /***************************************\r
@@ -119,13 +114,13 @@ void     CySpcUnlock(void);
 #define CY_SPC_PM_STBY_REG          (* (reg8 *) CYREG_PM_STBY_CFG0 )\r
 #define CY_SPC_PM_STBY_PTR          (  (reg8 *) CYREG_PM_STBY_CFG0 )\r
 \r
-#if(CY_PSOC5LP)\r
+#if(CY_PSOC5)\r
 \r
     /* Wait State Pipeline */\r
     #define CY_SPC_CPU_WAITPIPE_REG     (* (reg32 *) CYREG_PANTHER_WAITPIPE )\r
     #define CY_SPC_CPU_WAITPIPE_PTR     (  (reg32 *) CYREG_PANTHER_WAITPIPE )\r
 \r
-#endif  /* (CY_PSOC5LP) */\r
+#endif  /* (CY_PSOC5) */\r
 \r
 \r
 /***************************************\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN.c
new file mode 100644 (file)
index 0000000..fad63dd
--- /dev/null
@@ -0,0 +1,137 @@
+/*******************************************************************************\r
+* File Name: SCSI_ATN.c  \r
+* Version 1.90\r
+*\r
+* Description:\r
+*  This file contains API to enable firmware control of a Pins component.\r
+*\r
+* Note:\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+\r
+#include "cytypes.h"\r
+#include "SCSI_ATN.h"\r
+\r
+/* APIs are not generated for P15[7:6] on PSoC 5 */\r
+#if !(CY_PSOC5A &&\\r
+        SCSI_ATN__PORT == 15 && ((SCSI_ATN__MASK & 0xC0) != 0))\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_Write\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Assign a new value to the digital port's data output register.  \r
+*\r
+* Parameters:  \r
+*  prtValue:  The value to be assigned to the Digital Port. \r
+*\r
+* Return: \r
+*  None\r
+*  \r
+*******************************************************************************/\r
+void SCSI_ATN_Write(uint8 value) \r
+{\r
+    uint8 staticBits = (SCSI_ATN_DR & (uint8)(~SCSI_ATN_MASK));\r
+    SCSI_ATN_DR = staticBits | ((uint8)(value << SCSI_ATN_SHIFT) & SCSI_ATN_MASK);\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_SetDriveMode\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Change the drive mode on the pins of the port.\r
+* \r
+* Parameters:  \r
+*  mode:  Change the pins to this drive mode.\r
+*\r
+* Return: \r
+*  None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_SetDriveMode(uint8 mode) \r
+{\r
+       CyPins_SetPinDriveMode(SCSI_ATN_0, mode);\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_Read\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Read the current value on the pins of the Digital Port in right justified \r
+*  form.\r
+*\r
+* Parameters:  \r
+*  None\r
+*\r
+* Return: \r
+*  Returns the current value of the Digital Port as a right justified number\r
+*  \r
+* Note:\r
+*  Macro SCSI_ATN_ReadPS calls this function. \r
+*  \r
+*******************************************************************************/\r
+uint8 SCSI_ATN_Read(void) \r
+{\r
+    return (SCSI_ATN_PS & SCSI_ATN_MASK) >> SCSI_ATN_SHIFT;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ReadDataReg\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Read the current value assigned to a Digital Port's data output register\r
+*\r
+* Parameters:  \r
+*  None \r
+*\r
+* Return: \r
+*  Returns the current value assigned to the Digital Port's data output register\r
+*  \r
+*******************************************************************************/\r
+uint8 SCSI_ATN_ReadDataReg(void) \r
+{\r
+    return (SCSI_ATN_DR & SCSI_ATN_MASK) >> SCSI_ATN_SHIFT;\r
+}\r
+\r
+\r
+/* If Interrupts Are Enabled for this Pins component */ \r
+#if defined(SCSI_ATN_INTSTAT) \r
+\r
+    /*******************************************************************************\r
+    * Function Name: SCSI_ATN_ClearInterrupt\r
+    ********************************************************************************\r
+    * Summary:\r
+    *  Clears any active interrupts attached to port and returns the value of the \r
+    *  interrupt status register.\r
+    *\r
+    * Parameters:  \r
+    *  None \r
+    *\r
+    * Return: \r
+    *  Returns the value of the interrupt status register\r
+    *  \r
+    *******************************************************************************/\r
+    uint8 SCSI_ATN_ClearInterrupt(void) \r
+    {\r
+        return (SCSI_ATN_INTSTAT & SCSI_ATN_MASK) >> SCSI_ATN_SHIFT;\r
+    }\r
+\r
+#endif /* If Interrupts Are Enabled for this Pins component */ \r
+\r
+#endif /* CY_PSOC5A... */\r
+\r
+    \r
+/* [] END OF FILE */\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN.h
new file mode 100644 (file)
index 0000000..8c211ac
--- /dev/null
@@ -0,0 +1,130 @@
+/*******************************************************************************\r
+* File Name: SCSI_ATN.h  \r
+* Version 1.90\r
+*\r
+* Description:\r
+*  This file containts Control Register function prototypes and register defines\r
+*\r
+* Note:\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+\r
+#if !defined(CY_PINS_SCSI_ATN_H) /* Pins SCSI_ATN_H */\r
+#define CY_PINS_SCSI_ATN_H\r
+\r
+#include "cytypes.h"\r
+#include "cyfitter.h"\r
+#include "cypins.h"\r
+#include "SCSI_ATN_aliases.h"\r
+\r
+/* Check to see if required defines such as CY_PSOC5A are available */\r
+/* They are defined starting with cy_boot v3.0 */\r
+#if !defined (CY_PSOC5A)\r
+    #error Component cy_pins_v1_90 requires cy_boot v3.0 or later\r
+#endif /* (CY_PSOC5A) */\r
+\r
+/* APIs are not generated for P15[7:6] */\r
+#if !(CY_PSOC5A &&\\r
+        SCSI_ATN__PORT == 15 && ((SCSI_ATN__MASK & 0xC0) != 0))\r
+\r
+\r
+/***************************************\r
+*        Function Prototypes             \r
+***************************************/    \r
+\r
+void    SCSI_ATN_Write(uint8 value) ;\r
+void    SCSI_ATN_SetDriveMode(uint8 mode) ;\r
+uint8   SCSI_ATN_ReadDataReg(void) ;\r
+uint8   SCSI_ATN_Read(void) ;\r
+uint8   SCSI_ATN_ClearInterrupt(void) ;\r
+\r
+\r
+/***************************************\r
+*           API Constants        \r
+***************************************/\r
+\r
+/* Drive Modes */\r
+#define SCSI_ATN_DM_ALG_HIZ         PIN_DM_ALG_HIZ\r
+#define SCSI_ATN_DM_DIG_HIZ         PIN_DM_DIG_HIZ\r
+#define SCSI_ATN_DM_RES_UP          PIN_DM_RES_UP\r
+#define SCSI_ATN_DM_RES_DWN         PIN_DM_RES_DWN\r
+#define SCSI_ATN_DM_OD_LO           PIN_DM_OD_LO\r
+#define SCSI_ATN_DM_OD_HI           PIN_DM_OD_HI\r
+#define SCSI_ATN_DM_STRONG          PIN_DM_STRONG\r
+#define SCSI_ATN_DM_RES_UPDWN       PIN_DM_RES_UPDWN\r
+\r
+/* Digital Port Constants */\r
+#define SCSI_ATN_MASK               SCSI_ATN__MASK\r
+#define SCSI_ATN_SHIFT              SCSI_ATN__SHIFT\r
+#define SCSI_ATN_WIDTH              1u\r
+\r
+\r
+/***************************************\r
+*             Registers        \r
+***************************************/\r
+\r
+/* Main Port Registers */\r
+/* Pin State */\r
+#define SCSI_ATN_PS                     (* (reg8 *) SCSI_ATN__PS)\r
+/* Data Register */\r
+#define SCSI_ATN_DR                     (* (reg8 *) SCSI_ATN__DR)\r
+/* Port Number */\r
+#define SCSI_ATN_PRT_NUM                (* (reg8 *) SCSI_ATN__PRT) \r
+/* Connect to Analog Globals */                                                  \r
+#define SCSI_ATN_AG                     (* (reg8 *) SCSI_ATN__AG)                       \r
+/* Analog MUX bux enable */\r
+#define SCSI_ATN_AMUX                   (* (reg8 *) SCSI_ATN__AMUX) \r
+/* Bidirectional Enable */                                                        \r
+#define SCSI_ATN_BIE                    (* (reg8 *) SCSI_ATN__BIE)\r
+/* Bit-mask for Aliased Register Access */\r
+#define SCSI_ATN_BIT_MASK               (* (reg8 *) SCSI_ATN__BIT_MASK)\r
+/* Bypass Enable */\r
+#define SCSI_ATN_BYP                    (* (reg8 *) SCSI_ATN__BYP)\r
+/* Port wide control signals */                                                   \r
+#define SCSI_ATN_CTL                    (* (reg8 *) SCSI_ATN__CTL)\r
+/* Drive Modes */\r
+#define SCSI_ATN_DM0                    (* (reg8 *) SCSI_ATN__DM0) \r
+#define SCSI_ATN_DM1                    (* (reg8 *) SCSI_ATN__DM1)\r
+#define SCSI_ATN_DM2                    (* (reg8 *) SCSI_ATN__DM2) \r
+/* Input Buffer Disable Override */\r
+#define SCSI_ATN_INP_DIS                (* (reg8 *) SCSI_ATN__INP_DIS)\r
+/* LCD Common or Segment Drive */\r
+#define SCSI_ATN_LCD_COM_SEG            (* (reg8 *) SCSI_ATN__LCD_COM_SEG)\r
+/* Enable Segment LCD */\r
+#define SCSI_ATN_LCD_EN                 (* (reg8 *) SCSI_ATN__LCD_EN)\r
+/* Slew Rate Control */\r
+#define SCSI_ATN_SLW                    (* (reg8 *) SCSI_ATN__SLW)\r
+\r
+/* DSI Port Registers */\r
+/* Global DSI Select Register */\r
+#define SCSI_ATN_PRTDSI__CAPS_SEL       (* (reg8 *) SCSI_ATN__PRTDSI__CAPS_SEL) \r
+/* Double Sync Enable */\r
+#define SCSI_ATN_PRTDSI__DBL_SYNC_IN    (* (reg8 *) SCSI_ATN__PRTDSI__DBL_SYNC_IN) \r
+/* Output Enable Select Drive Strength */\r
+#define SCSI_ATN_PRTDSI__OE_SEL0        (* (reg8 *) SCSI_ATN__PRTDSI__OE_SEL0) \r
+#define SCSI_ATN_PRTDSI__OE_SEL1        (* (reg8 *) SCSI_ATN__PRTDSI__OE_SEL1) \r
+/* Port Pin Output Select Registers */\r
+#define SCSI_ATN_PRTDSI__OUT_SEL0       (* (reg8 *) SCSI_ATN__PRTDSI__OUT_SEL0) \r
+#define SCSI_ATN_PRTDSI__OUT_SEL1       (* (reg8 *) SCSI_ATN__PRTDSI__OUT_SEL1) \r
+/* Sync Output Enable Registers */\r
+#define SCSI_ATN_PRTDSI__SYNC_OUT       (* (reg8 *) SCSI_ATN__PRTDSI__SYNC_OUT) \r
+\r
+\r
+#if defined(SCSI_ATN__INTSTAT)  /* Interrupt Registers */\r
+\r
+    #define SCSI_ATN_INTSTAT                (* (reg8 *) SCSI_ATN__INTSTAT)\r
+    #define SCSI_ATN_SNAP                   (* (reg8 *) SCSI_ATN__SNAP)\r
+\r
+#endif /* Interrupt Registers */\r
+\r
+#endif /* CY_PSOC5A... */\r
+\r
+#endif /*  CY_PINS_SCSI_ATN_H */\r
+\r
+\r
+/* [] END OF FILE */\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_ISR.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_ISR.c
new file mode 100644 (file)
index 0000000..6d75a52
--- /dev/null
@@ -0,0 +1,356 @@
+/*******************************************************************************\r
+* File Name: SCSI_ATN_ISR.c  \r
+* Version 1.70\r
+*\r
+*  Description:\r
+*   API for controlling the state of an interrupt.\r
+*\r
+*\r
+*  Note:\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+\r
+\r
+#include <cydevice_trm.h>\r
+#include <CyLib.h>\r
+#include <SCSI_ATN_ISR.h>\r
+\r
+#if !defined(SCSI_ATN_ISR__REMOVED) /* Check for removal by optimization */\r
+\r
+/*******************************************************************************\r
+*  Place your includes, defines and code here \r
+********************************************************************************/\r
+/* `#START SCSI_ATN_ISR_intc` */\r
+\r
+/* `#END` */\r
+\r
+#ifndef CYINT_IRQ_BASE\r
+#define CYINT_IRQ_BASE      16\r
+#endif /* CYINT_IRQ_BASE */\r
+#ifndef CYINT_VECT_TABLE\r
+#define CYINT_VECT_TABLE    ((cyisraddress **) CYREG_NVIC_VECT_OFFSET)\r
+#endif /* CYINT_VECT_TABLE */\r
+\r
+/* Declared in startup, used to set unused interrupts to. */\r
+CY_ISR_PROTO(IntDefaultHandler);\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_Start\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Set up the interrupt and enable it.\r
+*\r
+* Parameters:  \r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_Start(void)\r
+{\r
+    /* For all we know the interrupt is active. */\r
+    SCSI_ATN_ISR_Disable();\r
+\r
+    /* Set the ISR to point to the SCSI_ATN_ISR Interrupt. */\r
+    SCSI_ATN_ISR_SetVector(&SCSI_ATN_ISR_Interrupt);\r
+\r
+    /* Set the priority. */\r
+    SCSI_ATN_ISR_SetPriority((uint8)SCSI_ATN_ISR_INTC_PRIOR_NUMBER);\r
+\r
+    /* Enable it. */\r
+    SCSI_ATN_ISR_Enable();\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_StartEx\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Set up the interrupt and enable it.\r
+*\r
+* Parameters:  \r
+*   address: Address of the ISR to set in the interrupt vector table.\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_StartEx(cyisraddress address)\r
+{\r
+    /* For all we know the interrupt is active. */\r
+    SCSI_ATN_ISR_Disable();\r
+\r
+    /* Set the ISR to point to the SCSI_ATN_ISR Interrupt. */\r
+    SCSI_ATN_ISR_SetVector(address);\r
+\r
+    /* Set the priority. */\r
+    SCSI_ATN_ISR_SetPriority((uint8)SCSI_ATN_ISR_INTC_PRIOR_NUMBER);\r
+\r
+    /* Enable it. */\r
+    SCSI_ATN_ISR_Enable();\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_Stop\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Disables and removes the interrupt.\r
+*\r
+* Parameters:  \r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_Stop(void)\r
+{\r
+    /* Disable this interrupt. */\r
+    SCSI_ATN_ISR_Disable();\r
+\r
+    /* Set the ISR to point to the passive one. */\r
+    SCSI_ATN_ISR_SetVector(&IntDefaultHandler);\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_Interrupt\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   The default Interrupt Service Routine for SCSI_ATN_ISR.\r
+*\r
+*   Add custom code between the coments to keep the next version of this file\r
+*   from over writting your code.\r
+*\r
+* Parameters:  \r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+CY_ISR(SCSI_ATN_ISR_Interrupt)\r
+{\r
+    /*  Place your Interrupt code here. */\r
+    /* `#START SCSI_ATN_ISR_Interrupt` */\r
+\r
+    /* `#END` */\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_SetVector\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Change the ISR vector for the Interrupt. Note calling SCSI_ATN_ISR_Start\r
+*   will override any effect this method would have had. To set the vector \r
+*   before the component has been started use SCSI_ATN_ISR_StartEx instead.\r
+*\r
+* Parameters:\r
+*   address: Address of the ISR to set in the interrupt vector table.\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_SetVector(cyisraddress address)\r
+{\r
+    cyisraddress * ramVectorTable;\r
+\r
+    ramVectorTable = (cyisraddress *) *CYINT_VECT_TABLE;\r
+\r
+    ramVectorTable[CYINT_IRQ_BASE + (uint32)SCSI_ATN_ISR__INTC_NUMBER] = address;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_GetVector\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Gets the "address" of the current ISR vector for the Interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   Address of the ISR in the interrupt vector table.\r
+*\r
+*******************************************************************************/\r
+cyisraddress SCSI_ATN_ISR_GetVector(void)\r
+{\r
+    cyisraddress * ramVectorTable;\r
+\r
+    ramVectorTable = (cyisraddress *) *CYINT_VECT_TABLE;\r
+\r
+    return ramVectorTable[CYINT_IRQ_BASE + (uint32)SCSI_ATN_ISR__INTC_NUMBER];\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_SetPriority\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Sets the Priority of the Interrupt. Note calling SCSI_ATN_ISR_Start\r
+*   or SCSI_ATN_ISR_StartEx will override any effect this method \r
+*   would have had. This method should only be called after \r
+*   SCSI_ATN_ISR_Start or SCSI_ATN_ISR_StartEx has been called. To set \r
+*   the initial priority for the component use the cydwr file in the tool.\r
+*\r
+* Parameters:\r
+*   priority: Priority of the interrupt. 0 - 7, 0 being the highest.\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_SetPriority(uint8 priority)\r
+{\r
+    *SCSI_ATN_ISR_INTC_PRIOR = priority << 5;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_GetPriority\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Gets the Priority of the Interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   Priority of the interrupt. 0 - 7, 0 being the highest.\r
+*\r
+*******************************************************************************/\r
+uint8 SCSI_ATN_ISR_GetPriority(void)\r
+{\r
+    uint8 priority;\r
+\r
+\r
+    priority = *SCSI_ATN_ISR_INTC_PRIOR >> 5;\r
+\r
+    return priority;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_Enable\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Enables the interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_Enable(void)\r
+{\r
+    /* Enable the general interrupt. */\r
+    *SCSI_ATN_ISR_INTC_SET_EN = SCSI_ATN_ISR__INTC_MASK;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_GetState\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Gets the state (enabled, disabled) of the Interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   1 if enabled, 0 if disabled.\r
+*\r
+*******************************************************************************/\r
+uint8 SCSI_ATN_ISR_GetState(void)\r
+{\r
+    /* Get the state of the general interrupt. */\r
+    return ((*SCSI_ATN_ISR_INTC_SET_EN & (uint32)SCSI_ATN_ISR__INTC_MASK) != 0u) ? 1u:0u;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_Disable\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Disables the Interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_Disable(void)\r
+{\r
+    /* Disable the general interrupt. */\r
+    *SCSI_ATN_ISR_INTC_CLR_EN = SCSI_ATN_ISR__INTC_MASK;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_SetPending\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Causes the Interrupt to enter the pending state, a software method of\r
+*   generating the interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_SetPending(void)\r
+{\r
+    *SCSI_ATN_ISR_INTC_SET_PD = SCSI_ATN_ISR__INTC_MASK;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_ATN_ISR_ClearPending\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Clears a pending interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_ATN_ISR_ClearPending(void)\r
+{\r
+    *SCSI_ATN_ISR_INTC_CLR_PD = SCSI_ATN_ISR__INTC_MASK;\r
+}\r
+\r
+#endif /* End check for removal by optimization */\r
+\r
+\r
+/* [] END OF FILE */\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_ISR.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_ISR.h
new file mode 100644 (file)
index 0000000..151381f
--- /dev/null
@@ -0,0 +1,70 @@
+/*******************************************************************************\r
+* File Name: SCSI_ATN_ISR.h\r
+* Version 1.70\r
+*\r
+*  Description:\r
+*   Provides the function definitions for the Interrupt Controller.\r
+*\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+#if !defined(CY_ISR_SCSI_ATN_ISR_H)\r
+#define CY_ISR_SCSI_ATN_ISR_H\r
+\r
+\r
+#include <cytypes.h>\r
+#include <cyfitter.h>\r
+\r
+/* Interrupt Controller API. */\r
+void SCSI_ATN_ISR_Start(void);\r
+void SCSI_ATN_ISR_StartEx(cyisraddress address);\r
+void SCSI_ATN_ISR_Stop(void);\r
+\r
+CY_ISR_PROTO(SCSI_ATN_ISR_Interrupt);\r
+\r
+void SCSI_ATN_ISR_SetVector(cyisraddress address);\r
+cyisraddress SCSI_ATN_ISR_GetVector(void);\r
+\r
+void SCSI_ATN_ISR_SetPriority(uint8 priority);\r
+uint8 SCSI_ATN_ISR_GetPriority(void);\r
+\r
+void SCSI_ATN_ISR_Enable(void);\r
+uint8 SCSI_ATN_ISR_GetState(void);\r
+void SCSI_ATN_ISR_Disable(void);\r
+\r
+void SCSI_ATN_ISR_SetPending(void);\r
+void SCSI_ATN_ISR_ClearPending(void);\r
+\r
+\r
+/* Interrupt Controller Constants */\r
+\r
+/* Address of the INTC.VECT[x] register that contains the Address of the SCSI_ATN_ISR ISR. */\r
+#define SCSI_ATN_ISR_INTC_VECTOR            ((reg32 *) SCSI_ATN_ISR__INTC_VECT)\r
+\r
+/* Address of the SCSI_ATN_ISR ISR priority. */\r
+#define SCSI_ATN_ISR_INTC_PRIOR             ((reg8 *) SCSI_ATN_ISR__INTC_PRIOR_REG)\r
+\r
+/* Priority of the SCSI_ATN_ISR interrupt. */\r
+#define SCSI_ATN_ISR_INTC_PRIOR_NUMBER      SCSI_ATN_ISR__INTC_PRIOR_NUM\r
+\r
+/* Address of the INTC.SET_EN[x] byte to bit enable SCSI_ATN_ISR interrupt. */\r
+#define SCSI_ATN_ISR_INTC_SET_EN            ((reg32 *) SCSI_ATN_ISR__INTC_SET_EN_REG)\r
+\r
+/* Address of the INTC.CLR_EN[x] register to bit clear the SCSI_ATN_ISR interrupt. */\r
+#define SCSI_ATN_ISR_INTC_CLR_EN            ((reg32 *) SCSI_ATN_ISR__INTC_CLR_EN_REG)\r
+\r
+/* Address of the INTC.SET_PD[x] register to set the SCSI_ATN_ISR interrupt state to pending. */\r
+#define SCSI_ATN_ISR_INTC_SET_PD            ((reg32 *) SCSI_ATN_ISR__INTC_SET_PD_REG)\r
+\r
+/* Address of the INTC.CLR_PD[x] register to clear the SCSI_ATN_ISR interrupt. */\r
+#define SCSI_ATN_ISR_INTC_CLR_PD            ((reg32 *) SCSI_ATN_ISR__INTC_CLR_PD_REG)\r
+\r
+\r
+#endif /* CY_ISR_SCSI_ATN_ISR_H */\r
+\r
+\r
+/* [] END OF FILE */\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_aliases.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ATN_aliases.h
new file mode 100644 (file)
index 0000000..6989843
--- /dev/null
@@ -0,0 +1,34 @@
+/*******************************************************************************\r
+* File Name: SCSI_ATN.h  \r
+* Version 1.90\r
+*\r
+* Description:\r
+*  This file containts Control Register function prototypes and register defines\r
+*\r
+* Note:\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+\r
+#if !defined(CY_PINS_SCSI_ATN_ALIASES_H) /* Pins SCSI_ATN_ALIASES_H */\r
+#define CY_PINS_SCSI_ATN_ALIASES_H\r
+\r
+#include "cytypes.h"\r
+#include "cyfitter.h"\r
+\r
+\r
+\r
+/***************************************\r
+*              Constants        \r
+***************************************/\r
+#define SCSI_ATN_0             SCSI_ATN__0__PC\r
+\r
+#define SCSI_ATN_INT           SCSI_ATN__INT__PC\r
+\r
+#endif /* End Pins SCSI_ATN_ALIASES_H */\r
+\r
+/* [] END OF FILE */\r
index 6feb8e8..0f4eb67 100644 (file)
 #define SCSI_In_DBx_6          SCSI_In_DBx__6__PC\r
 #define SCSI_In_DBx_7          SCSI_In_DBx__7__PC\r
 \r
-#define SCSI_In_DBx_SCSI_Out_DB0               SCSI_In_DBx__SCSI_Out_DB0__PC\r
-#define SCSI_In_DBx_SCSI_Out_DB1               SCSI_In_DBx__SCSI_Out_DB1__PC\r
-#define SCSI_In_DBx_SCSI_Out_DB2               SCSI_In_DBx__SCSI_Out_DB2__PC\r
-#define SCSI_In_DBx_SCSI_Out_DB3               SCSI_In_DBx__SCSI_Out_DB3__PC\r
-#define SCSI_In_DBx_SCSI_Out_DB4               SCSI_In_DBx__SCSI_Out_DB4__PC\r
-#define SCSI_In_DBx_SCSI_Out_DB5               SCSI_In_DBx__SCSI_Out_DB5__PC\r
-#define SCSI_In_DBx_SCSI_Out_DB6               SCSI_In_DBx__SCSI_Out_DB6__PC\r
-#define SCSI_In_DBx_SCSI_Out_DB7               SCSI_In_DBx__SCSI_Out_DB7__PC\r
+#define SCSI_In_DBx_DB0                SCSI_In_DBx__DB0__PC\r
+#define SCSI_In_DBx_DB1                SCSI_In_DBx__DB1__PC\r
+#define SCSI_In_DBx_DB2                SCSI_In_DBx__DB2__PC\r
+#define SCSI_In_DBx_DB3                SCSI_In_DBx__DB3__PC\r
+#define SCSI_In_DBx_DB4                SCSI_In_DBx__DB4__PC\r
+#define SCSI_In_DBx_DB5                SCSI_In_DBx__DB5__PC\r
+#define SCSI_In_DBx_DB6                SCSI_In_DBx__DB6__PC\r
+#define SCSI_In_DBx_DB7                SCSI_In_DBx__DB7__PC\r
 \r
 #endif /* End Pins SCSI_In_DBx_ALIASES_H */\r
 \r
index 4243a84..729fd56 100644 (file)
 #define SCSI_In_5              SCSI_In__5__PC\r
 #define SCSI_In_6              SCSI_In__6__PC\r
 #define SCSI_In_7              SCSI_In__7__PC\r
-#define SCSI_In_8              SCSI_In__8__PC\r
-#define SCSI_In_9              SCSI_In__9__PC\r
 \r
 #define SCSI_In_DBP            SCSI_In__DBP__PC\r
-#define SCSI_In_ATN            SCSI_In__ATN__PC\r
 #define SCSI_In_BSY            SCSI_In__BSY__PC\r
 #define SCSI_In_ACK            SCSI_In__ACK__PC\r
-#define SCSI_In_RST            SCSI_In__RST__PC\r
 #define SCSI_In_MSG            SCSI_In__MSG__PC\r
 #define SCSI_In_SEL            SCSI_In__SEL__PC\r
 #define SCSI_In_CD             SCSI_In__CD__PC\r
index 26cf8de..740ea09 100644 (file)
 #define SCSI_Out_DBx_6         SCSI_Out_DBx__6__PC\r
 #define SCSI_Out_DBx_7         SCSI_Out_DBx__7__PC\r
 \r
-#define SCSI_Out_DBx_SCSI_Out_DB0              SCSI_Out_DBx__SCSI_Out_DB0__PC\r
-#define SCSI_Out_DBx_SCSI_Out_DB1              SCSI_Out_DBx__SCSI_Out_DB1__PC\r
-#define SCSI_Out_DBx_SCSI_Out_DB2              SCSI_Out_DBx__SCSI_Out_DB2__PC\r
-#define SCSI_Out_DBx_SCSI_Out_DB3              SCSI_Out_DBx__SCSI_Out_DB3__PC\r
-#define SCSI_Out_DBx_SCSI_Out_DB4              SCSI_Out_DBx__SCSI_Out_DB4__PC\r
-#define SCSI_Out_DBx_SCSI_Out_DB5              SCSI_Out_DBx__SCSI_Out_DB5__PC\r
-#define SCSI_Out_DBx_SCSI_Out_DB6              SCSI_Out_DBx__SCSI_Out_DB6__PC\r
-#define SCSI_Out_DBx_SCSI_Out_DB7              SCSI_Out_DBx__SCSI_Out_DB7__PC\r
+#define SCSI_Out_DBx_DB0               SCSI_Out_DBx__DB0__PC\r
+#define SCSI_Out_DBx_DB1               SCSI_Out_DBx__DB1__PC\r
+#define SCSI_Out_DBx_DB2               SCSI_Out_DBx__DB2__PC\r
+#define SCSI_Out_DBx_DB3               SCSI_Out_DBx__DB3__PC\r
+#define SCSI_Out_DBx_DB4               SCSI_Out_DBx__DB4__PC\r
+#define SCSI_Out_DBx_DB5               SCSI_Out_DBx__DB5__PC\r
+#define SCSI_Out_DBx_DB6               SCSI_Out_DBx__DB6__PC\r
+#define SCSI_Out_DBx_DB7               SCSI_Out_DBx__DB7__PC\r
 \r
 #endif /* End Pins SCSI_Out_DBx_ALIASES_H */\r
 \r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST.c
new file mode 100644 (file)
index 0000000..d8a3fa3
--- /dev/null
@@ -0,0 +1,137 @@
+/*******************************************************************************\r
+* File Name: SCSI_RST.c  \r
+* Version 1.90\r
+*\r
+* Description:\r
+*  This file contains API to enable firmware control of a Pins component.\r
+*\r
+* Note:\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+\r
+#include "cytypes.h"\r
+#include "SCSI_RST.h"\r
+\r
+/* APIs are not generated for P15[7:6] on PSoC 5 */\r
+#if !(CY_PSOC5A &&\\r
+        SCSI_RST__PORT == 15 && ((SCSI_RST__MASK & 0xC0) != 0))\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_Write\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Assign a new value to the digital port's data output register.  \r
+*\r
+* Parameters:  \r
+*  prtValue:  The value to be assigned to the Digital Port. \r
+*\r
+* Return: \r
+*  None\r
+*  \r
+*******************************************************************************/\r
+void SCSI_RST_Write(uint8 value) \r
+{\r
+    uint8 staticBits = (SCSI_RST_DR & (uint8)(~SCSI_RST_MASK));\r
+    SCSI_RST_DR = staticBits | ((uint8)(value << SCSI_RST_SHIFT) & SCSI_RST_MASK);\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_SetDriveMode\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Change the drive mode on the pins of the port.\r
+* \r
+* Parameters:  \r
+*  mode:  Change the pins to this drive mode.\r
+*\r
+* Return: \r
+*  None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_SetDriveMode(uint8 mode) \r
+{\r
+       CyPins_SetPinDriveMode(SCSI_RST_0, mode);\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_Read\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Read the current value on the pins of the Digital Port in right justified \r
+*  form.\r
+*\r
+* Parameters:  \r
+*  None\r
+*\r
+* Return: \r
+*  Returns the current value of the Digital Port as a right justified number\r
+*  \r
+* Note:\r
+*  Macro SCSI_RST_ReadPS calls this function. \r
+*  \r
+*******************************************************************************/\r
+uint8 SCSI_RST_Read(void) \r
+{\r
+    return (SCSI_RST_PS & SCSI_RST_MASK) >> SCSI_RST_SHIFT;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ReadDataReg\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Read the current value assigned to a Digital Port's data output register\r
+*\r
+* Parameters:  \r
+*  None \r
+*\r
+* Return: \r
+*  Returns the current value assigned to the Digital Port's data output register\r
+*  \r
+*******************************************************************************/\r
+uint8 SCSI_RST_ReadDataReg(void) \r
+{\r
+    return (SCSI_RST_DR & SCSI_RST_MASK) >> SCSI_RST_SHIFT;\r
+}\r
+\r
+\r
+/* If Interrupts Are Enabled for this Pins component */ \r
+#if defined(SCSI_RST_INTSTAT) \r
+\r
+    /*******************************************************************************\r
+    * Function Name: SCSI_RST_ClearInterrupt\r
+    ********************************************************************************\r
+    * Summary:\r
+    *  Clears any active interrupts attached to port and returns the value of the \r
+    *  interrupt status register.\r
+    *\r
+    * Parameters:  \r
+    *  None \r
+    *\r
+    * Return: \r
+    *  Returns the value of the interrupt status register\r
+    *  \r
+    *******************************************************************************/\r
+    uint8 SCSI_RST_ClearInterrupt(void) \r
+    {\r
+        return (SCSI_RST_INTSTAT & SCSI_RST_MASK) >> SCSI_RST_SHIFT;\r
+    }\r
+\r
+#endif /* If Interrupts Are Enabled for this Pins component */ \r
+\r
+#endif /* CY_PSOC5A... */\r
+\r
+    \r
+/* [] END OF FILE */\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST.h
new file mode 100644 (file)
index 0000000..145e295
--- /dev/null
@@ -0,0 +1,130 @@
+/*******************************************************************************\r
+* File Name: SCSI_RST.h  \r
+* Version 1.90\r
+*\r
+* Description:\r
+*  This file containts Control Register function prototypes and register defines\r
+*\r
+* Note:\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+\r
+#if !defined(CY_PINS_SCSI_RST_H) /* Pins SCSI_RST_H */\r
+#define CY_PINS_SCSI_RST_H\r
+\r
+#include "cytypes.h"\r
+#include "cyfitter.h"\r
+#include "cypins.h"\r
+#include "SCSI_RST_aliases.h"\r
+\r
+/* Check to see if required defines such as CY_PSOC5A are available */\r
+/* They are defined starting with cy_boot v3.0 */\r
+#if !defined (CY_PSOC5A)\r
+    #error Component cy_pins_v1_90 requires cy_boot v3.0 or later\r
+#endif /* (CY_PSOC5A) */\r
+\r
+/* APIs are not generated for P15[7:6] */\r
+#if !(CY_PSOC5A &&\\r
+        SCSI_RST__PORT == 15 && ((SCSI_RST__MASK & 0xC0) != 0))\r
+\r
+\r
+/***************************************\r
+*        Function Prototypes             \r
+***************************************/    \r
+\r
+void    SCSI_RST_Write(uint8 value) ;\r
+void    SCSI_RST_SetDriveMode(uint8 mode) ;\r
+uint8   SCSI_RST_ReadDataReg(void) ;\r
+uint8   SCSI_RST_Read(void) ;\r
+uint8   SCSI_RST_ClearInterrupt(void) ;\r
+\r
+\r
+/***************************************\r
+*           API Constants        \r
+***************************************/\r
+\r
+/* Drive Modes */\r
+#define SCSI_RST_DM_ALG_HIZ         PIN_DM_ALG_HIZ\r
+#define SCSI_RST_DM_DIG_HIZ         PIN_DM_DIG_HIZ\r
+#define SCSI_RST_DM_RES_UP          PIN_DM_RES_UP\r
+#define SCSI_RST_DM_RES_DWN         PIN_DM_RES_DWN\r
+#define SCSI_RST_DM_OD_LO           PIN_DM_OD_LO\r
+#define SCSI_RST_DM_OD_HI           PIN_DM_OD_HI\r
+#define SCSI_RST_DM_STRONG          PIN_DM_STRONG\r
+#define SCSI_RST_DM_RES_UPDWN       PIN_DM_RES_UPDWN\r
+\r
+/* Digital Port Constants */\r
+#define SCSI_RST_MASK               SCSI_RST__MASK\r
+#define SCSI_RST_SHIFT              SCSI_RST__SHIFT\r
+#define SCSI_RST_WIDTH              1u\r
+\r
+\r
+/***************************************\r
+*             Registers        \r
+***************************************/\r
+\r
+/* Main Port Registers */\r
+/* Pin State */\r
+#define SCSI_RST_PS                     (* (reg8 *) SCSI_RST__PS)\r
+/* Data Register */\r
+#define SCSI_RST_DR                     (* (reg8 *) SCSI_RST__DR)\r
+/* Port Number */\r
+#define SCSI_RST_PRT_NUM                (* (reg8 *) SCSI_RST__PRT) \r
+/* Connect to Analog Globals */                                                  \r
+#define SCSI_RST_AG                     (* (reg8 *) SCSI_RST__AG)                       \r
+/* Analog MUX bux enable */\r
+#define SCSI_RST_AMUX                   (* (reg8 *) SCSI_RST__AMUX) \r
+/* Bidirectional Enable */                                                        \r
+#define SCSI_RST_BIE                    (* (reg8 *) SCSI_RST__BIE)\r
+/* Bit-mask for Aliased Register Access */\r
+#define SCSI_RST_BIT_MASK               (* (reg8 *) SCSI_RST__BIT_MASK)\r
+/* Bypass Enable */\r
+#define SCSI_RST_BYP                    (* (reg8 *) SCSI_RST__BYP)\r
+/* Port wide control signals */                                                   \r
+#define SCSI_RST_CTL                    (* (reg8 *) SCSI_RST__CTL)\r
+/* Drive Modes */\r
+#define SCSI_RST_DM0                    (* (reg8 *) SCSI_RST__DM0) \r
+#define SCSI_RST_DM1                    (* (reg8 *) SCSI_RST__DM1)\r
+#define SCSI_RST_DM2                    (* (reg8 *) SCSI_RST__DM2) \r
+/* Input Buffer Disable Override */\r
+#define SCSI_RST_INP_DIS                (* (reg8 *) SCSI_RST__INP_DIS)\r
+/* LCD Common or Segment Drive */\r
+#define SCSI_RST_LCD_COM_SEG            (* (reg8 *) SCSI_RST__LCD_COM_SEG)\r
+/* Enable Segment LCD */\r
+#define SCSI_RST_LCD_EN                 (* (reg8 *) SCSI_RST__LCD_EN)\r
+/* Slew Rate Control */\r
+#define SCSI_RST_SLW                    (* (reg8 *) SCSI_RST__SLW)\r
+\r
+/* DSI Port Registers */\r
+/* Global DSI Select Register */\r
+#define SCSI_RST_PRTDSI__CAPS_SEL       (* (reg8 *) SCSI_RST__PRTDSI__CAPS_SEL) \r
+/* Double Sync Enable */\r
+#define SCSI_RST_PRTDSI__DBL_SYNC_IN    (* (reg8 *) SCSI_RST__PRTDSI__DBL_SYNC_IN) \r
+/* Output Enable Select Drive Strength */\r
+#define SCSI_RST_PRTDSI__OE_SEL0        (* (reg8 *) SCSI_RST__PRTDSI__OE_SEL0) \r
+#define SCSI_RST_PRTDSI__OE_SEL1        (* (reg8 *) SCSI_RST__PRTDSI__OE_SEL1) \r
+/* Port Pin Output Select Registers */\r
+#define SCSI_RST_PRTDSI__OUT_SEL0       (* (reg8 *) SCSI_RST__PRTDSI__OUT_SEL0) \r
+#define SCSI_RST_PRTDSI__OUT_SEL1       (* (reg8 *) SCSI_RST__PRTDSI__OUT_SEL1) \r
+/* Sync Output Enable Registers */\r
+#define SCSI_RST_PRTDSI__SYNC_OUT       (* (reg8 *) SCSI_RST__PRTDSI__SYNC_OUT) \r
+\r
+\r
+#if defined(SCSI_RST__INTSTAT)  /* Interrupt Registers */\r
+\r
+    #define SCSI_RST_INTSTAT                (* (reg8 *) SCSI_RST__INTSTAT)\r
+    #define SCSI_RST_SNAP                   (* (reg8 *) SCSI_RST__SNAP)\r
+\r
+#endif /* Interrupt Registers */\r
+\r
+#endif /* CY_PSOC5A... */\r
+\r
+#endif /*  CY_PINS_SCSI_RST_H */\r
+\r
+\r
+/* [] END OF FILE */\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.c
new file mode 100644 (file)
index 0000000..f5ac268
--- /dev/null
@@ -0,0 +1,356 @@
+/*******************************************************************************\r
+* File Name: SCSI_RST_ISR.c  \r
+* Version 1.70\r
+*\r
+*  Description:\r
+*   API for controlling the state of an interrupt.\r
+*\r
+*\r
+*  Note:\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+\r
+\r
+#include <cydevice_trm.h>\r
+#include <CyLib.h>\r
+#include <SCSI_RST_ISR.h>\r
+\r
+#if !defined(SCSI_RST_ISR__REMOVED) /* Check for removal by optimization */\r
+\r
+/*******************************************************************************\r
+*  Place your includes, defines and code here \r
+********************************************************************************/\r
+/* `#START SCSI_RST_ISR_intc` */\r
+\r
+/* `#END` */\r
+\r
+#ifndef CYINT_IRQ_BASE\r
+#define CYINT_IRQ_BASE      16\r
+#endif /* CYINT_IRQ_BASE */\r
+#ifndef CYINT_VECT_TABLE\r
+#define CYINT_VECT_TABLE    ((cyisraddress **) CYREG_NVIC_VECT_OFFSET)\r
+#endif /* CYINT_VECT_TABLE */\r
+\r
+/* Declared in startup, used to set unused interrupts to. */\r
+CY_ISR_PROTO(IntDefaultHandler);\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_Start\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Set up the interrupt and enable it.\r
+*\r
+* Parameters:  \r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_Start(void)\r
+{\r
+    /* For all we know the interrupt is active. */\r
+    SCSI_RST_ISR_Disable();\r
+\r
+    /* Set the ISR to point to the SCSI_RST_ISR Interrupt. */\r
+    SCSI_RST_ISR_SetVector(&SCSI_RST_ISR_Interrupt);\r
+\r
+    /* Set the priority. */\r
+    SCSI_RST_ISR_SetPriority((uint8)SCSI_RST_ISR_INTC_PRIOR_NUMBER);\r
+\r
+    /* Enable it. */\r
+    SCSI_RST_ISR_Enable();\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_StartEx\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*  Set up the interrupt and enable it.\r
+*\r
+* Parameters:  \r
+*   address: Address of the ISR to set in the interrupt vector table.\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_StartEx(cyisraddress address)\r
+{\r
+    /* For all we know the interrupt is active. */\r
+    SCSI_RST_ISR_Disable();\r
+\r
+    /* Set the ISR to point to the SCSI_RST_ISR Interrupt. */\r
+    SCSI_RST_ISR_SetVector(address);\r
+\r
+    /* Set the priority. */\r
+    SCSI_RST_ISR_SetPriority((uint8)SCSI_RST_ISR_INTC_PRIOR_NUMBER);\r
+\r
+    /* Enable it. */\r
+    SCSI_RST_ISR_Enable();\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_Stop\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Disables and removes the interrupt.\r
+*\r
+* Parameters:  \r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_Stop(void)\r
+{\r
+    /* Disable this interrupt. */\r
+    SCSI_RST_ISR_Disable();\r
+\r
+    /* Set the ISR to point to the passive one. */\r
+    SCSI_RST_ISR_SetVector(&IntDefaultHandler);\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_Interrupt\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   The default Interrupt Service Routine for SCSI_RST_ISR.\r
+*\r
+*   Add custom code between the coments to keep the next version of this file\r
+*   from over writting your code.\r
+*\r
+* Parameters:  \r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+CY_ISR(SCSI_RST_ISR_Interrupt)\r
+{\r
+    /*  Place your Interrupt code here. */\r
+    /* `#START SCSI_RST_ISR_Interrupt` */\r
+\r
+    /* `#END` */\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_SetVector\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Change the ISR vector for the Interrupt. Note calling SCSI_RST_ISR_Start\r
+*   will override any effect this method would have had. To set the vector \r
+*   before the component has been started use SCSI_RST_ISR_StartEx instead.\r
+*\r
+* Parameters:\r
+*   address: Address of the ISR to set in the interrupt vector table.\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_SetVector(cyisraddress address)\r
+{\r
+    cyisraddress * ramVectorTable;\r
+\r
+    ramVectorTable = (cyisraddress *) *CYINT_VECT_TABLE;\r
+\r
+    ramVectorTable[CYINT_IRQ_BASE + (uint32)SCSI_RST_ISR__INTC_NUMBER] = address;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_GetVector\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Gets the "address" of the current ISR vector for the Interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   Address of the ISR in the interrupt vector table.\r
+*\r
+*******************************************************************************/\r
+cyisraddress SCSI_RST_ISR_GetVector(void)\r
+{\r
+    cyisraddress * ramVectorTable;\r
+\r
+    ramVectorTable = (cyisraddress *) *CYINT_VECT_TABLE;\r
+\r
+    return ramVectorTable[CYINT_IRQ_BASE + (uint32)SCSI_RST_ISR__INTC_NUMBER];\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_SetPriority\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Sets the Priority of the Interrupt. Note calling SCSI_RST_ISR_Start\r
+*   or SCSI_RST_ISR_StartEx will override any effect this method \r
+*   would have had. This method should only be called after \r
+*   SCSI_RST_ISR_Start or SCSI_RST_ISR_StartEx has been called. To set \r
+*   the initial priority for the component use the cydwr file in the tool.\r
+*\r
+* Parameters:\r
+*   priority: Priority of the interrupt. 0 - 7, 0 being the highest.\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_SetPriority(uint8 priority)\r
+{\r
+    *SCSI_RST_ISR_INTC_PRIOR = priority << 5;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_GetPriority\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Gets the Priority of the Interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   Priority of the interrupt. 0 - 7, 0 being the highest.\r
+*\r
+*******************************************************************************/\r
+uint8 SCSI_RST_ISR_GetPriority(void)\r
+{\r
+    uint8 priority;\r
+\r
+\r
+    priority = *SCSI_RST_ISR_INTC_PRIOR >> 5;\r
+\r
+    return priority;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_Enable\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Enables the interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_Enable(void)\r
+{\r
+    /* Enable the general interrupt. */\r
+    *SCSI_RST_ISR_INTC_SET_EN = SCSI_RST_ISR__INTC_MASK;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_GetState\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Gets the state (enabled, disabled) of the Interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   1 if enabled, 0 if disabled.\r
+*\r
+*******************************************************************************/\r
+uint8 SCSI_RST_ISR_GetState(void)\r
+{\r
+    /* Get the state of the general interrupt. */\r
+    return ((*SCSI_RST_ISR_INTC_SET_EN & (uint32)SCSI_RST_ISR__INTC_MASK) != 0u) ? 1u:0u;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_Disable\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Disables the Interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_Disable(void)\r
+{\r
+    /* Disable the general interrupt. */\r
+    *SCSI_RST_ISR_INTC_CLR_EN = SCSI_RST_ISR__INTC_MASK;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_SetPending\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Causes the Interrupt to enter the pending state, a software method of\r
+*   generating the interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_SetPending(void)\r
+{\r
+    *SCSI_RST_ISR_INTC_SET_PD = SCSI_RST_ISR__INTC_MASK;\r
+}\r
+\r
+\r
+/*******************************************************************************\r
+* Function Name: SCSI_RST_ISR_ClearPending\r
+********************************************************************************\r
+*\r
+* Summary:\r
+*   Clears a pending interrupt.\r
+*\r
+* Parameters:\r
+*   None\r
+*\r
+* Return:\r
+*   None\r
+*\r
+*******************************************************************************/\r
+void SCSI_RST_ISR_ClearPending(void)\r
+{\r
+    *SCSI_RST_ISR_INTC_CLR_PD = SCSI_RST_ISR__INTC_MASK;\r
+}\r
+\r
+#endif /* End check for removal by optimization */\r
+\r
+\r
+/* [] END OF FILE */\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_ISR.h
new file mode 100644 (file)
index 0000000..6c32ac0
--- /dev/null
@@ -0,0 +1,70 @@
+/*******************************************************************************\r
+* File Name: SCSI_RST_ISR.h\r
+* Version 1.70\r
+*\r
+*  Description:\r
+*   Provides the function definitions for the Interrupt Controller.\r
+*\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+#if !defined(CY_ISR_SCSI_RST_ISR_H)\r
+#define CY_ISR_SCSI_RST_ISR_H\r
+\r
+\r
+#include <cytypes.h>\r
+#include <cyfitter.h>\r
+\r
+/* Interrupt Controller API. */\r
+void SCSI_RST_ISR_Start(void);\r
+void SCSI_RST_ISR_StartEx(cyisraddress address);\r
+void SCSI_RST_ISR_Stop(void);\r
+\r
+CY_ISR_PROTO(SCSI_RST_ISR_Interrupt);\r
+\r
+void SCSI_RST_ISR_SetVector(cyisraddress address);\r
+cyisraddress SCSI_RST_ISR_GetVector(void);\r
+\r
+void SCSI_RST_ISR_SetPriority(uint8 priority);\r
+uint8 SCSI_RST_ISR_GetPriority(void);\r
+\r
+void SCSI_RST_ISR_Enable(void);\r
+uint8 SCSI_RST_ISR_GetState(void);\r
+void SCSI_RST_ISR_Disable(void);\r
+\r
+void SCSI_RST_ISR_SetPending(void);\r
+void SCSI_RST_ISR_ClearPending(void);\r
+\r
+\r
+/* Interrupt Controller Constants */\r
+\r
+/* Address of the INTC.VECT[x] register that contains the Address of the SCSI_RST_ISR ISR. */\r
+#define SCSI_RST_ISR_INTC_VECTOR            ((reg32 *) SCSI_RST_ISR__INTC_VECT)\r
+\r
+/* Address of the SCSI_RST_ISR ISR priority. */\r
+#define SCSI_RST_ISR_INTC_PRIOR             ((reg8 *) SCSI_RST_ISR__INTC_PRIOR_REG)\r
+\r
+/* Priority of the SCSI_RST_ISR interrupt. */\r
+#define SCSI_RST_ISR_INTC_PRIOR_NUMBER      SCSI_RST_ISR__INTC_PRIOR_NUM\r
+\r
+/* Address of the INTC.SET_EN[x] byte to bit enable SCSI_RST_ISR interrupt. */\r
+#define SCSI_RST_ISR_INTC_SET_EN            ((reg32 *) SCSI_RST_ISR__INTC_SET_EN_REG)\r
+\r
+/* Address of the INTC.CLR_EN[x] register to bit clear the SCSI_RST_ISR interrupt. */\r
+#define SCSI_RST_ISR_INTC_CLR_EN            ((reg32 *) SCSI_RST_ISR__INTC_CLR_EN_REG)\r
+\r
+/* Address of the INTC.SET_PD[x] register to set the SCSI_RST_ISR interrupt state to pending. */\r
+#define SCSI_RST_ISR_INTC_SET_PD            ((reg32 *) SCSI_RST_ISR__INTC_SET_PD_REG)\r
+\r
+/* Address of the INTC.CLR_PD[x] register to clear the SCSI_RST_ISR interrupt. */\r
+#define SCSI_RST_ISR_INTC_CLR_PD            ((reg32 *) SCSI_RST_ISR__INTC_CLR_PD_REG)\r
+\r
+\r
+#endif /* CY_ISR_SCSI_RST_ISR_H */\r
+\r
+\r
+/* [] END OF FILE */\r
diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_aliases.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_RST_aliases.h
new file mode 100644 (file)
index 0000000..7d7e76d
--- /dev/null
@@ -0,0 +1,34 @@
+/*******************************************************************************\r
+* File Name: SCSI_RST.h  \r
+* Version 1.90\r
+*\r
+* Description:\r
+*  This file containts Control Register function prototypes and register defines\r
+*\r
+* Note:\r
+*\r
+********************************************************************************\r
+* Copyright 2008-2012, Cypress Semiconductor Corporation.  All rights reserved.\r
+* You may use this file only in accordance with the license, terms, conditions, \r
+* disclaimers, and limitations in the end user license agreement accompanying \r
+* the software package with which this file was provided.\r
+*******************************************************************************/\r
+\r
+#if !defined(CY_PINS_SCSI_RST_ALIASES_H) /* Pins SCSI_RST_ALIASES_H */\r
+#define CY_PINS_SCSI_RST_ALIASES_H\r
+\r
+#include "cytypes.h"\r
+#include "cyfitter.h"\r
+\r
+\r
+\r
+/***************************************\r
+*              Constants        \r
+***************************************/\r
+#define SCSI_RST_0             SCSI_RST__0__PC\r
+\r
+#define SCSI_RST_INT           SCSI_RST__INT__PC\r
+\r
+#endif /* End Pins SCSI_RST_ALIASES_H */\r
+\r
+/* [] END OF FILE */\r
index 1c1f875..bb19eba 100644 (file)
@@ -48,8 +48,8 @@
 /* Internal interrupt handling */\r
 #define SDCard_TX_BUFFER_SIZE             (4u)\r
 #define SDCard_RX_BUFFER_SIZE             (4u)\r
-#define SDCard_INTERNAL_TX_INT_ENABLED    (1u)\r
-#define SDCard_INTERNAL_RX_INT_ENABLED    (1u)\r
+#define SDCard_INTERNAL_TX_INT_ENABLED    (0u)\r
+#define SDCard_INTERNAL_RX_INT_ENABLED    (0u)\r
 \r
 #define SDCard_SINGLE_REG_SIZE            (8u)\r
 #define SDCard_USE_SECOND_DATAPATH        (SDCard_DATA_WIDTH > SDCard_SINGLE_REG_SIZE)\r
index 77538c6..f10eb3a 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: SD_Data_Clk.c\r
-* Version 2.0\r
+* Version 2.10\r
 *\r
 *  Description:\r
 *   This file provides the source code to the API for the clock component.\r
index 0ecaab6..1d1e098 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: SD_Data_Clk.h\r
-* Version 2.0\r
+* Version 2.10\r
 *\r
 *  Description:\r
 *   Provides the function and constant definitions for the clock component.\r
@@ -28,7 +28,7 @@
 /* Check to see if required defines such as CY_PSOC5LP are available */\r
 /* They are defined starting with cy_boot v3.0 */\r
 #if !defined (CY_PSOC5LP)\r
-    #error Component cy_clock_v2_0 requires cy_boot v3.0 or later\r
+    #error Component cy_clock_v2_10 requires cy_boot v3.0 or later\r
 #endif /* (CY_PSOC5LP) */\r
 \r
 \r
@@ -59,13 +59,13 @@ uint8 SD_Data_Clk_GetPhaseRegister(void) ;
 \r
 #define SD_Data_Clk_Enable()                       SD_Data_Clk_Start()\r
 #define SD_Data_Clk_Disable()                      SD_Data_Clk_Stop()\r
-#define SD_Data_Clk_SetDivider(clkDivider)         SD_Data_Clk_SetDividerRegister(clkDivider, 1)\r
-#define SD_Data_Clk_SetDividerValue(clkDivider)    SD_Data_Clk_SetDividerRegister((clkDivider) - 1, 1)\r
+#define SD_Data_Clk_SetDivider(clkDivider)         SD_Data_Clk_SetDividerRegister(clkDivider, 1u)\r
+#define SD_Data_Clk_SetDividerValue(clkDivider)    SD_Data_Clk_SetDividerRegister((clkDivider) - 1u, 1u)\r
 #define SD_Data_Clk_SetMode(clkMode)               SD_Data_Clk_SetModeRegister(clkMode)\r
 #define SD_Data_Clk_SetSource(clkSource)           SD_Data_Clk_SetSourceRegister(clkSource)\r
 #if defined(SD_Data_Clk__CFG3)\r
 #define SD_Data_Clk_SetPhase(clkPhase)             SD_Data_Clk_SetPhaseRegister(clkPhase)\r
-#define SD_Data_Clk_SetPhaseValue(clkPhase)        SD_Data_Clk_SetPhaseRegister((clkPhase) + 1)\r
+#define SD_Data_Clk_SetPhaseValue(clkPhase)        SD_Data_Clk_SetPhaseRegister((clkPhase) + 1u)\r
 #endif /* defined(SD_Data_Clk__CFG3) */\r
 \r
 \r
index c893ef0..c6cd4e2 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: SD_Init_Clk.c\r
-* Version 2.0\r
+* Version 2.10\r
 *\r
 *  Description:\r
 *   This file provides the source code to the API for the clock component.\r
index 04adc2a..df7e48b 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************\r
 * File Name: SD_Init_Clk.h\r
-* Version 2.0\r
+* Version 2.10\r
 *\r
 *  Description:\r
 *   Provides the function and constant definitions for the clock component.\r
@@ -28,7 +28,7 @@
 /* Check to see if required defines such as CY_PSOC5LP are available */\r
 /* They are defined starting with cy_boot v3.0 */\r
 #if !defined (CY_PSOC5LP)\r
-    #error Component cy_clock_v2_0 requires cy_boot v3.0 or later\r
+    #error Component cy_clock_v2_10 requires cy_boot v3.0 or later\r
 #endif /* (CY_PSOC5LP) */\r
 \r
 \r
@@ -59,13 +59,13 @@ uint8 SD_Init_Clk_GetPhaseRegister(void) ;
 \r
 #define SD_Init_Clk_Enable()                       SD_Init_Clk_Start()\r
 #define SD_Init_Clk_Disable()                      SD_Init_Clk_Stop()\r
-#define SD_Init_Clk_SetDivider(clkDivider)         SD_Init_Clk_SetDividerRegister(clkDivider, 1)\r
-#define SD_Init_Clk_SetDividerValue(clkDivider)    SD_Init_Clk_SetDividerRegister((clkDivider) - 1, 1)\r
+#define SD_Init_Clk_SetDivider(clkDivider)         SD_Init_Clk_SetDividerRegister(clkDivider, 1u)\r
+#define SD_Init_Clk_SetDividerValue(clkDivider)    SD_Init_Clk_SetDividerRegister((clkDivider) - 1u, 1u)\r
 #define SD_Init_Clk_SetMode(clkMode)               SD_Init_Clk_SetModeRegister(clkMode)\r
 #define SD_Init_Clk_SetSource(clkSource)           SD_Init_Clk_SetSourceRegister(clkSource)\r
 #if defined(SD_Init_Clk__CFG3)\r
 #define SD_Init_Clk_SetPhase(clkPhase)             SD_Init_Clk_SetPhaseRegister(clkPhase)\r
-#define SD_Init_Clk_SetPhaseValue(clkPhase)        SD_Init_Clk_SetPhaseRegister((clkPhase) + 1)\r
+#define SD_Init_Clk_SetPhaseValue(clkPhase)        SD_Init_Clk_SetPhaseRegister((clkPhase) + 1u)\r
 #endif /* defined(SD_Init_Clk__CFG3) */\r
 \r
 \r
index fb5ad88..33a28b8 100644 (file)
  * they apply.\r
  */\r
 OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")\r
-ENTRY(__cs3_reset)\r
+ENTRY(__cy_reset)\r
 SEARCH_DIR(.)\r
-GROUP(-lgcc -lc -lcs3 -lcs3unhosted -lcs3micro)\r
+GROUP(-lgcc -lc -lnosys)\r
+\r
 \r
 MEMORY\r
 {\r
-  rom (rx) : ORIGIN = 0, LENGTH = (262144 - 0)\r
-  ram (rwx) : ORIGIN = 0x20000000 - (65536 / 2), LENGTH = (65536 - 0x4000 - 0x1000)\r
+  rom (rx) : ORIGIN = 0x0, LENGTH = 262144\r
+  ram (rwx) : ORIGIN = 0x20000000 - (65536 / 2), LENGTH = 65536\r
 }\r
 \r
+\r
+CY_APPL_ORIGIN      = 0; \r
+CY_FLASH_ROW_SIZE   = 256;\r
+CY_ECC_ROW_SIZE     = 32;\r
+CY_EE_IN_BTLDR      = 0x0;\r
+CY_APPL_LOADABLE    = 0;\r
+CY_EE_SIZE          = 2048;\r
+CY_APPL_NUM         = 1;\r
+CY_APPL_MAX         = 1;\r
+CY_METADATA_SIZE    = 64;\r
+\r
+\r
 /* These force the linker to search for particular symbols from\r
  * the start of the link process and thus ensure the user's\r
  * overrides are picked up\r
  */\r
-EXTERN(__cs3_reset Reset)\r
-EXTERN(__cs3_start_asm __cs3_start_asm_generic_m)\r
+EXTERN(Reset)\r
+\r
 /* Bring in the interrupt routines & vector */\r
-INCLUDE micro-names.inc\r
-EXTERN(__cs3_start_c main __cs3_stack __cs3_heap_end)\r
+EXTERN(main)\r
+\r
+/* Bring in the meta data */\r
+EXTERN(cy_meta_loader cy_bootloader cy_meta_loadable cy_meta_bootloader)\r
+EXTERN(cy_meta_custnvl cy_meta_wolatch cy_meta_flashprotect cy_metadata)\r
 \r
 /* Provide fall-back values */\r
-PROVIDE(__cs3_heap_start = _end);\r
-PROVIDE(__cs3_region_num = (__cs3_regions_end - __cs3_regions) / 20);\r
-PROVIDE(__cs3_stack = 0x20000000 + (65536 / 2));\r
-PROVIDE(__cs3_heap_end = __cs3_stack - 0x4000);\r
+PROVIDE(__cy_heap_start = _end);\r
+PROVIDE(__cy_region_num = (__cy_regions_end - __cy_regions) / 16);\r
+PROVIDE(__cy_stack = ORIGIN(ram) + LENGTH(ram));\r
+PROVIDE(__cy_heap_end = __cy_stack - 0x4000);\r
 \r
 \r
 SECTIONS\r
 {\r
+  /* The bootloader location */\r
+  .cybootloader 0x0 : { KEEP(*(.cybootloader)) } >rom\r
 \r
-  .text :\r
+  /* Calculate where the loadables should start */\r
+  appl1_start   = CY_APPL_ORIGIN ? CY_APPL_ORIGIN : ALIGN(CY_FLASH_ROW_SIZE);\r
+  appl2_start   = appl1_start + ALIGN((LENGTH(rom) - appl1_start - 2 * CY_FLASH_ROW_SIZE) / 2, CY_FLASH_ROW_SIZE);\r
+  appl_start    = (CY_APPL_NUM == 1) ? appl1_start : appl2_start;\r
+  ecc_offset    = (appl_start / CY_FLASH_ROW_SIZE) * CY_ECC_ROW_SIZE;\r
+  ee_offset     = (CY_APPL_LOADABLE && !CY_EE_IN_BTLDR) ? ((CY_EE_SIZE / CY_APPL_MAX) * (CY_APPL_NUM - 1)) : 0;\r
+  ee_size       = (CY_APPL_LOADABLE && !CY_EE_IN_BTLDR) ? (CY_EE_SIZE / CY_APPL_MAX) : CY_EE_SIZE;\r
+  PROVIDE(CY_ECC_OFFSET = ecc_offset);\r
+  \r
+  .text appl_start :\r
   {\r
     CREATE_OBJECT_SYMBOLS\r
-    PROVIDE(__cs3_interrupt_vector = RomVectors);\r
+    PROVIDE(__cy_interrupt_vector = RomVectors);\r
+\r
     *(.romvectors)\r
-    *(.cs3.interrupt_vector)\r
+\r
     /* Make sure we pulled in an interrupt vector.  */\r
-    ASSERT (. != __cs3_interrupt_vector, "No interrupt vector");\r
+    ASSERT (. != __cy_interrupt_vector, "No interrupt vector");\r
+\r
+    ASSERT (CY_APPL_ORIGIN ? (SIZEOF(.cybootloader) <= CY_APPL_ORIGIN) : 1, "Wrong image location");\r
 \r
-    PROVIDE(__cs3_reset = Reset);\r
-    *(.cs3.reset)\r
+    PROVIDE(__cy_reset = Reset);\r
+    *(.text.Reset)\r
     /* Make sure we pulled in some reset code.  */\r
-    ASSERT (. != __cs3_reset, "No reset code");\r
+    ASSERT (. != __cy_reset, "No reset code");\r
 \r
        /* Place the DMA initialization before text to ensure it gets placed in first 64K of flash */\r
     *(.dma_init)\r
-    ASSERT(0 + . <= 0x10000 || !0, "DMA Init must be within the first 64k of flash");\r
+    ASSERT(appl_start + . <= 0x10000 || !0, "DMA Init must be within the first 64k of flash");\r
                \r
-    *(.text.cs3.init)\r
     *(.text .text.* .gnu.linkonce.t.*)\r
     *(.plt)\r
     *(.gnu.warning)\r
@@ -130,13 +159,12 @@ SECTIONS
     KEEP (*crtend.o(.dtors))\r
 \r
     . = ALIGN(4);\r
-    __cs3_regions = .;\r
-    LONG (0)\r
-    LONG (__cs3_region_init_ram)\r
-    LONG (__cs3_region_start_data)\r
-    LONG (__cs3_region_init_size_ram)\r
-    LONG (__cs3_region_zero_size_ram)\r
-    __cs3_regions_end = .;\r
+    __cy_regions = .;\r
+    LONG (__cy_region_init_ram)\r
+    LONG (__cy_region_start_data)\r
+    LONG (__cy_region_init_size_ram)\r
+    LONG (__cy_region_zero_size_ram)\r
+    __cy_regions_end = .;\r
 \r
     . = ALIGN (8);\r
     _etext = .;\r
@@ -144,9 +172,7 @@ SECTIONS
 \r
   .ramvectors (NOLOAD) : ALIGN(8)\r
   {\r
-    __cs3_region_start_ram = .;\r
-    *(.cs3.region-head.ram)\r
-    ASSERT (. == __cs3_region_start_ram, ".cs3.region-head.ram not permitted");\r
+    __cy_region_start_ram = .;\r
     KEEP(*(.ramvectors))\r
   }\r
 \r
@@ -157,7 +183,7 @@ SECTIONS
 \r
   .data : ALIGN(8)\r
   {\r
-    __cs3_region_start_data = .;\r
+    __cy_region_start_data = .;\r
 \r
     KEEP(*(.jcr))\r
     *(.got.plt) *(.got)\r
@@ -169,6 +195,7 @@ SECTIONS
   } >ram AT>rom\r
   .bss : ALIGN(8)\r
   {\r
+    PROVIDE(__bss_start__ = .);\r
     *(.shbss)\r
     *(.bss .bss.* .gnu.linkonce.b.*)\r
     *(COMMON)\r
@@ -177,13 +204,58 @@ SECTIONS
     _end = .;\r
     __end = .;\r
   } >ram AT>rom\r
+  PROVIDE(end = .);\r
+  PROVIDE(__bss_end__ = .);\r
+  \r
+  __cy_region_init_ram = LOADADDR (.data);\r
+  __cy_region_init_size_ram = _edata - ADDR (.data);\r
+  __cy_region_zero_size_ram = _end - _edata;\r
+  \r
+  /* The .stack and .heap sections don't contain any symbols. \r
+   * They are only used for linker to calculate RAM utilization.\r
+   */\r
+  .heap (NOLOAD) :\r
+  {\r
+    . = _end;\r
+    . += 0x1000;\r
+    __cy_heap_limit = .;\r
+  } >ram\r
+\r
+  .stack (__cy_stack - 0x4000) (NOLOAD) :\r
+  {\r
+    __cy_stack_limit = .;\r
+    . += 0x4000;\r
+  } >ram\r
   \r
-  __cs3_region_end_ram = __cs3_region_start_ram + LENGTH(ram);\r
-  __cs3_region_size_ram = LENGTH(ram);\r
-  __cs3_region_init_ram = LOADADDR (.data);\r
-  __cs3_region_init_size_ram = _edata - ADDR (.data);\r
-  __cs3_region_zero_size_ram = _end - _edata;\r
+  /* Check if data + heap + stack exceeds RAM limit */\r
+  ASSERT(__cy_stack_limit >= __cy_heap_limit, "region RAM overflowed with stack")\r
+\r
+  .cyloadermeta ((appl_start == 0) ? (LENGTH(rom) - CY_METADATA_SIZE) : 0xF0000000) :\r
+  {\r
+    KEEP(*(.cyloadermeta))\r
+  } :NONE\r
+\r
+  .cyloadablemeta (LENGTH(rom) - CY_FLASH_ROW_SIZE * (CY_APPL_NUM - 1) - CY_METADATA_SIZE) :\r
+  {\r
+    KEEP(*(.cyloadablemeta))\r
+  } >rom\r
+\r
+  .cyconfigecc (0x80000000 + ecc_offset) : \r
+  {\r
+    KEEP(*(.cyconfigecc))\r
+  } :NONE \r
+\r
+  .cycustnvl      0x90000000 : { KEEP(*(.cycustnvl)) } :NONE \r
+  .cywolatch      0x90100000 : { KEEP(*(.cywolatch)) } :NONE \r
+\r
+  .cyeeprom (0x90200000 + ee_offset) : \r
+  {\r
+    KEEP(*(.cyeeprom))\r
+    ASSERT(. <= (0x90200000 + ee_offset + ee_size), ".cyeeprom data will not fit in EEPROM");\r
+  } :NONE \r
 \r
+  .cyflashprotect 0x90400000 : { KEEP(*(.cyflashprotect)) } :NONE \r
+  .cymeta         0x90500000 : { KEEP(*(.cymeta)) } :NONE \r
 \r
   .stab 0 (NOLOAD) : { *(.stab) }\r
   .stabstr 0 (NOLOAD) : { *(.stabstr) }\r
index c6c8b64..3d388ee 100644 (file)
@@ -1,30 +1,33 @@
-:2000000006520040016500403706014023070140431401403F15014003160140401701409A\r
-:2000200003400140024101400242014002430140064801401049014004500140015101405C\r
-:2000400014FF18081CE12CFF34F06430870F5B045F018010818684418582870488818901B7\r
-:200060008A408BAE8C888D698E618F0690019186924094479698978698E299E79A089B0810\r
-:200080009C419D86A110A404A504A740A840A982AC41AD10B10FB3E0B4C0B510B63FB7087A\r
-:2000A000B880B922BA20BB0CBE40BF40D409D604D80BD90BDB0BDC99DD90DF010040012602\r
-:2000C0000A6910081220138019A02054226C2310281029A12A04300831403210330138500B\r
-:2000E0003905581059085A82628063406D407801C00FC20FC407CA0FCC0FCE0FD60FD809B0\r
-:20010000DE01023006040820095C0A0C0B200C100D380E0C0F421203140415401608173043\r
-:2001200019191A481B601C031D0722012307240328032C03303C3240337034013507360275\r
-:2001400037083B083E503F5054405604580B590B5B0B5C995D905F01820885018610870274\r
-:2001600089028B018D018E058F0494069A019D06AA03AC08AE10B018B107B407B902BE0108\r
-:20018000D808D908DC99DF010040010A02080448068008200A610E080F101028124013803D\r
-:2001A0001560190A1A021B901E88210822A027402902310832103340374038403B103C4019\r
-:2001C0003F1460806250632078017F018004848086808A028E2490409160926193169602FD\r
-:2001E00098219A509B80A028A208A508A6C2A780A821C0BFC26FC4CFCA01CC1ECE7CD80FA1\r
-:20020000DE11E250E42056085B045D90004401210A69102A190120102110221023042840C0\r
-:2002200029602A0430083210334138503904404041104380490A4A0A500352545E806108D9\r
-:2002400064016702682869056A406BC1714072017801904491409208931095059663984012\r
-:2002600099209C019D4B9E049F81A208A408A680AC40AE04AF40C00FC20FC407CA0FCC0F56\r
-:20028000CE0ED00DD20CD610D812DE0130103640CC309C10A6409C10A6409C10A640210887\r
-:2002A00025809C10AE40C860EE4009025004578081808410850889028C048F809C10A18852\r
-:2002C000C210D460E040E480E64001010B0111011B01000FC000020000D46008802000D0B5\r
-:2002E0000021FF4E90DC40001FD0200C7F118022C0DC01000020008FC0080400C0040800B3\r
-:2003000000DC9F00FF0000F0000F000000000008000001004602100005BEFDBC3FFFFFFF4B\r
-:200320002200F0080400000000000228040B0B0B909900010000C00040011011C001001132\r
-:20034000400140010000000000000000000000000000000000FFFF000000000008003000E5\r
-:2003600008000000000000000000000010000000FF000000000000010200F10E0E000C004A\r
-:200380000000000000FCFC0000000000F0000FF00000000000010000F00F0F000000000166\r
+:20000000014500400752004001640040020301403F0401402A05014003060140410701400F\r
+:20002000010D014009150140431601403A17014002400140014101400142014002430140D6\r
+:200040000244014002450140044801400E4901400450014001510140360214FF1804190CB8\r
+:200060001CE12CFF34F06410860F9840B04000011D012D013001310139023E01560858047F\r
+:20008000590B5B045C905D905F01806C814184688604886C89818B408D41910492029410DC\r
+:2000A00095E296689708981099889AC59B619C6C9D479F98A06CA110A404A541A893A94076\r
+:2000C000AA20AC0FAD01AE90AF40B278B407B5C0B680B73FB980BA38BB20BE40BF40D4095A\r
+:2000E000D80BD90BDB0BDC99DD90DF010001042806800C020D010E2917691A801D301E28DE\r
+:200100001F40210222022590270829402FAA3180360637603C803D203E814BC058405D2493\r
+:200120005E025F406001664078027C029840C078C2F0C4F0CAF8CCF8CEB0D6F8D818DE812A\r
+:20014000D608DB04DD9000010240051007610D020E210F08171A1D402401250C26022760CD\r
+:200160002A022B802C022E012F2836463C803D28448045A84C804D044E02540256105784A2\r
+:200180005980600266206C146EA16F3B744077027C0294289504960199109B089C029D4007\r
+:2001A0009E409F61A132A204A442A601A7AAAA40AD21C0F0C2F0C470CAF0CCD0CE70D0F068\r
+:2001C000D210D608D828DE80EA80848089409C80A140AA40AD01B085B210E620000402082A\r
+:2001E00004100518060C0725082009200A0C0B180E030F011108120413331403192E1A30C8\r
+:200200001B101C032003260128032E4830403201343C3538360237073B203E445440580BDF\r
+:20022000590B5B0B5C995D905F018001820288068B078E1091019208970298029A01A1074D\r
+:20024000A801A904AA04AC08AE10B007B107B207B618B80ABE40BF01D80BD904DB04DC092E\r
+:20026000DF010010014003400510076109200A800E691002120813201612171218101981F1\r
+:200280001D841E4A1F102101254027082911320A351036023B203D883E20462047086405E1\r
+:2002A0006504680278027C028D409201980299109A129B739C809D809E20A080A124A21286\r
+:2002C000A580A601C0FBC2FAC4F3CA05CCA3CE74D870DE81E0403340CC109F409F40AB40E5\r
+:2002E000EE801440C404B040EA01201026808E80C86008025B205F4084028B209340A810AD\r
+:20030000AF40C210D480D620E440EC80EE4001010B0111011B0100031F0020000091FF6E98\r
+:200320007F248000906C400000716082C01008EF00009F00C06C0200C06C0100802400485E\r
+:20034000C000046C00480000000F00F00000FF1000080000000040403205100004FEDBCBA0\r
+:200360003FFFFFFF2200F0080400000000000224040B0B0B909900010000C000400110118C\r
+:20038000C0010011400140010000000000000000000000000000000000FFFF00000000000B\r
+:2003A0000800300008000000000000000000000010000000FF000000000000010200F10EEC\r
+:2003C0000E000C000000000000FCFC0000000000F0000FF00000000000010000F00F0F000D\r
+:2003E0000000000100000000000000000000000000000000000000000000000000000000FC\r
 :00000001FF\r