From b9ed365266b2637d2dc3cfd14b1c91f49a584def Mon Sep 17 00:00:00 2001 From: Michael McMaster Date: Sun, 20 Oct 2013 18:27:57 +1000 Subject: [PATCH] SCSI data read/write implemented using the PSoC datapath Moved some configuration parameters into EEPROM --- STATUS | 3 +- .../Generated_Source/PSoC5/CFG_EEPROM.c | 511 ++++++++ .../Generated_Source/PSoC5/CFG_EEPROM.h | 60 + .../Generated_Source/PSoC5/PARITY_EN.c | 137 -- .../Generated_Source/PSoC5/PARITY_EN.h | 130 -- .../Generated_Source/PSoC5/SCSI_CTL_IO.c | 63 + .../{PARITY_EN_aliases.h => SCSI_CTL_IO.h} | 28 +- .../Generated_Source/PSoC5/SCSI_ID_aliases.h | 34 - .../Generated_Source/PSoC5/SCSI_Out_aliases.h | 4 +- .../SCSI2SD.cydsn/Generated_Source/PSoC5/SD.c | 1155 ----------------- .../SCSI2SD.cydsn/Generated_Source/PSoC5/SD.h | 389 ------ .../Generated_Source/PSoC5/SD_INT.c | 189 --- .../Generated_Source/PSoC5/SD_IntClock.c | 521 -------- .../Generated_Source/PSoC5/SD_IntClock.h | 124 -- .../Generated_Source/PSoC5/SD_PM.c | 180 --- .../Generated_Source/PSoC5/SD_PVT.h | 53 - .../Generated_Source/PSoC5/config.hex | 100 +- .../Generated_Source/PSoC5/core_cm3.c | 784 ----------- .../Generated_Source/PSoC5/cydevice.h | 1 + .../Generated_Source/PSoC5/cydevice_trm.h | 1 + .../Generated_Source/PSoC5/cydevicegnu.inc | 1 + .../PSoC5/cydevicegnu_trm.inc | 1 + .../Generated_Source/PSoC5/cydeviceiar.inc | 1 + .../PSoC5/cydeviceiar_trm.inc | 1 + .../Generated_Source/PSoC5/cydevicerv.inc | 3 + .../Generated_Source/PSoC5/cydevicerv_trm.inc | 3 + .../Generated_Source/PSoC5/cyfitter.h | 421 +++--- .../Generated_Source/PSoC5/cyfitter_cfg.c | 34 +- .../Generated_Source/PSoC5/cyfittergnu.inc | 421 +++--- .../Generated_Source/PSoC5/cyfitteriar.inc | 421 +++--- .../Generated_Source/PSoC5/cyfitterrv.inc | 421 +++--- .../Generated_Source/PSoC5/cymetadata.c | 641 +++++++-- .../Generated_Source/PSoC5/eeprom.hex | 33 + .../Generated_Source/PSoC5/post_link.bat | 19 - .../Generated_Source/PSoC5/project.h | 47 +- .../Generated_Source/PSoCCreatorExportIDE.xml | 208 --- .../OddParityGen/OddParityGen.cysym | Bin 0 -> 74109 bytes .../SCSI2SD.cydsn/OddParityGen/OddParityGen.v | 44 + software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cycdx | 41 + software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cydwr | Bin 121724 -> 130077 bytes software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cyfit | Bin 190887 -> 215113 bytes software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cyprj | 238 +++- software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.svd | 52 + .../SCSI2SD.cydsn/TopDesign/TopDesign.cysch | Bin 101814 -> 123320 bytes software/SCSI2SD/SCSI2SD.cydsn/config.c | 75 ++ software/SCSI2SD/SCSI2SD.cydsn/config.h | 41 + software/SCSI2SD/SCSI2SD.cydsn/disk.c | 7 +- software/SCSI2SD/SCSI2SD.cydsn/inquiry.c | 25 +- software/SCSI2SD/SCSI2SD.cydsn/main.c | 3 + software/SCSI2SD/SCSI2SD.cydsn/scsi.c | 101 +- software/SCSI2SD/SCSI2SD.cydsn/scsi.h | 3 +- software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.c | 118 +- software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.h | 9 +- .../SCSI2SD.cydsn/scsiTarget/scsiTarget.cysym | Bin 0 -> 77821 bytes .../SCSI2SD.cydsn/scsiTarget/scsiTarget.v | 320 +++++ software/SCSI2SD/SCSI2SD.cydsn/sd.c | 54 +- software/SCSI2SD/SCSI2SD.cydsn/sd.h | 2 +- 57 files changed, 3177 insertions(+), 5099 deletions(-) create mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CFG_EEPROM.c create mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CFG_EEPROM.h delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN.c delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN.h create mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_CTL_IO.c rename software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/{PARITY_EN_aliases.h => SCSI_CTL_IO.h} (53%) delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ID_aliases.h delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD.c delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD.h delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_INT.c delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_IntClock.c delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_IntClock.h delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_PM.c delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_PVT.h delete mode 100644 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/core_cm3.c delete mode 100755 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/post_link.bat delete mode 100755 software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoCCreatorExportIDE.xml create mode 100755 software/SCSI2SD/SCSI2SD.cydsn/OddParityGen/OddParityGen.cysym create mode 100755 software/SCSI2SD/SCSI2SD.cydsn/OddParityGen/OddParityGen.v create mode 100644 software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cycdx create mode 100644 software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.svd create mode 100755 software/SCSI2SD/SCSI2SD.cydsn/config.c create mode 100755 software/SCSI2SD/SCSI2SD.cydsn/config.h create mode 100755 software/SCSI2SD/SCSI2SD.cydsn/scsiTarget/scsiTarget.cysym create mode 100755 software/SCSI2SD/SCSI2SD.cydsn/scsiTarget/scsiTarget.v diff --git a/STATUS b/STATUS index dc2d8ce..ab682ae 100644 --- a/STATUS +++ b/STATUS @@ -3,11 +3,12 @@ assignments are incorrect. - USB bootloader is not implemented yet. -- Configuration options are not yet loaded from EEPROM. - Configuration options cannot be set via USB. - SCSI ID hardcoded to 0 - Partity checking is on - Unit Attention Condition is off + - SPI overclock to 32MHz off. - DMA is not used for SPI transfers +- Parity checking not implemented for the PSoC Datapath implementation diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CFG_EEPROM.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CFG_EEPROM.c new file mode 100644 index 0000000..0668305 --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CFG_EEPROM.c @@ -0,0 +1,511 @@ +/******************************************************************************* +* File Name: CFG_EEPROM.c +* Version 2.10 +* +* Description: +* Provides the source code to the API for the EEPROM component. +* +******************************************************************************** +* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. +* You may use this file only in accordance with the license, terms, conditions, +* disclaimers, and limitations in the end user license agreement accompanying +* the software package with which this file was provided. +*******************************************************************************/ + +#include "CFG_EEPROM.h" + + +#if (CY_PSOC3 || CY_PSOC5LP) + + /******************************************************************************* + * Function Name: CFG_EEPROM_Enable + ******************************************************************************** + * + * Summary: + * Enable the EEPROM. + * + * Parameters: + * None + * + * Return: + * None + * + *******************************************************************************/ + void CFG_EEPROM_Enable(void) + { + CyEEPROM_Start(); + } + + + /******************************************************************************* + * Function Name: CFG_EEPROM_Start + ******************************************************************************** + * + * Summary: + * Starts EEPROM. + * + * Parameters: + * None + * + * Return: + * None + * + *******************************************************************************/ + void CFG_EEPROM_Start(void) + { + /* Enable the EEPROM */ + CFG_EEPROM_Enable(); + } + + + /******************************************************************************* + * Function Name: CFG_EEPROM_Stop + ******************************************************************************** + * + * Summary: + * Stops and powers down EEPROM. + * + * Parameters: + * None + * + * Return: + * None + * + *******************************************************************************/ + void CFG_EEPROM_Stop (void) + { + /* Disable EEPROM */ + CyEEPROM_Stop(); + } + +#endif /* (CY_PSOC3 || CY_PSOC5LP) */ + + +/******************************************************************************* +* Function Name: CFG_EEPROM_EraseSector +******************************************************************************** +* +* Summary: +* Erases a sector of memory. This function blocks until the operation is +* complete. +* +* Parameters: +* sectorNumber: Sector number to erase. +* +* Return: +* CYRET_SUCCESS, if the operation was successful. +* CYRET_BAD_PARAM, if the parameter sectorNumber out of range. +* CYRET_LOCKED, if the spc is being used. +* CYRET_UNKNOWN, if there was an SPC error. +* +*******************************************************************************/ +cystatus CFG_EEPROM_EraseSector(uint8 sectorNumber) +{ + cystatus status; + + /* Start the SPC */ + CySpcStart(); + + if(sectorNumber < (uint8) CY_EEPROM_NUMBER_ARRAYS) + { + /* See if we can get the SPC. */ + if(CySpcLock() == CYRET_SUCCESS) + { + #if(CY_PSOC5A) + + /* Plan for failure */ + status = CYRET_UNKNOWN; + + /* Command to load a row of data */ + if(CySpcLoadRow(CY_SPC_FIRST_EE_ARRAYID, 0, CYDEV_EEPROM_ROW_SIZE) == CYRET_STARTED) + { + while(CY_SPC_BUSY) + { + /* Wait until SPC becomes idle */ + } + + /* SPC is idle now */ + if(CY_SPC_STATUS_SUCCESS == CY_SPC_READ_STATUS) + { + status = CYRET_SUCCESS; + } + } + + /* Command to erase a sector */ + if(status == CYRET_SUCCESS) + { + + #endif /* (CY_PSOC5A) */ + + if(CySpcEraseSector(CY_SPC_FIRST_EE_ARRAYID, sectorNumber) == CYRET_STARTED) + { + /* Plan for failure */ + status = CYRET_UNKNOWN; + + while(CY_SPC_BUSY) + { + /* Wait until SPC becomes idle */ + } + + /* SPC is idle now */ + if(CY_SPC_STATUS_SUCCESS == CY_SPC_READ_STATUS) + { + status = CYRET_SUCCESS; + } + } + else + { + status = CYRET_UNKNOWN; + } + + #if(CY_PSOC5A) + + } + else + { + status = CYRET_UNKNOWN; + } + + #endif /* (CY_PSOC5A) */ + + /* Unlock the SPC so someone else can use it. */ + CySpcUnlock(); + } + else + { + status = CYRET_LOCKED; + } + } + else + { + status = CYRET_BAD_PARAM; + } + + return(status); +} + + +/******************************************************************************* +* Function Name: CFG_EEPROM_Write +******************************************************************************** +* +* Summary: +* Writes a row, CYDEV_EEPROM_ROW_SIZE of data to the EEPROM. This is +* a blocking call. It will not return until the function succeeds or fails. +* +* Parameters: +* rowData: Address of the data to write to the EEPROM. +* rowNumber: EEPROM row number to program. +* +* Return: +* CYRET_SUCCESS, if the operation was successful. +* CYRET_BAD_PARAM, if the parameter rowNumber out of range. +* CYRET_LOCKED, if the spc is being used. +* CYRET_UNKNOWN, if there was an SPC error. +* +*******************************************************************************/ +cystatus CFG_EEPROM_Write(const uint8 * rowData, uint8 rowNumber) +{ + cystatus status; + + /* Start the SPC */ + CySpcStart(); + + if(rowNumber < (uint8) CY_EEPROM_NUMBER_ROWS) + { + /* See if we can get the SPC. */ + if(CySpcLock() == CYRET_SUCCESS) + { + /* Plan for failure */ + status = CYRET_UNKNOWN; + + /* Command to load a row of data */ + if(CySpcLoadRow(CY_SPC_FIRST_EE_ARRAYID, rowData, CYDEV_EEPROM_ROW_SIZE) == CYRET_STARTED) + { + while(CY_SPC_BUSY) + { + /* Wait until SPC becomes idle */ + } + + /* SPC is idle now */ + if(CY_SPC_STATUS_SUCCESS == CY_SPC_READ_STATUS) + { + status = CYRET_SUCCESS; + } + + /* Command to erase and program the row. */ + if(status == CYRET_SUCCESS) + { + if(CySpcWriteRow(CY_SPC_FIRST_EE_ARRAYID, (uint16)rowNumber, dieTemperature[0], + dieTemperature[1]) == CYRET_STARTED) + { + /* Plan for failure */ + status = CYRET_UNKNOWN; + + while(CY_SPC_BUSY) + { + /* Wait until SPC becomes idle */ + } + + /* SPC is idle now */ + if(CY_SPC_STATUS_SUCCESS == CY_SPC_READ_STATUS) + { + status = CYRET_SUCCESS; + } + } + else + { + status = CYRET_UNKNOWN; + } + } + else + { + status = CYRET_UNKNOWN; + } + } + + /* Unlock the SPC so someone else can use it. */ + CySpcUnlock(); + } + else + { + status = CYRET_LOCKED; + } + } + else + { + status = CYRET_BAD_PARAM; + } + + return(status); +} + + +/******************************************************************************* +* Function Name: CFG_EEPROM_StartWrite +******************************************************************************** +* +* Summary: +* Starts the SPC write function. This function does not block, it returns +* once the command has begun the SPC write function. This function must be used +* in combination with CFG_EEPROM_QueryWrite(). Once this function has +* been called the SPC will be locked until CFG_EEPROM_QueryWrite() +* returns CYRET_SUCCESS. +* +* Parameters: +* rowData: Address of buffer containing a row of data to write to the EEPROM. +* rowNumber: EEPROM row number to program. +* +* Return: +* CYRET_STARTED, if the spc command to write was successfuly started. +* CYRET_BAD_PARAM, if the parameter rowNumber out of range. +* CYRET_LOCKED, if the spc is being used. +* CYRET_UNKNOWN, if there was an SPC error. +* +*******************************************************************************/ +cystatus CFG_EEPROM_StartWrite(const uint8 * rowData, uint8 rowNumber) \ + +{ + cystatus status; + + if(rowNumber < (uint8) CY_EEPROM_NUMBER_ROWS) + { + /* See if we can get the SPC. */ + if(CySpcLock() == CYRET_SUCCESS) + { + /* Plan for failure */ + status = CYRET_UNKNOWN; + + /* Command to load a row of data */ + if(CySpcLoadRow(CY_SPC_FIRST_EE_ARRAYID, rowData, CYDEV_EEPROM_ROW_SIZE) == CYRET_STARTED) + { + while(CY_SPC_BUSY) + { + /* Wait until SPC becomes idle */ + } + + /* SPC is idle now */ + if(CY_SPC_STATUS_SUCCESS == CY_SPC_READ_STATUS) + { + status = CYRET_SUCCESS; + } + + /* Command to erase and program the row. */ + if(status == CYRET_SUCCESS) + { + if(CySpcWriteRow(CY_SPC_FIRST_EE_ARRAYID, (uint16)rowNumber, dieTemperature[0], + dieTemperature[1]) == CYRET_STARTED) + { + status = CYRET_STARTED; + } + else + { + status = CYRET_UNKNOWN; + } + } + else + { + status = CYRET_UNKNOWN; + } + } + } + else + { + status = CYRET_LOCKED; + } + } + else + { + status = CYRET_BAD_PARAM; + } + + return(status); +} + + +/******************************************************************************* +* Function Name: CFG_EEPROM_QueryWrite +******************************************************************************** +* +* Summary: +* Checks the state of write to EEPROM. This function must be called until +* the return value is not CYRET_STARTED. +* +* Parameters: +* None +* +* Return: +* CYRET_STARTED, if the spc command is still processing. +* CYRET_SUCCESS, if the operation was successful. +* CYRET_UNKNOWN, if there was an SPC error. +* +*******************************************************************************/ +cystatus CFG_EEPROM_QueryWrite(void) +{ + cystatus status; + + /* Check if SPC is idle */ + if(CY_SPC_IDLE) + { + /* SPC is idle now */ + if(CY_SPC_STATUS_SUCCESS == CY_SPC_READ_STATUS) + { + status = CYRET_SUCCESS; + } + else + { + status = CYRET_UNKNOWN; + } + + /* Unlock the SPC so someone else can use it. */ + CySpcUnlock(); + } + else + { + status = CYRET_STARTED; + } + + return(status); +} + + +/******************************************************************************* +* Function Name: CFG_EEPROM_ByteWrite +******************************************************************************** +* +* Summary: +* Writes a byte of data to the EEPROM. This is a blocking call. It will not +* return until the function succeeds or fails. +* +* Parameters: +* dataByte: Byte of data to write to the EEPROM. +* rowNumber: EEPROM row number to program. +* byteNumber: Byte number within the row to program. +* +* Return: +* CYRET_SUCCESS, if the operation was successful. +* CYRET_BAD_PARAM, if the parameter rowNumber or byteNumber out of range. +* CYRET_LOCKED, if the spc is being used. +* CYRET_UNKNOWN, if there was an SPC error. +* +*******************************************************************************/ +cystatus CFG_EEPROM_ByteWrite(uint8 dataByte, uint8 rowNumber, uint8 byteNumber) \ + +{ + cystatus status; + + /* Start the SPC */ + CySpcStart(); + + if((rowNumber < (uint8) CY_EEPROM_NUMBER_ROWS) && (byteNumber < (uint8) SIZEOF_EEPROM_ROW)) + { + /* See if we can get the SPC. */ + if(CySpcLock() == CYRET_SUCCESS) + { + /* Plan for failure */ + status = CYRET_UNKNOWN; + + /* Command to load a byte of data */ + if(CySpcLoadMultiByte(CY_SPC_FIRST_EE_ARRAYID, (uint16)byteNumber, &dataByte,\ + CFG_EEPROM_SPC_BYTE_WRITE_SIZE) == CYRET_STARTED) + { + while(CY_SPC_BUSY) + { + /* Wait until SPC becomes idle */ + } + + /* SPC is idle now */ + if(CY_SPC_STATUS_SUCCESS == CY_SPC_READ_STATUS) + { + status = CYRET_SUCCESS; + } + + /* Command to erase and program the row. */ + if(status == CYRET_SUCCESS) + { + if(CySpcWriteRow(CY_SPC_FIRST_EE_ARRAYID, (uint16)rowNumber, dieTemperature[0], + dieTemperature[1]) == CYRET_STARTED) + { + /* Plan for failure */ + status = CYRET_UNKNOWN; + + while(CY_SPC_BUSY) + { + /* Wait until SPC becomes idle */ + } + + /* SPC is idle now */ + if(CY_SPC_STATUS_SUCCESS == CY_SPC_READ_STATUS) + { + status = CYRET_SUCCESS; + } + } + else + { + status = CYRET_UNKNOWN; + } + } + else + { + status = CYRET_UNKNOWN; + } + } + + /* Unlock the SPC so someone else can use it. */ + CySpcUnlock(); + } + else + { + status = CYRET_LOCKED; + } + } + else + { + status = CYRET_BAD_PARAM; + } + + return(status); +} + + +/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CFG_EEPROM.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CFG_EEPROM.h new file mode 100644 index 0000000..e6a5f0f --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/CFG_EEPROM.h @@ -0,0 +1,60 @@ +/******************************************************************************* +* File Name: CFG_EEPROM.h +* Version 2.10 +* +* Description: +* Provides the function definitions for the EEPROM APIs. +* +******************************************************************************** +* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. +* You may use this file only in accordance with the license, terms, conditions, +* disclaimers, and limitations in the end user license agreement accompanying +* the software package with which this file was provided. +*******************************************************************************/ + +#if !defined(CY_EEPROM_CFG_EEPROM_H) +#define CY_EEPROM_CFG_EEPROM_H + +#include "cydevice_trm.h" +#include "CyFlash.h" + +#if !defined(CY_PSOC5LP) + #error Component EEPROM_v2_10 requires cy_boot v3.0 or later +#endif /* (CY_PSOC5LP) */ + + +/*************************************** +* Function Prototypes +***************************************/ + +#if (CY_PSOC3 || CY_PSOC5LP) + void CFG_EEPROM_Enable(void) ; + void CFG_EEPROM_Start(void); + void CFG_EEPROM_Stop(void) ; +#endif /* (CY_PSOC3 || CY_PSOC5LP) */ + +cystatus CFG_EEPROM_EraseSector(uint8 sectorNumber) ; +cystatus CFG_EEPROM_Write(const uint8 * rowData, uint8 rowNumber) ; +cystatus CFG_EEPROM_StartWrite(const uint8 * rowData, uint8 rowNumber) \ + ; +cystatus CFG_EEPROM_QueryWrite(void) ; +cystatus CFG_EEPROM_ByteWrite(uint8 dataByte, uint8 rowNumber, uint8 byteNumber) \ + ; + + +/**************************************** +* API Constants +****************************************/ + +#define CFG_EEPROM_EEPROM_SIZE CYDEV_EE_SIZE +#define CFG_EEPROM_SPC_BYTE_WRITE_SIZE (0x01u) + + +/******************************************************************************* +* Following code are OBSOLETE and must not be used starting from EEPROM 2.10 +*******************************************************************************/ +#define SPC_BYTE_WRITE_SIZE (CFG_EEPROM_SPC_BYTE_WRITE_SIZE) + +#endif /* CY_EEPROM_CFG_EEPROM_H */ + +/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN.c deleted file mode 100644 index d5642c3..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN.c +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* -* File Name: PARITY_EN.c -* Version 1.90 -* -* Description: -* This file contains API to enable firmware control of a Pins component. -* -* Note: -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#include "cytypes.h" -#include "PARITY_EN.h" - -/* APIs are not generated for P15[7:6] on PSoC 5 */ -#if !(CY_PSOC5A &&\ - PARITY_EN__PORT == 15 && ((PARITY_EN__MASK & 0xC0) != 0)) - - -/******************************************************************************* -* Function Name: PARITY_EN_Write -******************************************************************************** -* -* Summary: -* Assign a new value to the digital port's data output register. -* -* Parameters: -* prtValue: The value to be assigned to the Digital Port. -* -* Return: -* None -* -*******************************************************************************/ -void PARITY_EN_Write(uint8 value) -{ - uint8 staticBits = (PARITY_EN_DR & (uint8)(~PARITY_EN_MASK)); - PARITY_EN_DR = staticBits | ((uint8)(value << PARITY_EN_SHIFT) & PARITY_EN_MASK); -} - - -/******************************************************************************* -* Function Name: PARITY_EN_SetDriveMode -******************************************************************************** -* -* Summary: -* Change the drive mode on the pins of the port. -* -* Parameters: -* mode: Change the pins to this drive mode. -* -* Return: -* None -* -*******************************************************************************/ -void PARITY_EN_SetDriveMode(uint8 mode) -{ - CyPins_SetPinDriveMode(PARITY_EN_0, mode); -} - - -/******************************************************************************* -* Function Name: PARITY_EN_Read -******************************************************************************** -* -* Summary: -* Read the current value on the pins of the Digital Port in right justified -* form. -* -* Parameters: -* None -* -* Return: -* Returns the current value of the Digital Port as a right justified number -* -* Note: -* Macro PARITY_EN_ReadPS calls this function. -* -*******************************************************************************/ -uint8 PARITY_EN_Read(void) -{ - return (PARITY_EN_PS & PARITY_EN_MASK) >> PARITY_EN_SHIFT; -} - - -/******************************************************************************* -* Function Name: PARITY_EN_ReadDataReg -******************************************************************************** -* -* Summary: -* Read the current value assigned to a Digital Port's data output register -* -* Parameters: -* None -* -* Return: -* Returns the current value assigned to the Digital Port's data output register -* -*******************************************************************************/ -uint8 PARITY_EN_ReadDataReg(void) -{ - return (PARITY_EN_DR & PARITY_EN_MASK) >> PARITY_EN_SHIFT; -} - - -/* If Interrupts Are Enabled for this Pins component */ -#if defined(PARITY_EN_INTSTAT) - - /******************************************************************************* - * Function Name: PARITY_EN_ClearInterrupt - ******************************************************************************** - * Summary: - * Clears any active interrupts attached to port and returns the value of the - * interrupt status register. - * - * Parameters: - * None - * - * Return: - * Returns the value of the interrupt status register - * - *******************************************************************************/ - uint8 PARITY_EN_ClearInterrupt(void) - { - return (PARITY_EN_INTSTAT & PARITY_EN_MASK) >> PARITY_EN_SHIFT; - } - -#endif /* If Interrupts Are Enabled for this Pins component */ - -#endif /* CY_PSOC5A... */ - - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN.h deleted file mode 100644 index 75953b0..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN.h +++ /dev/null @@ -1,130 +0,0 @@ -/******************************************************************************* -* File Name: PARITY_EN.h -* Version 1.90 -* -* Description: -* This file containts Control Register function prototypes and register defines -* -* Note: -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#if !defined(CY_PINS_PARITY_EN_H) /* Pins PARITY_EN_H */ -#define CY_PINS_PARITY_EN_H - -#include "cytypes.h" -#include "cyfitter.h" -#include "cypins.h" -#include "PARITY_EN_aliases.h" - -/* Check to see if required defines such as CY_PSOC5A are available */ -/* They are defined starting with cy_boot v3.0 */ -#if !defined (CY_PSOC5A) - #error Component cy_pins_v1_90 requires cy_boot v3.0 or later -#endif /* (CY_PSOC5A) */ - -/* APIs are not generated for P15[7:6] */ -#if !(CY_PSOC5A &&\ - PARITY_EN__PORT == 15 && ((PARITY_EN__MASK & 0xC0) != 0)) - - -/*************************************** -* Function Prototypes -***************************************/ - -void PARITY_EN_Write(uint8 value) ; -void PARITY_EN_SetDriveMode(uint8 mode) ; -uint8 PARITY_EN_ReadDataReg(void) ; -uint8 PARITY_EN_Read(void) ; -uint8 PARITY_EN_ClearInterrupt(void) ; - - -/*************************************** -* API Constants -***************************************/ - -/* Drive Modes */ -#define PARITY_EN_DM_ALG_HIZ PIN_DM_ALG_HIZ -#define PARITY_EN_DM_DIG_HIZ PIN_DM_DIG_HIZ -#define PARITY_EN_DM_RES_UP PIN_DM_RES_UP -#define PARITY_EN_DM_RES_DWN PIN_DM_RES_DWN -#define PARITY_EN_DM_OD_LO PIN_DM_OD_LO -#define PARITY_EN_DM_OD_HI PIN_DM_OD_HI -#define PARITY_EN_DM_STRONG PIN_DM_STRONG -#define PARITY_EN_DM_RES_UPDWN PIN_DM_RES_UPDWN - -/* Digital Port Constants */ -#define PARITY_EN_MASK PARITY_EN__MASK -#define PARITY_EN_SHIFT PARITY_EN__SHIFT -#define PARITY_EN_WIDTH 1u - - -/*************************************** -* Registers -***************************************/ - -/* Main Port Registers */ -/* Pin State */ -#define PARITY_EN_PS (* (reg8 *) PARITY_EN__PS) -/* Data Register */ -#define PARITY_EN_DR (* (reg8 *) PARITY_EN__DR) -/* Port Number */ -#define PARITY_EN_PRT_NUM (* (reg8 *) PARITY_EN__PRT) -/* Connect to Analog Globals */ -#define PARITY_EN_AG (* (reg8 *) PARITY_EN__AG) -/* Analog MUX bux enable */ -#define PARITY_EN_AMUX (* (reg8 *) PARITY_EN__AMUX) -/* Bidirectional Enable */ -#define PARITY_EN_BIE (* (reg8 *) PARITY_EN__BIE) -/* Bit-mask for Aliased Register Access */ -#define PARITY_EN_BIT_MASK (* (reg8 *) PARITY_EN__BIT_MASK) -/* Bypass Enable */ -#define PARITY_EN_BYP (* (reg8 *) PARITY_EN__BYP) -/* Port wide control signals */ -#define PARITY_EN_CTL (* (reg8 *) PARITY_EN__CTL) -/* Drive Modes */ -#define PARITY_EN_DM0 (* (reg8 *) PARITY_EN__DM0) -#define PARITY_EN_DM1 (* (reg8 *) PARITY_EN__DM1) -#define PARITY_EN_DM2 (* (reg8 *) PARITY_EN__DM2) -/* Input Buffer Disable Override */ -#define PARITY_EN_INP_DIS (* (reg8 *) PARITY_EN__INP_DIS) -/* LCD Common or Segment Drive */ -#define PARITY_EN_LCD_COM_SEG (* (reg8 *) PARITY_EN__LCD_COM_SEG) -/* Enable Segment LCD */ -#define PARITY_EN_LCD_EN (* (reg8 *) PARITY_EN__LCD_EN) -/* Slew Rate Control */ -#define PARITY_EN_SLW (* (reg8 *) PARITY_EN__SLW) - -/* DSI Port Registers */ -/* Global DSI Select Register */ -#define PARITY_EN_PRTDSI__CAPS_SEL (* (reg8 *) PARITY_EN__PRTDSI__CAPS_SEL) -/* Double Sync Enable */ -#define PARITY_EN_PRTDSI__DBL_SYNC_IN (* (reg8 *) PARITY_EN__PRTDSI__DBL_SYNC_IN) -/* Output Enable Select Drive Strength */ -#define PARITY_EN_PRTDSI__OE_SEL0 (* (reg8 *) PARITY_EN__PRTDSI__OE_SEL0) -#define PARITY_EN_PRTDSI__OE_SEL1 (* (reg8 *) PARITY_EN__PRTDSI__OE_SEL1) -/* Port Pin Output Select Registers */ -#define PARITY_EN_PRTDSI__OUT_SEL0 (* (reg8 *) PARITY_EN__PRTDSI__OUT_SEL0) -#define PARITY_EN_PRTDSI__OUT_SEL1 (* (reg8 *) PARITY_EN__PRTDSI__OUT_SEL1) -/* Sync Output Enable Registers */ -#define PARITY_EN_PRTDSI__SYNC_OUT (* (reg8 *) PARITY_EN__PRTDSI__SYNC_OUT) - - -#if defined(PARITY_EN__INTSTAT) /* Interrupt Registers */ - - #define PARITY_EN_INTSTAT (* (reg8 *) PARITY_EN__INTSTAT) - #define PARITY_EN_SNAP (* (reg8 *) PARITY_EN__SNAP) - -#endif /* Interrupt Registers */ - -#endif /* CY_PSOC5A... */ - -#endif /* CY_PINS_PARITY_EN_H */ - - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_CTL_IO.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_CTL_IO.c new file mode 100644 index 0000000..34503f1 --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_CTL_IO.c @@ -0,0 +1,63 @@ +/******************************************************************************* +* File Name: SCSI_CTL_IO.c +* Version 1.70 +* +* Description: +* This file contains API to enable firmware control of a Control Register. +* +* Note: +* +******************************************************************************** +* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. +* You may use this file only in accordance with the license, terms, conditions, +* disclaimers, and limitations in the end user license agreement accompanying +* the software package with which this file was provided. +*******************************************************************************/ + +#include "SCSI_CTL_IO.h" + +#if !defined(SCSI_CTL_IO_Sync_ctrl_reg__REMOVED) /* Check for removal by optimization */ + +/******************************************************************************* +* Function Name: SCSI_CTL_IO_Write +******************************************************************************** +* +* Summary: +* Write a byte to the Control Register. +* +* Parameters: +* control: The value to be assigned to the Control Register. +* +* Return: +* None. +* +*******************************************************************************/ +void SCSI_CTL_IO_Write(uint8 control) +{ + SCSI_CTL_IO_Control = control; +} + + +/******************************************************************************* +* Function Name: SCSI_CTL_IO_Read +******************************************************************************** +* +* Summary: +* Reads the current value assigned to the Control Register. +* +* Parameters: +* None. +* +* Return: +* Returns the current value in the Control Register. +* +*******************************************************************************/ +uint8 SCSI_CTL_IO_Read(void) +{ + return SCSI_CTL_IO_Control; +} + +#endif /* End check for removal by optimization */ + + +/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN_aliases.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_CTL_IO.h similarity index 53% rename from software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN_aliases.h rename to software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_CTL_IO.h index 04919da..849b8e2 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/PARITY_EN_aliases.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_CTL_IO.h @@ -1,6 +1,6 @@ /******************************************************************************* -* File Name: PARITY_EN.h -* Version 1.90 +* File Name: SCSI_CTL_IO.h +* Version 1.70 * * Description: * This file containts Control Register function prototypes and register defines @@ -14,19 +14,29 @@ * the software package with which this file was provided. *******************************************************************************/ -#if !defined(CY_PINS_PARITY_EN_ALIASES_H) /* Pins PARITY_EN_ALIASES_H */ -#define CY_PINS_PARITY_EN_ALIASES_H +#if !defined(CY_CONTROL_REG_SCSI_CTL_IO_H) /* CY_CONTROL_REG_SCSI_CTL_IO_H */ +#define CY_CONTROL_REG_SCSI_CTL_IO_H #include "cytypes.h" -#include "cyfitter.h" - /*************************************** -* Constants +* Function Prototypes ***************************************/ -#define PARITY_EN_0 PARITY_EN__0__PC -#endif /* End Pins PARITY_EN_ALIASES_H */ +void SCSI_CTL_IO_Write(uint8 control) ; +uint8 SCSI_CTL_IO_Read(void) ; + + +/*************************************** +* Registers +***************************************/ + +/* Control Register */ +#define SCSI_CTL_IO_Control (* (reg8 *) SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_REG ) +#define SCSI_CTL_IO_Control_PTR ( (reg8 *) SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_REG ) + +#endif /* End CY_CONTROL_REG_SCSI_CTL_IO_H */ + /* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ID_aliases.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ID_aliases.h deleted file mode 100644 index 0cdbb60..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_ID_aliases.h +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* -* File Name: SCSI_ID.h -* Version 1.90 -* -* Description: -* This file containts Control Register function prototypes and register defines -* -* Note: -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#if !defined(CY_PINS_SCSI_ID_ALIASES_H) /* Pins SCSI_ID_ALIASES_H */ -#define CY_PINS_SCSI_ID_ALIASES_H - -#include "cytypes.h" -#include "cyfitter.h" - - - -/*************************************** -* Constants -***************************************/ -#define SCSI_ID_0 SCSI_ID__0__PC -#define SCSI_ID_1 SCSI_ID__1__PC -#define SCSI_ID_2 SCSI_ID__2__PC - -#endif /* End Pins SCSI_ID_ALIASES_H */ - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_Out_aliases.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_Out_aliases.h index cc35e5b..e8aa91f 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_Out_aliases.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SCSI_Out_aliases.h @@ -36,7 +36,7 @@ #define SCSI_Out_8 SCSI_Out__8__PC #define SCSI_Out_9 SCSI_Out__9__PC -#define SCSI_Out_DBP SCSI_Out__DBP__PC +#define SCSI_Out_DBP_raw SCSI_Out__DBP_raw__PC #define SCSI_Out_ATN SCSI_Out__ATN__PC #define SCSI_Out_BSY SCSI_Out__BSY__PC #define SCSI_Out_ACK SCSI_Out__ACK__PC @@ -45,7 +45,7 @@ #define SCSI_Out_SEL SCSI_Out__SEL__PC #define SCSI_Out_CD SCSI_Out__CD__PC #define SCSI_Out_REQ SCSI_Out__REQ__PC -#define SCSI_Out_IO SCSI_Out__IO__PC +#define SCSI_Out_IO_raw SCSI_Out__IO_raw__PC #endif /* End Pins SCSI_Out_ALIASES_H */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD.c deleted file mode 100644 index c1d6394..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD.c +++ /dev/null @@ -1,1155 +0,0 @@ -/******************************************************************************* -* File Name: SD.c -* Version 2.40 -* -* Description: -* This file provides all API functionality of the SPI Master component. -* -* Note: -* None. -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#include "SD_PVT.h" - -#if(SD_TX_SOFTWARE_BUF_ENABLED) - volatile uint8 SD_txBuffer[SD_TX_BUFFER_SIZE] = {0u}; - volatile uint8 SD_txBufferFull; - volatile uint8 SD_txBufferRead; - volatile uint8 SD_txBufferWrite; -#endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - -#if(SD_RX_SOFTWARE_BUF_ENABLED) - volatile uint8 SD_rxBuffer[SD_RX_BUFFER_SIZE] = {0u}; - volatile uint8 SD_rxBufferFull; - volatile uint8 SD_rxBufferRead; - volatile uint8 SD_rxBufferWrite; -#endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ - -uint8 SD_initVar = 0u; - -volatile uint8 SD_swStatusTx; -volatile uint8 SD_swStatusRx; - - -/******************************************************************************* -* Function Name: SD_Init -******************************************************************************** -* -* Summary: -* Inits/Restores default SPIM configuration provided with customizer. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Side Effects: -* When this function is called it initializes all of the necessary parameters -* for execution. i.e. setting the initial interrupt mask, configuring the -* interrupt service routine, configuring the bit-counter parameters and -* clearing the FIFO and Status Register. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_Init(void) -{ - /* Initialize the Bit counter */ - SD_COUNTER_PERIOD_REG = SD_BITCTR_INIT; - - /* Init TX ISR */ - #if(0u != SD_INTERNAL_TX_INT_ENABLED) - CyIntDisable (SD_TX_ISR_NUMBER); - CyIntSetPriority (SD_TX_ISR_NUMBER, SD_TX_ISR_PRIORITY); - (void) CyIntSetVector(SD_TX_ISR_NUMBER, &SD_TX_ISR); - #endif /* (0u != SD_INTERNAL_TX_INT_ENABLED) */ - - /* Init RX ISR */ - #if(0u != SD_INTERNAL_RX_INT_ENABLED) - CyIntDisable (SD_RX_ISR_NUMBER); - CyIntSetPriority (SD_RX_ISR_NUMBER, SD_RX_ISR_PRIORITY); - (void) CyIntSetVector(SD_RX_ISR_NUMBER, &SD_RX_ISR); - #endif /* (0u != SD_INTERNAL_RX_INT_ENABLED) */ - - /* Clear any stray data from the RX and TX FIFO */ - SD_ClearFIFO(); - - #if(SD_RX_SOFTWARE_BUF_ENABLED) - SD_rxBufferFull = 0u; - SD_rxBufferRead = 0u; - SD_rxBufferWrite = 0u; - #endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ - - #if(SD_TX_SOFTWARE_BUF_ENABLED) - SD_txBufferFull = 0u; - SD_txBufferRead = 0u; - SD_txBufferWrite = 0u; - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - - (void) SD_ReadTxStatus(); /* Clear Tx status and swStatusTx */ - (void) SD_ReadRxStatus(); /* Clear Rx status and swStatusRx */ - - /* Configure TX and RX interrupt mask */ - SD_TX_STATUS_MASK_REG = SD_TX_INIT_INTERRUPTS_MASK; - SD_RX_STATUS_MASK_REG = SD_RX_INIT_INTERRUPTS_MASK; -} - - -/******************************************************************************* -* Function Name: SD_Enable -******************************************************************************** -* -* Summary: -* Enable SPIM component. -* -* Parameters: -* None. -* -* Return: -* None. -* -*******************************************************************************/ -void SD_Enable(void) -{ - uint8 enableInterrupts; - - enableInterrupts = CyEnterCriticalSection(); - SD_COUNTER_CONTROL_REG |= SD_CNTR_ENABLE; - SD_TX_STATUS_ACTL_REG |= SD_INT_ENABLE; - SD_RX_STATUS_ACTL_REG |= SD_INT_ENABLE; - CyExitCriticalSection(enableInterrupts); - - #if(0u != SD_INTERNAL_CLOCK) - SD_IntClock_Enable(); - #endif /* (0u != SD_INTERNAL_CLOCK) */ - - SD_EnableTxInt(); - SD_EnableRxInt(); -} - - -/******************************************************************************* -* Function Name: SD_Start -******************************************************************************** -* -* Summary: -* Initialize and Enable the SPI Master component. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global variables: -* SD_initVar - used to check initial configuration, modified on -* first function call. -* -* Theory: -* Enable the clock input to enable operation. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_Start(void) -{ - if(0u == SD_initVar) - { - SD_Init(); - SD_initVar = 1u; - } - - SD_Enable(); -} - - -/******************************************************************************* -* Function Name: SD_Stop -******************************************************************************** -* -* Summary: -* Disable the SPI Master component. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Theory: -* Disable the clock input to enable operation. -* -*******************************************************************************/ -void SD_Stop(void) -{ - uint8 enableInterrupts; - - enableInterrupts = CyEnterCriticalSection(); - SD_TX_STATUS_ACTL_REG &= ((uint8) ~SD_INT_ENABLE); - SD_RX_STATUS_ACTL_REG &= ((uint8) ~SD_INT_ENABLE); - CyExitCriticalSection(enableInterrupts); - - #if(0u != SD_INTERNAL_CLOCK) - SD_IntClock_Disable(); - #endif /* (0u != SD_INTERNAL_CLOCK) */ - - SD_DisableTxInt(); - SD_DisableRxInt(); -} - - -/******************************************************************************* -* Function Name: SD_EnableTxInt -******************************************************************************** -* -* Summary: -* Enable internal Tx interrupt generation. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Theory: -* Enable the internal Tx interrupt output -or- the interrupt component itself. -* -*******************************************************************************/ -void SD_EnableTxInt(void) -{ - #if(0u != SD_INTERNAL_TX_INT_ENABLED) - CyIntEnable(SD_TX_ISR_NUMBER); - #endif /* (0u != SD_INTERNAL_TX_INT_ENABLED) */ -} - - -/******************************************************************************* -* Function Name: SD_EnableRxInt -******************************************************************************** -* -* Summary: -* Enable internal Rx interrupt generation. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Theory: -* Enable the internal Rx interrupt output -or- the interrupt component itself. -* -*******************************************************************************/ -void SD_EnableRxInt(void) -{ - #if(0u != SD_INTERNAL_RX_INT_ENABLED) - CyIntEnable(SD_RX_ISR_NUMBER); - #endif /* (0u != SD_INTERNAL_RX_INT_ENABLED) */ -} - - -/******************************************************************************* -* Function Name: SD_DisableTxInt -******************************************************************************** -* -* Summary: -* Disable internal Tx interrupt generation. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Theory: -* Disable the internal Tx interrupt output -or- the interrupt component itself. -* -*******************************************************************************/ -void SD_DisableTxInt(void) -{ - #if(0u != SD_INTERNAL_TX_INT_ENABLED) - CyIntDisable(SD_TX_ISR_NUMBER); - #endif /* (0u != SD_INTERNAL_TX_INT_ENABLED) */ -} - - -/******************************************************************************* -* Function Name: SD_DisableRxInt -******************************************************************************** -* -* Summary: -* Disable internal Rx interrupt generation. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Theory: -* Disable the internal Rx interrupt output -or- the interrupt component itself. -* -*******************************************************************************/ -void SD_DisableRxInt(void) -{ - #if(0u != SD_INTERNAL_RX_INT_ENABLED) - CyIntDisable(SD_RX_ISR_NUMBER); - #endif /* (0u != SD_INTERNAL_RX_INT_ENABLED) */ -} - - -/******************************************************************************* -* Function Name: SD_SetTxInterruptMode -******************************************************************************** -* -* Summary: -* Configure which status bits trigger an interrupt event. -* -* Parameters: -* intSrc: An or'd combination of the desired status bit masks (defined in the -* header file). -* -* Return: -* None. -* -* Theory: -* Enables the output of specific status bits to the interrupt controller. -* -*******************************************************************************/ -void SD_SetTxInterruptMode(uint8 intSrc) -{ - SD_TX_STATUS_MASK_REG = intSrc; -} - - -/******************************************************************************* -* Function Name: SD_SetRxInterruptMode -******************************************************************************** -* -* Summary: -* Configure which status bits trigger an interrupt event. -* -* Parameters: -* intSrc: An or'd combination of the desired status bit masks (defined in the -* header file). -* -* Return: -* None. -* -* Theory: -* Enables the output of specific status bits to the interrupt controller. -* -*******************************************************************************/ -void SD_SetRxInterruptMode(uint8 intSrc) -{ - SD_RX_STATUS_MASK_REG = intSrc; -} - - -/******************************************************************************* -* Function Name: SD_ReadTxStatus -******************************************************************************** -* -* Summary: -* Read the Tx status register for the component. -* -* Parameters: -* None. -* -* Return: -* Contents of the Tx status register. -* -* Global variables: -* SD_swStatusTx - used to store in software status register, -* modified every function call - resets to zero. -* -* Theory: -* Allows the user and the API to read the Tx status register for error -* detection and flow control. -* -* Side Effects: -* Clear Tx status register of the component. -* -* Reentrant: -* No. -* -*******************************************************************************/ -uint8 SD_ReadTxStatus(void) -{ - uint8 tmpStatus; - - #if(SD_TX_SOFTWARE_BUF_ENABLED) - /* Disable TX interrupt to protect global veriables */ - SD_DisableTxInt(); - - tmpStatus = SD_GET_STATUS_TX(SD_swStatusTx); - SD_swStatusTx = 0u; - - SD_EnableTxInt(); - - #else - - tmpStatus = SD_TX_STATUS_REG; - - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - - return(tmpStatus); -} - - -/******************************************************************************* -* Function Name: SD_ReadRxStatus -******************************************************************************** -* -* Summary: -* Read the Rx status register for the component. -* -* Parameters: -* None. -* -* Return: -* Contents of the Rx status register. -* -* Global variables: -* SD_swStatusRx - used to store in software Rx status register, -* modified every function call - resets to zero. -* -* Theory: -* Allows the user and the API to read the Rx status register for error -* detection and flow control. -* -* Side Effects: -* Clear Rx status register of the component. -* -* Reentrant: -* No. -* -*******************************************************************************/ -uint8 SD_ReadRxStatus(void) -{ - uint8 tmpStatus; - - #if(SD_RX_SOFTWARE_BUF_ENABLED) - /* Disable RX interrupt to protect global veriables */ - SD_DisableRxInt(); - - tmpStatus = SD_GET_STATUS_RX(SD_swStatusRx); - SD_swStatusRx = 0u; - - SD_EnableRxInt(); - - #else - - tmpStatus = SD_RX_STATUS_REG; - - #endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ - - return(tmpStatus); -} - - -/******************************************************************************* -* Function Name: SD_WriteTxData -******************************************************************************** -* -* Summary: -* Write a byte of data to be sent across the SPI. -* -* Parameters: -* txDataByte: The data value to send across the SPI. -* -* Return: -* None. -* -* Global variables: -* SD_txBufferWrite - used for the account of the bytes which -* have been written down in the TX software buffer, modified every function -* call if TX Software Buffer is used. -* SD_txBufferRead - used for the account of the bytes which -* have been read from the TX software buffer. -* SD_txBuffer[SD_TX_BUFFER_SIZE] - used to store -* data to sending, modified every function call if TX Software Buffer is used. -* -* Theory: -* Allows the user to transmit any byte of data in a single transfer. -* -* Side Effects: -* If this function is called again before the previous byte is finished then -* the next byte will be appended to the transfer with no time between -* the byte transfers. Clear Tx status register of the component. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_WriteTxData(uint8 txData) -{ - #if(SD_TX_SOFTWARE_BUF_ENABLED) - - uint8 tempStatus; - uint8 tmpTxBufferRead; - - /* Block if TX buffer is FULL: don't overwrite */ - do - { - tmpTxBufferRead = SD_txBufferRead; - if(0u == tmpTxBufferRead) - { - tmpTxBufferRead = (SD_TX_BUFFER_SIZE - 1u); - } - else - { - tmpTxBufferRead--; - } - - }while(tmpTxBufferRead == SD_txBufferWrite); - - /* Disable TX interrupt to protect global veriables */ - SD_DisableTxInt(); - - tempStatus = SD_GET_STATUS_TX(SD_swStatusTx); - SD_swStatusTx = tempStatus; - - - if((SD_txBufferRead == SD_txBufferWrite) && - (0u != (SD_swStatusTx & SD_STS_TX_FIFO_NOT_FULL))) - { - /* Add directly to the TX FIFO */ - CY_SET_REG8(SD_TXDATA_PTR, txData); - } - else - { - /* Add to the TX software buffer */ - SD_txBufferWrite++; - if(SD_txBufferWrite >= SD_TX_BUFFER_SIZE) - { - SD_txBufferWrite = 0u; - } - - if(SD_txBufferWrite == SD_txBufferRead) - { - SD_txBufferRead++; - if(SD_txBufferRead >= SD_TX_BUFFER_SIZE) - { - SD_txBufferRead = 0u; - } - SD_txBufferFull = 1u; - } - - SD_txBuffer[SD_txBufferWrite] = txData; - - SD_TX_STATUS_MASK_REG |= SD_STS_TX_FIFO_NOT_FULL; - } - - SD_EnableTxInt(); - - #else - - while(0u == (SD_TX_STATUS_REG & SD_STS_TX_FIFO_NOT_FULL)) - { - ; /* Wait for room in FIFO */ - } - - /* Put byte in TX FIFO */ - CY_SET_REG8(SD_TXDATA_PTR, txData); - - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ -} - - -/******************************************************************************* -* Function Name: SD_ReadRxData -******************************************************************************** -* -* Summary: -* Read the next byte of data received across the SPI. -* -* Parameters: -* None. -* -* Return: -* The next byte of data read from the FIFO. -* -* Global variables: -* SD_rxBufferWrite - used for the account of the bytes which -* have been written down in the RX software buffer. -* SD_rxBufferRead - used for the account of the bytes which -* have been read from the RX software buffer, modified every function -* call if RX Software Buffer is used. -* SD_rxBuffer[SD_RX_BUFFER_SIZE] - used to store -* received data. -* -* Theory: -* Allows the user to read a byte of data received. -* -* Side Effects: -* Will return invalid data if the FIFO is empty. The user should Call -* GetRxBufferSize() and if it returns a non-zero value then it is safe to call -* ReadByte() function. -* -* Reentrant: -* No. -* -*******************************************************************************/ -uint8 SD_ReadRxData(void) -{ - uint8 rxData; - - #if(SD_RX_SOFTWARE_BUF_ENABLED) - - /* Disable RX interrupt to protect global veriables */ - SD_DisableRxInt(); - - if(SD_rxBufferRead != SD_rxBufferWrite) - { - if(0u == SD_rxBufferFull) - { - SD_rxBufferRead++; - if(SD_rxBufferRead >= SD_RX_BUFFER_SIZE) - { - SD_rxBufferRead = 0u; - } - } - else - { - SD_rxBufferFull = 0u; - } - } - - rxData = SD_rxBuffer[SD_rxBufferRead]; - - SD_EnableRxInt(); - - #else - - rxData = CY_GET_REG8(SD_RXDATA_PTR); - - #endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ - - return(rxData); -} - - -/******************************************************************************* -* Function Name: SD_GetRxBufferSize -******************************************************************************** -* -* Summary: -* Returns the number of bytes/words of data currently held in the RX buffer. -* If RX Software Buffer not used then function return 0 if FIFO empty or 1 if -* FIFO not empty. In another case function return size of RX Software Buffer. -* -* Parameters: -* None. -* -* Return: -* Integer count of the number of bytes/words in the RX buffer. -* -* Global variables: -* SD_rxBufferWrite - used for the account of the bytes which -* have been written down in the RX software buffer. -* SD_rxBufferRead - used for the account of the bytes which -* have been read from the RX software buffer. -* -* Side Effects: -* Clear status register of the component. -* -*******************************************************************************/ -uint8 SD_GetRxBufferSize(void) -{ - uint8 size; - - #if(SD_RX_SOFTWARE_BUF_ENABLED) - - /* Disable RX interrupt to protect global veriables */ - SD_DisableRxInt(); - - if(SD_rxBufferRead == SD_rxBufferWrite) - { - size = 0u; - } - else if(SD_rxBufferRead < SD_rxBufferWrite) - { - size = (SD_rxBufferWrite - SD_rxBufferRead); - } - else - { - size = (SD_RX_BUFFER_SIZE - SD_rxBufferRead) + SD_rxBufferWrite; - } - - SD_EnableRxInt(); - - #else - - /* We can only know if there is data in the RX FIFO */ - size = (0u != (SD_RX_STATUS_REG & SD_STS_RX_FIFO_NOT_EMPTY)) ? 1u : 0u; - - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - - return(size); -} - - -/******************************************************************************* -* Function Name: SD_GetTxBufferSize -******************************************************************************** -* -* Summary: -* Returns the number of bytes/words of data currently held in the TX buffer. -* If TX Software Buffer not used then function return 0 - if FIFO empty, 1 - if -* FIFO not full, 4 - if FIFO full. In another case function return size of TX -* Software Buffer. -* -* Parameters: -* None. -* -* Return: -* Integer count of the number of bytes/words in the TX buffer. -* -* Global variables: -* SD_txBufferWrite - used for the account of the bytes which -* have been written down in the TX software buffer. -* SD_txBufferRead - used for the account of the bytes which -* have been read from the TX software buffer. -* -* Side Effects: -* Clear status register of the component. -* -*******************************************************************************/ -uint8 SD_GetTxBufferSize(void) -{ - uint8 size; - - #if(SD_TX_SOFTWARE_BUF_ENABLED) - /* Disable TX interrupt to protect global veriables */ - SD_DisableTxInt(); - - if(SD_txBufferRead == SD_txBufferWrite) - { - size = 0u; - } - else if(SD_txBufferRead < SD_txBufferWrite) - { - size = (SD_txBufferWrite - SD_txBufferRead); - } - else - { - size = (SD_TX_BUFFER_SIZE - SD_txBufferRead) + SD_txBufferWrite; - } - - SD_EnableTxInt(); - - #else - - size = SD_TX_STATUS_REG; - - if(0u != (size & SD_STS_TX_FIFO_EMPTY)) - { - size = 0u; - } - else if(0u != (size & SD_STS_TX_FIFO_NOT_FULL)) - { - size = 1u; - } - else - { - size = SD_FIFO_SIZE; - } - - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - - return(size); -} - - -/******************************************************************************* -* Function Name: SD_ClearRxBuffer -******************************************************************************** -* -* Summary: -* Clear the RX RAM buffer by setting the read and write pointers both to zero. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global variables: -* SD_rxBufferWrite - used for the account of the bytes which -* have been written down in the RX software buffer, modified every function -* call - resets to zero. -* SD_rxBufferRead - used for the account of the bytes which -* have been read from the RX software buffer, modified every function call - -* resets to zero. -* -* Theory: -* Setting the pointers to zero makes the system believe there is no data to -* read and writing will resume at address 0 overwriting any data that may have -* remained in the RAM. -* -* Side Effects: -* Any received data not read from the RAM buffer will be lost when overwritten. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_ClearRxBuffer(void) -{ - /* Clear Hardware RX FIFO */ - while(0u !=(SD_RX_STATUS_REG & SD_STS_RX_FIFO_NOT_EMPTY)) - { - (void) CY_GET_REG8(SD_RXDATA_PTR); - } - - #if(SD_RX_SOFTWARE_BUF_ENABLED) - /* Disable RX interrupt to protect global veriables */ - SD_DisableRxInt(); - - SD_rxBufferFull = 0u; - SD_rxBufferRead = 0u; - SD_rxBufferWrite = 0u; - - SD_EnableRxInt(); - #endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ -} - - -/******************************************************************************* -* Function Name: SD_ClearTxBuffer -******************************************************************************** -* -* Summary: -* Clear the TX RAM buffer by setting the read and write pointers both to zero. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global variables: -* SD_txBufferWrite - used for the account of the bytes which -* have been written down in the TX software buffer, modified every function -* call - resets to zero. -* SD_txBufferRead - used for the account of the bytes which -* have been read from the TX software buffer, modified every function call - -* resets to zero. -* -* Theory: -* Setting the pointers to zero makes the system believe there is no data to -* read and writing will resume at address 0 overwriting any data that may have -* remained in the RAM. -* -* Side Effects: -* Any data not yet transmitted from the RAM buffer will be lost when -* overwritten. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_ClearTxBuffer(void) -{ - uint8 enableInterrupts; - - enableInterrupts = CyEnterCriticalSection(); - /* Clear TX FIFO */ - SD_AUX_CONTROL_DP0_REG |= ((uint8) SD_TX_FIFO_CLR); - SD_AUX_CONTROL_DP0_REG &= ((uint8) ~SD_TX_FIFO_CLR); - - #if(SD_USE_SECOND_DATAPATH) - /* Clear TX FIFO for 2nd Datapath */ - SD_AUX_CONTROL_DP1_REG |= ((uint8) SD_TX_FIFO_CLR); - SD_AUX_CONTROL_DP1_REG &= ((uint8) ~SD_TX_FIFO_CLR); - #endif /* (SD_USE_SECOND_DATAPATH) */ - CyExitCriticalSection(enableInterrupts); - - #if(SD_TX_SOFTWARE_BUF_ENABLED) - /* Disable TX interrupt to protect global veriables */ - SD_DisableTxInt(); - - SD_txBufferFull = 0u; - SD_txBufferRead = 0u; - SD_txBufferWrite = 0u; - - /* Buffer is EMPTY: disable TX FIFO NOT FULL interrupt */ - SD_TX_STATUS_MASK_REG &= ((uint8) ~SD_STS_TX_FIFO_NOT_FULL); - - SD_EnableTxInt(); - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ -} - - -#if(0u != SD_BIDIRECTIONAL_MODE) - /******************************************************************************* - * Function Name: SD_TxEnable - ******************************************************************************** - * - * Summary: - * If the SPI master is configured to use a single bi-directional pin then this - * will set the bi-directional pin to transmit. - * - * Parameters: - * None. - * - * Return: - * None. - * - *******************************************************************************/ - void SD_TxEnable(void) - { - SD_CONTROL_REG |= SD_CTRL_TX_SIGNAL_EN; - } - - - /******************************************************************************* - * Function Name: SD_TxDisable - ******************************************************************************** - * - * Summary: - * If the SPI master is configured to use a single bi-directional pin then this - * will set the bi-directional pin to receive. - * - * Parameters: - * None. - * - * Return: - * None. - * - *******************************************************************************/ - void SD_TxDisable(void) - { - SD_CONTROL_REG &= ((uint8) ~SD_CTRL_TX_SIGNAL_EN); - } - -#endif /* (0u != SD_BIDIRECTIONAL_MODE) */ - - -/******************************************************************************* -* Function Name: SD_PutArray -******************************************************************************** -* -* Summary: -* Write available data from ROM/RAM to the TX buffer while space is available -* in the TX buffer. Keep trying until all data is passed to the TX buffer. -* -* Parameters: -* *buffer: Pointer to the location in RAM containing the data to send -* byteCount: The number of bytes to move to the transmit buffer. -* -* Return: -* None. -* -* Side Effects: -* Will stay in this routine until all data has been sent. May get locked in -* this loop if data is not being initiated by the master if there is not -* enough room in the TX FIFO. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_PutArray(const uint8 buffer[], uint8 byteCount) - -{ - uint8 bufIndex; - - bufIndex = 0u; - - while(byteCount > 0u) - { - SD_WriteTxData(buffer[bufIndex]); - bufIndex++; - byteCount--; - } -} - - -/******************************************************************************* -* Function Name: SD_ClearFIFO -******************************************************************************** -* -* Summary: -* Clear the RX and TX FIFO's of all data for a fresh start. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Side Effects: -* Clear status register of the component. -* -*******************************************************************************/ -void SD_ClearFIFO(void) -{ - uint8 enableInterrupts; - - /* Clear Hardware RX FIFO */ - while(0u !=(SD_RX_STATUS_REG & SD_STS_RX_FIFO_NOT_EMPTY)) - { - (void) CY_GET_REG8(SD_RXDATA_PTR); - } - - enableInterrupts = CyEnterCriticalSection(); - /* Clear TX FIFO */ - SD_AUX_CONTROL_DP0_REG |= ((uint8) SD_TX_FIFO_CLR); - SD_AUX_CONTROL_DP0_REG &= ((uint8) ~SD_TX_FIFO_CLR); - - #if(SD_USE_SECOND_DATAPATH) - /* Clear TX FIFO for 2nd Datapath */ - SD_AUX_CONTROL_DP1_REG |= ((uint8) SD_TX_FIFO_CLR); - SD_AUX_CONTROL_DP1_REG &= ((uint8) ~SD_TX_FIFO_CLR); - #endif /* (SD_USE_SECOND_DATAPATH) */ - CyExitCriticalSection(enableInterrupts); -} - - -/* Following functions are for version Compatibility, they are obsolete. -* Please do not use it in new projects. -*/ - - -/******************************************************************************* -* Function Name: SD_EnableInt -******************************************************************************** -* -* Summary: -* Enable internal interrupt generation. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Theory: -* Enable the internal interrupt output -or- the interrupt component itself. -* -*******************************************************************************/ -void SD_EnableInt(void) -{ - SD_EnableRxInt(); - SD_EnableTxInt(); -} - - -/******************************************************************************* -* Function Name: SD_DisableInt -******************************************************************************** -* -* Summary: -* Disable internal interrupt generation. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Theory: -* Disable the internal interrupt output -or- the interrupt component itself. -* -*******************************************************************************/ -void SD_DisableInt(void) -{ - SD_DisableTxInt(); - SD_DisableRxInt(); -} - - -/******************************************************************************* -* Function Name: SD_SetInterruptMode -******************************************************************************** -* -* Summary: -* Configure which status bits trigger an interrupt event. -* -* Parameters: -* intSrc: An or'd combination of the desired status bit masks (defined in the -* header file). -* -* Return: -* None. -* -* Theory: -* Enables the output of specific status bits to the interrupt controller. -* -*******************************************************************************/ -void SD_SetInterruptMode(uint8 intSrc) -{ - SD_TX_STATUS_MASK_REG = (intSrc & ((uint8) ~SD_STS_SPI_IDLE)); - SD_RX_STATUS_MASK_REG = intSrc; -} - - -/******************************************************************************* -* Function Name: SD_ReadStatus -******************************************************************************** -* -* Summary: -* Read the status register for the component. -* -* Parameters: -* None. -* -* Return: -* Contents of the status register. -* -* Global variables: -* SD_swStatus - used to store in software status register, -* modified every function call - resets to zero. -* -* Theory: -* Allows the user and the API to read the status register for error detection -* and flow control. -* -* Side Effects: -* Clear status register of the component. -* -* Reentrant: -* No. -* -*******************************************************************************/ -uint8 SD_ReadStatus(void) -{ - uint8 tmpStatus; - - #if(SD_TX_SOFTWARE_BUF_ENABLED || SD_RX_SOFTWARE_BUF_ENABLED) - - SD_DisableInt(); - - tmpStatus = SD_GET_STATUS_RX(SD_swStatusRx); - tmpStatus |= SD_GET_STATUS_TX(SD_swStatusTx); - tmpStatus &= ((uint8) ~SD_STS_SPI_IDLE); - - SD_swStatusTx = 0u; - SD_swStatusRx = 0u; - - SD_EnableInt(); - - #else - - tmpStatus = SD_RX_STATUS_REG; - tmpStatus |= SD_TX_STATUS_REG; - tmpStatus &= ((uint8) ~SD_STS_SPI_IDLE); - - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED || SD_RX_SOFTWARE_BUF_ENABLED) */ - - return(tmpStatus); -} - - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD.h deleted file mode 100644 index 0f99abf..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD.h +++ /dev/null @@ -1,389 +0,0 @@ -/******************************************************************************* -* File Name: SD.h -* Version 2.40 -* -* Description: -* Contains the function prototypes, constants and register definition -* of the SPI Master Component. -* -* Note: -* None -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#if !defined(CY_SPIM_SD_H) -#define CY_SPIM_SD_H - -#include "cytypes.h" -#include "cyfitter.h" -#include "CyLib.h" - -/* Check to see if required defines such as CY_PSOC5A are available */ -/* They are defined starting with cy_boot v3.0 */ -#if !defined (CY_PSOC5A) - #error Component SPI_Master_v2_40 requires cy_boot v3.0 or later -#endif /* (CY_PSOC5A) */ - - -/*************************************** -* Conditional Compilation Parameters -***************************************/ - -#define SD_INTERNAL_CLOCK (0u) - -#if(0u != SD_INTERNAL_CLOCK) - #include "SD_IntClock.h" -#endif /* (0u != SD_INTERNAL_CLOCK) */ - -#define SD_MODE (1u) -#define SD_DATA_WIDTH (8u) -#define SD_MODE_USE_ZERO (1u) -#define SD_BIDIRECTIONAL_MODE (0u) - -/* Internal interrupt handling */ -#define SD_TX_BUFFER_SIZE (4u) -#define SD_RX_BUFFER_SIZE (4u) -#define SD_INTERNAL_TX_INT_ENABLED (0u) -#define SD_INTERNAL_RX_INT_ENABLED (0u) - -#define SD_SINGLE_REG_SIZE (8u) -#define SD_USE_SECOND_DATAPATH (SD_DATA_WIDTH > SD_SINGLE_REG_SIZE) - -#define SD_FIFO_SIZE (4u) -#define SD_TX_SOFTWARE_BUF_ENABLED ((0u != SD_INTERNAL_TX_INT_ENABLED) && \ - (SD_TX_BUFFER_SIZE > SD_FIFO_SIZE)) - -#define SD_RX_SOFTWARE_BUF_ENABLED ((0u != SD_INTERNAL_RX_INT_ENABLED) && \ - (SD_RX_BUFFER_SIZE > SD_FIFO_SIZE)) - - -/*************************************** -* Data Struct Definition -***************************************/ - -/* Sleep Mode API Support */ -typedef struct -{ - uint8 enableState; - uint8 cntrPeriod; - #if(CY_UDB_V0) - uint8 saveSrTxIntMask; - uint8 saveSrRxIntMask; - #endif /* (CY_UDB_V0) */ - -} SD_BACKUP_STRUCT; - - -/*************************************** -* Function Prototypes -***************************************/ - -void SD_Init(void) ; -void SD_Enable(void) ; -void SD_Start(void) ; -void SD_Stop(void) ; - -void SD_EnableTxInt(void) ; -void SD_EnableRxInt(void) ; -void SD_DisableTxInt(void) ; -void SD_DisableRxInt(void) ; - -void SD_Sleep(void) ; -void SD_Wakeup(void) ; -void SD_SaveConfig(void) ; -void SD_RestoreConfig(void) ; - -void SD_SetTxInterruptMode(uint8 intSrc) ; -void SD_SetRxInterruptMode(uint8 intSrc) ; -uint8 SD_ReadTxStatus(void) ; -uint8 SD_ReadRxStatus(void) ; -void SD_WriteTxData(uint8 txData) \ - ; -uint8 SD_ReadRxData(void) \ - ; -uint8 SD_GetRxBufferSize(void) ; -uint8 SD_GetTxBufferSize(void) ; -void SD_ClearRxBuffer(void) ; -void SD_ClearTxBuffer(void) ; -void SD_ClearFIFO(void) ; -void SD_PutArray(const uint8 buffer[], uint8 byteCount) \ - ; - -#if(0u != SD_BIDIRECTIONAL_MODE) - void SD_TxEnable(void) ; - void SD_TxDisable(void) ; -#endif /* (0u != SD_BIDIRECTIONAL_MODE) */ - -CY_ISR_PROTO(SD_TX_ISR); -CY_ISR_PROTO(SD_RX_ISR); - - -/********************************** -* Variable with external linkage -**********************************/ - -extern uint8 SD_initVar; - - -/*************************************** -* API Constants -***************************************/ - -#define SD_TX_ISR_NUMBER ((uint8) (SD_TxInternalInterrupt__INTC_NUMBER)) -#define SD_RX_ISR_NUMBER ((uint8) (SD_RxInternalInterrupt__INTC_NUMBER)) - -#define SD_TX_ISR_PRIORITY ((uint8) (SD_TxInternalInterrupt__INTC_PRIOR_NUM)) -#define SD_RX_ISR_PRIORITY ((uint8) (SD_RxInternalInterrupt__INTC_PRIOR_NUM)) - - -/*************************************** -* Initial Parameter Constants -***************************************/ - -#define SD_INT_ON_SPI_DONE ((uint8) (0u << SD_STS_SPI_DONE_SHIFT)) -#define SD_INT_ON_TX_EMPTY ((uint8) (0u << SD_STS_TX_FIFO_EMPTY_SHIFT)) -#define SD_INT_ON_TX_NOT_FULL ((uint8) (0u << \ - SD_STS_TX_FIFO_NOT_FULL_SHIFT)) -#define SD_INT_ON_BYTE_COMP ((uint8) (0u << SD_STS_BYTE_COMPLETE_SHIFT)) -#define SD_INT_ON_SPI_IDLE ((uint8) (0u << SD_STS_SPI_IDLE_SHIFT)) - -/* Disable TX_NOT_FULL if software buffer is used */ -#define SD_INT_ON_TX_NOT_FULL_DEF ((SD_TX_SOFTWARE_BUF_ENABLED) ? \ - (0u) : (SD_INT_ON_TX_NOT_FULL)) - -/* TX interrupt mask */ -#define SD_TX_INIT_INTERRUPTS_MASK (SD_INT_ON_SPI_DONE | \ - SD_INT_ON_TX_EMPTY | \ - SD_INT_ON_TX_NOT_FULL_DEF | \ - SD_INT_ON_BYTE_COMP | \ - SD_INT_ON_SPI_IDLE) - -#define SD_INT_ON_RX_FULL ((uint8) (0u << \ - SD_STS_RX_FIFO_FULL_SHIFT)) -#define SD_INT_ON_RX_NOT_EMPTY ((uint8) (0u << \ - SD_STS_RX_FIFO_NOT_EMPTY_SHIFT)) -#define SD_INT_ON_RX_OVER ((uint8) (0u << \ - SD_STS_RX_FIFO_OVERRUN_SHIFT)) - -/* RX interrupt mask */ -#define SD_RX_INIT_INTERRUPTS_MASK (SD_INT_ON_RX_FULL | \ - SD_INT_ON_RX_NOT_EMPTY | \ - SD_INT_ON_RX_OVER) -/* Nubmer of bits to receive/transmit */ -#define SD_BITCTR_INIT (((uint8) (SD_DATA_WIDTH << 1u)) - 1u) - - -/*************************************** -* Registers -***************************************/ - -#if(CY_PSOC3 || CY_PSOC5) - #define SD_TXDATA_REG (* (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__F0_REG) - #define SD_TXDATA_PTR ( (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__F0_REG) - #define SD_RXDATA_REG (* (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__F1_REG) - #define SD_RXDATA_PTR ( (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__F1_REG) -#else /* PSOC4 */ - #if(SD_USE_SECOND_DATAPATH) - #define SD_TXDATA_REG (* (reg16 *) \ - SD_BSPIM_sR8_Dp_u0__16BIT_F0_REG) - #define SD_TXDATA_PTR ( (reg16 *) \ - SD_BSPIM_sR8_Dp_u0__16BIT_F0_REG) - #define SD_RXDATA_REG (* (reg16 *) \ - SD_BSPIM_sR8_Dp_u0__16BIT_F1_REG) - #define SD_RXDATA_PTR ( (reg16 *) \ - SD_BSPIM_sR8_Dp_u0__16BIT_F1_REG) - #else - #define SD_TXDATA_REG (* (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__F0_REG) - #define SD_TXDATA_PTR ( (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__F0_REG) - #define SD_RXDATA_REG (* (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__F1_REG) - #define SD_RXDATA_PTR ( (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__F1_REG) - #endif /* (SD_USE_SECOND_DATAPATH) */ -#endif /* (CY_PSOC3 || CY_PSOC5) */ - -#define SD_AUX_CONTROL_DP0_REG (* (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG) -#define SD_AUX_CONTROL_DP0_PTR ( (reg8 *) \ - SD_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG) - -#if(SD_USE_SECOND_DATAPATH) - #define SD_AUX_CONTROL_DP1_REG (* (reg8 *) \ - SD_BSPIM_sR8_Dp_u1__DP_AUX_CTL_REG) - #define SD_AUX_CONTROL_DP1_PTR ( (reg8 *) \ - SD_BSPIM_sR8_Dp_u1__DP_AUX_CTL_REG) -#endif /* (SD_USE_SECOND_DATAPATH) */ - -#define SD_COUNTER_PERIOD_REG (* (reg8 *) SD_BSPIM_BitCounter__PERIOD_REG) -#define SD_COUNTER_PERIOD_PTR ( (reg8 *) SD_BSPIM_BitCounter__PERIOD_REG) -#define SD_COUNTER_CONTROL_REG (* (reg8 *) SD_BSPIM_BitCounter__CONTROL_AUX_CTL_REG) -#define SD_COUNTER_CONTROL_PTR ( (reg8 *) SD_BSPIM_BitCounter__CONTROL_AUX_CTL_REG) - -#define SD_TX_STATUS_REG (* (reg8 *) SD_BSPIM_TxStsReg__STATUS_REG) -#define SD_TX_STATUS_PTR ( (reg8 *) SD_BSPIM_TxStsReg__STATUS_REG) -#define SD_RX_STATUS_REG (* (reg8 *) SD_BSPIM_RxStsReg__STATUS_REG) -#define SD_RX_STATUS_PTR ( (reg8 *) SD_BSPIM_RxStsReg__STATUS_REG) - -#define SD_CONTROL_REG (* (reg8 *) \ - SD_BSPIM_BidirMode_SyncCtl_CtrlReg__CONTROL_REG) -#define SD_CONTROL_PTR ( (reg8 *) \ - SD_BSPIM_BidirMode_SyncCtl_CtrlReg__CONTROL_REG) - -#define SD_TX_STATUS_MASK_REG (* (reg8 *) SD_BSPIM_TxStsReg__MASK_REG) -#define SD_TX_STATUS_MASK_PTR ( (reg8 *) SD_BSPIM_TxStsReg__MASK_REG) -#define SD_RX_STATUS_MASK_REG (* (reg8 *) SD_BSPIM_RxStsReg__MASK_REG) -#define SD_RX_STATUS_MASK_PTR ( (reg8 *) SD_BSPIM_RxStsReg__MASK_REG) - -#define SD_TX_STATUS_ACTL_REG (* (reg8 *) SD_BSPIM_TxStsReg__STATUS_AUX_CTL_REG) -#define SD_TX_STATUS_ACTL_PTR ( (reg8 *) SD_BSPIM_TxStsReg__STATUS_AUX_CTL_REG) -#define SD_RX_STATUS_ACTL_REG (* (reg8 *) SD_BSPIM_RxStsReg__STATUS_AUX_CTL_REG) -#define SD_RX_STATUS_ACTL_PTR ( (reg8 *) SD_BSPIM_RxStsReg__STATUS_AUX_CTL_REG) - -#if(SD_USE_SECOND_DATAPATH) - #define SD_AUX_CONTROLDP1 (SD_AUX_CONTROL_DP1_REG) -#endif /* (SD_USE_SECOND_DATAPATH) */ - - -/*************************************** -* Register Constants -***************************************/ - -/* Status Register Definitions */ -#define SD_STS_SPI_DONE_SHIFT (0x00u) -#define SD_STS_TX_FIFO_EMPTY_SHIFT (0x01u) -#define SD_STS_TX_FIFO_NOT_FULL_SHIFT (0x02u) -#define SD_STS_BYTE_COMPLETE_SHIFT (0x03u) -#define SD_STS_SPI_IDLE_SHIFT (0x04u) -#define SD_STS_RX_FIFO_FULL_SHIFT (0x04u) -#define SD_STS_RX_FIFO_NOT_EMPTY_SHIFT (0x05u) -#define SD_STS_RX_FIFO_OVERRUN_SHIFT (0x06u) - -#define SD_STS_SPI_DONE ((uint8) (0x01u << SD_STS_SPI_DONE_SHIFT)) -#define SD_STS_TX_FIFO_EMPTY ((uint8) (0x01u << SD_STS_TX_FIFO_EMPTY_SHIFT)) -#define SD_STS_TX_FIFO_NOT_FULL ((uint8) (0x01u << SD_STS_TX_FIFO_NOT_FULL_SHIFT)) -#define SD_STS_BYTE_COMPLETE ((uint8) (0x01u << SD_STS_BYTE_COMPLETE_SHIFT)) -#define SD_STS_SPI_IDLE ((uint8) (0x01u << SD_STS_SPI_IDLE_SHIFT)) -#define SD_STS_RX_FIFO_FULL ((uint8) (0x01u << SD_STS_RX_FIFO_FULL_SHIFT)) -#define SD_STS_RX_FIFO_NOT_EMPTY ((uint8) (0x01u << SD_STS_RX_FIFO_NOT_EMPTY_SHIFT)) -#define SD_STS_RX_FIFO_OVERRUN ((uint8) (0x01u << SD_STS_RX_FIFO_OVERRUN_SHIFT)) - -/* TX and RX masks for clear on read bits */ -#define SD_TX_STS_CLR_ON_RD_BYTES_MASK (0x09u) -#define SD_RX_STS_CLR_ON_RD_BYTES_MASK (0x40u) - -/* StatusI Register Interrupt Enable Control Bits */ -/* As defined by the Register map for the AUX Control Register */ -#define SD_INT_ENABLE (0x10u) /* Enable interrupt from statusi */ -#define SD_TX_FIFO_CLR (0x01u) /* F0 - TX FIFO */ -#define SD_RX_FIFO_CLR (0x02u) /* F1 - RX FIFO */ -#define SD_FIFO_CLR (SD_TX_FIFO_CLR | SD_RX_FIFO_CLR) - -/* Bit Counter (7-bit) Control Register Bit Definitions */ -/* As defined by the Register map for the AUX Control Register */ -#define SD_CNTR_ENABLE (0x20u) /* Enable CNT7 */ - -/* Bi-Directional mode control bit */ -#define SD_CTRL_TX_SIGNAL_EN (0x01u) - -/* Datapath Auxillary Control Register definitions */ -#define SD_AUX_CTRL_FIFO0_CLR (0x01u) -#define SD_AUX_CTRL_FIFO1_CLR (0x02u) -#define SD_AUX_CTRL_FIFO0_LVL (0x04u) -#define SD_AUX_CTRL_FIFO1_LVL (0x08u) -#define SD_STATUS_ACTL_INT_EN_MASK (0x10u) - -/* Component disabled */ -#define SD_DISABLED (0u) - - -/*************************************** -* Macros -***************************************/ - -/* Returns true if componentn enabled */ -#define SD_IS_ENABLED (0u != (SD_TX_STATUS_ACTL_REG & SD_INT_ENABLE)) - -/* Retuns TX status register */ -#define SD_GET_STATUS_TX(swTxSts) ( (uint8)(SD_TX_STATUS_REG | \ - ((swTxSts) & SD_TX_STS_CLR_ON_RD_BYTES_MASK)) ) -/* Retuns RX status register */ -#define SD_GET_STATUS_RX(swRxSts) ( (uint8)(SD_RX_STATUS_REG | \ - ((swRxSts) & SD_RX_STS_CLR_ON_RD_BYTES_MASK)) ) - - -/*************************************** -* Obsolete definitions -***************************************/ - -/* Following definitions are for version compatibility. -* They are obsolete in SPIM v2_30. -* Please do not use it in new projects -*/ - -#define SD_WriteByte SD_WriteTxData -#define SD_ReadByte SD_ReadRxData -void SD_SetInterruptMode(uint8 intSrc) ; -uint8 SD_ReadStatus(void) ; -void SD_EnableInt(void) ; -void SD_DisableInt(void) ; - -/* Obsolete register names. Not to be used in new designs */ -#define SD_TXDATA (SD_TXDATA_REG) -#define SD_RXDATA (SD_RXDATA_REG) -#define SD_AUX_CONTROLDP0 (SD_AUX_CONTROL_DP0_REG) -#define SD_TXBUFFERREAD (SD_txBufferRead) -#define SD_TXBUFFERWRITE (SD_txBufferWrite) -#define SD_RXBUFFERREAD (SD_rxBufferRead) -#define SD_RXBUFFERWRITE (SD_rxBufferWrite) - -#define SD_COUNTER_PERIOD (SD_COUNTER_PERIOD_REG) -#define SD_COUNTER_CONTROL (SD_COUNTER_CONTROL_REG) -#define SD_STATUS (SD_TX_STATUS_REG) -#define SD_CONTROL (SD_CONTROL_REG) -#define SD_STATUS_MASK (SD_TX_STATUS_MASK_REG) -#define SD_STATUS_ACTL (SD_TX_STATUS_ACTL_REG) - -#define SD_INIT_INTERRUPTS_MASK (SD_INT_ON_SPI_DONE | \ - SD_INT_ON_TX_EMPTY | \ - SD_INT_ON_TX_NOT_FULL_DEF | \ - SD_INT_ON_RX_FULL | \ - SD_INT_ON_RX_NOT_EMPTY | \ - SD_INT_ON_RX_OVER | \ - SD_INT_ON_BYTE_COMP) - -/* Following definitions are for version Compatibility. -* They are obsolete in SPIM v2_40. -* Please do not use it in new projects -*/ - -#define SD_DataWidth (SD_DATA_WIDTH) -#define SD_InternalClockUsed (SD_INTERNAL_CLOCK) -#define SD_InternalTxInterruptEnabled (SD_INTERNAL_TX_INT_ENABLED) -#define SD_InternalRxInterruptEnabled (SD_INTERNAL_RX_INT_ENABLED) -#define SD_ModeUseZero (SD_MODE_USE_ZERO) -#define SD_BidirectionalMode (SD_BIDIRECTIONAL_MODE) -#define SD_Mode (SD_MODE) -#define SD_DATAWIDHT (SD_DATA_WIDTH) -#define SD_InternalInterruptEnabled (0u) - -#define SD_TXBUFFERSIZE (SD_TX_BUFFER_SIZE) -#define SD_RXBUFFERSIZE (SD_RX_BUFFER_SIZE) - -#define SD_TXBUFFER SD_txBuffer -#define SD_RXBUFFER SD_rxBuffer - -#endif /* (CY_SPIM_SD_H) */ - - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_INT.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_INT.c deleted file mode 100644 index b9bb216..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_INT.c +++ /dev/null @@ -1,189 +0,0 @@ -/******************************************************************************* -* File Name: SD_INT.c -* Version 2.40 -* -* Description: -* This file provides all Interrupt Service Routine (ISR) for the SPI Master -* component. -* -* Note: -* None. -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#include "SD_PVT.h" - -/* User code required at start of ISR */ -/* `#START SD_ISR_START_DEF` */ - -/* `#END` */ - - -/******************************************************************************* -* Function Name: SD_TX_ISR -******************************************************************************** -* -* Summary: -* Interrupt Service Routine for TX portion of the SPI Master. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global variables: -* SD_txBufferWrite - used for the account of the bytes which -* have been written down in the TX software buffer. -* SD_txBufferRead - used for the account of the bytes which -* have been read from the TX software buffer, modified when exist data to -* sending and FIFO Not Full. -* SD_txBuffer[SD_TX_BUFFER_SIZE] - used to store -* data to sending. -* All described above Global variables are used when Software Buffer is used. -* -*******************************************************************************/ -CY_ISR(SD_TX_ISR) -{ - #if(SD_TX_SOFTWARE_BUF_ENABLED) - uint8 tmpStatus; - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - - /* User code required at start of ISR */ - /* `#START SD_TX_ISR_START` */ - - /* `#END` */ - - #if(SD_TX_SOFTWARE_BUF_ENABLED) - /* Check if TX data buffer is not empty and there is space in TX FIFO */ - while(SD_txBufferRead != SD_txBufferWrite) - { - tmpStatus = SD_GET_STATUS_TX(SD_swStatusTx); - SD_swStatusTx = tmpStatus; - - if(0u != (SD_swStatusTx & SD_STS_TX_FIFO_NOT_FULL)) - { - if(0u == SD_txBufferFull) - { - SD_txBufferRead++; - - if(SD_txBufferRead >= SD_TX_BUFFER_SIZE) - { - SD_txBufferRead = 0u; - } - } - else - { - SD_txBufferFull = 0u; - } - - /* Move data from the Buffer to the FIFO */ - CY_SET_REG8(SD_TXDATA_PTR, - SD_txBuffer[SD_txBufferRead]); - } - else - { - break; - } - } - - if(SD_txBufferRead == SD_txBufferWrite) - { - /* TX Buffer is EMPTY: disable interrupt on TX NOT FULL */ - SD_TX_STATUS_MASK_REG &= ((uint8) ~SD_STS_TX_FIFO_NOT_FULL); - } - - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - - /* User code required at end of ISR (Optional) */ - /* `#START SD_TX_ISR_END` */ - - /* `#END` */ -} - - -/******************************************************************************* -* Function Name: SD_RX_ISR -******************************************************************************** -* -* Summary: -* Interrupt Service Routine for RX portion of the SPI Master. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global variables: -* SD_rxBufferWrite - used for the account of the bytes which -* have been written down in the RX software buffer modified when FIFO contains -* new data. -* SD_rxBufferRead - used for the account of the bytes which -* have been read from the RX software buffer, modified when overflow occurred. -* SD_rxBuffer[SD_RX_BUFFER_SIZE] - used to store -* received data, modified when FIFO contains new data. -* All described above Global variables are used when Software Buffer is used. -* -*******************************************************************************/ -CY_ISR(SD_RX_ISR) -{ - #if(SD_RX_SOFTWARE_BUF_ENABLED) - uint8 tmpStatus; - uint8 rxData; - #endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ - - /* User code required at start of ISR */ - /* `#START SD_RX_ISR_START` */ - - /* `#END` */ - - #if(SD_RX_SOFTWARE_BUF_ENABLED) - - tmpStatus = SD_GET_STATUS_RX(SD_swStatusRx); - SD_swStatusRx = tmpStatus; - - /* Check if RX data FIFO has some data to be moved into the RX Buffer */ - while(0u != (SD_swStatusRx & SD_STS_RX_FIFO_NOT_EMPTY)) - { - rxData = CY_GET_REG8(SD_RXDATA_PTR); - - /* Set next pointer. */ - SD_rxBufferWrite++; - if(SD_rxBufferWrite >= SD_RX_BUFFER_SIZE) - { - SD_rxBufferWrite = 0u; - } - - if(SD_rxBufferWrite == SD_rxBufferRead) - { - SD_rxBufferRead++; - if(SD_rxBufferRead >= SD_RX_BUFFER_SIZE) - { - SD_rxBufferRead = 0u; - } - - SD_rxBufferFull = 1u; - } - - /* Move data from the FIFO to the Buffer */ - SD_rxBuffer[SD_rxBufferWrite] = rxData; - - tmpStatus = SD_GET_STATUS_RX(SD_swStatusRx); - SD_swStatusRx = tmpStatus; - } - - #endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ - - /* User code required at end of ISR (Optional) */ - /* `#START SD_RX_ISR_END` */ - - /* `#END` */ -} - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_IntClock.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_IntClock.c deleted file mode 100644 index 8848744..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_IntClock.c +++ /dev/null @@ -1,521 +0,0 @@ -/******************************************************************************* -* File Name: SD_IntClock.c -* Version 2.0 -* -* Description: -* This file provides the source code to the API for the clock component. -* -* Note: -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#include -#include "SD_IntClock.h" - -/* Clock Distribution registers. */ -#define CLK_DIST_LD (* (reg8 *) CYREG_CLKDIST_LD) -#define CLK_DIST_BCFG2 (* (reg8 *) CYREG_CLKDIST_BCFG2) -#define BCFG2_MASK (0x80u) -#define CLK_DIST_DMASK (* (reg8 *) CYREG_CLKDIST_DMASK) -#define CLK_DIST_AMASK (* (reg8 *) CYREG_CLKDIST_AMASK) - -#define HAS_CLKDIST_LD_DISABLE (CY_PSOC3 || CY_PSOC5LP) - - -/******************************************************************************* -* Function Name: SD_IntClock_Start -******************************************************************************** -* -* Summary: -* Starts the clock. Note that on startup, clocks may be already running if the -* "Start on Reset" option is enabled in the DWR. -* -* Parameters: -* None -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_Start(void) -{ - /* Set the bit to enable the clock. */ - SD_IntClock_CLKEN |= SD_IntClock_CLKEN_MASK; - SD_IntClock_CLKSTBY |= SD_IntClock_CLKSTBY_MASK; -} - - -/******************************************************************************* -* Function Name: SD_IntClock_Stop -******************************************************************************** -* -* Summary: -* Stops the clock and returns immediately. This API does not require the -* source clock to be running but may return before the hardware is actually -* disabled. If the settings of the clock are changed after calling this -* function, the clock may glitch when it is started. To avoid the clock -* glitch, use the StopBlock function. -* -* Parameters: -* None -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_Stop(void) -{ - /* Clear the bit to disable the clock. */ - SD_IntClock_CLKEN &= (uint8)(~SD_IntClock_CLKEN_MASK); - SD_IntClock_CLKSTBY &= (uint8)(~SD_IntClock_CLKSTBY_MASK); -} - - -#if(CY_PSOC3 || CY_PSOC5LP) - - -/******************************************************************************* -* Function Name: SD_IntClock_StopBlock -******************************************************************************** -* -* Summary: -* Stops the clock and waits for the hardware to actually be disabled before -* returning. This ensures that the clock is never truncated (high part of the -* cycle will terminate before the clock is disabled and the API returns). -* Note that the source clock must be running or this API will never return as -* a stopped clock cannot be disabled. -* -* Parameters: -* None -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_StopBlock(void) -{ - if ((SD_IntClock_CLKEN & SD_IntClock_CLKEN_MASK) != 0u) - { -#if HAS_CLKDIST_LD_DISABLE - uint16 oldDivider; - - CLK_DIST_LD = 0u; - - /* Clear all the mask bits except ours. */ -#if defined(SD_IntClock__CFG3) - CLK_DIST_AMASK = SD_IntClock_CLKEN_MASK; - CLK_DIST_DMASK = 0x00u; -#else - CLK_DIST_DMASK = SD_IntClock_CLKEN_MASK; - CLK_DIST_AMASK = 0x00u; -#endif /* SD_IntClock__CFG3 */ - - /* Clear mask of bus clock. */ - CLK_DIST_BCFG2 &= (uint8)(~BCFG2_MASK); - - oldDivider = CY_GET_REG16(SD_IntClock_DIV_PTR); - CY_SET_REG16(CYREG_CLKDIST_WRK0, oldDivider); - CLK_DIST_LD = CYCLK_LD_DISABLE | CYCLK_LD_SYNC_EN | CYCLK_LD_LOAD; - - /* Wait for clock to be disabled */ - while ((CLK_DIST_LD & CYCLK_LD_LOAD) != 0u) { } -#endif /* HAS_CLKDIST_LD_DISABLE */ - - /* Clear the bit to disable the clock. */ - SD_IntClock_CLKEN &= (uint8)(~SD_IntClock_CLKEN_MASK); - SD_IntClock_CLKSTBY &= (uint8)(~SD_IntClock_CLKSTBY_MASK); - -#if HAS_CLKDIST_LD_DISABLE - /* Clear the disable bit */ - CLK_DIST_LD = 0x00u; - CY_SET_REG16(SD_IntClock_DIV_PTR, oldDivider); -#endif /* HAS_CLKDIST_LD_DISABLE */ - } -} -#endif /* (CY_PSOC3 || CY_PSOC5LP) */ - - -/******************************************************************************* -* Function Name: SD_IntClock_StandbyPower -******************************************************************************** -* -* Summary: -* Sets whether the clock is active in standby mode. -* -* Parameters: -* state: 0 to disable clock during standby, nonzero to enable. -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_StandbyPower(uint8 state) -{ - if(state == 0u) - { - SD_IntClock_CLKSTBY &= (uint8)(~SD_IntClock_CLKSTBY_MASK); - } - else - { - SD_IntClock_CLKSTBY |= SD_IntClock_CLKSTBY_MASK; - } -} - - -/******************************************************************************* -* Function Name: SD_IntClock_SetDividerRegister -******************************************************************************** -* -* Summary: -* Modifies the clock divider and, thus, the frequency. When the clock divider -* register is set to zero or changed from zero, the clock will be temporarily -* disabled in order to change the SSS mode bit. If the clock is enabled when -* SetDividerRegister is called, then the source clock must be running. -* -* Parameters: -* clkDivider: Divider register value (0-65,535). This value is NOT the -* divider; the clock hardware divides by clkDivider plus one. For example, -* to divide the clock by 2, this parameter should be set to 1. -* restart: If nonzero, restarts the clock divider: the current clock cycle -* will be truncated and the new divide value will take effect immediately. If -* zero, the new divide value will take effect at the end of the current clock -* cycle. -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_SetDividerRegister(uint16 clkDivider, uint8 restart) - -{ - uint8 enabled; - - uint8 currSrc = SD_IntClock_GetSourceRegister(); - uint16 oldDivider = SD_IntClock_GetDividerRegister(); - - if (clkDivider != oldDivider) - { - enabled = SD_IntClock_CLKEN & SD_IntClock_CLKEN_MASK; - - if ((currSrc == (uint8)CYCLK_SRC_SEL_CLK_SYNC_D) && ((oldDivider == 0u) || (clkDivider == 0u))) - { - /* Moving to/from SSS requires correct ordering to prevent halting the clock */ - if (oldDivider == 0u) - { - /* Moving away from SSS, set the divider first so when SSS is cleared we */ - /* don't halt the clock. Using the shadow load isn't required as the */ - /* divider is ignored while SSS is set. */ - CY_SET_REG16(SD_IntClock_DIV_PTR, clkDivider); - SD_IntClock_MOD_SRC &= (uint8)(~CYCLK_SSS); - } - else - { - /* Moving to SSS, set SSS which then ignores the divider and we can set */ - /* it without bothering with the shadow load. */ - SD_IntClock_MOD_SRC |= CYCLK_SSS; - CY_SET_REG16(SD_IntClock_DIV_PTR, clkDivider); - } - } - else - { - - if (enabled != 0u) - { - CLK_DIST_LD = 0x00u; - - /* Clear all the mask bits except ours. */ -#if defined(SD_IntClock__CFG3) - CLK_DIST_AMASK = SD_IntClock_CLKEN_MASK; - CLK_DIST_DMASK = 0x00u; -#else - CLK_DIST_DMASK = SD_IntClock_CLKEN_MASK; - CLK_DIST_AMASK = 0x00u; -#endif /* SD_IntClock__CFG3 */ - /* Clear mask of bus clock. */ - CLK_DIST_BCFG2 &= (uint8)(~BCFG2_MASK); - - /* If clock is currently enabled, disable it if async or going from N-to-1*/ - if (((SD_IntClock_MOD_SRC & CYCLK_SYNC) == 0u) || (clkDivider == 0u)) - { -#if HAS_CLKDIST_LD_DISABLE - CY_SET_REG16(CYREG_CLKDIST_WRK0, oldDivider); - CLK_DIST_LD = CYCLK_LD_DISABLE|CYCLK_LD_SYNC_EN|CYCLK_LD_LOAD; - - /* Wait for clock to be disabled */ - while ((CLK_DIST_LD & CYCLK_LD_LOAD) != 0u) { } -#endif /* HAS_CLKDIST_LD_DISABLE */ - - SD_IntClock_CLKEN &= (uint8)(~SD_IntClock_CLKEN_MASK); - -#if HAS_CLKDIST_LD_DISABLE - /* Clear the disable bit */ - CLK_DIST_LD = 0x00u; -#endif /* HAS_CLKDIST_LD_DISABLE */ - } - } - - /* Load divide value. */ - if ((SD_IntClock_CLKEN & SD_IntClock_CLKEN_MASK) != 0u) - { - /* If the clock is still enabled, use the shadow registers */ - CY_SET_REG16(CYREG_CLKDIST_WRK0, clkDivider); - - CLK_DIST_LD = (CYCLK_LD_LOAD | ((restart != 0u) ? CYCLK_LD_SYNC_EN : 0x00u)); - while ((CLK_DIST_LD & CYCLK_LD_LOAD) != 0u) { } - } - else - { - /* If the clock is disabled, set the divider directly */ - CY_SET_REG16(SD_IntClock_DIV_PTR, clkDivider); - SD_IntClock_CLKEN |= enabled; - } - } - } -} - - -/******************************************************************************* -* Function Name: SD_IntClock_GetDividerRegister -******************************************************************************** -* -* Summary: -* Gets the clock divider register value. -* -* Parameters: -* None -* -* Returns: -* Divide value of the clock minus 1. For example, if the clock is set to -* divide by 2, the return value will be 1. -* -*******************************************************************************/ -uint16 SD_IntClock_GetDividerRegister(void) -{ - return CY_GET_REG16(SD_IntClock_DIV_PTR); -} - - -/******************************************************************************* -* Function Name: SD_IntClock_SetModeRegister -******************************************************************************** -* -* Summary: -* Sets flags that control the operating mode of the clock. This function only -* changes flags from 0 to 1; flags that are already 1 will remain unchanged. -* To clear flags, use the ClearModeRegister function. The clock must be -* disabled before changing the mode. -* -* Parameters: -* clkMode: Bit mask containing the bits to set. For PSoC 3 and PSoC 5, -* clkMode should be a set of the following optional bits or'ed together. -* - CYCLK_EARLY Enable early phase mode. Rising edge of output clock will -* occur when the divider count reaches half of the divide -* value. -* - CYCLK_DUTY Enable 50% duty cycle output. When enabled, the output clock -* is asserted for approximately half of its period. When -* disabled, the output clock is asserted for one period of the -* source clock. -* - CYCLK_SYNC Enable output synchronization to master clock. This should -* be enabled for all synchronous clocks. -* See the Technical Reference Manual for details about setting the mode of -* the clock. Specifically, see the CLKDIST.DCFG.CFG2 register. -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_SetModeRegister(uint8 modeBitMask) -{ - SD_IntClock_MOD_SRC |= modeBitMask & (uint8)SD_IntClock_MODE_MASK; -} - - -/******************************************************************************* -* Function Name: SD_IntClock_ClearModeRegister -******************************************************************************** -* -* Summary: -* Clears flags that control the operating mode of the clock. This function -* only changes flags from 1 to 0; flags that are already 0 will remain -* unchanged. To set flags, use the SetModeRegister function. The clock must be -* disabled before changing the mode. -* -* Parameters: -* clkMode: Bit mask containing the bits to clear. For PSoC 3 and PSoC 5, -* clkMode should be a set of the following optional bits or'ed together. -* - CYCLK_EARLY Enable early phase mode. Rising edge of output clock will -* occur when the divider count reaches half of the divide -* value. -* - CYCLK_DUTY Enable 50% duty cycle output. When enabled, the output clock -* is asserted for approximately half of its period. When -* disabled, the output clock is asserted for one period of the -* source clock. -* - CYCLK_SYNC Enable output synchronization to master clock. This should -* be enabled for all synchronous clocks. -* See the Technical Reference Manual for details about setting the mode of -* the clock. Specifically, see the CLKDIST.DCFG.CFG2 register. -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_ClearModeRegister(uint8 modeBitMask) -{ - SD_IntClock_MOD_SRC &= (uint8)(~modeBitMask) | (uint8)(~(uint8)(SD_IntClock_MODE_MASK)); -} - - -/******************************************************************************* -* Function Name: SD_IntClock_GetModeRegister -******************************************************************************** -* -* Summary: -* Gets the clock mode register value. -* -* Parameters: -* None -* -* Returns: -* Bit mask representing the enabled mode bits. See the SetModeRegister and -* ClearModeRegister descriptions for details about the mode bits. -* -*******************************************************************************/ -uint8 SD_IntClock_GetModeRegister(void) -{ - return SD_IntClock_MOD_SRC & (uint8)(SD_IntClock_MODE_MASK); -} - - -/******************************************************************************* -* Function Name: SD_IntClock_SetSourceRegister -******************************************************************************** -* -* Summary: -* Sets the input source of the clock. The clock must be disabled before -* changing the source. The old and new clock sources must be running. -* -* Parameters: -* clkSource: For PSoC 3 and PSoC 5 devices, clkSource should be one of the -* following input sources: -* - CYCLK_SRC_SEL_SYNC_DIG -* - CYCLK_SRC_SEL_IMO -* - CYCLK_SRC_SEL_XTALM -* - CYCLK_SRC_SEL_ILO -* - CYCLK_SRC_SEL_PLL -* - CYCLK_SRC_SEL_XTALK -* - CYCLK_SRC_SEL_DSI_G -* - CYCLK_SRC_SEL_DSI_D/CYCLK_SRC_SEL_DSI_A -* See the Technical Reference Manual for details on clock sources. -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_SetSourceRegister(uint8 clkSource) -{ - uint16 currDiv = SD_IntClock_GetDividerRegister(); - uint8 oldSrc = SD_IntClock_GetSourceRegister(); - - if (((oldSrc != ((uint8)CYCLK_SRC_SEL_CLK_SYNC_D)) && - (clkSource == ((uint8)CYCLK_SRC_SEL_CLK_SYNC_D))) && (currDiv == 0u)) - { - /* Switching to Master and divider is 1, set SSS, which will output master, */ - /* then set the source so we are consistent. */ - SD_IntClock_MOD_SRC |= CYCLK_SSS; - SD_IntClock_MOD_SRC = - (SD_IntClock_MOD_SRC & (uint8)(~SD_IntClock_SRC_SEL_MSK)) | clkSource; - } - else if (((oldSrc == ((uint8)CYCLK_SRC_SEL_CLK_SYNC_D)) && - (clkSource != ((uint8)CYCLK_SRC_SEL_CLK_SYNC_D))) && (currDiv == 0u)) - { - /* Switching from Master to not and divider is 1, set source, so we don't */ - /* lock when we clear SSS. */ - SD_IntClock_MOD_SRC = - (SD_IntClock_MOD_SRC & (uint8)(~SD_IntClock_SRC_SEL_MSK)) | clkSource; - SD_IntClock_MOD_SRC &= (uint8)(~CYCLK_SSS); - } - else - { - SD_IntClock_MOD_SRC = - (SD_IntClock_MOD_SRC & (uint8)(~SD_IntClock_SRC_SEL_MSK)) | clkSource; - } -} - - -/******************************************************************************* -* Function Name: SD_IntClock_GetSourceRegister -******************************************************************************** -* -* Summary: -* Gets the input source of the clock. -* -* Parameters: -* None -* -* Returns: -* The input source of the clock. See SetSourceRegister for details. -* -*******************************************************************************/ -uint8 SD_IntClock_GetSourceRegister(void) -{ - return SD_IntClock_MOD_SRC & SD_IntClock_SRC_SEL_MSK; -} - - -#if defined(SD_IntClock__CFG3) - - -/******************************************************************************* -* Function Name: SD_IntClock_SetPhaseRegister -******************************************************************************** -* -* Summary: -* Sets the phase delay of the analog clock. This function is only available -* for analog clocks. The clock must be disabled before changing the phase -* delay to avoid glitches. -* -* Parameters: -* clkPhase: Amount to delay the phase of the clock, in 1.0ns increments. -* clkPhase must be from 1 to 11 inclusive. Other values, including 0, -* disable the clock. clkPhase = 1 produces a 0ns delay and clkPhase = 11 -* produces a 10ns delay. -* -* Returns: -* None -* -*******************************************************************************/ -void SD_IntClock_SetPhaseRegister(uint8 clkPhase) -{ - SD_IntClock_PHASE = clkPhase & SD_IntClock_PHASE_MASK; -} - - -/******************************************************************************* -* Function Name: SD_IntClock_GetPhase -******************************************************************************** -* -* Summary: -* Gets the phase delay of the analog clock. This function is only available -* for analog clocks. -* -* Parameters: -* None -* -* Returns: -* Phase of the analog clock. See SetPhaseRegister for details. -* -*******************************************************************************/ -uint8 SD_IntClock_GetPhaseRegister(void) -{ - return SD_IntClock_PHASE & SD_IntClock_PHASE_MASK; -} - -#endif /* SD_IntClock__CFG3 */ - - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_IntClock.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_IntClock.h deleted file mode 100644 index df76982..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_IntClock.h +++ /dev/null @@ -1,124 +0,0 @@ -/******************************************************************************* -* File Name: SD_IntClock.h -* Version 2.0 -* -* Description: -* Provides the function and constant definitions for the clock component. -* -* Note: -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#if !defined(CY_CLOCK_SD_IntClock_H) -#define CY_CLOCK_SD_IntClock_H - -#include -#include - - -/*************************************** -* Conditional Compilation Parameters -***************************************/ - -/* Check to see if required defines such as CY_PSOC5LP are available */ -/* They are defined starting with cy_boot v3.0 */ -#if !defined (CY_PSOC5LP) - #error Component cy_clock_v2_0 requires cy_boot v3.0 or later -#endif /* (CY_PSOC5LP) */ - - -/*************************************** -* Function Prototypes -***************************************/ - -void SD_IntClock_Start(void) ; -void SD_IntClock_Stop(void) ; - -#if(CY_PSOC3 || CY_PSOC5LP) -void SD_IntClock_StopBlock(void) ; -#endif /* (CY_PSOC3 || CY_PSOC5LP) */ - -void SD_IntClock_StandbyPower(uint8 state) ; -void SD_IntClock_SetDividerRegister(uint16 clkDivider, uint8 restart) - ; -uint16 SD_IntClock_GetDividerRegister(void) ; -void SD_IntClock_SetModeRegister(uint8 modeBitMask) ; -void SD_IntClock_ClearModeRegister(uint8 modeBitMask) ; -uint8 SD_IntClock_GetModeRegister(void) ; -void SD_IntClock_SetSourceRegister(uint8 clkSource) ; -uint8 SD_IntClock_GetSourceRegister(void) ; -#if defined(SD_IntClock__CFG3) -void SD_IntClock_SetPhaseRegister(uint8 clkPhase) ; -uint8 SD_IntClock_GetPhaseRegister(void) ; -#endif /* defined(SD_IntClock__CFG3) */ - -#define SD_IntClock_Enable() SD_IntClock_Start() -#define SD_IntClock_Disable() SD_IntClock_Stop() -#define SD_IntClock_SetDivider(clkDivider) SD_IntClock_SetDividerRegister(clkDivider, 1) -#define SD_IntClock_SetDividerValue(clkDivider) SD_IntClock_SetDividerRegister((clkDivider) - 1, 1) -#define SD_IntClock_SetMode(clkMode) SD_IntClock_SetModeRegister(clkMode) -#define SD_IntClock_SetSource(clkSource) SD_IntClock_SetSourceRegister(clkSource) -#if defined(SD_IntClock__CFG3) -#define SD_IntClock_SetPhase(clkPhase) SD_IntClock_SetPhaseRegister(clkPhase) -#define SD_IntClock_SetPhaseValue(clkPhase) SD_IntClock_SetPhaseRegister((clkPhase) + 1) -#endif /* defined(SD_IntClock__CFG3) */ - - -/*************************************** -* Registers -***************************************/ - -/* Register to enable or disable the clock */ -#define SD_IntClock_CLKEN (* (reg8 *) SD_IntClock__PM_ACT_CFG) -#define SD_IntClock_CLKEN_PTR ((reg8 *) SD_IntClock__PM_ACT_CFG) - -/* Register to enable or disable the clock */ -#define SD_IntClock_CLKSTBY (* (reg8 *) SD_IntClock__PM_STBY_CFG) -#define SD_IntClock_CLKSTBY_PTR ((reg8 *) SD_IntClock__PM_STBY_CFG) - -/* Clock LSB divider configuration register. */ -#define SD_IntClock_DIV_LSB (* (reg8 *) SD_IntClock__CFG0) -#define SD_IntClock_DIV_LSB_PTR ((reg8 *) SD_IntClock__CFG0) -#define SD_IntClock_DIV_PTR ((reg16 *) SD_IntClock__CFG0) - -/* Clock MSB divider configuration register. */ -#define SD_IntClock_DIV_MSB (* (reg8 *) SD_IntClock__CFG1) -#define SD_IntClock_DIV_MSB_PTR ((reg8 *) SD_IntClock__CFG1) - -/* Mode and source configuration register */ -#define SD_IntClock_MOD_SRC (* (reg8 *) SD_IntClock__CFG2) -#define SD_IntClock_MOD_SRC_PTR ((reg8 *) SD_IntClock__CFG2) - -#if defined(SD_IntClock__CFG3) -/* Analog clock phase configuration register */ -#define SD_IntClock_PHASE (* (reg8 *) SD_IntClock__CFG3) -#define SD_IntClock_PHASE_PTR ((reg8 *) SD_IntClock__CFG3) -#endif /* defined(SD_IntClock__CFG3) */ - - -/************************************** -* Register Constants -**************************************/ - -/* Power manager register masks */ -#define SD_IntClock_CLKEN_MASK SD_IntClock__PM_ACT_MSK -#define SD_IntClock_CLKSTBY_MASK SD_IntClock__PM_STBY_MSK - -/* CFG2 field masks */ -#define SD_IntClock_SRC_SEL_MSK SD_IntClock__CFG2_SRC_SEL_MASK -#define SD_IntClock_MODE_MASK (~(SD_IntClock_SRC_SEL_MSK)) - -#if defined(SD_IntClock__CFG3) -/* CFG3 phase mask */ -#define SD_IntClock_PHASE_MASK SD_IntClock__CFG3_PHASE_DLY_MASK -#endif /* defined(SD_IntClock__CFG3) */ - -#endif /* CY_CLOCK_SD_IntClock_H */ - - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_PM.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_PM.c deleted file mode 100644 index d2388e6..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_PM.c +++ /dev/null @@ -1,180 +0,0 @@ -/******************************************************************************* -* File Name: SD_PM.c -* Version 2.40 -* -* Description: -* This file contains the setup, control and status commands to support -* component operations in low power mode. -* -* Note: -* -******************************************************************************** -* Copyright 2008-2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#include "SD_PVT.h" - -static SD_BACKUP_STRUCT SD_backup = -{ - SD_DISABLED, - SD_BITCTR_INIT, - #if(CY_UDB_V0) - SD_TX_INIT_INTERRUPTS_MASK, - SD_RX_INIT_INTERRUPTS_MASK - #endif /* CY_UDB_V0 */ -}; - - -/******************************************************************************* -* Function Name: SD_SaveConfig -******************************************************************************** -* -* Summary: -* Saves SPIM configuration. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global Variables: -* SD_backup - modified when non-retention registers are saved. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_SaveConfig(void) -{ - /* Store Status Mask registers */ - #if(CY_UDB_V0) - SD_backup.cntrPeriod = SD_COUNTER_PERIOD_REG; - SD_backup.saveSrTxIntMask = SD_TX_STATUS_MASK_REG; - SD_backup.saveSrRxIntMask = SD_RX_STATUS_MASK_REG; - #endif /* (CY_UDB_V0) */ -} - - -/******************************************************************************* -* Function Name: SD_RestoreConfig -******************************************************************************** -* -* Summary: -* Restores SPIM configuration. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global Variables: -* SD_backup - used when non-retention registers are restored. -* -* Side Effects: -* If this API is called without first calling SaveConfig then in the following -* registers will be default values from Customizer: -* SD_STATUS_MASK_REG and SD_COUNTER_PERIOD_REG. -* -*******************************************************************************/ -void SD_RestoreConfig(void) -{ - /* Restore the data, saved by SaveConfig() function */ - #if(CY_UDB_V0) - SD_COUNTER_PERIOD_REG = SD_backup.cntrPeriod; - SD_TX_STATUS_MASK_REG = ((uint8) SD_backup.saveSrTxIntMask); - SD_RX_STATUS_MASK_REG = ((uint8) SD_backup.saveSrRxIntMask); - #endif /* (CY_UDB_V0) */ -} - - -/******************************************************************************* -* Function Name: SD_Sleep -******************************************************************************** -* -* Summary: -* Prepare SPIM Component goes to sleep. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global Variables: -* SD_backup - modified when non-retention registers are saved. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_Sleep(void) -{ - /* Save components enable state */ - SD_backup.enableState = ((uint8) SD_IS_ENABLED); - - SD_Stop(); - SD_SaveConfig(); -} - - -/******************************************************************************* -* Function Name: SD_Wakeup -******************************************************************************** -* -* Summary: -* Prepare SPIM Component to wake up. -* -* Parameters: -* None. -* -* Return: -* None. -* -* Global Variables: -* SD_backup - used when non-retention registers are restored. -* SD_txBufferWrite - modified every function call - resets to -* zero. -* SD_txBufferRead - modified every function call - resets to -* zero. -* SD_rxBufferWrite - modified every function call - resets to -* zero. -* SD_rxBufferRead - modified every function call - resets to -* zero. -* -* Reentrant: -* No. -* -*******************************************************************************/ -void SD_Wakeup(void) -{ - SD_RestoreConfig(); - - #if(SD_RX_SOFTWARE_BUF_ENABLED) - SD_rxBufferFull = 0u; - SD_rxBufferRead = 0u; - SD_rxBufferWrite = 0u; - #endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ - - #if(SD_TX_SOFTWARE_BUF_ENABLED) - SD_txBufferFull = 0u; - SD_txBufferRead = 0u; - SD_txBufferWrite = 0u; - #endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - - /* Clear any data from the RX and TX FIFO */ - SD_ClearFIFO(); - - /* Restore components block enable state */ - if(0u != SD_backup.enableState) - { - SD_Enable(); - } -} - - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_PVT.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_PVT.h deleted file mode 100644 index cadc78e..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/SD_PVT.h +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* -* File Name: .h -* Version 2.40 -* -* Description: -* This private header file contains internal definitions for the SPIM -* component. Do not use these definitions directly in your application. -* -* Note: -* -******************************************************************************** -* Copyright 2012, Cypress Semiconductor Corporation. All rights reserved. -* You may use this file only in accordance with the license, terms, conditions, -* disclaimers, and limitations in the end user license agreement accompanying -* the software package with which this file was provided. -*******************************************************************************/ - -#if !defined(CY_SPIM_PVT_SD_H) -#define CY_SPIM_PVT_SD_H - -#include "SD.h" - - -/********************************** -* Functions with external linkage -**********************************/ - - -/********************************** -* Variables with external linkage -**********************************/ - -extern volatile uint8 SD_swStatusTx; -extern volatile uint8 SD_swStatusRx; - -#if(SD_TX_SOFTWARE_BUF_ENABLED) - extern volatile uint8 SD_txBuffer[SD_TX_BUFFER_SIZE]; - extern volatile uint8 SD_txBufferRead; - extern volatile uint8 SD_txBufferWrite; - extern volatile uint8 SD_txBufferFull; -#endif /* (SD_TX_SOFTWARE_BUF_ENABLED) */ - -#if(SD_RX_SOFTWARE_BUF_ENABLED) - extern volatile uint8 SD_rxBuffer[SD_RX_BUFFER_SIZE]; - extern volatile uint8 SD_rxBufferRead; - extern volatile uint8 SD_rxBufferWrite; - extern volatile uint8 SD_rxBufferFull; -#endif /* (SD_RX_SOFTWARE_BUF_ENABLED) */ - -#endif /* CY_SPIM_PVT_SD_H */ - - -/* [] END OF FILE */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/config.hex b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/config.hex index 3d388ee..d1bb893 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/config.hex +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/config.hex @@ -1,33 +1,69 @@ -:20000000014500400752004001640040020301403F0401402A05014003060140410701400F -:20002000010D014009150140431601403A17014002400140014101400142014002430140D6 -:200040000244014002450140044801400E4901400450014001510140360214FF1804190CB8 -:200060001CE12CFF34F06410860F9840B04000011D012D013001310139023E01560858047F -:20008000590B5B045C905D905F01806C814184688604886C89818B408D41910492029410DC -:2000A00095E296689708981099889AC59B619C6C9D479F98A06CA110A404A541A893A94076 -:2000C000AA20AC0FAD01AE90AF40B278B407B5C0B680B73FB980BA38BB20BE40BF40D4095A -:2000E000D80BD90BDB0BDC99DD90DF010001042806800C020D010E2917691A801D301E28DE -:200100001F40210222022590270829402FAA3180360637603C803D203E814BC058405D2493 -:200120005E025F406001664078027C029840C078C2F0C4F0CAF8CCF8CEB0D6F8D818DE812A -:20014000D608DB04DD9000010240051007610D020E210F08171A1D402401250C26022760CD -:200160002A022B802C022E012F2836463C803D28448045A84C804D044E02540256105784A2 -:200180005980600266206C146EA16F3B744077027C0294289504960199109B089C029D4007 -:2001A0009E409F61A132A204A442A601A7AAAA40AD21C0F0C2F0C470CAF0CCD0CE70D0F068 -:2001C000D210D608D828DE80EA80848089409C80A140AA40AD01B085B210E620000402082A -:2001E00004100518060C0725082009200A0C0B180E030F011108120413331403192E1A30C8 -:200200001B101C032003260128032E4830403201343C3538360237073B203E445440580BDF -:20022000590B5B0B5C995D905F018001820288068B078E1091019208970298029A01A1074D -:20024000A801A904AA04AC08AE10B007B107B207B618B80ABE40BF01D80BD904DB04DC092E -:20026000DF010010014003400510076109200A800E691002120813201612171218101981F1 -:200280001D841E4A1F102101254027082911320A351036023B203D883E20462047086405E1 -:2002A0006504680278027C028D409201980299109A129B739C809D809E20A080A124A21286 -:2002C000A580A601C0FBC2FAC4F3CA05CCA3CE74D870DE81E0403340CC109F409F40AB40E5 -:2002E000EE801440C404B040EA01201026808E80C86008025B205F4084028B209340A810AD -:20030000AF40C210D480D620E440EC80EE4001010B0111011B0100031F0020000091FF6E98 -:200320007F248000906C400000716082C01008EF00009F00C06C0200C06C0100802400485E -:20034000C000046C00480000000F00F00000FF1000080000000040403205100004FEDBCBA0 -:200360003FFFFFFF2200F0080400000000000224040B0B0B909900010000C000400110118C -:20038000C0010011400140010000000000000000000000000000000000FFFF00000000000B -:2003A0000800300008000000000000000000000010000000FF000000000000010200F10EEC -:2003C0000E000C000000000000FCFC0000000000F0000FF00000000000010000F00F0F000D -:2003E0000000000100000000000000000000000000000000000000000000000000000000FC +:20000000024500400852004002640040450001403201014044020140540301403D0401407E +:200020005B0501400B0601404E070140100901403C0A01403F0B01400A0D0140020F014021 +:2000400003150140481601404317014003190140021B0140074001401041014008420140AD +:20006000054301400844014013450140064601400147014008480140094901400650014000 +:200080003602650200C9019C180819041CE12104300431083403820F0140060C07180A60EB +:2000A0000C020F201090124814901624172419241A101B091F03230426802A902C012D243E +:2000C0002F1230013140321C333834E0360237073E413F01580459045B045C995F01850148 +:2000E000872C880889328B018F089004920296039740980499069A019E04A008A408A501D5 +:20010000A71AAA04AB40AC08B207B307B408B540B738B820B908BE10BF10D804D90BDC9953 +:20012000DF010128030205100A780C800D100E60120C1348149016041740184019A81B2021 +:200140001E201F14218422012540271429012B012E14318032183608371039483A083B01AF +:200160003D803F1469806B017E808180830485408B108F01C047C2FEC4F7CA69CC6ECE7B6C +:20018000DE80E001E220040F055506F007AA0BFF0EFF10FF13FF150F16FF17F01D691F9657 +:2001A0002433253326CC27CC28552AAA2BFF2C962E6931FF34FF3E103F015602572C5804AF +:2001C00059045B0B5D905F01843885108A458E38900792409406964098089C029D039F0CC7 +:2001E000A002A105A30AA610A820A906AB09AC01AE02B007B10FB240B510B638BE44BF11DE +:20020000D440D804D904DB0BDC09DD90DF01020A0310050807010A640B020C020E201001FD +:20022000124013141504160817801A501B411D10200423802740284029202D042F24318070 +:20024000350837813A043C203E086120632167806C206D916F027602770278027A037E80FC +:200260008120820483408480861088108E4090409180920293089560966C97149801998828 +:200280009A089B119C909D119F48A180A210A320A480A688A701AF01B001B340B702C0A74B +:2002A000C23FC4EFCA65CCD8CE62D88EDE81E201E408E603E80200030A010F081528174463 +:2002C000192C1B811E031F0320032403278028032B042DD42F22300233E03401351836025E +:2002E00037073B303E5140644102423045E2460D47CF483749FF4AFF4BFF4F2C5601580455 +:2003000059045A045B045C905D095F0162C06680684069406E0888018A069405960298035D +:200320009A049C049E03B607BA80D80BDC09DF0101010204051009400E010F141020111056 +:20034000130219421B101E011F4021102258232029042A202B01304032583980411042505D +:20036000484049044A0851085240530159A85A026064618069406A086B8870907101722003 +:200380007E80810883018580882089108C108E409044919192529560962C979799809A022E +:2003A0009B029C429D019E409F08A020A140A323A490A520A689A710AB80AF20B012B508E0 +:2003C000B608C04AC2E1C40ECA0ECC0ECE08D007D204D60FD80FDE80E001E210E404E602DE +:2003E000E801EA50EE8010041202160318041A012A042E04320758045C095F010008010130 +:20040000030A09080A840D100E6010221112130217A018201C201E202040210422402A823F +:200420002B16302231083240386039013B044108420443014804494850425120524558804B +:200440006002628078029131924096049714988099429A029BA29C029D109E04A020A140AB +:20046000A302A410A520A681A880A908AA04AB01AC50AD20B240B540B608B720C00FC27EB0 +:20048000C4CFCA0FCC0FCE0FD007D20CD608D808DE01E440E80AEE078E019E41A402A841DE +:2004A000AB08AE09AF82B201B441B510B620B704E440E840EA01ECD00001013303CC0802A2 +:2004C0000FFF1196136917FF1D551FAA21FF290F2BF0340135FF36023E503F1058045904F0 +:2004E0005F0182028533868087CC88808A408BFF8E0891FF92049406950F960897F0988074 +:200500009A209D559E609FAAA002A204A410A969AA80AB96AC01ADFFB001B20EB410B6E04B +:20052000B7FFBE15BF40D804D904DB04DC09DF0100010120066107080C020E220F04158058 +:20054000161017111A0A1C481E021F0822202640280829022C082F023102320833403408FA +:200560003502374038823D203F085D085E015FA06E206F018128832084048A048B048D40F0 +:200580008F10980899029A109B48A008A102A661A808A902B408B740C0FAC2F0C4F0CA3575 +:2005A000CCDBCE69D6F0E280E460E601E8508201850286308A408F08E223E440E802EA2094 +:2005C000EE60E001E610A840AB20EC8000D00424064308110A220CD0102012D0142816838E +:2005E00018D01E0C20D0260128D02E0230F0360F3A02580B5C095F018038814684438539DD +:20060000863C870688488A208B468D048F20903894619501961E975E982399429A449B04F1 +:200620009C189E20A010A146A428A542A610A820A977AA18AB08AD46B108B260B370B41E38 +:20064000B50FB601B920BA08BB0CBE40BF01D409D80BD90BDB0BDC99DD90DF0100080101A9 +:200660000308040405100680070209490A040C200E420F1010201110124015191601195473 +:200680001A041B1C1E42200C2108239429142A022B0230203108388039113B04590A5BA0DB +:2006A000614078027E808B0190809119960497149802990A9AC39B029D109F01A020A14170 +:2006C000A280A302A404A508A601A71CC0FEC2FFC4FECA0FCC06CE0FD60FD808DE81E420A3 +:2006E000EC80A402B240EC80B002EC805810808086808810D480E240E6805381570A5904F8 +:200700005C026008648081048240840898809A80D4E0D6E0D8C0E220E6908C0292409A8036 +:200720009C02AF80B302B709EE1023088F0892409A80C8100C015102542080208C40C204ED +:20074000D403E608020403100480074009020B010C188008850294809C109F10AD02B011C7 +:20076000B710C00FC20FEA04EE0683408E0493019A049B40E608AB01231027088801924077 +:2007800097109A80B310C860080156805A4092409A809C01B308C210D4C0010109010B0172 +:2007A0000D0111011B010000C00102000008FF218040000090404000001060807F22800829 +:2007C0001F01200000040000C0010100C0070418C001080000019F00003FFF8000000040C9 +:2007E000008200000000040163025000040EFCBD3DFFFFFF2200F008040000000000080092 +:20080000040B0B04909900010000C00040011011C00100114001400100000000000000001A +:20082000000000000000000000FFFF00FF000000080030000800000000000000000000007B +:2008400010000000FF000000000000010200F10E0E000C000000000000FCFC000400000071 +:200860000F00000000000001F00F0F000C000001000000000000000000000000000000004D :00000001FF diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/core_cm3.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/core_cm3.c deleted file mode 100644 index 56fddc5..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/core_cm3.c +++ /dev/null @@ -1,784 +0,0 @@ -/**************************************************************************//** - * @file core_cm3.c - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Source File - * @version V1.30 - * @date 30. October 2009 - * - * @note - * Copyright (C) 2009 ARM Limited. All rights reserved. - * - * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. - * - * @par - * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED - * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. - * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. - * - ******************************************************************************/ - -#include - -/* define compiler specific symbols */ -#if defined ( __CC_ARM ) - #define __ASM __asm /*!< asm keyword for ARM Compiler */ - #define __INLINE __inline /*!< inline keyword for ARM Compiler */ - -#elif defined ( __ICCARM__ ) - #define __ASM __asm /*!< asm keyword for IAR Compiler */ - #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ - -#elif defined ( __GNUC__ ) - #define __ASM __asm /*!< asm keyword for GNU Compiler */ - #define __INLINE inline /*!< inline keyword for GNU Compiler */ - -#elif defined ( __TASKING__ ) - #define __ASM __asm /*!< asm keyword for TASKING Compiler */ - #define __INLINE inline /*!< inline keyword for TASKING Compiler */ - -#endif - - -/* ################### Compiler specific Intrinsics ########################### */ - -#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ -/* ARM armcc specific functions */ - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -__ASM uint32_t __get_PSP(void) -{ - mrs r0, psp - bx lr -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -__ASM void __set_PSP(uint32_t topOfProcStack) -{ - msr psp, r0 - bx lr -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -__ASM uint32_t __get_MSP(void) -{ - mrs r0, msp - bx lr -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -__ASM void __set_MSP(uint32_t mainStackPointer) -{ - msr msp, r0 - bx lr -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -__ASM uint32_t __REV16(uint16_t value) -{ - rev16 r0, r0 - bx lr -} - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -__ASM int32_t __REVSH(int16_t value) -{ - revsh r0, r0 - bx lr -} - - -#if (__ARMCC_VERSION < 400000) - -/** - * @brief Remove the exclusive lock created by ldrex - * - * Removes the exclusive lock which is created by ldrex. - */ -__ASM void __CLREX(void) -{ - clrex -} - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -__ASM uint32_t __get_BASEPRI(void) -{ - mrs r0, basepri - bx lr -} - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -__ASM void __set_BASEPRI(uint32_t basePri) -{ - msr basepri, r0 - bx lr -} - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -__ASM uint32_t __get_PRIMASK(void) -{ - mrs r0, primask - bx lr -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -__ASM void __set_PRIMASK(uint32_t priMask) -{ - msr primask, r0 - bx lr -} - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -__ASM uint32_t __get_FAULTMASK(void) -{ - mrs r0, faultmask - bx lr -} - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -__ASM void __set_FAULTMASK(uint32_t faultMask) -{ - msr faultmask, r0 - bx lr -} - -/** - * @brief Return the Control Register value - * - * @return Control value - * - * Return the content of the control register - */ -__ASM uint32_t __get_CONTROL(void) -{ - mrs r0, control - bx lr -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -__ASM void __set_CONTROL(uint32_t control) -{ - msr control, r0 - bx lr -} - -#endif /* __ARMCC_VERSION */ - - - -#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ -/* IAR iccarm specific functions */ -#pragma diag_suppress=Pe940 - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -uint32_t __get_PSP(void) -{ - __ASM("mrs r0, psp"); - __ASM("bx lr"); -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -void __set_PSP(uint32_t topOfProcStack) -{ - __ASM("msr psp, r0"); - __ASM("bx lr"); -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -uint32_t __get_MSP(void) -{ - __ASM("mrs r0, msp"); - __ASM("bx lr"); -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -void __set_MSP(uint32_t topOfMainStack) -{ - __ASM("msr msp, r0"); - __ASM("bx lr"); -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -uint32_t __REV16(uint16_t value) -{ - __ASM("rev16 r0, r0"); - __ASM("bx lr"); -} - -/** - * @brief Reverse bit order of value - * - * @param value value to reverse - * @return reversed value - * - * Reverse bit order of value - */ -uint32_t __RBIT(uint32_t value) -{ - __ASM("rbit r0, r0"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (8 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 8 bit values) - */ -uint8_t __LDREXB(uint8_t *addr) -{ - __ASM("ldrexb r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (16 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 16 bit values - */ -uint16_t __LDREXH(uint16_t *addr) -{ - __ASM("ldrexh r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief LDR Exclusive (32 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 32 bit values - */ -uint32_t __LDREXW(uint32_t *addr) -{ - __ASM("ldrex r0, [r0]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (8 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 8 bit values - */ -uint32_t __STREXB(uint8_t value, uint8_t *addr) -{ - __ASM("strexb r0, r0, [r1]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (16 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 16 bit values - */ -uint32_t __STREXH(uint16_t value, uint16_t *addr) -{ - __ASM("strexh r0, r0, [r1]"); - __ASM("bx lr"); -} - -/** - * @brief STR Exclusive (32 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 32 bit values - */ -uint32_t __STREXW(uint32_t value, uint32_t *addr) -{ - __ASM("strex r0, r0, [r1]"); - __ASM("bx lr"); -} - -#pragma diag_default=Pe940 - - -#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ -/* GNU gcc specific functions */ - -/** - * @brief Return the Process Stack Pointer - * - * @return ProcessStackPointer - * - * Return the actual process stack pointer - */ -uint32_t __get_PSP(void) __attribute__( ( naked ) ); -uint32_t __get_PSP(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, psp\n\t" - "MOV r0, %0 \n\t" - "BX lr \n\t" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Process Stack Pointer - * - * @param topOfProcStack Process Stack Pointer - * - * Assign the value ProcessStackPointer to the MSP - * (process stack pointer) Cortex processor register - */ -void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) ); -void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0\n\t" - "BX lr \n\t" : : "r" (topOfProcStack) ); -} - -/** - * @brief Return the Main Stack Pointer - * - * @return Main Stack Pointer - * - * Return the current value of the MSP (main stack pointer) - * Cortex processor register - */ -uint32_t __get_MSP(void) __attribute__( ( naked ) ); -uint32_t __get_MSP(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, msp\n\t" - "MOV r0, %0 \n\t" - "BX lr \n\t" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Main Stack Pointer - * - * @param topOfMainStack Main Stack Pointer - * - * Assign the value mainStackPointer to the MSP - * (main stack pointer) Cortex processor register - */ -void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) ); -void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0\n\t" - "BX lr \n\t" : : "r" (topOfMainStack) ); -} - -/** - * @brief Return the Base Priority value - * - * @return BasePriority - * - * Return the content of the base priority register - */ -uint32_t __get_BASEPRI(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Base Priority value - * - * @param basePri BasePriority - * - * Set the base priority register - */ -void __set_BASEPRI(uint32_t value) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (value) ); -} - -/** - * @brief Return the Priority Mask value - * - * @return PriMask - * - * Return state of the priority mask bit from the priority mask register - */ -uint32_t __get_PRIMASK(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Priority Mask value - * - * @param priMask PriMask - * - * Set the priority mask bit in the priority mask register - */ -void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) ); -} - -/** - * @brief Return the Fault Mask value - * - * @return FaultMask - * - * Return the content of the fault mask register - */ -uint32_t __get_FAULTMASK(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Fault Mask value - * - * @param faultMask faultMask value - * - * Set the fault mask register - */ -void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) ); -} - -/** - * @brief Return the Control Register value -* -* @return Control value - * - * Return the content of the control register - */ -uint32_t __get_CONTROL(void) -{ - uint32_t result=0; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - -/** - * @brief Set the Control Register value - * - * @param control Control value - * - * Set the control register - */ -void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) ); -} - - -/** - * @brief Reverse byte order in integer value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in integer value - */ -uint32_t __REV(uint32_t value) -{ - uint32_t result=0; - - __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse byte order in unsigned short value - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in unsigned short value - */ -uint32_t __REV16(uint16_t value) -{ - uint32_t result=0; - - __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse byte order in signed short value with sign extension to integer - * - * @param value value to reverse - * @return reversed value - * - * Reverse byte order in signed short value with sign extension to integer - */ -int32_t __REVSH(int16_t value) -{ - uint32_t result=0; - - __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief Reverse bit order of value - * - * @param value value to reverse - * @return reversed value - * - * Reverse bit order of value - */ -uint32_t __RBIT(uint32_t value) -{ - uint32_t result=0; - - __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); - return(result); -} - -/** - * @brief LDR Exclusive (8 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 8 bit value - */ -uint8_t __LDREXB(uint8_t *addr) -{ - uint8_t result=0; - - __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief LDR Exclusive (16 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 16 bit values - */ -uint16_t __LDREXH(uint16_t *addr) -{ - uint16_t result=0; - - __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief LDR Exclusive (32 bit) - * - * @param *addr address pointer - * @return value of (*address) - * - * Exclusive LDR command for 32 bit values - */ -uint32_t __LDREXW(uint32_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) ); - return(result); -} - -/** - * @brief STR Exclusive (8 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 8 bit values - */ -uint32_t __STREXB(uint8_t value, uint8_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - -/** - * @brief STR Exclusive (16 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 16 bit values - */ -uint32_t __STREXH(uint16_t value, uint16_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - -/** - * @brief STR Exclusive (32 bit) - * - * @param value value to store - * @param *addr address pointer - * @return successful / failed - * - * Exclusive STR command for 32 bit values - */ -uint32_t __STREXW(uint32_t value, uint32_t *addr) -{ - uint32_t result=0; - - __ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); - return(result); -} - - -#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ -/* TASKING carm specific functions */ - -/* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all instrinsics, - * Including the CMSIS ones. - */ - -#endif diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h index e82bc00..b9e0788 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice.h @@ -5331,6 +5331,7 @@ #define CYDEV_ECC_BASE CYDEV_FLSECC_BASE #define CYDEV_FLS_SECTOR_SIZE 0x00010000u #define CYDEV_FLS_ROW_SIZE 0x00000100u +#define CYDEV_ALLOCATE_EEPROM 0x00000001u #define CYDEV_ECC_SECTOR_SIZE 0x00002000u #define CYDEV_ECC_ROW_SIZE 0x00000020u #define CYDEV_EEPROM_SECTOR_SIZE 0x00000400u diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h index d98ec4d..1fbd788 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevice_trm.h @@ -5331,6 +5331,7 @@ #define CYDEV_ECC_BASE CYDEV_FLSECC_BASE #define CYDEV_FLS_SECTOR_SIZE 0x00010000u #define CYDEV_FLS_ROW_SIZE 0x00000100u +#define CYDEV_ALLOCATE_EEPROM 0x00000001u #define CYDEV_ECC_SECTOR_SIZE 0x00002000u #define CYDEV_ECC_ROW_SIZE 0x00000020u #define CYDEV_EEPROM_SECTOR_SIZE 0x00000400u diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc index 3175b08..88db2ec 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu.inc @@ -5329,6 +5329,7 @@ .set CYDEV_ECC_BASE, CYDEV_FLSECC_BASE .set CYDEV_FLS_SECTOR_SIZE, 0x00010000 .set CYDEV_FLS_ROW_SIZE, 0x00000100 +.set CYDEV_ALLOCATE_EEPROM, 0x00000001 .set CYDEV_ECC_SECTOR_SIZE, 0x00002000 .set CYDEV_ECC_ROW_SIZE, 0x00000020 .set CYDEV_EEPROM_SECTOR_SIZE, 0x00000400 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc index 54bd325..f7aaccf 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicegnu_trm.inc @@ -5329,6 +5329,7 @@ .set CYDEV_ECC_BASE, CYDEV_FLSECC_BASE .set CYDEV_FLS_SECTOR_SIZE, 0x00010000 .set CYDEV_FLS_ROW_SIZE, 0x00000100 +.set CYDEV_ALLOCATE_EEPROM, 0x00000001 .set CYDEV_ECC_SECTOR_SIZE, 0x00002000 .set CYDEV_ECC_ROW_SIZE, 0x00000020 .set CYDEV_EEPROM_SECTOR_SIZE, 0x00000400 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc index 260c34e..84d3a34 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar.inc @@ -5328,6 +5328,7 @@ #define CYDEV_ECC_BASE CYDEV_FLSECC_BASE #define CYDEV_FLS_SECTOR_SIZE 0x00010000 #define CYDEV_FLS_ROW_SIZE 0x00000100 +#define CYDEV_ALLOCATE_EEPROM 0x00000001 #define CYDEV_ECC_SECTOR_SIZE 0x00002000 #define CYDEV_ECC_ROW_SIZE 0x00000020 #define CYDEV_EEPROM_SECTOR_SIZE 0x00000400 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc index d5a03cf..ed08149 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydeviceiar_trm.inc @@ -5328,6 +5328,7 @@ #define CYDEV_ECC_BASE CYDEV_FLSECC_BASE #define CYDEV_FLS_SECTOR_SIZE 0x00010000 #define CYDEV_FLS_ROW_SIZE 0x00000100 +#define CYDEV_ALLOCATE_EEPROM 0x00000001 #define CYDEV_ECC_SECTOR_SIZE 0x00002000 #define CYDEV_ECC_ROW_SIZE 0x00000020 #define CYDEV_EEPROM_SECTOR_SIZE 0x00000400 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc index 437e604..27c28f5 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv.inc @@ -15957,6 +15957,9 @@ CYDEV_FLS_SECTOR_SIZE EQU 0x00010000 ENDIF IF :LNOT::DEF:CYDEV_FLS_ROW_SIZE CYDEV_FLS_ROW_SIZE EQU 0x00000100 + ENDIF + IF :LNOT::DEF:CYDEV_ALLOCATE_EEPROM +CYDEV_ALLOCATE_EEPROM EQU 0x00000001 ENDIF IF :LNOT::DEF:CYDEV_ECC_SECTOR_SIZE CYDEV_ECC_SECTOR_SIZE EQU 0x00002000 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc index c632e72..ac134b9 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cydevicerv_trm.inc @@ -15957,6 +15957,9 @@ CYDEV_FLS_SECTOR_SIZE EQU 0x00010000 ENDIF IF :LNOT::DEF:CYDEV_FLS_ROW_SIZE CYDEV_FLS_ROW_SIZE EQU 0x00000100 + ENDIF + IF :LNOT::DEF:CYDEV_ALLOCATE_EEPROM +CYDEV_ALLOCATE_EEPROM EQU 0x00000001 ENDIF IF :LNOT::DEF:CYDEV_ECC_SECTOR_SIZE CYDEV_ECC_SECTOR_SIZE EQU 0x00002000 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h index 17c6d84..2bdffa5 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter.h @@ -6,10 +6,10 @@ /* SCSI_ATN_ISR */ #define SCSI_ATN_ISR__INTC_CLR_EN_REG CYREG_NVIC_CLRENA0 #define SCSI_ATN_ISR__INTC_CLR_PD_REG CYREG_NVIC_CLRPEND0 -#define SCSI_ATN_ISR__INTC_MASK 0x01u -#define SCSI_ATN_ISR__INTC_NUMBER 0u +#define SCSI_ATN_ISR__INTC_MASK 0x800u +#define SCSI_ATN_ISR__INTC_NUMBER 11u #define SCSI_ATN_ISR__INTC_PRIOR_NUM 7u -#define SCSI_ATN_ISR__INTC_PRIOR_REG CYREG_NVIC_PRI_0 +#define SCSI_ATN_ISR__INTC_PRIOR_REG CYREG_NVIC_PRI_11 #define SCSI_ATN_ISR__INTC_SET_EN_REG CYREG_NVIC_SETENA0 #define SCSI_ATN_ISR__INTC_SET_PD_REG CYREG_NVIC_SETPEND0 @@ -116,34 +116,34 @@ #define SCSI_RST_ISR__INTC_SET_PD_REG CYREG_NVIC_SETPEND0 /* SDCard_BSPIM */ -#define SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_AUX_CTL_REG CYREG_B0_UDB06_07_ACTL -#define SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_REG CYREG_B0_UDB06_07_ST -#define SDCard_BSPIM_BitCounter_ST__MASK_REG CYREG_B0_UDB06_MSK -#define SDCard_BSPIM_BitCounter_ST__MASK_ST_AUX_CTL_REG CYREG_B0_UDB06_MSK_ACTL -#define SDCard_BSPIM_BitCounter_ST__PER_ST_AUX_CTL_REG CYREG_B0_UDB06_MSK_ACTL -#define SDCard_BSPIM_BitCounter_ST__STATUS_AUX_CTL_REG CYREG_B0_UDB06_ACTL -#define SDCard_BSPIM_BitCounter_ST__STATUS_CNT_REG CYREG_B0_UDB06_ST_CTL -#define SDCard_BSPIM_BitCounter_ST__STATUS_CONTROL_REG CYREG_B0_UDB06_ST_CTL -#define SDCard_BSPIM_BitCounter_ST__STATUS_REG CYREG_B0_UDB06_ST -#define SDCard_BSPIM_BitCounter__16BIT_CONTROL_AUX_CTL_REG CYREG_B0_UDB06_07_ACTL -#define SDCard_BSPIM_BitCounter__16BIT_CONTROL_CONTROL_REG CYREG_B0_UDB06_07_CTL -#define SDCard_BSPIM_BitCounter__16BIT_CONTROL_COUNT_REG CYREG_B0_UDB06_07_CTL -#define SDCard_BSPIM_BitCounter__16BIT_COUNT_CONTROL_REG CYREG_B0_UDB06_07_CTL -#define SDCard_BSPIM_BitCounter__16BIT_COUNT_COUNT_REG CYREG_B0_UDB06_07_CTL -#define SDCard_BSPIM_BitCounter__16BIT_MASK_MASK_REG CYREG_B0_UDB06_07_MSK -#define SDCard_BSPIM_BitCounter__16BIT_MASK_PERIOD_REG CYREG_B0_UDB06_07_MSK -#define SDCard_BSPIM_BitCounter__16BIT_PERIOD_MASK_REG CYREG_B0_UDB06_07_MSK -#define SDCard_BSPIM_BitCounter__16BIT_PERIOD_PERIOD_REG CYREG_B0_UDB06_07_MSK -#define SDCard_BSPIM_BitCounter__CONTROL_AUX_CTL_REG CYREG_B0_UDB06_ACTL -#define SDCard_BSPIM_BitCounter__CONTROL_REG CYREG_B0_UDB06_CTL -#define SDCard_BSPIM_BitCounter__CONTROL_ST_REG CYREG_B0_UDB06_ST_CTL -#define SDCard_BSPIM_BitCounter__COUNT_REG CYREG_B0_UDB06_CTL -#define SDCard_BSPIM_BitCounter__COUNT_ST_REG CYREG_B0_UDB06_ST_CTL -#define SDCard_BSPIM_BitCounter__MASK_CTL_AUX_CTL_REG CYREG_B0_UDB06_MSK_ACTL -#define SDCard_BSPIM_BitCounter__PERIOD_REG CYREG_B0_UDB06_MSK -#define SDCard_BSPIM_BitCounter__PER_CTL_AUX_CTL_REG CYREG_B0_UDB06_MSK_ACTL -#define SDCard_BSPIM_RxStsReg__16BIT_STATUS_AUX_CTL_REG CYREG_B1_UDB06_07_ACTL -#define SDCard_BSPIM_RxStsReg__16BIT_STATUS_REG CYREG_B1_UDB06_07_ST +#define SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_AUX_CTL_REG CYREG_B0_UDB02_03_ACTL +#define SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_REG CYREG_B0_UDB02_03_ST +#define SDCard_BSPIM_BitCounter_ST__MASK_REG CYREG_B0_UDB02_MSK +#define SDCard_BSPIM_BitCounter_ST__MASK_ST_AUX_CTL_REG CYREG_B0_UDB02_MSK_ACTL +#define SDCard_BSPIM_BitCounter_ST__PER_ST_AUX_CTL_REG CYREG_B0_UDB02_MSK_ACTL +#define SDCard_BSPIM_BitCounter_ST__STATUS_AUX_CTL_REG CYREG_B0_UDB02_ACTL +#define SDCard_BSPIM_BitCounter_ST__STATUS_CNT_REG CYREG_B0_UDB02_ST_CTL +#define SDCard_BSPIM_BitCounter_ST__STATUS_CONTROL_REG CYREG_B0_UDB02_ST_CTL +#define SDCard_BSPIM_BitCounter_ST__STATUS_REG CYREG_B0_UDB02_ST +#define SDCard_BSPIM_BitCounter__16BIT_CONTROL_AUX_CTL_REG CYREG_B0_UDB02_03_ACTL +#define SDCard_BSPIM_BitCounter__16BIT_CONTROL_CONTROL_REG CYREG_B0_UDB02_03_CTL +#define SDCard_BSPIM_BitCounter__16BIT_CONTROL_COUNT_REG CYREG_B0_UDB02_03_CTL +#define SDCard_BSPIM_BitCounter__16BIT_COUNT_CONTROL_REG CYREG_B0_UDB02_03_CTL +#define SDCard_BSPIM_BitCounter__16BIT_COUNT_COUNT_REG CYREG_B0_UDB02_03_CTL +#define SDCard_BSPIM_BitCounter__16BIT_MASK_MASK_REG CYREG_B0_UDB02_03_MSK +#define SDCard_BSPIM_BitCounter__16BIT_MASK_PERIOD_REG CYREG_B0_UDB02_03_MSK +#define SDCard_BSPIM_BitCounter__16BIT_PERIOD_MASK_REG CYREG_B0_UDB02_03_MSK +#define SDCard_BSPIM_BitCounter__16BIT_PERIOD_PERIOD_REG CYREG_B0_UDB02_03_MSK +#define SDCard_BSPIM_BitCounter__CONTROL_AUX_CTL_REG CYREG_B0_UDB02_ACTL +#define SDCard_BSPIM_BitCounter__CONTROL_REG CYREG_B0_UDB02_CTL +#define SDCard_BSPIM_BitCounter__CONTROL_ST_REG CYREG_B0_UDB02_ST_CTL +#define SDCard_BSPIM_BitCounter__COUNT_REG CYREG_B0_UDB02_CTL +#define SDCard_BSPIM_BitCounter__COUNT_ST_REG CYREG_B0_UDB02_ST_CTL +#define SDCard_BSPIM_BitCounter__MASK_CTL_AUX_CTL_REG CYREG_B0_UDB02_MSK_ACTL +#define SDCard_BSPIM_BitCounter__PERIOD_REG CYREG_B0_UDB02_MSK +#define SDCard_BSPIM_BitCounter__PER_CTL_AUX_CTL_REG CYREG_B0_UDB02_MSK_ACTL +#define SDCard_BSPIM_RxStsReg__16BIT_STATUS_AUX_CTL_REG CYREG_B0_UDB03_04_ACTL +#define SDCard_BSPIM_RxStsReg__16BIT_STATUS_REG CYREG_B0_UDB03_04_ST #define SDCard_BSPIM_RxStsReg__4__MASK 0x10u #define SDCard_BSPIM_RxStsReg__4__POS 4 #define SDCard_BSPIM_RxStsReg__5__MASK 0x20u @@ -151,13 +151,13 @@ #define SDCard_BSPIM_RxStsReg__6__MASK 0x40u #define SDCard_BSPIM_RxStsReg__6__POS 6 #define SDCard_BSPIM_RxStsReg__MASK 0x70u -#define SDCard_BSPIM_RxStsReg__MASK_REG CYREG_B1_UDB06_MSK -#define SDCard_BSPIM_RxStsReg__STATUS_AUX_CTL_REG CYREG_B1_UDB06_ACTL -#define SDCard_BSPIM_RxStsReg__STATUS_REG CYREG_B1_UDB06_ST +#define SDCard_BSPIM_RxStsReg__MASK_REG CYREG_B0_UDB03_MSK +#define SDCard_BSPIM_RxStsReg__STATUS_AUX_CTL_REG CYREG_B0_UDB03_ACTL +#define SDCard_BSPIM_RxStsReg__STATUS_REG CYREG_B0_UDB03_ST #define SDCard_BSPIM_TxStsReg__0__MASK 0x01u #define SDCard_BSPIM_TxStsReg__0__POS 0 -#define SDCard_BSPIM_TxStsReg__16BIT_STATUS_AUX_CTL_REG CYREG_B0_UDB05_06_ACTL -#define SDCard_BSPIM_TxStsReg__16BIT_STATUS_REG CYREG_B0_UDB05_06_ST +#define SDCard_BSPIM_TxStsReg__16BIT_STATUS_AUX_CTL_REG CYREG_B1_UDB07_08_ACTL +#define SDCard_BSPIM_TxStsReg__16BIT_STATUS_REG CYREG_B1_UDB07_08_ST #define SDCard_BSPIM_TxStsReg__1__MASK 0x02u #define SDCard_BSPIM_TxStsReg__1__POS 1 #define SDCard_BSPIM_TxStsReg__2__MASK 0x04u @@ -167,28 +167,48 @@ #define SDCard_BSPIM_TxStsReg__4__MASK 0x10u #define SDCard_BSPIM_TxStsReg__4__POS 4 #define SDCard_BSPIM_TxStsReg__MASK 0x1Fu -#define SDCard_BSPIM_TxStsReg__MASK_REG CYREG_B0_UDB05_MSK -#define SDCard_BSPIM_TxStsReg__STATUS_AUX_CTL_REG CYREG_B0_UDB05_ACTL -#define SDCard_BSPIM_TxStsReg__STATUS_REG CYREG_B0_UDB05_ST -#define SDCard_BSPIM_sR8_Dp_u0__16BIT_A0_REG CYREG_B0_UDB06_07_A0 -#define SDCard_BSPIM_sR8_Dp_u0__16BIT_A1_REG CYREG_B0_UDB06_07_A1 -#define SDCard_BSPIM_sR8_Dp_u0__16BIT_D0_REG CYREG_B0_UDB06_07_D0 -#define SDCard_BSPIM_sR8_Dp_u0__16BIT_D1_REG CYREG_B0_UDB06_07_D1 -#define SDCard_BSPIM_sR8_Dp_u0__16BIT_DP_AUX_CTL_REG CYREG_B0_UDB06_07_ACTL -#define SDCard_BSPIM_sR8_Dp_u0__16BIT_F0_REG CYREG_B0_UDB06_07_F0 -#define SDCard_BSPIM_sR8_Dp_u0__16BIT_F1_REG CYREG_B0_UDB06_07_F1 -#define SDCard_BSPIM_sR8_Dp_u0__A0_A1_REG CYREG_B0_UDB06_A0_A1 -#define SDCard_BSPIM_sR8_Dp_u0__A0_REG CYREG_B0_UDB06_A0 -#define SDCard_BSPIM_sR8_Dp_u0__A1_REG CYREG_B0_UDB06_A1 -#define SDCard_BSPIM_sR8_Dp_u0__D0_D1_REG CYREG_B0_UDB06_D0_D1 -#define SDCard_BSPIM_sR8_Dp_u0__D0_REG CYREG_B0_UDB06_D0 -#define SDCard_BSPIM_sR8_Dp_u0__D1_REG CYREG_B0_UDB06_D1 -#define SDCard_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG CYREG_B0_UDB06_ACTL -#define SDCard_BSPIM_sR8_Dp_u0__F0_F1_REG CYREG_B0_UDB06_F0_F1 -#define SDCard_BSPIM_sR8_Dp_u0__F0_REG CYREG_B0_UDB06_F0 -#define SDCard_BSPIM_sR8_Dp_u0__F1_REG CYREG_B0_UDB06_F1 -#define SDCard_BSPIM_sR8_Dp_u0__MSK_DP_AUX_CTL_REG CYREG_B0_UDB06_MSK_ACTL -#define SDCard_BSPIM_sR8_Dp_u0__PER_DP_AUX_CTL_REG CYREG_B0_UDB06_MSK_ACTL +#define SDCard_BSPIM_TxStsReg__MASK_REG CYREG_B1_UDB07_MSK +#define SDCard_BSPIM_TxStsReg__STATUS_AUX_CTL_REG CYREG_B1_UDB07_ACTL +#define SDCard_BSPIM_TxStsReg__STATUS_REG CYREG_B1_UDB07_ST +#define SDCard_BSPIM_sR8_Dp_u0__16BIT_A0_REG CYREG_B0_UDB07_08_A0 +#define SDCard_BSPIM_sR8_Dp_u0__16BIT_A1_REG CYREG_B0_UDB07_08_A1 +#define SDCard_BSPIM_sR8_Dp_u0__16BIT_D0_REG CYREG_B0_UDB07_08_D0 +#define SDCard_BSPIM_sR8_Dp_u0__16BIT_D1_REG CYREG_B0_UDB07_08_D1 +#define SDCard_BSPIM_sR8_Dp_u0__16BIT_DP_AUX_CTL_REG CYREG_B0_UDB07_08_ACTL +#define SDCard_BSPIM_sR8_Dp_u0__16BIT_F0_REG CYREG_B0_UDB07_08_F0 +#define SDCard_BSPIM_sR8_Dp_u0__16BIT_F1_REG CYREG_B0_UDB07_08_F1 +#define SDCard_BSPIM_sR8_Dp_u0__A0_A1_REG CYREG_B0_UDB07_A0_A1 +#define SDCard_BSPIM_sR8_Dp_u0__A0_REG CYREG_B0_UDB07_A0 +#define SDCard_BSPIM_sR8_Dp_u0__A1_REG CYREG_B0_UDB07_A1 +#define SDCard_BSPIM_sR8_Dp_u0__D0_D1_REG CYREG_B0_UDB07_D0_D1 +#define SDCard_BSPIM_sR8_Dp_u0__D0_REG CYREG_B0_UDB07_D0 +#define SDCard_BSPIM_sR8_Dp_u0__D1_REG CYREG_B0_UDB07_D1 +#define SDCard_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG CYREG_B0_UDB07_ACTL +#define SDCard_BSPIM_sR8_Dp_u0__F0_F1_REG CYREG_B0_UDB07_F0_F1 +#define SDCard_BSPIM_sR8_Dp_u0__F0_REG CYREG_B0_UDB07_F0 +#define SDCard_BSPIM_sR8_Dp_u0__F1_REG CYREG_B0_UDB07_F1 + +/* SCSI_CTL_IO */ +#define SCSI_CTL_IO_Sync_ctrl_reg__0__MASK 0x01u +#define SCSI_CTL_IO_Sync_ctrl_reg__0__POS 0 +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG CYREG_B0_UDB00_01_ACTL +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG CYREG_B0_UDB00_01_CTL +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG CYREG_B0_UDB00_01_CTL +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG CYREG_B0_UDB00_01_CTL +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG CYREG_B0_UDB00_01_CTL +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_MASK_MASK_REG CYREG_B0_UDB00_01_MSK +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG CYREG_B0_UDB00_01_MSK +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG CYREG_B0_UDB00_01_MSK +#define SCSI_CTL_IO_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG CYREG_B0_UDB00_01_MSK +#define SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_AUX_CTL_REG CYREG_B0_UDB00_ACTL +#define SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_REG CYREG_B0_UDB00_CTL +#define SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_ST_REG CYREG_B0_UDB00_ST_CTL +#define SCSI_CTL_IO_Sync_ctrl_reg__COUNT_REG CYREG_B0_UDB00_CTL +#define SCSI_CTL_IO_Sync_ctrl_reg__COUNT_ST_REG CYREG_B0_UDB00_ST_CTL +#define SCSI_CTL_IO_Sync_ctrl_reg__MASK 0x01u +#define SCSI_CTL_IO_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG CYREG_B0_UDB00_MSK_ACTL +#define SCSI_CTL_IO_Sync_ctrl_reg__PERIOD_REG CYREG_B0_UDB00_MSK +#define SCSI_CTL_IO_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG CYREG_B0_UDB00_MSK_ACTL /* SCSI_In_DBx */ #define SCSI_In_DBx__0__MASK 0x01u @@ -304,59 +324,94 @@ #define SD_Init_Clk__PM_STBY_CFG CYREG_PM_STBY_CFG2 #define SD_Init_Clk__PM_STBY_MSK 0x02u +/* scsiTarget */ +#define scsiTarget_StatusReg__0__MASK 0x01u +#define scsiTarget_StatusReg__0__POS 0 +#define scsiTarget_StatusReg__16BIT_STATUS_AUX_CTL_REG CYREG_B0_UDB11_12_ACTL +#define scsiTarget_StatusReg__16BIT_STATUS_REG CYREG_B0_UDB11_12_ST +#define scsiTarget_StatusReg__1__MASK 0x02u +#define scsiTarget_StatusReg__1__POS 1 +#define scsiTarget_StatusReg__2__MASK 0x04u +#define scsiTarget_StatusReg__2__POS 2 +#define scsiTarget_StatusReg__3__MASK 0x08u +#define scsiTarget_StatusReg__3__POS 3 +#define scsiTarget_StatusReg__MASK 0x0Fu +#define scsiTarget_StatusReg__MASK_REG CYREG_B0_UDB11_MSK +#define scsiTarget_StatusReg__MASK_ST_AUX_CTL_REG CYREG_B0_UDB11_MSK_ACTL +#define scsiTarget_StatusReg__PER_ST_AUX_CTL_REG CYREG_B0_UDB11_MSK_ACTL +#define scsiTarget_StatusReg__STATUS_AUX_CTL_REG CYREG_B0_UDB11_ACTL +#define scsiTarget_StatusReg__STATUS_CNT_REG CYREG_B0_UDB11_ST_CTL +#define scsiTarget_StatusReg__STATUS_CONTROL_REG CYREG_B0_UDB11_ST_CTL +#define scsiTarget_StatusReg__STATUS_REG CYREG_B0_UDB11_ST +#define scsiTarget_datapath_PI__16BIT_STATUS_AUX_CTL_REG CYREG_B0_UDB04_05_ACTL +#define scsiTarget_datapath_PI__16BIT_STATUS_REG CYREG_B0_UDB04_05_ST +#define scsiTarget_datapath_PI__MASK_REG CYREG_B0_UDB04_MSK +#define scsiTarget_datapath_PI__MASK_ST_AUX_CTL_REG CYREG_B0_UDB04_MSK_ACTL +#define scsiTarget_datapath_PI__PER_ST_AUX_CTL_REG CYREG_B0_UDB04_MSK_ACTL +#define scsiTarget_datapath_PI__STATUS_AUX_CTL_REG CYREG_B0_UDB04_ACTL +#define scsiTarget_datapath_PI__STATUS_CNT_REG CYREG_B0_UDB04_ST_CTL +#define scsiTarget_datapath_PI__STATUS_CONTROL_REG CYREG_B0_UDB04_ST_CTL +#define scsiTarget_datapath_PI__STATUS_REG CYREG_B0_UDB04_ST +#define scsiTarget_datapath_PO__16BIT_CONTROL_AUX_CTL_REG CYREG_B0_UDB04_05_ACTL +#define scsiTarget_datapath_PO__16BIT_CONTROL_CONTROL_REG CYREG_B0_UDB04_05_CTL +#define scsiTarget_datapath_PO__16BIT_CONTROL_COUNT_REG CYREG_B0_UDB04_05_CTL +#define scsiTarget_datapath_PO__16BIT_COUNT_CONTROL_REG CYREG_B0_UDB04_05_CTL +#define scsiTarget_datapath_PO__16BIT_COUNT_COUNT_REG CYREG_B0_UDB04_05_CTL +#define scsiTarget_datapath_PO__16BIT_MASK_MASK_REG CYREG_B0_UDB04_05_MSK +#define scsiTarget_datapath_PO__16BIT_MASK_PERIOD_REG CYREG_B0_UDB04_05_MSK +#define scsiTarget_datapath_PO__16BIT_PERIOD_MASK_REG CYREG_B0_UDB04_05_MSK +#define scsiTarget_datapath_PO__16BIT_PERIOD_PERIOD_REG CYREG_B0_UDB04_05_MSK +#define scsiTarget_datapath_PO__CONTROL_AUX_CTL_REG CYREG_B0_UDB04_ACTL +#define scsiTarget_datapath_PO__CONTROL_REG CYREG_B0_UDB04_CTL +#define scsiTarget_datapath_PO__CONTROL_ST_REG CYREG_B0_UDB04_ST_CTL +#define scsiTarget_datapath_PO__COUNT_REG CYREG_B0_UDB04_CTL +#define scsiTarget_datapath_PO__COUNT_ST_REG CYREG_B0_UDB04_ST_CTL +#define scsiTarget_datapath_PO__MASK_CTL_AUX_CTL_REG CYREG_B0_UDB04_MSK_ACTL +#define scsiTarget_datapath_PO__PERIOD_REG CYREG_B0_UDB04_MSK +#define scsiTarget_datapath_PO__PER_CTL_AUX_CTL_REG CYREG_B0_UDB04_MSK_ACTL +#define scsiTarget_datapath__16BIT_A0_REG CYREG_B0_UDB04_05_A0 +#define scsiTarget_datapath__16BIT_A1_REG CYREG_B0_UDB04_05_A1 +#define scsiTarget_datapath__16BIT_D0_REG CYREG_B0_UDB04_05_D0 +#define scsiTarget_datapath__16BIT_D1_REG CYREG_B0_UDB04_05_D1 +#define scsiTarget_datapath__16BIT_DP_AUX_CTL_REG CYREG_B0_UDB04_05_ACTL +#define scsiTarget_datapath__16BIT_F0_REG CYREG_B0_UDB04_05_F0 +#define scsiTarget_datapath__16BIT_F1_REG CYREG_B0_UDB04_05_F1 +#define scsiTarget_datapath__A0_A1_REG CYREG_B0_UDB04_A0_A1 +#define scsiTarget_datapath__A0_REG CYREG_B0_UDB04_A0 +#define scsiTarget_datapath__A1_REG CYREG_B0_UDB04_A1 +#define scsiTarget_datapath__D0_D1_REG CYREG_B0_UDB04_D0_D1 +#define scsiTarget_datapath__D0_REG CYREG_B0_UDB04_D0 +#define scsiTarget_datapath__D1_REG CYREG_B0_UDB04_D1 +#define scsiTarget_datapath__DP_AUX_CTL_REG CYREG_B0_UDB04_ACTL +#define scsiTarget_datapath__F0_F1_REG CYREG_B0_UDB04_F0_F1 +#define scsiTarget_datapath__F0_REG CYREG_B0_UDB04_F0 +#define scsiTarget_datapath__F1_REG CYREG_B0_UDB04_F1 +#define scsiTarget_datapath__MSK_DP_AUX_CTL_REG CYREG_B0_UDB04_MSK_ACTL +#define scsiTarget_datapath__PER_DP_AUX_CTL_REG CYREG_B0_UDB04_MSK_ACTL + /* SD_Clk_Ctl */ #define SD_Clk_Ctl_Sync_ctrl_reg__0__MASK 0x01u #define SD_Clk_Ctl_Sync_ctrl_reg__0__POS 0 -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG CYREG_B1_UDB07_08_ACTL -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG CYREG_B1_UDB07_08_CTL -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG CYREG_B1_UDB07_08_CTL -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG CYREG_B1_UDB07_08_CTL -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG CYREG_B1_UDB07_08_CTL -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_MASK_REG CYREG_B1_UDB07_08_MSK -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG CYREG_B1_UDB07_08_MSK -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG CYREG_B1_UDB07_08_MSK -#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG CYREG_B1_UDB07_08_MSK -#define SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_AUX_CTL_REG CYREG_B1_UDB07_ACTL -#define SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_REG CYREG_B1_UDB07_CTL -#define SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_ST_REG CYREG_B1_UDB07_ST_CTL -#define SD_Clk_Ctl_Sync_ctrl_reg__COUNT_REG CYREG_B1_UDB07_CTL -#define SD_Clk_Ctl_Sync_ctrl_reg__COUNT_ST_REG CYREG_B1_UDB07_ST_CTL -#define SD_Clk_Ctl_Sync_ctrl_reg__MASK 0x01u -#define SD_Clk_Ctl_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG CYREG_B1_UDB07_MSK_ACTL -#define SD_Clk_Ctl_Sync_ctrl_reg__PERIOD_REG CYREG_B1_UDB07_MSK -#define SD_Clk_Ctl_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG CYREG_B1_UDB07_MSK_ACTL - -/* PARITY_EN */ -#define PARITY_EN__0__MASK 0x10u -#define PARITY_EN__0__PC CYREG_PRT5_PC4 -#define PARITY_EN__0__PORT 5u -#define PARITY_EN__0__SHIFT 4 -#define PARITY_EN__AG CYREG_PRT5_AG -#define PARITY_EN__AMUX CYREG_PRT5_AMUX -#define PARITY_EN__BIE CYREG_PRT5_BIE -#define PARITY_EN__BIT_MASK CYREG_PRT5_BIT_MASK -#define PARITY_EN__BYP CYREG_PRT5_BYP -#define PARITY_EN__CTL CYREG_PRT5_CTL -#define PARITY_EN__DM0 CYREG_PRT5_DM0 -#define PARITY_EN__DM1 CYREG_PRT5_DM1 -#define PARITY_EN__DM2 CYREG_PRT5_DM2 -#define PARITY_EN__DR CYREG_PRT5_DR -#define PARITY_EN__INP_DIS CYREG_PRT5_INP_DIS -#define PARITY_EN__LCD_COM_SEG CYREG_PRT5_LCD_COM_SEG -#define PARITY_EN__LCD_EN CYREG_PRT5_LCD_EN -#define PARITY_EN__MASK 0x10u -#define PARITY_EN__PORT 5u -#define PARITY_EN__PRT CYREG_PRT5_PRT -#define PARITY_EN__PRTDSI__CAPS_SEL CYREG_PRT5_CAPS_SEL -#define PARITY_EN__PRTDSI__DBL_SYNC_IN CYREG_PRT5_DBL_SYNC_IN -#define PARITY_EN__PRTDSI__OE_SEL0 CYREG_PRT5_OE_SEL0 -#define PARITY_EN__PRTDSI__OE_SEL1 CYREG_PRT5_OE_SEL1 -#define PARITY_EN__PRTDSI__OUT_SEL0 CYREG_PRT5_OUT_SEL0 -#define PARITY_EN__PRTDSI__OUT_SEL1 CYREG_PRT5_OUT_SEL1 -#define PARITY_EN__PRTDSI__SYNC_OUT CYREG_PRT5_SYNC_OUT -#define PARITY_EN__PS CYREG_PRT5_PS -#define PARITY_EN__SHIFT 4 -#define PARITY_EN__SLW CYREG_PRT5_SLW +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG CYREG_B0_UDB11_12_ACTL +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG CYREG_B0_UDB11_12_CTL +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG CYREG_B0_UDB11_12_CTL +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG CYREG_B0_UDB11_12_CTL +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG CYREG_B0_UDB11_12_CTL +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_MASK_REG CYREG_B0_UDB11_12_MSK +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG CYREG_B0_UDB11_12_MSK +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG CYREG_B0_UDB11_12_MSK +#define SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG CYREG_B0_UDB11_12_MSK +#define SD_Clk_Ctl_Sync_ctrl_reg__1__MASK 0x02u +#define SD_Clk_Ctl_Sync_ctrl_reg__1__POS 1 +#define SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_AUX_CTL_REG CYREG_B0_UDB11_ACTL +#define SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_REG CYREG_B0_UDB11_CTL +#define SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_ST_REG CYREG_B0_UDB11_ST_CTL +#define SD_Clk_Ctl_Sync_ctrl_reg__COUNT_REG CYREG_B0_UDB11_CTL +#define SD_Clk_Ctl_Sync_ctrl_reg__COUNT_ST_REG CYREG_B0_UDB11_ST_CTL +#define SD_Clk_Ctl_Sync_ctrl_reg__MASK 0x03u +#define SD_Clk_Ctl_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG CYREG_B0_UDB11_MSK_ACTL +#define SD_Clk_Ctl_Sync_ctrl_reg__PERIOD_REG CYREG_B0_UDB11_MSK +#define SD_Clk_Ctl_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG CYREG_B0_UDB11_MSK_ACTL /* SCSI_ATN */ #define SCSI_ATN__0__MASK 0x20u @@ -372,6 +427,7 @@ #define SCSI_ATN__DM2 CYREG_PRT12_DM2 #define SCSI_ATN__DR CYREG_PRT12_DR #define SCSI_ATN__INP_DIS CYREG_PRT12_INP_DIS +#define SCSI_ATN__INTSTAT CYREG_PICU12_INTSTAT #define SCSI_ATN__INT__MASK 0x20u #define SCSI_ATN__INT__PC CYREG_PRT12_PC5 #define SCSI_ATN__INT__PORT 12u @@ -392,6 +448,7 @@ #define SCSI_ATN__SIO_HYST_EN CYREG_PRT12_SIO_HYST_EN #define SCSI_ATN__SIO_REG_HIFREQ CYREG_PRT12_SIO_REG_HIFREQ #define SCSI_ATN__SLW CYREG_PRT12_SLW +#define SCSI_ATN__SNAP CYREG_PICU12_SNAP /* SCSI_Out */ #define SCSI_Out__0__AG CYREG_PRT4_AG @@ -772,60 +829,60 @@ #define SCSI_Out__CD__PS CYREG_PRT6_PS #define SCSI_Out__CD__SHIFT 1 #define SCSI_Out__CD__SLW CYREG_PRT6_SLW -#define SCSI_Out__DBP__AG CYREG_PRT4_AG -#define SCSI_Out__DBP__AMUX CYREG_PRT4_AMUX -#define SCSI_Out__DBP__BIE CYREG_PRT4_BIE -#define SCSI_Out__DBP__BIT_MASK CYREG_PRT4_BIT_MASK -#define SCSI_Out__DBP__BYP CYREG_PRT4_BYP -#define SCSI_Out__DBP__CTL CYREG_PRT4_CTL -#define SCSI_Out__DBP__DM0 CYREG_PRT4_DM0 -#define SCSI_Out__DBP__DM1 CYREG_PRT4_DM1 -#define SCSI_Out__DBP__DM2 CYREG_PRT4_DM2 -#define SCSI_Out__DBP__DR CYREG_PRT4_DR -#define SCSI_Out__DBP__INP_DIS CYREG_PRT4_INP_DIS -#define SCSI_Out__DBP__LCD_COM_SEG CYREG_PRT4_LCD_COM_SEG -#define SCSI_Out__DBP__LCD_EN CYREG_PRT4_LCD_EN -#define SCSI_Out__DBP__MASK 0x04u -#define SCSI_Out__DBP__PC CYREG_PRT4_PC2 -#define SCSI_Out__DBP__PORT 4u -#define SCSI_Out__DBP__PRT CYREG_PRT4_PRT -#define SCSI_Out__DBP__PRTDSI__CAPS_SEL CYREG_PRT4_CAPS_SEL -#define SCSI_Out__DBP__PRTDSI__DBL_SYNC_IN CYREG_PRT4_DBL_SYNC_IN -#define SCSI_Out__DBP__PRTDSI__OE_SEL0 CYREG_PRT4_OE_SEL0 -#define SCSI_Out__DBP__PRTDSI__OE_SEL1 CYREG_PRT4_OE_SEL1 -#define SCSI_Out__DBP__PRTDSI__OUT_SEL0 CYREG_PRT4_OUT_SEL0 -#define SCSI_Out__DBP__PRTDSI__OUT_SEL1 CYREG_PRT4_OUT_SEL1 -#define SCSI_Out__DBP__PRTDSI__SYNC_OUT CYREG_PRT4_SYNC_OUT -#define SCSI_Out__DBP__PS CYREG_PRT4_PS -#define SCSI_Out__DBP__SHIFT 2 -#define SCSI_Out__DBP__SLW CYREG_PRT4_SLW -#define SCSI_Out__IO__AG CYREG_PRT6_AG -#define SCSI_Out__IO__AMUX CYREG_PRT6_AMUX -#define SCSI_Out__IO__BIE CYREG_PRT6_BIE -#define SCSI_Out__IO__BIT_MASK CYREG_PRT6_BIT_MASK -#define SCSI_Out__IO__BYP CYREG_PRT6_BYP -#define SCSI_Out__IO__CTL CYREG_PRT6_CTL -#define SCSI_Out__IO__DM0 CYREG_PRT6_DM0 -#define SCSI_Out__IO__DM1 CYREG_PRT6_DM1 -#define SCSI_Out__IO__DM2 CYREG_PRT6_DM2 -#define SCSI_Out__IO__DR CYREG_PRT6_DR -#define SCSI_Out__IO__INP_DIS CYREG_PRT6_INP_DIS -#define SCSI_Out__IO__LCD_COM_SEG CYREG_PRT6_LCD_COM_SEG -#define SCSI_Out__IO__LCD_EN CYREG_PRT6_LCD_EN -#define SCSI_Out__IO__MASK 0x08u -#define SCSI_Out__IO__PC CYREG_PRT6_PC3 -#define SCSI_Out__IO__PORT 6u -#define SCSI_Out__IO__PRT CYREG_PRT6_PRT -#define SCSI_Out__IO__PRTDSI__CAPS_SEL CYREG_PRT6_CAPS_SEL -#define SCSI_Out__IO__PRTDSI__DBL_SYNC_IN CYREG_PRT6_DBL_SYNC_IN -#define SCSI_Out__IO__PRTDSI__OE_SEL0 CYREG_PRT6_OE_SEL0 -#define SCSI_Out__IO__PRTDSI__OE_SEL1 CYREG_PRT6_OE_SEL1 -#define SCSI_Out__IO__PRTDSI__OUT_SEL0 CYREG_PRT6_OUT_SEL0 -#define SCSI_Out__IO__PRTDSI__OUT_SEL1 CYREG_PRT6_OUT_SEL1 -#define SCSI_Out__IO__PRTDSI__SYNC_OUT CYREG_PRT6_SYNC_OUT -#define SCSI_Out__IO__PS CYREG_PRT6_PS -#define SCSI_Out__IO__SHIFT 3 -#define SCSI_Out__IO__SLW CYREG_PRT6_SLW +#define SCSI_Out__DBP_raw__AG CYREG_PRT4_AG +#define SCSI_Out__DBP_raw__AMUX CYREG_PRT4_AMUX +#define SCSI_Out__DBP_raw__BIE CYREG_PRT4_BIE +#define SCSI_Out__DBP_raw__BIT_MASK CYREG_PRT4_BIT_MASK +#define SCSI_Out__DBP_raw__BYP CYREG_PRT4_BYP +#define SCSI_Out__DBP_raw__CTL CYREG_PRT4_CTL +#define SCSI_Out__DBP_raw__DM0 CYREG_PRT4_DM0 +#define SCSI_Out__DBP_raw__DM1 CYREG_PRT4_DM1 +#define SCSI_Out__DBP_raw__DM2 CYREG_PRT4_DM2 +#define SCSI_Out__DBP_raw__DR CYREG_PRT4_DR +#define SCSI_Out__DBP_raw__INP_DIS CYREG_PRT4_INP_DIS +#define SCSI_Out__DBP_raw__LCD_COM_SEG CYREG_PRT4_LCD_COM_SEG +#define SCSI_Out__DBP_raw__LCD_EN CYREG_PRT4_LCD_EN +#define SCSI_Out__DBP_raw__MASK 0x04u +#define SCSI_Out__DBP_raw__PC CYREG_PRT4_PC2 +#define SCSI_Out__DBP_raw__PORT 4u +#define SCSI_Out__DBP_raw__PRT CYREG_PRT4_PRT +#define SCSI_Out__DBP_raw__PRTDSI__CAPS_SEL CYREG_PRT4_CAPS_SEL +#define SCSI_Out__DBP_raw__PRTDSI__DBL_SYNC_IN CYREG_PRT4_DBL_SYNC_IN +#define SCSI_Out__DBP_raw__PRTDSI__OE_SEL0 CYREG_PRT4_OE_SEL0 +#define SCSI_Out__DBP_raw__PRTDSI__OE_SEL1 CYREG_PRT4_OE_SEL1 +#define SCSI_Out__DBP_raw__PRTDSI__OUT_SEL0 CYREG_PRT4_OUT_SEL0 +#define SCSI_Out__DBP_raw__PRTDSI__OUT_SEL1 CYREG_PRT4_OUT_SEL1 +#define SCSI_Out__DBP_raw__PRTDSI__SYNC_OUT CYREG_PRT4_SYNC_OUT +#define SCSI_Out__DBP_raw__PS CYREG_PRT4_PS +#define SCSI_Out__DBP_raw__SHIFT 2 +#define SCSI_Out__DBP_raw__SLW CYREG_PRT4_SLW +#define SCSI_Out__IO_raw__AG CYREG_PRT6_AG +#define SCSI_Out__IO_raw__AMUX CYREG_PRT6_AMUX +#define SCSI_Out__IO_raw__BIE CYREG_PRT6_BIE +#define SCSI_Out__IO_raw__BIT_MASK CYREG_PRT6_BIT_MASK +#define SCSI_Out__IO_raw__BYP CYREG_PRT6_BYP +#define SCSI_Out__IO_raw__CTL CYREG_PRT6_CTL +#define SCSI_Out__IO_raw__DM0 CYREG_PRT6_DM0 +#define SCSI_Out__IO_raw__DM1 CYREG_PRT6_DM1 +#define SCSI_Out__IO_raw__DM2 CYREG_PRT6_DM2 +#define SCSI_Out__IO_raw__DR CYREG_PRT6_DR +#define SCSI_Out__IO_raw__INP_DIS CYREG_PRT6_INP_DIS +#define SCSI_Out__IO_raw__LCD_COM_SEG CYREG_PRT6_LCD_COM_SEG +#define SCSI_Out__IO_raw__LCD_EN CYREG_PRT6_LCD_EN +#define SCSI_Out__IO_raw__MASK 0x08u +#define SCSI_Out__IO_raw__PC CYREG_PRT6_PC3 +#define SCSI_Out__IO_raw__PORT 6u +#define SCSI_Out__IO_raw__PRT CYREG_PRT6_PRT +#define SCSI_Out__IO_raw__PRTDSI__CAPS_SEL CYREG_PRT6_CAPS_SEL +#define SCSI_Out__IO_raw__PRTDSI__DBL_SYNC_IN CYREG_PRT6_DBL_SYNC_IN +#define SCSI_Out__IO_raw__PRTDSI__OE_SEL0 CYREG_PRT6_OE_SEL0 +#define SCSI_Out__IO_raw__PRTDSI__OE_SEL1 CYREG_PRT6_OE_SEL1 +#define SCSI_Out__IO_raw__PRTDSI__OUT_SEL0 CYREG_PRT6_OUT_SEL0 +#define SCSI_Out__IO_raw__PRTDSI__OUT_SEL1 CYREG_PRT6_OUT_SEL1 +#define SCSI_Out__IO_raw__PRTDSI__SYNC_OUT CYREG_PRT6_SYNC_OUT +#define SCSI_Out__IO_raw__PS CYREG_PRT6_PS +#define SCSI_Out__IO_raw__SHIFT 3 +#define SCSI_Out__IO_raw__SLW CYREG_PRT6_SLW #define SCSI_Out__MSG__AG CYREG_PRT4_AG #define SCSI_Out__MSG__AMUX CYREG_PRT4_AMUX #define SCSI_Out__MSG__BIE CYREG_PRT4_BIE @@ -973,44 +1030,6 @@ #define SCSI_RST__SLW CYREG_PRT6_SLW #define SCSI_RST__SNAP CYREG_PICU6_SNAP -/* SCSI_ID */ -#define SCSI_ID__0__MASK 0x80u -#define SCSI_ID__0__PC CYREG_PRT5_PC7 -#define SCSI_ID__0__PORT 5u -#define SCSI_ID__0__SHIFT 7 -#define SCSI_ID__1__MASK 0x40u -#define SCSI_ID__1__PC CYREG_PRT5_PC6 -#define SCSI_ID__1__PORT 5u -#define SCSI_ID__1__SHIFT 6 -#define SCSI_ID__2__MASK 0x20u -#define SCSI_ID__2__PC CYREG_PRT5_PC5 -#define SCSI_ID__2__PORT 5u -#define SCSI_ID__2__SHIFT 5 -#define SCSI_ID__AG CYREG_PRT5_AG -#define SCSI_ID__AMUX CYREG_PRT5_AMUX -#define SCSI_ID__BIE CYREG_PRT5_BIE -#define SCSI_ID__BIT_MASK CYREG_PRT5_BIT_MASK -#define SCSI_ID__BYP CYREG_PRT5_BYP -#define SCSI_ID__CTL CYREG_PRT5_CTL -#define SCSI_ID__DM0 CYREG_PRT5_DM0 -#define SCSI_ID__DM1 CYREG_PRT5_DM1 -#define SCSI_ID__DM2 CYREG_PRT5_DM2 -#define SCSI_ID__DR CYREG_PRT5_DR -#define SCSI_ID__INP_DIS CYREG_PRT5_INP_DIS -#define SCSI_ID__LCD_COM_SEG CYREG_PRT5_LCD_COM_SEG -#define SCSI_ID__LCD_EN CYREG_PRT5_LCD_EN -#define SCSI_ID__PORT 5u -#define SCSI_ID__PRT CYREG_PRT5_PRT -#define SCSI_ID__PRTDSI__CAPS_SEL CYREG_PRT5_CAPS_SEL -#define SCSI_ID__PRTDSI__DBL_SYNC_IN CYREG_PRT5_DBL_SYNC_IN -#define SCSI_ID__PRTDSI__OE_SEL0 CYREG_PRT5_OE_SEL0 -#define SCSI_ID__PRTDSI__OE_SEL1 CYREG_PRT5_OE_SEL1 -#define SCSI_ID__PRTDSI__OUT_SEL0 CYREG_PRT5_OUT_SEL0 -#define SCSI_ID__PRTDSI__OUT_SEL1 CYREG_PRT5_OUT_SEL1 -#define SCSI_ID__PRTDSI__SYNC_OUT CYREG_PRT5_SYNC_OUT -#define SCSI_ID__PS CYREG_PRT5_PS -#define SCSI_ID__SLW CYREG_PRT5_SLW - /* SCSI_In */ #define SCSI_In__0__AG CYREG_PRT12_AG #define SCSI_In__0__BIE CYREG_PRT12_BIE @@ -1805,7 +1824,7 @@ #define CYDEV_ECC_ENABLE 0 #define CYDEV_HEAP_SIZE 0x1000 #define CYDEV_INSTRUCT_CACHE_ENABLED 1 -#define CYDEV_INTR_RISING 0x00000001u +#define CYDEV_INTR_RISING 0x00000000u #define CYDEV_PROJ_TYPE 0 #define CYDEV_PROJ_TYPE_BOOTLOADER 1 #define CYDEV_PROJ_TYPE_LOADABLE 2 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c index 32faaac..bbee0d7 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitter_cfg.c @@ -121,7 +121,7 @@ static void CyClockStartupError(uint8 errorCode) } #endif -#define CY_CFG_BASE_ADDR_COUNT 22u +#define CY_CFG_BASE_ADDR_COUNT 32u CYPACKED typedef struct { uint8 offset; @@ -129,34 +129,34 @@ CYPACKED typedef struct } CYPACKED_ATTR cy_cfg_addrvalue_t; #define cy_cfg_addr_table ((const uint32 CYFAR *)0x48000000u) -#define cy_cfg_data_table ((const cy_cfg_addrvalue_t CYFAR *)0x48000058u) +#define cy_cfg_data_table ((const cy_cfg_addrvalue_t CYFAR *)0x48000080u) -/* UDB_1_2_1_CONFIG Address: CYDEV_UCFG_B0_P3_U0_BASE Size (bytes): 128 */ -#define BS_UDB_1_2_1_CONFIG_VAL ((const uint8 CYFAR *)0x48000318u) +/* UDB_1_2_0_CONFIG Address: CYDEV_UCFG_B0_P3_U1_BASE Size (bytes): 128 */ +#define BS_UDB_1_2_0_CONFIG_VAL ((const uint8 CYFAR *)0x480007A8u) /* IOPINS0_0 Address: CYREG_PRT0_DM0 Size (bytes): 8 */ -#define BS_IOPINS0_0_VAL ((const uint8 CYFAR *)0x48000398u) +#define BS_IOPINS0_0_VAL ((const uint8 CYFAR *)0x48000828u) /* IOPINS0_7 Address: CYREG_PRT12_DR Size (bytes): 10 */ -#define BS_IOPINS0_7_VAL ((const uint8 CYFAR *)0x480003A0u) +#define BS_IOPINS0_7_VAL ((const uint8 CYFAR *)0x48000830u) /* IOPINS1_7 Address: CYREG_PRT12_DR + 0x0000000Bu Size (bytes): 5 */ -#define BS_IOPINS1_7_VAL ((const uint8 CYFAR *)0x480003ACu) +#define BS_IOPINS1_7_VAL ((const uint8 CYFAR *)0x4800083Cu) /* IOPINS0_2 Address: CYREG_PRT2_DM0 Size (bytes): 8 */ -#define BS_IOPINS0_2_VAL ((const uint8 CYFAR *)0x480003B4u) +#define BS_IOPINS0_2_VAL ((const uint8 CYFAR *)0x48000844u) /* IOPINS0_3 Address: CYREG_PRT3_DR Size (bytes): 10 */ -#define BS_IOPINS0_3_VAL ((const uint8 CYFAR *)0x480003BCu) +#define BS_IOPINS0_3_VAL ((const uint8 CYFAR *)0x4800084Cu) /* IOPINS0_4 Address: CYREG_PRT4_DM0 Size (bytes): 8 */ -#define BS_IOPINS0_4_VAL ((const uint8 CYFAR *)0x480003C8u) +#define BS_IOPINS0_4_VAL ((const uint8 CYFAR *)0x48000858u) -/* IOPINS0_5 Address: CYREG_PRT5_DR Size (bytes): 10 */ -#define BS_IOPINS0_5_VAL ((const uint8 CYFAR *)0x480003D0u) +/* IOPINS0_5 Address: CYREG_PRT5_DM0 Size (bytes): 8 */ +#define BS_IOPINS0_5_VAL ((const uint8 CYFAR *)0x48000860u) /* IOPINS0_6 Address: CYREG_PRT6_DM0 Size (bytes): 8 */ -#define BS_IOPINS0_6_VAL ((const uint8 CYFAR *)0x480003DCu) +#define BS_IOPINS0_6_VAL ((const uint8 CYFAR *)0x48000868u) /******************************************************************************* @@ -369,8 +369,8 @@ void cyfitter_cfg(void) /* address, size */ {(void CYFAR *)(CYREG_PRT1_DR), 16u}, {(void CYFAR *)(CYREG_PRT15_DR), 16u}, - {(void CYFAR *)(CYDEV_UCFG_B0_P0_U0_BASE), 1536u}, - {(void CYFAR *)(CYDEV_UCFG_B0_P3_U1_BASE), 2432u}, + {(void CYFAR *)(CYDEV_UCFG_B0_P0_U0_BASE), 1664u}, + {(void CYFAR *)(CYDEV_UCFG_B0_P3_ROUTE_BASE), 2304u}, {(void CYFAR *)(CYDEV_UCFG_B1_P2_U0_BASE), 2048u}, {(void CYFAR *)(CYDEV_UCFG_DSI0_BASE), 2560u}, {(void CYFAR *)(CYDEV_UCFG_DSI12_BASE), 512u}, @@ -379,7 +379,7 @@ void cyfitter_cfg(void) static const cfg_memcpy_t CYCODE cfg_memcpy_list [] = { /* dest, src, size */ - {(void CYFAR *)(CYDEV_UCFG_B0_P3_U0_BASE), BS_UDB_1_2_1_CONFIG_VAL, 128u}, + {(void CYFAR *)(CYDEV_UCFG_B0_P3_U1_BASE), BS_UDB_1_2_0_CONFIG_VAL, 128u}, }; uint8 CYDATA i; @@ -419,7 +419,7 @@ void cyfitter_cfg(void) CYCONFIGCPY((void CYFAR *)(CYREG_PRT2_DM0), (const void CYFAR *)(BS_IOPINS0_2_VAL), 8u); CYCONFIGCPY((void CYFAR *)(CYREG_PRT3_DR), (const void CYFAR *)(BS_IOPINS0_3_VAL), 10u); CYCONFIGCPY((void CYFAR *)(CYREG_PRT4_DM0), (const void CYFAR *)(BS_IOPINS0_4_VAL), 8u); - CYCONFIGCPY((void CYFAR *)(CYREG_PRT5_DR), (const void CYFAR *)(BS_IOPINS0_5_VAL), 10u); + CYCONFIGCPY((void CYFAR *)(CYREG_PRT5_DM0), (const void CYFAR *)(BS_IOPINS0_5_VAL), 8u); CYCONFIGCPY((void CYFAR *)(CYREG_PRT6_DM0), (const void CYFAR *)(BS_IOPINS0_6_VAL), 8u); /* Switch Boost to the precision bandgap reference from its internal reference */ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc index 34d8afa..e0aa8c4 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfittergnu.inc @@ -6,10 +6,10 @@ /* SCSI_ATN_ISR */ .set SCSI_ATN_ISR__INTC_CLR_EN_REG, CYREG_NVIC_CLRENA0 .set SCSI_ATN_ISR__INTC_CLR_PD_REG, CYREG_NVIC_CLRPEND0 -.set SCSI_ATN_ISR__INTC_MASK, 0x01 -.set SCSI_ATN_ISR__INTC_NUMBER, 0 +.set SCSI_ATN_ISR__INTC_MASK, 0x800 +.set SCSI_ATN_ISR__INTC_NUMBER, 11 .set SCSI_ATN_ISR__INTC_PRIOR_NUM, 7 -.set SCSI_ATN_ISR__INTC_PRIOR_REG, CYREG_NVIC_PRI_0 +.set SCSI_ATN_ISR__INTC_PRIOR_REG, CYREG_NVIC_PRI_11 .set SCSI_ATN_ISR__INTC_SET_EN_REG, CYREG_NVIC_SETENA0 .set SCSI_ATN_ISR__INTC_SET_PD_REG, CYREG_NVIC_SETPEND0 @@ -116,34 +116,34 @@ .set SCSI_RST_ISR__INTC_SET_PD_REG, CYREG_NVIC_SETPEND0 /* SDCard_BSPIM */ -.set SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_AUX_CTL_REG, CYREG_B0_UDB06_07_ACTL -.set SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_REG, CYREG_B0_UDB06_07_ST -.set SDCard_BSPIM_BitCounter_ST__MASK_REG, CYREG_B0_UDB06_MSK -.set SDCard_BSPIM_BitCounter_ST__MASK_ST_AUX_CTL_REG, CYREG_B0_UDB06_MSK_ACTL -.set SDCard_BSPIM_BitCounter_ST__PER_ST_AUX_CTL_REG, CYREG_B0_UDB06_MSK_ACTL -.set SDCard_BSPIM_BitCounter_ST__STATUS_AUX_CTL_REG, CYREG_B0_UDB06_ACTL -.set SDCard_BSPIM_BitCounter_ST__STATUS_CNT_REG, CYREG_B0_UDB06_ST_CTL -.set SDCard_BSPIM_BitCounter_ST__STATUS_CONTROL_REG, CYREG_B0_UDB06_ST_CTL -.set SDCard_BSPIM_BitCounter_ST__STATUS_REG, CYREG_B0_UDB06_ST -.set SDCard_BSPIM_BitCounter__16BIT_CONTROL_AUX_CTL_REG, CYREG_B0_UDB06_07_ACTL -.set SDCard_BSPIM_BitCounter__16BIT_CONTROL_CONTROL_REG, CYREG_B0_UDB06_07_CTL -.set SDCard_BSPIM_BitCounter__16BIT_CONTROL_COUNT_REG, CYREG_B0_UDB06_07_CTL -.set SDCard_BSPIM_BitCounter__16BIT_COUNT_CONTROL_REG, CYREG_B0_UDB06_07_CTL -.set SDCard_BSPIM_BitCounter__16BIT_COUNT_COUNT_REG, CYREG_B0_UDB06_07_CTL -.set SDCard_BSPIM_BitCounter__16BIT_MASK_MASK_REG, CYREG_B0_UDB06_07_MSK -.set SDCard_BSPIM_BitCounter__16BIT_MASK_PERIOD_REG, CYREG_B0_UDB06_07_MSK -.set SDCard_BSPIM_BitCounter__16BIT_PERIOD_MASK_REG, CYREG_B0_UDB06_07_MSK -.set SDCard_BSPIM_BitCounter__16BIT_PERIOD_PERIOD_REG, CYREG_B0_UDB06_07_MSK -.set SDCard_BSPIM_BitCounter__CONTROL_AUX_CTL_REG, CYREG_B0_UDB06_ACTL -.set SDCard_BSPIM_BitCounter__CONTROL_REG, CYREG_B0_UDB06_CTL -.set SDCard_BSPIM_BitCounter__CONTROL_ST_REG, CYREG_B0_UDB06_ST_CTL -.set SDCard_BSPIM_BitCounter__COUNT_REG, CYREG_B0_UDB06_CTL -.set SDCard_BSPIM_BitCounter__COUNT_ST_REG, CYREG_B0_UDB06_ST_CTL -.set SDCard_BSPIM_BitCounter__MASK_CTL_AUX_CTL_REG, CYREG_B0_UDB06_MSK_ACTL -.set SDCard_BSPIM_BitCounter__PERIOD_REG, CYREG_B0_UDB06_MSK -.set SDCard_BSPIM_BitCounter__PER_CTL_AUX_CTL_REG, CYREG_B0_UDB06_MSK_ACTL -.set SDCard_BSPIM_RxStsReg__16BIT_STATUS_AUX_CTL_REG, CYREG_B1_UDB06_07_ACTL -.set SDCard_BSPIM_RxStsReg__16BIT_STATUS_REG, CYREG_B1_UDB06_07_ST +.set SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_AUX_CTL_REG, CYREG_B0_UDB02_03_ACTL +.set SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_REG, CYREG_B0_UDB02_03_ST +.set SDCard_BSPIM_BitCounter_ST__MASK_REG, CYREG_B0_UDB02_MSK +.set SDCard_BSPIM_BitCounter_ST__MASK_ST_AUX_CTL_REG, CYREG_B0_UDB02_MSK_ACTL +.set SDCard_BSPIM_BitCounter_ST__PER_ST_AUX_CTL_REG, CYREG_B0_UDB02_MSK_ACTL +.set SDCard_BSPIM_BitCounter_ST__STATUS_AUX_CTL_REG, CYREG_B0_UDB02_ACTL +.set SDCard_BSPIM_BitCounter_ST__STATUS_CNT_REG, CYREG_B0_UDB02_ST_CTL +.set SDCard_BSPIM_BitCounter_ST__STATUS_CONTROL_REG, CYREG_B0_UDB02_ST_CTL +.set SDCard_BSPIM_BitCounter_ST__STATUS_REG, CYREG_B0_UDB02_ST +.set SDCard_BSPIM_BitCounter__16BIT_CONTROL_AUX_CTL_REG, CYREG_B0_UDB02_03_ACTL +.set SDCard_BSPIM_BitCounter__16BIT_CONTROL_CONTROL_REG, CYREG_B0_UDB02_03_CTL +.set SDCard_BSPIM_BitCounter__16BIT_CONTROL_COUNT_REG, CYREG_B0_UDB02_03_CTL +.set SDCard_BSPIM_BitCounter__16BIT_COUNT_CONTROL_REG, CYREG_B0_UDB02_03_CTL +.set SDCard_BSPIM_BitCounter__16BIT_COUNT_COUNT_REG, CYREG_B0_UDB02_03_CTL +.set SDCard_BSPIM_BitCounter__16BIT_MASK_MASK_REG, CYREG_B0_UDB02_03_MSK +.set SDCard_BSPIM_BitCounter__16BIT_MASK_PERIOD_REG, CYREG_B0_UDB02_03_MSK +.set SDCard_BSPIM_BitCounter__16BIT_PERIOD_MASK_REG, CYREG_B0_UDB02_03_MSK +.set SDCard_BSPIM_BitCounter__16BIT_PERIOD_PERIOD_REG, CYREG_B0_UDB02_03_MSK +.set SDCard_BSPIM_BitCounter__CONTROL_AUX_CTL_REG, CYREG_B0_UDB02_ACTL +.set SDCard_BSPIM_BitCounter__CONTROL_REG, CYREG_B0_UDB02_CTL +.set SDCard_BSPIM_BitCounter__CONTROL_ST_REG, CYREG_B0_UDB02_ST_CTL +.set SDCard_BSPIM_BitCounter__COUNT_REG, CYREG_B0_UDB02_CTL +.set SDCard_BSPIM_BitCounter__COUNT_ST_REG, CYREG_B0_UDB02_ST_CTL +.set SDCard_BSPIM_BitCounter__MASK_CTL_AUX_CTL_REG, CYREG_B0_UDB02_MSK_ACTL +.set SDCard_BSPIM_BitCounter__PERIOD_REG, CYREG_B0_UDB02_MSK +.set SDCard_BSPIM_BitCounter__PER_CTL_AUX_CTL_REG, CYREG_B0_UDB02_MSK_ACTL +.set SDCard_BSPIM_RxStsReg__16BIT_STATUS_AUX_CTL_REG, CYREG_B0_UDB03_04_ACTL +.set SDCard_BSPIM_RxStsReg__16BIT_STATUS_REG, CYREG_B0_UDB03_04_ST .set SDCard_BSPIM_RxStsReg__4__MASK, 0x10 .set SDCard_BSPIM_RxStsReg__4__POS, 4 .set SDCard_BSPIM_RxStsReg__5__MASK, 0x20 @@ -151,13 +151,13 @@ .set SDCard_BSPIM_RxStsReg__6__MASK, 0x40 .set SDCard_BSPIM_RxStsReg__6__POS, 6 .set SDCard_BSPIM_RxStsReg__MASK, 0x70 -.set SDCard_BSPIM_RxStsReg__MASK_REG, CYREG_B1_UDB06_MSK -.set SDCard_BSPIM_RxStsReg__STATUS_AUX_CTL_REG, CYREG_B1_UDB06_ACTL -.set SDCard_BSPIM_RxStsReg__STATUS_REG, CYREG_B1_UDB06_ST +.set SDCard_BSPIM_RxStsReg__MASK_REG, CYREG_B0_UDB03_MSK +.set SDCard_BSPIM_RxStsReg__STATUS_AUX_CTL_REG, CYREG_B0_UDB03_ACTL +.set SDCard_BSPIM_RxStsReg__STATUS_REG, CYREG_B0_UDB03_ST .set SDCard_BSPIM_TxStsReg__0__MASK, 0x01 .set SDCard_BSPIM_TxStsReg__0__POS, 0 -.set SDCard_BSPIM_TxStsReg__16BIT_STATUS_AUX_CTL_REG, CYREG_B0_UDB05_06_ACTL -.set SDCard_BSPIM_TxStsReg__16BIT_STATUS_REG, CYREG_B0_UDB05_06_ST +.set SDCard_BSPIM_TxStsReg__16BIT_STATUS_AUX_CTL_REG, CYREG_B1_UDB07_08_ACTL +.set SDCard_BSPIM_TxStsReg__16BIT_STATUS_REG, CYREG_B1_UDB07_08_ST .set SDCard_BSPIM_TxStsReg__1__MASK, 0x02 .set SDCard_BSPIM_TxStsReg__1__POS, 1 .set SDCard_BSPIM_TxStsReg__2__MASK, 0x04 @@ -167,28 +167,48 @@ .set SDCard_BSPIM_TxStsReg__4__MASK, 0x10 .set SDCard_BSPIM_TxStsReg__4__POS, 4 .set SDCard_BSPIM_TxStsReg__MASK, 0x1F -.set SDCard_BSPIM_TxStsReg__MASK_REG, CYREG_B0_UDB05_MSK -.set SDCard_BSPIM_TxStsReg__STATUS_AUX_CTL_REG, CYREG_B0_UDB05_ACTL -.set SDCard_BSPIM_TxStsReg__STATUS_REG, CYREG_B0_UDB05_ST -.set SDCard_BSPIM_sR8_Dp_u0__16BIT_A0_REG, CYREG_B0_UDB06_07_A0 -.set SDCard_BSPIM_sR8_Dp_u0__16BIT_A1_REG, CYREG_B0_UDB06_07_A1 -.set SDCard_BSPIM_sR8_Dp_u0__16BIT_D0_REG, CYREG_B0_UDB06_07_D0 -.set SDCard_BSPIM_sR8_Dp_u0__16BIT_D1_REG, CYREG_B0_UDB06_07_D1 -.set SDCard_BSPIM_sR8_Dp_u0__16BIT_DP_AUX_CTL_REG, CYREG_B0_UDB06_07_ACTL -.set SDCard_BSPIM_sR8_Dp_u0__16BIT_F0_REG, CYREG_B0_UDB06_07_F0 -.set SDCard_BSPIM_sR8_Dp_u0__16BIT_F1_REG, CYREG_B0_UDB06_07_F1 -.set SDCard_BSPIM_sR8_Dp_u0__A0_A1_REG, CYREG_B0_UDB06_A0_A1 -.set SDCard_BSPIM_sR8_Dp_u0__A0_REG, CYREG_B0_UDB06_A0 -.set SDCard_BSPIM_sR8_Dp_u0__A1_REG, CYREG_B0_UDB06_A1 -.set SDCard_BSPIM_sR8_Dp_u0__D0_D1_REG, CYREG_B0_UDB06_D0_D1 -.set SDCard_BSPIM_sR8_Dp_u0__D0_REG, CYREG_B0_UDB06_D0 -.set SDCard_BSPIM_sR8_Dp_u0__D1_REG, CYREG_B0_UDB06_D1 -.set SDCard_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG, CYREG_B0_UDB06_ACTL -.set SDCard_BSPIM_sR8_Dp_u0__F0_F1_REG, CYREG_B0_UDB06_F0_F1 -.set SDCard_BSPIM_sR8_Dp_u0__F0_REG, CYREG_B0_UDB06_F0 -.set SDCard_BSPIM_sR8_Dp_u0__F1_REG, CYREG_B0_UDB06_F1 -.set SDCard_BSPIM_sR8_Dp_u0__MSK_DP_AUX_CTL_REG, CYREG_B0_UDB06_MSK_ACTL -.set SDCard_BSPIM_sR8_Dp_u0__PER_DP_AUX_CTL_REG, CYREG_B0_UDB06_MSK_ACTL +.set SDCard_BSPIM_TxStsReg__MASK_REG, CYREG_B1_UDB07_MSK +.set SDCard_BSPIM_TxStsReg__STATUS_AUX_CTL_REG, CYREG_B1_UDB07_ACTL +.set SDCard_BSPIM_TxStsReg__STATUS_REG, CYREG_B1_UDB07_ST +.set SDCard_BSPIM_sR8_Dp_u0__16BIT_A0_REG, CYREG_B0_UDB07_08_A0 +.set SDCard_BSPIM_sR8_Dp_u0__16BIT_A1_REG, CYREG_B0_UDB07_08_A1 +.set SDCard_BSPIM_sR8_Dp_u0__16BIT_D0_REG, CYREG_B0_UDB07_08_D0 +.set SDCard_BSPIM_sR8_Dp_u0__16BIT_D1_REG, CYREG_B0_UDB07_08_D1 +.set SDCard_BSPIM_sR8_Dp_u0__16BIT_DP_AUX_CTL_REG, CYREG_B0_UDB07_08_ACTL +.set SDCard_BSPIM_sR8_Dp_u0__16BIT_F0_REG, CYREG_B0_UDB07_08_F0 +.set SDCard_BSPIM_sR8_Dp_u0__16BIT_F1_REG, CYREG_B0_UDB07_08_F1 +.set SDCard_BSPIM_sR8_Dp_u0__A0_A1_REG, CYREG_B0_UDB07_A0_A1 +.set SDCard_BSPIM_sR8_Dp_u0__A0_REG, CYREG_B0_UDB07_A0 +.set SDCard_BSPIM_sR8_Dp_u0__A1_REG, CYREG_B0_UDB07_A1 +.set SDCard_BSPIM_sR8_Dp_u0__D0_D1_REG, CYREG_B0_UDB07_D0_D1 +.set SDCard_BSPIM_sR8_Dp_u0__D0_REG, CYREG_B0_UDB07_D0 +.set SDCard_BSPIM_sR8_Dp_u0__D1_REG, CYREG_B0_UDB07_D1 +.set SDCard_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG, CYREG_B0_UDB07_ACTL +.set SDCard_BSPIM_sR8_Dp_u0__F0_F1_REG, CYREG_B0_UDB07_F0_F1 +.set SDCard_BSPIM_sR8_Dp_u0__F0_REG, CYREG_B0_UDB07_F0 +.set SDCard_BSPIM_sR8_Dp_u0__F1_REG, CYREG_B0_UDB07_F1 + +/* SCSI_CTL_IO */ +.set SCSI_CTL_IO_Sync_ctrl_reg__0__MASK, 0x01 +.set SCSI_CTL_IO_Sync_ctrl_reg__0__POS, 0 +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG, CYREG_B0_UDB00_01_ACTL +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG, CYREG_B0_UDB00_01_CTL +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG, CYREG_B0_UDB00_01_CTL +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG, CYREG_B0_UDB00_01_CTL +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG, CYREG_B0_UDB00_01_CTL +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_MASK_MASK_REG, CYREG_B0_UDB00_01_MSK +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG, CYREG_B0_UDB00_01_MSK +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG, CYREG_B0_UDB00_01_MSK +.set SCSI_CTL_IO_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG, CYREG_B0_UDB00_01_MSK +.set SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_AUX_CTL_REG, CYREG_B0_UDB00_ACTL +.set SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_REG, CYREG_B0_UDB00_CTL +.set SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_ST_REG, CYREG_B0_UDB00_ST_CTL +.set SCSI_CTL_IO_Sync_ctrl_reg__COUNT_REG, CYREG_B0_UDB00_CTL +.set SCSI_CTL_IO_Sync_ctrl_reg__COUNT_ST_REG, CYREG_B0_UDB00_ST_CTL +.set SCSI_CTL_IO_Sync_ctrl_reg__MASK, 0x01 +.set SCSI_CTL_IO_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG, CYREG_B0_UDB00_MSK_ACTL +.set SCSI_CTL_IO_Sync_ctrl_reg__PERIOD_REG, CYREG_B0_UDB00_MSK +.set SCSI_CTL_IO_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG, CYREG_B0_UDB00_MSK_ACTL /* SCSI_In_DBx */ .set SCSI_In_DBx__0__MASK, 0x01 @@ -304,59 +324,94 @@ .set SD_Init_Clk__PM_STBY_CFG, CYREG_PM_STBY_CFG2 .set SD_Init_Clk__PM_STBY_MSK, 0x02 +/* scsiTarget */ +.set scsiTarget_StatusReg__0__MASK, 0x01 +.set scsiTarget_StatusReg__0__POS, 0 +.set scsiTarget_StatusReg__16BIT_STATUS_AUX_CTL_REG, CYREG_B0_UDB11_12_ACTL +.set scsiTarget_StatusReg__16BIT_STATUS_REG, CYREG_B0_UDB11_12_ST +.set scsiTarget_StatusReg__1__MASK, 0x02 +.set scsiTarget_StatusReg__1__POS, 1 +.set scsiTarget_StatusReg__2__MASK, 0x04 +.set scsiTarget_StatusReg__2__POS, 2 +.set scsiTarget_StatusReg__3__MASK, 0x08 +.set scsiTarget_StatusReg__3__POS, 3 +.set scsiTarget_StatusReg__MASK, 0x0F +.set scsiTarget_StatusReg__MASK_REG, CYREG_B0_UDB11_MSK +.set scsiTarget_StatusReg__MASK_ST_AUX_CTL_REG, CYREG_B0_UDB11_MSK_ACTL +.set scsiTarget_StatusReg__PER_ST_AUX_CTL_REG, CYREG_B0_UDB11_MSK_ACTL +.set scsiTarget_StatusReg__STATUS_AUX_CTL_REG, CYREG_B0_UDB11_ACTL +.set scsiTarget_StatusReg__STATUS_CNT_REG, CYREG_B0_UDB11_ST_CTL +.set scsiTarget_StatusReg__STATUS_CONTROL_REG, CYREG_B0_UDB11_ST_CTL +.set scsiTarget_StatusReg__STATUS_REG, CYREG_B0_UDB11_ST +.set scsiTarget_datapath_PI__16BIT_STATUS_AUX_CTL_REG, CYREG_B0_UDB04_05_ACTL +.set scsiTarget_datapath_PI__16BIT_STATUS_REG, CYREG_B0_UDB04_05_ST +.set scsiTarget_datapath_PI__MASK_REG, CYREG_B0_UDB04_MSK +.set scsiTarget_datapath_PI__MASK_ST_AUX_CTL_REG, CYREG_B0_UDB04_MSK_ACTL +.set scsiTarget_datapath_PI__PER_ST_AUX_CTL_REG, CYREG_B0_UDB04_MSK_ACTL +.set scsiTarget_datapath_PI__STATUS_AUX_CTL_REG, CYREG_B0_UDB04_ACTL +.set scsiTarget_datapath_PI__STATUS_CNT_REG, CYREG_B0_UDB04_ST_CTL +.set scsiTarget_datapath_PI__STATUS_CONTROL_REG, CYREG_B0_UDB04_ST_CTL +.set scsiTarget_datapath_PI__STATUS_REG, CYREG_B0_UDB04_ST +.set scsiTarget_datapath_PO__16BIT_CONTROL_AUX_CTL_REG, CYREG_B0_UDB04_05_ACTL +.set scsiTarget_datapath_PO__16BIT_CONTROL_CONTROL_REG, CYREG_B0_UDB04_05_CTL +.set scsiTarget_datapath_PO__16BIT_CONTROL_COUNT_REG, CYREG_B0_UDB04_05_CTL +.set scsiTarget_datapath_PO__16BIT_COUNT_CONTROL_REG, CYREG_B0_UDB04_05_CTL +.set scsiTarget_datapath_PO__16BIT_COUNT_COUNT_REG, CYREG_B0_UDB04_05_CTL +.set scsiTarget_datapath_PO__16BIT_MASK_MASK_REG, CYREG_B0_UDB04_05_MSK +.set scsiTarget_datapath_PO__16BIT_MASK_PERIOD_REG, CYREG_B0_UDB04_05_MSK +.set scsiTarget_datapath_PO__16BIT_PERIOD_MASK_REG, CYREG_B0_UDB04_05_MSK +.set scsiTarget_datapath_PO__16BIT_PERIOD_PERIOD_REG, CYREG_B0_UDB04_05_MSK +.set scsiTarget_datapath_PO__CONTROL_AUX_CTL_REG, CYREG_B0_UDB04_ACTL +.set scsiTarget_datapath_PO__CONTROL_REG, CYREG_B0_UDB04_CTL +.set scsiTarget_datapath_PO__CONTROL_ST_REG, CYREG_B0_UDB04_ST_CTL +.set scsiTarget_datapath_PO__COUNT_REG, CYREG_B0_UDB04_CTL +.set scsiTarget_datapath_PO__COUNT_ST_REG, CYREG_B0_UDB04_ST_CTL +.set scsiTarget_datapath_PO__MASK_CTL_AUX_CTL_REG, CYREG_B0_UDB04_MSK_ACTL +.set scsiTarget_datapath_PO__PERIOD_REG, CYREG_B0_UDB04_MSK +.set scsiTarget_datapath_PO__PER_CTL_AUX_CTL_REG, CYREG_B0_UDB04_MSK_ACTL +.set scsiTarget_datapath__16BIT_A0_REG, CYREG_B0_UDB04_05_A0 +.set scsiTarget_datapath__16BIT_A1_REG, CYREG_B0_UDB04_05_A1 +.set scsiTarget_datapath__16BIT_D0_REG, CYREG_B0_UDB04_05_D0 +.set scsiTarget_datapath__16BIT_D1_REG, CYREG_B0_UDB04_05_D1 +.set scsiTarget_datapath__16BIT_DP_AUX_CTL_REG, CYREG_B0_UDB04_05_ACTL +.set scsiTarget_datapath__16BIT_F0_REG, CYREG_B0_UDB04_05_F0 +.set scsiTarget_datapath__16BIT_F1_REG, CYREG_B0_UDB04_05_F1 +.set scsiTarget_datapath__A0_A1_REG, CYREG_B0_UDB04_A0_A1 +.set scsiTarget_datapath__A0_REG, CYREG_B0_UDB04_A0 +.set scsiTarget_datapath__A1_REG, CYREG_B0_UDB04_A1 +.set scsiTarget_datapath__D0_D1_REG, CYREG_B0_UDB04_D0_D1 +.set scsiTarget_datapath__D0_REG, CYREG_B0_UDB04_D0 +.set scsiTarget_datapath__D1_REG, CYREG_B0_UDB04_D1 +.set scsiTarget_datapath__DP_AUX_CTL_REG, CYREG_B0_UDB04_ACTL +.set scsiTarget_datapath__F0_F1_REG, CYREG_B0_UDB04_F0_F1 +.set scsiTarget_datapath__F0_REG, CYREG_B0_UDB04_F0 +.set scsiTarget_datapath__F1_REG, CYREG_B0_UDB04_F1 +.set scsiTarget_datapath__MSK_DP_AUX_CTL_REG, CYREG_B0_UDB04_MSK_ACTL +.set scsiTarget_datapath__PER_DP_AUX_CTL_REG, CYREG_B0_UDB04_MSK_ACTL + /* SD_Clk_Ctl */ .set SD_Clk_Ctl_Sync_ctrl_reg__0__MASK, 0x01 .set SD_Clk_Ctl_Sync_ctrl_reg__0__POS, 0 -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG, CYREG_B1_UDB07_08_ACTL -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG, CYREG_B1_UDB07_08_CTL -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG, CYREG_B1_UDB07_08_CTL -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG, CYREG_B1_UDB07_08_CTL -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG, CYREG_B1_UDB07_08_CTL -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_MASK_REG, CYREG_B1_UDB07_08_MSK -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG, CYREG_B1_UDB07_08_MSK -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG, CYREG_B1_UDB07_08_MSK -.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG, CYREG_B1_UDB07_08_MSK -.set SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_AUX_CTL_REG, CYREG_B1_UDB07_ACTL -.set SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_REG, CYREG_B1_UDB07_CTL -.set SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_ST_REG, CYREG_B1_UDB07_ST_CTL -.set SD_Clk_Ctl_Sync_ctrl_reg__COUNT_REG, CYREG_B1_UDB07_CTL -.set SD_Clk_Ctl_Sync_ctrl_reg__COUNT_ST_REG, CYREG_B1_UDB07_ST_CTL -.set SD_Clk_Ctl_Sync_ctrl_reg__MASK, 0x01 -.set SD_Clk_Ctl_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG, CYREG_B1_UDB07_MSK_ACTL -.set SD_Clk_Ctl_Sync_ctrl_reg__PERIOD_REG, CYREG_B1_UDB07_MSK -.set SD_Clk_Ctl_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG, CYREG_B1_UDB07_MSK_ACTL - -/* PARITY_EN */ -.set PARITY_EN__0__MASK, 0x10 -.set PARITY_EN__0__PC, CYREG_PRT5_PC4 -.set PARITY_EN__0__PORT, 5 -.set PARITY_EN__0__SHIFT, 4 -.set PARITY_EN__AG, CYREG_PRT5_AG -.set PARITY_EN__AMUX, CYREG_PRT5_AMUX -.set PARITY_EN__BIE, CYREG_PRT5_BIE -.set PARITY_EN__BIT_MASK, CYREG_PRT5_BIT_MASK -.set PARITY_EN__BYP, CYREG_PRT5_BYP -.set PARITY_EN__CTL, CYREG_PRT5_CTL -.set PARITY_EN__DM0, CYREG_PRT5_DM0 -.set PARITY_EN__DM1, CYREG_PRT5_DM1 -.set PARITY_EN__DM2, CYREG_PRT5_DM2 -.set PARITY_EN__DR, CYREG_PRT5_DR -.set PARITY_EN__INP_DIS, CYREG_PRT5_INP_DIS -.set PARITY_EN__LCD_COM_SEG, CYREG_PRT5_LCD_COM_SEG -.set PARITY_EN__LCD_EN, CYREG_PRT5_LCD_EN -.set PARITY_EN__MASK, 0x10 -.set PARITY_EN__PORT, 5 -.set PARITY_EN__PRT, CYREG_PRT5_PRT -.set PARITY_EN__PRTDSI__CAPS_SEL, CYREG_PRT5_CAPS_SEL -.set PARITY_EN__PRTDSI__DBL_SYNC_IN, CYREG_PRT5_DBL_SYNC_IN -.set PARITY_EN__PRTDSI__OE_SEL0, CYREG_PRT5_OE_SEL0 -.set PARITY_EN__PRTDSI__OE_SEL1, CYREG_PRT5_OE_SEL1 -.set PARITY_EN__PRTDSI__OUT_SEL0, CYREG_PRT5_OUT_SEL0 -.set PARITY_EN__PRTDSI__OUT_SEL1, CYREG_PRT5_OUT_SEL1 -.set PARITY_EN__PRTDSI__SYNC_OUT, CYREG_PRT5_SYNC_OUT -.set PARITY_EN__PS, CYREG_PRT5_PS -.set PARITY_EN__SHIFT, 4 -.set PARITY_EN__SLW, CYREG_PRT5_SLW +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG, CYREG_B0_UDB11_12_ACTL +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG, CYREG_B0_UDB11_12_CTL +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG, CYREG_B0_UDB11_12_CTL +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG, CYREG_B0_UDB11_12_CTL +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG, CYREG_B0_UDB11_12_CTL +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_MASK_REG, CYREG_B0_UDB11_12_MSK +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG, CYREG_B0_UDB11_12_MSK +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG, CYREG_B0_UDB11_12_MSK +.set SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG, CYREG_B0_UDB11_12_MSK +.set SD_Clk_Ctl_Sync_ctrl_reg__1__MASK, 0x02 +.set SD_Clk_Ctl_Sync_ctrl_reg__1__POS, 1 +.set SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_AUX_CTL_REG, CYREG_B0_UDB11_ACTL +.set SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_REG, CYREG_B0_UDB11_CTL +.set SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_ST_REG, CYREG_B0_UDB11_ST_CTL +.set SD_Clk_Ctl_Sync_ctrl_reg__COUNT_REG, CYREG_B0_UDB11_CTL +.set SD_Clk_Ctl_Sync_ctrl_reg__COUNT_ST_REG, CYREG_B0_UDB11_ST_CTL +.set SD_Clk_Ctl_Sync_ctrl_reg__MASK, 0x03 +.set SD_Clk_Ctl_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG, CYREG_B0_UDB11_MSK_ACTL +.set SD_Clk_Ctl_Sync_ctrl_reg__PERIOD_REG, CYREG_B0_UDB11_MSK +.set SD_Clk_Ctl_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG, CYREG_B0_UDB11_MSK_ACTL /* SCSI_ATN */ .set SCSI_ATN__0__MASK, 0x20 @@ -372,6 +427,7 @@ .set SCSI_ATN__DM2, CYREG_PRT12_DM2 .set SCSI_ATN__DR, CYREG_PRT12_DR .set SCSI_ATN__INP_DIS, CYREG_PRT12_INP_DIS +.set SCSI_ATN__INTSTAT, CYREG_PICU12_INTSTAT .set SCSI_ATN__INT__MASK, 0x20 .set SCSI_ATN__INT__PC, CYREG_PRT12_PC5 .set SCSI_ATN__INT__PORT, 12 @@ -392,6 +448,7 @@ .set SCSI_ATN__SIO_HYST_EN, CYREG_PRT12_SIO_HYST_EN .set SCSI_ATN__SIO_REG_HIFREQ, CYREG_PRT12_SIO_REG_HIFREQ .set SCSI_ATN__SLW, CYREG_PRT12_SLW +.set SCSI_ATN__SNAP, CYREG_PICU12_SNAP /* SCSI_Out */ .set SCSI_Out__0__AG, CYREG_PRT4_AG @@ -772,60 +829,60 @@ .set SCSI_Out__CD__PS, CYREG_PRT6_PS .set SCSI_Out__CD__SHIFT, 1 .set SCSI_Out__CD__SLW, CYREG_PRT6_SLW -.set SCSI_Out__DBP__AG, CYREG_PRT4_AG -.set SCSI_Out__DBP__AMUX, CYREG_PRT4_AMUX -.set SCSI_Out__DBP__BIE, CYREG_PRT4_BIE -.set SCSI_Out__DBP__BIT_MASK, CYREG_PRT4_BIT_MASK -.set SCSI_Out__DBP__BYP, CYREG_PRT4_BYP -.set SCSI_Out__DBP__CTL, CYREG_PRT4_CTL -.set SCSI_Out__DBP__DM0, CYREG_PRT4_DM0 -.set SCSI_Out__DBP__DM1, CYREG_PRT4_DM1 -.set SCSI_Out__DBP__DM2, CYREG_PRT4_DM2 -.set SCSI_Out__DBP__DR, CYREG_PRT4_DR -.set SCSI_Out__DBP__INP_DIS, CYREG_PRT4_INP_DIS -.set SCSI_Out__DBP__LCD_COM_SEG, CYREG_PRT4_LCD_COM_SEG -.set SCSI_Out__DBP__LCD_EN, CYREG_PRT4_LCD_EN -.set SCSI_Out__DBP__MASK, 0x04 -.set SCSI_Out__DBP__PC, CYREG_PRT4_PC2 -.set SCSI_Out__DBP__PORT, 4 -.set SCSI_Out__DBP__PRT, CYREG_PRT4_PRT -.set SCSI_Out__DBP__PRTDSI__CAPS_SEL, CYREG_PRT4_CAPS_SEL -.set SCSI_Out__DBP__PRTDSI__DBL_SYNC_IN, CYREG_PRT4_DBL_SYNC_IN -.set SCSI_Out__DBP__PRTDSI__OE_SEL0, CYREG_PRT4_OE_SEL0 -.set SCSI_Out__DBP__PRTDSI__OE_SEL1, CYREG_PRT4_OE_SEL1 -.set SCSI_Out__DBP__PRTDSI__OUT_SEL0, CYREG_PRT4_OUT_SEL0 -.set SCSI_Out__DBP__PRTDSI__OUT_SEL1, CYREG_PRT4_OUT_SEL1 -.set SCSI_Out__DBP__PRTDSI__SYNC_OUT, CYREG_PRT4_SYNC_OUT -.set SCSI_Out__DBP__PS, CYREG_PRT4_PS -.set SCSI_Out__DBP__SHIFT, 2 -.set SCSI_Out__DBP__SLW, CYREG_PRT4_SLW -.set SCSI_Out__IO__AG, CYREG_PRT6_AG -.set SCSI_Out__IO__AMUX, CYREG_PRT6_AMUX -.set SCSI_Out__IO__BIE, CYREG_PRT6_BIE -.set SCSI_Out__IO__BIT_MASK, CYREG_PRT6_BIT_MASK -.set SCSI_Out__IO__BYP, CYREG_PRT6_BYP -.set SCSI_Out__IO__CTL, CYREG_PRT6_CTL -.set SCSI_Out__IO__DM0, CYREG_PRT6_DM0 -.set SCSI_Out__IO__DM1, CYREG_PRT6_DM1 -.set SCSI_Out__IO__DM2, CYREG_PRT6_DM2 -.set SCSI_Out__IO__DR, CYREG_PRT6_DR -.set SCSI_Out__IO__INP_DIS, CYREG_PRT6_INP_DIS -.set SCSI_Out__IO__LCD_COM_SEG, CYREG_PRT6_LCD_COM_SEG -.set SCSI_Out__IO__LCD_EN, CYREG_PRT6_LCD_EN -.set SCSI_Out__IO__MASK, 0x08 -.set SCSI_Out__IO__PC, CYREG_PRT6_PC3 -.set SCSI_Out__IO__PORT, 6 -.set SCSI_Out__IO__PRT, CYREG_PRT6_PRT -.set SCSI_Out__IO__PRTDSI__CAPS_SEL, CYREG_PRT6_CAPS_SEL -.set SCSI_Out__IO__PRTDSI__DBL_SYNC_IN, CYREG_PRT6_DBL_SYNC_IN -.set SCSI_Out__IO__PRTDSI__OE_SEL0, CYREG_PRT6_OE_SEL0 -.set SCSI_Out__IO__PRTDSI__OE_SEL1, CYREG_PRT6_OE_SEL1 -.set SCSI_Out__IO__PRTDSI__OUT_SEL0, CYREG_PRT6_OUT_SEL0 -.set SCSI_Out__IO__PRTDSI__OUT_SEL1, CYREG_PRT6_OUT_SEL1 -.set SCSI_Out__IO__PRTDSI__SYNC_OUT, CYREG_PRT6_SYNC_OUT -.set SCSI_Out__IO__PS, CYREG_PRT6_PS -.set SCSI_Out__IO__SHIFT, 3 -.set SCSI_Out__IO__SLW, CYREG_PRT6_SLW +.set SCSI_Out__DBP_raw__AG, CYREG_PRT4_AG +.set SCSI_Out__DBP_raw__AMUX, CYREG_PRT4_AMUX +.set SCSI_Out__DBP_raw__BIE, CYREG_PRT4_BIE +.set SCSI_Out__DBP_raw__BIT_MASK, CYREG_PRT4_BIT_MASK +.set SCSI_Out__DBP_raw__BYP, CYREG_PRT4_BYP +.set SCSI_Out__DBP_raw__CTL, CYREG_PRT4_CTL +.set SCSI_Out__DBP_raw__DM0, CYREG_PRT4_DM0 +.set SCSI_Out__DBP_raw__DM1, CYREG_PRT4_DM1 +.set SCSI_Out__DBP_raw__DM2, CYREG_PRT4_DM2 +.set SCSI_Out__DBP_raw__DR, CYREG_PRT4_DR +.set SCSI_Out__DBP_raw__INP_DIS, CYREG_PRT4_INP_DIS +.set SCSI_Out__DBP_raw__LCD_COM_SEG, CYREG_PRT4_LCD_COM_SEG +.set SCSI_Out__DBP_raw__LCD_EN, CYREG_PRT4_LCD_EN +.set SCSI_Out__DBP_raw__MASK, 0x04 +.set SCSI_Out__DBP_raw__PC, CYREG_PRT4_PC2 +.set SCSI_Out__DBP_raw__PORT, 4 +.set SCSI_Out__DBP_raw__PRT, CYREG_PRT4_PRT +.set SCSI_Out__DBP_raw__PRTDSI__CAPS_SEL, CYREG_PRT4_CAPS_SEL +.set SCSI_Out__DBP_raw__PRTDSI__DBL_SYNC_IN, CYREG_PRT4_DBL_SYNC_IN +.set SCSI_Out__DBP_raw__PRTDSI__OE_SEL0, CYREG_PRT4_OE_SEL0 +.set SCSI_Out__DBP_raw__PRTDSI__OE_SEL1, CYREG_PRT4_OE_SEL1 +.set SCSI_Out__DBP_raw__PRTDSI__OUT_SEL0, CYREG_PRT4_OUT_SEL0 +.set SCSI_Out__DBP_raw__PRTDSI__OUT_SEL1, CYREG_PRT4_OUT_SEL1 +.set SCSI_Out__DBP_raw__PRTDSI__SYNC_OUT, CYREG_PRT4_SYNC_OUT +.set SCSI_Out__DBP_raw__PS, CYREG_PRT4_PS +.set SCSI_Out__DBP_raw__SHIFT, 2 +.set SCSI_Out__DBP_raw__SLW, CYREG_PRT4_SLW +.set SCSI_Out__IO_raw__AG, CYREG_PRT6_AG +.set SCSI_Out__IO_raw__AMUX, CYREG_PRT6_AMUX +.set SCSI_Out__IO_raw__BIE, CYREG_PRT6_BIE +.set SCSI_Out__IO_raw__BIT_MASK, CYREG_PRT6_BIT_MASK +.set SCSI_Out__IO_raw__BYP, CYREG_PRT6_BYP +.set SCSI_Out__IO_raw__CTL, CYREG_PRT6_CTL +.set SCSI_Out__IO_raw__DM0, CYREG_PRT6_DM0 +.set SCSI_Out__IO_raw__DM1, CYREG_PRT6_DM1 +.set SCSI_Out__IO_raw__DM2, CYREG_PRT6_DM2 +.set SCSI_Out__IO_raw__DR, CYREG_PRT6_DR +.set SCSI_Out__IO_raw__INP_DIS, CYREG_PRT6_INP_DIS +.set SCSI_Out__IO_raw__LCD_COM_SEG, CYREG_PRT6_LCD_COM_SEG +.set SCSI_Out__IO_raw__LCD_EN, CYREG_PRT6_LCD_EN +.set SCSI_Out__IO_raw__MASK, 0x08 +.set SCSI_Out__IO_raw__PC, CYREG_PRT6_PC3 +.set SCSI_Out__IO_raw__PORT, 6 +.set SCSI_Out__IO_raw__PRT, CYREG_PRT6_PRT +.set SCSI_Out__IO_raw__PRTDSI__CAPS_SEL, CYREG_PRT6_CAPS_SEL +.set SCSI_Out__IO_raw__PRTDSI__DBL_SYNC_IN, CYREG_PRT6_DBL_SYNC_IN +.set SCSI_Out__IO_raw__PRTDSI__OE_SEL0, CYREG_PRT6_OE_SEL0 +.set SCSI_Out__IO_raw__PRTDSI__OE_SEL1, CYREG_PRT6_OE_SEL1 +.set SCSI_Out__IO_raw__PRTDSI__OUT_SEL0, CYREG_PRT6_OUT_SEL0 +.set SCSI_Out__IO_raw__PRTDSI__OUT_SEL1, CYREG_PRT6_OUT_SEL1 +.set SCSI_Out__IO_raw__PRTDSI__SYNC_OUT, CYREG_PRT6_SYNC_OUT +.set SCSI_Out__IO_raw__PS, CYREG_PRT6_PS +.set SCSI_Out__IO_raw__SHIFT, 3 +.set SCSI_Out__IO_raw__SLW, CYREG_PRT6_SLW .set SCSI_Out__MSG__AG, CYREG_PRT4_AG .set SCSI_Out__MSG__AMUX, CYREG_PRT4_AMUX .set SCSI_Out__MSG__BIE, CYREG_PRT4_BIE @@ -973,44 +1030,6 @@ .set SCSI_RST__SLW, CYREG_PRT6_SLW .set SCSI_RST__SNAP, CYREG_PICU6_SNAP -/* SCSI_ID */ -.set SCSI_ID__0__MASK, 0x80 -.set SCSI_ID__0__PC, CYREG_PRT5_PC7 -.set SCSI_ID__0__PORT, 5 -.set SCSI_ID__0__SHIFT, 7 -.set SCSI_ID__1__MASK, 0x40 -.set SCSI_ID__1__PC, CYREG_PRT5_PC6 -.set SCSI_ID__1__PORT, 5 -.set SCSI_ID__1__SHIFT, 6 -.set SCSI_ID__2__MASK, 0x20 -.set SCSI_ID__2__PC, CYREG_PRT5_PC5 -.set SCSI_ID__2__PORT, 5 -.set SCSI_ID__2__SHIFT, 5 -.set SCSI_ID__AG, CYREG_PRT5_AG -.set SCSI_ID__AMUX, CYREG_PRT5_AMUX -.set SCSI_ID__BIE, CYREG_PRT5_BIE -.set SCSI_ID__BIT_MASK, CYREG_PRT5_BIT_MASK -.set SCSI_ID__BYP, CYREG_PRT5_BYP -.set SCSI_ID__CTL, CYREG_PRT5_CTL -.set SCSI_ID__DM0, CYREG_PRT5_DM0 -.set SCSI_ID__DM1, CYREG_PRT5_DM1 -.set SCSI_ID__DM2, CYREG_PRT5_DM2 -.set SCSI_ID__DR, CYREG_PRT5_DR -.set SCSI_ID__INP_DIS, CYREG_PRT5_INP_DIS -.set SCSI_ID__LCD_COM_SEG, CYREG_PRT5_LCD_COM_SEG -.set SCSI_ID__LCD_EN, CYREG_PRT5_LCD_EN -.set SCSI_ID__PORT, 5 -.set SCSI_ID__PRT, CYREG_PRT5_PRT -.set SCSI_ID__PRTDSI__CAPS_SEL, CYREG_PRT5_CAPS_SEL -.set SCSI_ID__PRTDSI__DBL_SYNC_IN, CYREG_PRT5_DBL_SYNC_IN -.set SCSI_ID__PRTDSI__OE_SEL0, CYREG_PRT5_OE_SEL0 -.set SCSI_ID__PRTDSI__OE_SEL1, CYREG_PRT5_OE_SEL1 -.set SCSI_ID__PRTDSI__OUT_SEL0, CYREG_PRT5_OUT_SEL0 -.set SCSI_ID__PRTDSI__OUT_SEL1, CYREG_PRT5_OUT_SEL1 -.set SCSI_ID__PRTDSI__SYNC_OUT, CYREG_PRT5_SYNC_OUT -.set SCSI_ID__PS, CYREG_PRT5_PS -.set SCSI_ID__SLW, CYREG_PRT5_SLW - /* SCSI_In */ .set SCSI_In__0__AG, CYREG_PRT12_AG .set SCSI_In__0__BIE, CYREG_PRT12_BIE @@ -1805,7 +1824,7 @@ .set CYDEV_ECC_ENABLE, 0 .set CYDEV_HEAP_SIZE, 0x1000 .set CYDEV_INSTRUCT_CACHE_ENABLED, 1 -.set CYDEV_INTR_RISING, 0x00000001 +.set CYDEV_INTR_RISING, 0x00000000 .set CYDEV_PROJ_TYPE, 0 .set CYDEV_PROJ_TYPE_BOOTLOADER, 1 .set CYDEV_PROJ_TYPE_LOADABLE, 2 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc index cac69a6..5523e00 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitteriar.inc @@ -6,10 +6,10 @@ /* SCSI_ATN_ISR */ SCSI_ATN_ISR__INTC_CLR_EN_REG EQU CYREG_NVIC_CLRENA0 SCSI_ATN_ISR__INTC_CLR_PD_REG EQU CYREG_NVIC_CLRPEND0 -SCSI_ATN_ISR__INTC_MASK EQU 0x01 -SCSI_ATN_ISR__INTC_NUMBER EQU 0 +SCSI_ATN_ISR__INTC_MASK EQU 0x800 +SCSI_ATN_ISR__INTC_NUMBER EQU 11 SCSI_ATN_ISR__INTC_PRIOR_NUM EQU 7 -SCSI_ATN_ISR__INTC_PRIOR_REG EQU CYREG_NVIC_PRI_0 +SCSI_ATN_ISR__INTC_PRIOR_REG EQU CYREG_NVIC_PRI_11 SCSI_ATN_ISR__INTC_SET_EN_REG EQU CYREG_NVIC_SETENA0 SCSI_ATN_ISR__INTC_SET_PD_REG EQU CYREG_NVIC_SETPEND0 @@ -116,34 +116,34 @@ SCSI_RST_ISR__INTC_SET_EN_REG EQU CYREG_NVIC_SETENA0 SCSI_RST_ISR__INTC_SET_PD_REG EQU CYREG_NVIC_SETPEND0 /* SDCard_BSPIM */ -SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB06_07_ACTL -SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_REG EQU CYREG_B0_UDB06_07_ST -SDCard_BSPIM_BitCounter_ST__MASK_REG EQU CYREG_B0_UDB06_MSK -SDCard_BSPIM_BitCounter_ST__MASK_ST_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_BitCounter_ST__PER_ST_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_BitCounter_ST__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB06_ACTL -SDCard_BSPIM_BitCounter_ST__STATUS_CNT_REG EQU CYREG_B0_UDB06_ST_CTL -SDCard_BSPIM_BitCounter_ST__STATUS_CONTROL_REG EQU CYREG_B0_UDB06_ST_CTL -SDCard_BSPIM_BitCounter_ST__STATUS_REG EQU CYREG_B0_UDB06_ST -SDCard_BSPIM_BitCounter__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB06_07_ACTL -SDCard_BSPIM_BitCounter__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB06_07_CTL -SDCard_BSPIM_BitCounter__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB06_07_CTL -SDCard_BSPIM_BitCounter__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB06_07_CTL -SDCard_BSPIM_BitCounter__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB06_07_CTL -SDCard_BSPIM_BitCounter__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB06_07_MSK -SDCard_BSPIM_BitCounter__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB06_07_MSK -SDCard_BSPIM_BitCounter__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB06_07_MSK -SDCard_BSPIM_BitCounter__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB06_07_MSK -SDCard_BSPIM_BitCounter__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB06_ACTL -SDCard_BSPIM_BitCounter__CONTROL_REG EQU CYREG_B0_UDB06_CTL -SDCard_BSPIM_BitCounter__CONTROL_ST_REG EQU CYREG_B0_UDB06_ST_CTL -SDCard_BSPIM_BitCounter__COUNT_REG EQU CYREG_B0_UDB06_CTL -SDCard_BSPIM_BitCounter__COUNT_ST_REG EQU CYREG_B0_UDB06_ST_CTL -SDCard_BSPIM_BitCounter__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_BitCounter__PERIOD_REG EQU CYREG_B0_UDB06_MSK -SDCard_BSPIM_BitCounter__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_RxStsReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B1_UDB06_07_ACTL -SDCard_BSPIM_RxStsReg__16BIT_STATUS_REG EQU CYREG_B1_UDB06_07_ST +SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB02_03_ACTL +SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_REG EQU CYREG_B0_UDB02_03_ST +SDCard_BSPIM_BitCounter_ST__MASK_REG EQU CYREG_B0_UDB02_MSK +SDCard_BSPIM_BitCounter_ST__MASK_ST_AUX_CTL_REG EQU CYREG_B0_UDB02_MSK_ACTL +SDCard_BSPIM_BitCounter_ST__PER_ST_AUX_CTL_REG EQU CYREG_B0_UDB02_MSK_ACTL +SDCard_BSPIM_BitCounter_ST__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB02_ACTL +SDCard_BSPIM_BitCounter_ST__STATUS_CNT_REG EQU CYREG_B0_UDB02_ST_CTL +SDCard_BSPIM_BitCounter_ST__STATUS_CONTROL_REG EQU CYREG_B0_UDB02_ST_CTL +SDCard_BSPIM_BitCounter_ST__STATUS_REG EQU CYREG_B0_UDB02_ST +SDCard_BSPIM_BitCounter__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB02_03_ACTL +SDCard_BSPIM_BitCounter__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB02_03_CTL +SDCard_BSPIM_BitCounter__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB02_03_CTL +SDCard_BSPIM_BitCounter__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB02_03_CTL +SDCard_BSPIM_BitCounter__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB02_03_CTL +SDCard_BSPIM_BitCounter__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB02_03_MSK +SDCard_BSPIM_BitCounter__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB02_03_MSK +SDCard_BSPIM_BitCounter__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB02_03_MSK +SDCard_BSPIM_BitCounter__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB02_03_MSK +SDCard_BSPIM_BitCounter__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB02_ACTL +SDCard_BSPIM_BitCounter__CONTROL_REG EQU CYREG_B0_UDB02_CTL +SDCard_BSPIM_BitCounter__CONTROL_ST_REG EQU CYREG_B0_UDB02_ST_CTL +SDCard_BSPIM_BitCounter__COUNT_REG EQU CYREG_B0_UDB02_CTL +SDCard_BSPIM_BitCounter__COUNT_ST_REG EQU CYREG_B0_UDB02_ST_CTL +SDCard_BSPIM_BitCounter__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB02_MSK_ACTL +SDCard_BSPIM_BitCounter__PERIOD_REG EQU CYREG_B0_UDB02_MSK +SDCard_BSPIM_BitCounter__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB02_MSK_ACTL +SDCard_BSPIM_RxStsReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB03_04_ACTL +SDCard_BSPIM_RxStsReg__16BIT_STATUS_REG EQU CYREG_B0_UDB03_04_ST SDCard_BSPIM_RxStsReg__4__MASK EQU 0x10 SDCard_BSPIM_RxStsReg__4__POS EQU 4 SDCard_BSPIM_RxStsReg__5__MASK EQU 0x20 @@ -151,13 +151,13 @@ SDCard_BSPIM_RxStsReg__5__POS EQU 5 SDCard_BSPIM_RxStsReg__6__MASK EQU 0x40 SDCard_BSPIM_RxStsReg__6__POS EQU 6 SDCard_BSPIM_RxStsReg__MASK EQU 0x70 -SDCard_BSPIM_RxStsReg__MASK_REG EQU CYREG_B1_UDB06_MSK -SDCard_BSPIM_RxStsReg__STATUS_AUX_CTL_REG EQU CYREG_B1_UDB06_ACTL -SDCard_BSPIM_RxStsReg__STATUS_REG EQU CYREG_B1_UDB06_ST +SDCard_BSPIM_RxStsReg__MASK_REG EQU CYREG_B0_UDB03_MSK +SDCard_BSPIM_RxStsReg__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB03_ACTL +SDCard_BSPIM_RxStsReg__STATUS_REG EQU CYREG_B0_UDB03_ST SDCard_BSPIM_TxStsReg__0__MASK EQU 0x01 SDCard_BSPIM_TxStsReg__0__POS EQU 0 -SDCard_BSPIM_TxStsReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB05_06_ACTL -SDCard_BSPIM_TxStsReg__16BIT_STATUS_REG EQU CYREG_B0_UDB05_06_ST +SDCard_BSPIM_TxStsReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B1_UDB07_08_ACTL +SDCard_BSPIM_TxStsReg__16BIT_STATUS_REG EQU CYREG_B1_UDB07_08_ST SDCard_BSPIM_TxStsReg__1__MASK EQU 0x02 SDCard_BSPIM_TxStsReg__1__POS EQU 1 SDCard_BSPIM_TxStsReg__2__MASK EQU 0x04 @@ -167,28 +167,48 @@ SDCard_BSPIM_TxStsReg__3__POS EQU 3 SDCard_BSPIM_TxStsReg__4__MASK EQU 0x10 SDCard_BSPIM_TxStsReg__4__POS EQU 4 SDCard_BSPIM_TxStsReg__MASK EQU 0x1F -SDCard_BSPIM_TxStsReg__MASK_REG EQU CYREG_B0_UDB05_MSK -SDCard_BSPIM_TxStsReg__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB05_ACTL -SDCard_BSPIM_TxStsReg__STATUS_REG EQU CYREG_B0_UDB05_ST -SDCard_BSPIM_sR8_Dp_u0__16BIT_A0_REG EQU CYREG_B0_UDB06_07_A0 -SDCard_BSPIM_sR8_Dp_u0__16BIT_A1_REG EQU CYREG_B0_UDB06_07_A1 -SDCard_BSPIM_sR8_Dp_u0__16BIT_D0_REG EQU CYREG_B0_UDB06_07_D0 -SDCard_BSPIM_sR8_Dp_u0__16BIT_D1_REG EQU CYREG_B0_UDB06_07_D1 -SDCard_BSPIM_sR8_Dp_u0__16BIT_DP_AUX_CTL_REG EQU CYREG_B0_UDB06_07_ACTL -SDCard_BSPIM_sR8_Dp_u0__16BIT_F0_REG EQU CYREG_B0_UDB06_07_F0 -SDCard_BSPIM_sR8_Dp_u0__16BIT_F1_REG EQU CYREG_B0_UDB06_07_F1 -SDCard_BSPIM_sR8_Dp_u0__A0_A1_REG EQU CYREG_B0_UDB06_A0_A1 -SDCard_BSPIM_sR8_Dp_u0__A0_REG EQU CYREG_B0_UDB06_A0 -SDCard_BSPIM_sR8_Dp_u0__A1_REG EQU CYREG_B0_UDB06_A1 -SDCard_BSPIM_sR8_Dp_u0__D0_D1_REG EQU CYREG_B0_UDB06_D0_D1 -SDCard_BSPIM_sR8_Dp_u0__D0_REG EQU CYREG_B0_UDB06_D0 -SDCard_BSPIM_sR8_Dp_u0__D1_REG EQU CYREG_B0_UDB06_D1 -SDCard_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG EQU CYREG_B0_UDB06_ACTL -SDCard_BSPIM_sR8_Dp_u0__F0_F1_REG EQU CYREG_B0_UDB06_F0_F1 -SDCard_BSPIM_sR8_Dp_u0__F0_REG EQU CYREG_B0_UDB06_F0 -SDCard_BSPIM_sR8_Dp_u0__F1_REG EQU CYREG_B0_UDB06_F1 -SDCard_BSPIM_sR8_Dp_u0__MSK_DP_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_sR8_Dp_u0__PER_DP_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL +SDCard_BSPIM_TxStsReg__MASK_REG EQU CYREG_B1_UDB07_MSK +SDCard_BSPIM_TxStsReg__STATUS_AUX_CTL_REG EQU CYREG_B1_UDB07_ACTL +SDCard_BSPIM_TxStsReg__STATUS_REG EQU CYREG_B1_UDB07_ST +SDCard_BSPIM_sR8_Dp_u0__16BIT_A0_REG EQU CYREG_B0_UDB07_08_A0 +SDCard_BSPIM_sR8_Dp_u0__16BIT_A1_REG EQU CYREG_B0_UDB07_08_A1 +SDCard_BSPIM_sR8_Dp_u0__16BIT_D0_REG EQU CYREG_B0_UDB07_08_D0 +SDCard_BSPIM_sR8_Dp_u0__16BIT_D1_REG EQU CYREG_B0_UDB07_08_D1 +SDCard_BSPIM_sR8_Dp_u0__16BIT_DP_AUX_CTL_REG EQU CYREG_B0_UDB07_08_ACTL +SDCard_BSPIM_sR8_Dp_u0__16BIT_F0_REG EQU CYREG_B0_UDB07_08_F0 +SDCard_BSPIM_sR8_Dp_u0__16BIT_F1_REG EQU CYREG_B0_UDB07_08_F1 +SDCard_BSPIM_sR8_Dp_u0__A0_A1_REG EQU CYREG_B0_UDB07_A0_A1 +SDCard_BSPIM_sR8_Dp_u0__A0_REG EQU CYREG_B0_UDB07_A0 +SDCard_BSPIM_sR8_Dp_u0__A1_REG EQU CYREG_B0_UDB07_A1 +SDCard_BSPIM_sR8_Dp_u0__D0_D1_REG EQU CYREG_B0_UDB07_D0_D1 +SDCard_BSPIM_sR8_Dp_u0__D0_REG EQU CYREG_B0_UDB07_D0 +SDCard_BSPIM_sR8_Dp_u0__D1_REG EQU CYREG_B0_UDB07_D1 +SDCard_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG EQU CYREG_B0_UDB07_ACTL +SDCard_BSPIM_sR8_Dp_u0__F0_F1_REG EQU CYREG_B0_UDB07_F0_F1 +SDCard_BSPIM_sR8_Dp_u0__F0_REG EQU CYREG_B0_UDB07_F0 +SDCard_BSPIM_sR8_Dp_u0__F1_REG EQU CYREG_B0_UDB07_F1 + +/* SCSI_CTL_IO */ +SCSI_CTL_IO_Sync_ctrl_reg__0__MASK EQU 0x01 +SCSI_CTL_IO_Sync_ctrl_reg__0__POS EQU 0 +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB00_01_ACTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB00_01_CTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB00_01_CTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB00_01_CTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB00_01_CTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB00_01_MSK +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB00_01_MSK +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB00_01_MSK +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB00_01_MSK +SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB00_ACTL +SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_REG EQU CYREG_B0_UDB00_CTL +SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_ST_REG EQU CYREG_B0_UDB00_ST_CTL +SCSI_CTL_IO_Sync_ctrl_reg__COUNT_REG EQU CYREG_B0_UDB00_CTL +SCSI_CTL_IO_Sync_ctrl_reg__COUNT_ST_REG EQU CYREG_B0_UDB00_ST_CTL +SCSI_CTL_IO_Sync_ctrl_reg__MASK EQU 0x01 +SCSI_CTL_IO_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB00_MSK_ACTL +SCSI_CTL_IO_Sync_ctrl_reg__PERIOD_REG EQU CYREG_B0_UDB00_MSK +SCSI_CTL_IO_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB00_MSK_ACTL /* SCSI_In_DBx */ SCSI_In_DBx__0__MASK EQU 0x01 @@ -304,59 +324,94 @@ SD_Init_Clk__PM_ACT_MSK EQU 0x02 SD_Init_Clk__PM_STBY_CFG EQU CYREG_PM_STBY_CFG2 SD_Init_Clk__PM_STBY_MSK EQU 0x02 +/* scsiTarget */ +scsiTarget_StatusReg__0__MASK EQU 0x01 +scsiTarget_StatusReg__0__POS EQU 0 +scsiTarget_StatusReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB11_12_ACTL +scsiTarget_StatusReg__16BIT_STATUS_REG EQU CYREG_B0_UDB11_12_ST +scsiTarget_StatusReg__1__MASK EQU 0x02 +scsiTarget_StatusReg__1__POS EQU 1 +scsiTarget_StatusReg__2__MASK EQU 0x04 +scsiTarget_StatusReg__2__POS EQU 2 +scsiTarget_StatusReg__3__MASK EQU 0x08 +scsiTarget_StatusReg__3__POS EQU 3 +scsiTarget_StatusReg__MASK EQU 0x0F +scsiTarget_StatusReg__MASK_REG EQU CYREG_B0_UDB11_MSK +scsiTarget_StatusReg__MASK_ST_AUX_CTL_REG EQU CYREG_B0_UDB11_MSK_ACTL +scsiTarget_StatusReg__PER_ST_AUX_CTL_REG EQU CYREG_B0_UDB11_MSK_ACTL +scsiTarget_StatusReg__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB11_ACTL +scsiTarget_StatusReg__STATUS_CNT_REG EQU CYREG_B0_UDB11_ST_CTL +scsiTarget_StatusReg__STATUS_CONTROL_REG EQU CYREG_B0_UDB11_ST_CTL +scsiTarget_StatusReg__STATUS_REG EQU CYREG_B0_UDB11_ST +scsiTarget_datapath_PI__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB04_05_ACTL +scsiTarget_datapath_PI__16BIT_STATUS_REG EQU CYREG_B0_UDB04_05_ST +scsiTarget_datapath_PI__MASK_REG EQU CYREG_B0_UDB04_MSK +scsiTarget_datapath_PI__MASK_ST_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath_PI__PER_ST_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath_PI__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB04_ACTL +scsiTarget_datapath_PI__STATUS_CNT_REG EQU CYREG_B0_UDB04_ST_CTL +scsiTarget_datapath_PI__STATUS_CONTROL_REG EQU CYREG_B0_UDB04_ST_CTL +scsiTarget_datapath_PI__STATUS_REG EQU CYREG_B0_UDB04_ST +scsiTarget_datapath_PO__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB04_05_ACTL +scsiTarget_datapath_PO__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB04_05_CTL +scsiTarget_datapath_PO__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB04_05_CTL +scsiTarget_datapath_PO__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB04_05_CTL +scsiTarget_datapath_PO__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB04_05_CTL +scsiTarget_datapath_PO__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB04_05_MSK +scsiTarget_datapath_PO__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB04_05_MSK +scsiTarget_datapath_PO__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB04_05_MSK +scsiTarget_datapath_PO__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB04_05_MSK +scsiTarget_datapath_PO__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB04_ACTL +scsiTarget_datapath_PO__CONTROL_REG EQU CYREG_B0_UDB04_CTL +scsiTarget_datapath_PO__CONTROL_ST_REG EQU CYREG_B0_UDB04_ST_CTL +scsiTarget_datapath_PO__COUNT_REG EQU CYREG_B0_UDB04_CTL +scsiTarget_datapath_PO__COUNT_ST_REG EQU CYREG_B0_UDB04_ST_CTL +scsiTarget_datapath_PO__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath_PO__PERIOD_REG EQU CYREG_B0_UDB04_MSK +scsiTarget_datapath_PO__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath__16BIT_A0_REG EQU CYREG_B0_UDB04_05_A0 +scsiTarget_datapath__16BIT_A1_REG EQU CYREG_B0_UDB04_05_A1 +scsiTarget_datapath__16BIT_D0_REG EQU CYREG_B0_UDB04_05_D0 +scsiTarget_datapath__16BIT_D1_REG EQU CYREG_B0_UDB04_05_D1 +scsiTarget_datapath__16BIT_DP_AUX_CTL_REG EQU CYREG_B0_UDB04_05_ACTL +scsiTarget_datapath__16BIT_F0_REG EQU CYREG_B0_UDB04_05_F0 +scsiTarget_datapath__16BIT_F1_REG EQU CYREG_B0_UDB04_05_F1 +scsiTarget_datapath__A0_A1_REG EQU CYREG_B0_UDB04_A0_A1 +scsiTarget_datapath__A0_REG EQU CYREG_B0_UDB04_A0 +scsiTarget_datapath__A1_REG EQU CYREG_B0_UDB04_A1 +scsiTarget_datapath__D0_D1_REG EQU CYREG_B0_UDB04_D0_D1 +scsiTarget_datapath__D0_REG EQU CYREG_B0_UDB04_D0 +scsiTarget_datapath__D1_REG EQU CYREG_B0_UDB04_D1 +scsiTarget_datapath__DP_AUX_CTL_REG EQU CYREG_B0_UDB04_ACTL +scsiTarget_datapath__F0_F1_REG EQU CYREG_B0_UDB04_F0_F1 +scsiTarget_datapath__F0_REG EQU CYREG_B0_UDB04_F0 +scsiTarget_datapath__F1_REG EQU CYREG_B0_UDB04_F1 +scsiTarget_datapath__MSK_DP_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath__PER_DP_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL + /* SD_Clk_Ctl */ SD_Clk_Ctl_Sync_ctrl_reg__0__MASK EQU 0x01 SD_Clk_Ctl_Sync_ctrl_reg__0__POS EQU 0 -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B1_UDB07_08_ACTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG EQU CYREG_B1_UDB07_08_CTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG EQU CYREG_B1_UDB07_08_CTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG EQU CYREG_B1_UDB07_08_CTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG EQU CYREG_B1_UDB07_08_CTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_MASK_REG EQU CYREG_B1_UDB07_08_MSK -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG EQU CYREG_B1_UDB07_08_MSK -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG EQU CYREG_B1_UDB07_08_MSK -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG EQU CYREG_B1_UDB07_08_MSK -SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_AUX_CTL_REG EQU CYREG_B1_UDB07_ACTL -SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_REG EQU CYREG_B1_UDB07_CTL -SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_ST_REG EQU CYREG_B1_UDB07_ST_CTL -SD_Clk_Ctl_Sync_ctrl_reg__COUNT_REG EQU CYREG_B1_UDB07_CTL -SD_Clk_Ctl_Sync_ctrl_reg__COUNT_ST_REG EQU CYREG_B1_UDB07_ST_CTL -SD_Clk_Ctl_Sync_ctrl_reg__MASK EQU 0x01 -SD_Clk_Ctl_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG EQU CYREG_B1_UDB07_MSK_ACTL -SD_Clk_Ctl_Sync_ctrl_reg__PERIOD_REG EQU CYREG_B1_UDB07_MSK -SD_Clk_Ctl_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG EQU CYREG_B1_UDB07_MSK_ACTL - -/* PARITY_EN */ -PARITY_EN__0__MASK EQU 0x10 -PARITY_EN__0__PC EQU CYREG_PRT5_PC4 -PARITY_EN__0__PORT EQU 5 -PARITY_EN__0__SHIFT EQU 4 -PARITY_EN__AG EQU CYREG_PRT5_AG -PARITY_EN__AMUX EQU CYREG_PRT5_AMUX -PARITY_EN__BIE EQU CYREG_PRT5_BIE -PARITY_EN__BIT_MASK EQU CYREG_PRT5_BIT_MASK -PARITY_EN__BYP EQU CYREG_PRT5_BYP -PARITY_EN__CTL EQU CYREG_PRT5_CTL -PARITY_EN__DM0 EQU CYREG_PRT5_DM0 -PARITY_EN__DM1 EQU CYREG_PRT5_DM1 -PARITY_EN__DM2 EQU CYREG_PRT5_DM2 -PARITY_EN__DR EQU CYREG_PRT5_DR -PARITY_EN__INP_DIS EQU CYREG_PRT5_INP_DIS -PARITY_EN__LCD_COM_SEG EQU CYREG_PRT5_LCD_COM_SEG -PARITY_EN__LCD_EN EQU CYREG_PRT5_LCD_EN -PARITY_EN__MASK EQU 0x10 -PARITY_EN__PORT EQU 5 -PARITY_EN__PRT EQU CYREG_PRT5_PRT -PARITY_EN__PRTDSI__CAPS_SEL EQU CYREG_PRT5_CAPS_SEL -PARITY_EN__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT5_DBL_SYNC_IN -PARITY_EN__PRTDSI__OE_SEL0 EQU CYREG_PRT5_OE_SEL0 -PARITY_EN__PRTDSI__OE_SEL1 EQU CYREG_PRT5_OE_SEL1 -PARITY_EN__PRTDSI__OUT_SEL0 EQU CYREG_PRT5_OUT_SEL0 -PARITY_EN__PRTDSI__OUT_SEL1 EQU CYREG_PRT5_OUT_SEL1 -PARITY_EN__PRTDSI__SYNC_OUT EQU CYREG_PRT5_SYNC_OUT -PARITY_EN__PS EQU CYREG_PRT5_PS -PARITY_EN__SHIFT EQU 4 -PARITY_EN__SLW EQU CYREG_PRT5_SLW +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB11_12_ACTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB11_12_CTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB11_12_CTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB11_12_CTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB11_12_CTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB11_12_MSK +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB11_12_MSK +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB11_12_MSK +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB11_12_MSK +SD_Clk_Ctl_Sync_ctrl_reg__1__MASK EQU 0x02 +SD_Clk_Ctl_Sync_ctrl_reg__1__POS EQU 1 +SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB11_ACTL +SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_REG EQU CYREG_B0_UDB11_CTL +SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_ST_REG EQU CYREG_B0_UDB11_ST_CTL +SD_Clk_Ctl_Sync_ctrl_reg__COUNT_REG EQU CYREG_B0_UDB11_CTL +SD_Clk_Ctl_Sync_ctrl_reg__COUNT_ST_REG EQU CYREG_B0_UDB11_ST_CTL +SD_Clk_Ctl_Sync_ctrl_reg__MASK EQU 0x03 +SD_Clk_Ctl_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB11_MSK_ACTL +SD_Clk_Ctl_Sync_ctrl_reg__PERIOD_REG EQU CYREG_B0_UDB11_MSK +SD_Clk_Ctl_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB11_MSK_ACTL /* SCSI_ATN */ SCSI_ATN__0__MASK EQU 0x20 @@ -372,6 +427,7 @@ SCSI_ATN__DM1 EQU CYREG_PRT12_DM1 SCSI_ATN__DM2 EQU CYREG_PRT12_DM2 SCSI_ATN__DR EQU CYREG_PRT12_DR SCSI_ATN__INP_DIS EQU CYREG_PRT12_INP_DIS +SCSI_ATN__INTSTAT EQU CYREG_PICU12_INTSTAT SCSI_ATN__INT__MASK EQU 0x20 SCSI_ATN__INT__PC EQU CYREG_PRT12_PC5 SCSI_ATN__INT__PORT EQU 12 @@ -392,6 +448,7 @@ SCSI_ATN__SIO_DIFF EQU CYREG_PRT12_SIO_DIFF SCSI_ATN__SIO_HYST_EN EQU CYREG_PRT12_SIO_HYST_EN SCSI_ATN__SIO_REG_HIFREQ EQU CYREG_PRT12_SIO_REG_HIFREQ SCSI_ATN__SLW EQU CYREG_PRT12_SLW +SCSI_ATN__SNAP EQU CYREG_PICU12_SNAP /* SCSI_Out */ SCSI_Out__0__AG EQU CYREG_PRT4_AG @@ -772,60 +829,60 @@ SCSI_Out__CD__PRTDSI__SYNC_OUT EQU CYREG_PRT6_SYNC_OUT SCSI_Out__CD__PS EQU CYREG_PRT6_PS SCSI_Out__CD__SHIFT EQU 1 SCSI_Out__CD__SLW EQU CYREG_PRT6_SLW -SCSI_Out__DBP__AG EQU CYREG_PRT4_AG -SCSI_Out__DBP__AMUX EQU CYREG_PRT4_AMUX -SCSI_Out__DBP__BIE EQU CYREG_PRT4_BIE -SCSI_Out__DBP__BIT_MASK EQU CYREG_PRT4_BIT_MASK -SCSI_Out__DBP__BYP EQU CYREG_PRT4_BYP -SCSI_Out__DBP__CTL EQU CYREG_PRT4_CTL -SCSI_Out__DBP__DM0 EQU CYREG_PRT4_DM0 -SCSI_Out__DBP__DM1 EQU CYREG_PRT4_DM1 -SCSI_Out__DBP__DM2 EQU CYREG_PRT4_DM2 -SCSI_Out__DBP__DR EQU CYREG_PRT4_DR -SCSI_Out__DBP__INP_DIS EQU CYREG_PRT4_INP_DIS -SCSI_Out__DBP__LCD_COM_SEG EQU CYREG_PRT4_LCD_COM_SEG -SCSI_Out__DBP__LCD_EN EQU CYREG_PRT4_LCD_EN -SCSI_Out__DBP__MASK EQU 0x04 -SCSI_Out__DBP__PC EQU CYREG_PRT4_PC2 -SCSI_Out__DBP__PORT EQU 4 -SCSI_Out__DBP__PRT EQU CYREG_PRT4_PRT -SCSI_Out__DBP__PRTDSI__CAPS_SEL EQU CYREG_PRT4_CAPS_SEL -SCSI_Out__DBP__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT4_DBL_SYNC_IN -SCSI_Out__DBP__PRTDSI__OE_SEL0 EQU CYREG_PRT4_OE_SEL0 -SCSI_Out__DBP__PRTDSI__OE_SEL1 EQU CYREG_PRT4_OE_SEL1 -SCSI_Out__DBP__PRTDSI__OUT_SEL0 EQU CYREG_PRT4_OUT_SEL0 -SCSI_Out__DBP__PRTDSI__OUT_SEL1 EQU CYREG_PRT4_OUT_SEL1 -SCSI_Out__DBP__PRTDSI__SYNC_OUT EQU CYREG_PRT4_SYNC_OUT -SCSI_Out__DBP__PS EQU CYREG_PRT4_PS -SCSI_Out__DBP__SHIFT EQU 2 -SCSI_Out__DBP__SLW EQU CYREG_PRT4_SLW -SCSI_Out__IO__AG EQU CYREG_PRT6_AG -SCSI_Out__IO__AMUX EQU CYREG_PRT6_AMUX -SCSI_Out__IO__BIE EQU CYREG_PRT6_BIE -SCSI_Out__IO__BIT_MASK EQU CYREG_PRT6_BIT_MASK -SCSI_Out__IO__BYP EQU CYREG_PRT6_BYP -SCSI_Out__IO__CTL EQU CYREG_PRT6_CTL -SCSI_Out__IO__DM0 EQU CYREG_PRT6_DM0 -SCSI_Out__IO__DM1 EQU CYREG_PRT6_DM1 -SCSI_Out__IO__DM2 EQU CYREG_PRT6_DM2 -SCSI_Out__IO__DR EQU CYREG_PRT6_DR -SCSI_Out__IO__INP_DIS EQU CYREG_PRT6_INP_DIS -SCSI_Out__IO__LCD_COM_SEG EQU CYREG_PRT6_LCD_COM_SEG -SCSI_Out__IO__LCD_EN EQU CYREG_PRT6_LCD_EN -SCSI_Out__IO__MASK EQU 0x08 -SCSI_Out__IO__PC EQU CYREG_PRT6_PC3 -SCSI_Out__IO__PORT EQU 6 -SCSI_Out__IO__PRT EQU CYREG_PRT6_PRT -SCSI_Out__IO__PRTDSI__CAPS_SEL EQU CYREG_PRT6_CAPS_SEL -SCSI_Out__IO__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT6_DBL_SYNC_IN -SCSI_Out__IO__PRTDSI__OE_SEL0 EQU CYREG_PRT6_OE_SEL0 -SCSI_Out__IO__PRTDSI__OE_SEL1 EQU CYREG_PRT6_OE_SEL1 -SCSI_Out__IO__PRTDSI__OUT_SEL0 EQU CYREG_PRT6_OUT_SEL0 -SCSI_Out__IO__PRTDSI__OUT_SEL1 EQU CYREG_PRT6_OUT_SEL1 -SCSI_Out__IO__PRTDSI__SYNC_OUT EQU CYREG_PRT6_SYNC_OUT -SCSI_Out__IO__PS EQU CYREG_PRT6_PS -SCSI_Out__IO__SHIFT EQU 3 -SCSI_Out__IO__SLW EQU CYREG_PRT6_SLW +SCSI_Out__DBP_raw__AG EQU CYREG_PRT4_AG +SCSI_Out__DBP_raw__AMUX EQU CYREG_PRT4_AMUX +SCSI_Out__DBP_raw__BIE EQU CYREG_PRT4_BIE +SCSI_Out__DBP_raw__BIT_MASK EQU CYREG_PRT4_BIT_MASK +SCSI_Out__DBP_raw__BYP EQU CYREG_PRT4_BYP +SCSI_Out__DBP_raw__CTL EQU CYREG_PRT4_CTL +SCSI_Out__DBP_raw__DM0 EQU CYREG_PRT4_DM0 +SCSI_Out__DBP_raw__DM1 EQU CYREG_PRT4_DM1 +SCSI_Out__DBP_raw__DM2 EQU CYREG_PRT4_DM2 +SCSI_Out__DBP_raw__DR EQU CYREG_PRT4_DR +SCSI_Out__DBP_raw__INP_DIS EQU CYREG_PRT4_INP_DIS +SCSI_Out__DBP_raw__LCD_COM_SEG EQU CYREG_PRT4_LCD_COM_SEG +SCSI_Out__DBP_raw__LCD_EN EQU CYREG_PRT4_LCD_EN +SCSI_Out__DBP_raw__MASK EQU 0x04 +SCSI_Out__DBP_raw__PC EQU CYREG_PRT4_PC2 +SCSI_Out__DBP_raw__PORT EQU 4 +SCSI_Out__DBP_raw__PRT EQU CYREG_PRT4_PRT +SCSI_Out__DBP_raw__PRTDSI__CAPS_SEL EQU CYREG_PRT4_CAPS_SEL +SCSI_Out__DBP_raw__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT4_DBL_SYNC_IN +SCSI_Out__DBP_raw__PRTDSI__OE_SEL0 EQU CYREG_PRT4_OE_SEL0 +SCSI_Out__DBP_raw__PRTDSI__OE_SEL1 EQU CYREG_PRT4_OE_SEL1 +SCSI_Out__DBP_raw__PRTDSI__OUT_SEL0 EQU CYREG_PRT4_OUT_SEL0 +SCSI_Out__DBP_raw__PRTDSI__OUT_SEL1 EQU CYREG_PRT4_OUT_SEL1 +SCSI_Out__DBP_raw__PRTDSI__SYNC_OUT EQU CYREG_PRT4_SYNC_OUT +SCSI_Out__DBP_raw__PS EQU CYREG_PRT4_PS +SCSI_Out__DBP_raw__SHIFT EQU 2 +SCSI_Out__DBP_raw__SLW EQU CYREG_PRT4_SLW +SCSI_Out__IO_raw__AG EQU CYREG_PRT6_AG +SCSI_Out__IO_raw__AMUX EQU CYREG_PRT6_AMUX +SCSI_Out__IO_raw__BIE EQU CYREG_PRT6_BIE +SCSI_Out__IO_raw__BIT_MASK EQU CYREG_PRT6_BIT_MASK +SCSI_Out__IO_raw__BYP EQU CYREG_PRT6_BYP +SCSI_Out__IO_raw__CTL EQU CYREG_PRT6_CTL +SCSI_Out__IO_raw__DM0 EQU CYREG_PRT6_DM0 +SCSI_Out__IO_raw__DM1 EQU CYREG_PRT6_DM1 +SCSI_Out__IO_raw__DM2 EQU CYREG_PRT6_DM2 +SCSI_Out__IO_raw__DR EQU CYREG_PRT6_DR +SCSI_Out__IO_raw__INP_DIS EQU CYREG_PRT6_INP_DIS +SCSI_Out__IO_raw__LCD_COM_SEG EQU CYREG_PRT6_LCD_COM_SEG +SCSI_Out__IO_raw__LCD_EN EQU CYREG_PRT6_LCD_EN +SCSI_Out__IO_raw__MASK EQU 0x08 +SCSI_Out__IO_raw__PC EQU CYREG_PRT6_PC3 +SCSI_Out__IO_raw__PORT EQU 6 +SCSI_Out__IO_raw__PRT EQU CYREG_PRT6_PRT +SCSI_Out__IO_raw__PRTDSI__CAPS_SEL EQU CYREG_PRT6_CAPS_SEL +SCSI_Out__IO_raw__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT6_DBL_SYNC_IN +SCSI_Out__IO_raw__PRTDSI__OE_SEL0 EQU CYREG_PRT6_OE_SEL0 +SCSI_Out__IO_raw__PRTDSI__OE_SEL1 EQU CYREG_PRT6_OE_SEL1 +SCSI_Out__IO_raw__PRTDSI__OUT_SEL0 EQU CYREG_PRT6_OUT_SEL0 +SCSI_Out__IO_raw__PRTDSI__OUT_SEL1 EQU CYREG_PRT6_OUT_SEL1 +SCSI_Out__IO_raw__PRTDSI__SYNC_OUT EQU CYREG_PRT6_SYNC_OUT +SCSI_Out__IO_raw__PS EQU CYREG_PRT6_PS +SCSI_Out__IO_raw__SHIFT EQU 3 +SCSI_Out__IO_raw__SLW EQU CYREG_PRT6_SLW SCSI_Out__MSG__AG EQU CYREG_PRT4_AG SCSI_Out__MSG__AMUX EQU CYREG_PRT4_AMUX SCSI_Out__MSG__BIE EQU CYREG_PRT4_BIE @@ -973,44 +1030,6 @@ SCSI_RST__SHIFT EQU 6 SCSI_RST__SLW EQU CYREG_PRT6_SLW SCSI_RST__SNAP EQU CYREG_PICU6_SNAP -/* SCSI_ID */ -SCSI_ID__0__MASK EQU 0x80 -SCSI_ID__0__PC EQU CYREG_PRT5_PC7 -SCSI_ID__0__PORT EQU 5 -SCSI_ID__0__SHIFT EQU 7 -SCSI_ID__1__MASK EQU 0x40 -SCSI_ID__1__PC EQU CYREG_PRT5_PC6 -SCSI_ID__1__PORT EQU 5 -SCSI_ID__1__SHIFT EQU 6 -SCSI_ID__2__MASK EQU 0x20 -SCSI_ID__2__PC EQU CYREG_PRT5_PC5 -SCSI_ID__2__PORT EQU 5 -SCSI_ID__2__SHIFT EQU 5 -SCSI_ID__AG EQU CYREG_PRT5_AG -SCSI_ID__AMUX EQU CYREG_PRT5_AMUX -SCSI_ID__BIE EQU CYREG_PRT5_BIE -SCSI_ID__BIT_MASK EQU CYREG_PRT5_BIT_MASK -SCSI_ID__BYP EQU CYREG_PRT5_BYP -SCSI_ID__CTL EQU CYREG_PRT5_CTL -SCSI_ID__DM0 EQU CYREG_PRT5_DM0 -SCSI_ID__DM1 EQU CYREG_PRT5_DM1 -SCSI_ID__DM2 EQU CYREG_PRT5_DM2 -SCSI_ID__DR EQU CYREG_PRT5_DR -SCSI_ID__INP_DIS EQU CYREG_PRT5_INP_DIS -SCSI_ID__LCD_COM_SEG EQU CYREG_PRT5_LCD_COM_SEG -SCSI_ID__LCD_EN EQU CYREG_PRT5_LCD_EN -SCSI_ID__PORT EQU 5 -SCSI_ID__PRT EQU CYREG_PRT5_PRT -SCSI_ID__PRTDSI__CAPS_SEL EQU CYREG_PRT5_CAPS_SEL -SCSI_ID__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT5_DBL_SYNC_IN -SCSI_ID__PRTDSI__OE_SEL0 EQU CYREG_PRT5_OE_SEL0 -SCSI_ID__PRTDSI__OE_SEL1 EQU CYREG_PRT5_OE_SEL1 -SCSI_ID__PRTDSI__OUT_SEL0 EQU CYREG_PRT5_OUT_SEL0 -SCSI_ID__PRTDSI__OUT_SEL1 EQU CYREG_PRT5_OUT_SEL1 -SCSI_ID__PRTDSI__SYNC_OUT EQU CYREG_PRT5_SYNC_OUT -SCSI_ID__PS EQU CYREG_PRT5_PS -SCSI_ID__SLW EQU CYREG_PRT5_SLW - /* SCSI_In */ SCSI_In__0__AG EQU CYREG_PRT12_AG SCSI_In__0__BIE EQU CYREG_PRT12_BIE @@ -1805,7 +1824,7 @@ CYDEV_DMA_CHANNELS_AVAILABLE EQU 24 CYDEV_ECC_ENABLE EQU 0 CYDEV_HEAP_SIZE EQU 0x1000 CYDEV_INSTRUCT_CACHE_ENABLED EQU 1 -CYDEV_INTR_RISING EQU 0x00000001 +CYDEV_INTR_RISING EQU 0x00000000 CYDEV_PROJ_TYPE EQU 0 CYDEV_PROJ_TYPE_BOOTLOADER EQU 1 CYDEV_PROJ_TYPE_LOADABLE EQU 2 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc index d108744..0023a23 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cyfitterrv.inc @@ -6,10 +6,10 @@ INCLUDED_CYFITTERRV_INC EQU 1 ; SCSI_ATN_ISR SCSI_ATN_ISR__INTC_CLR_EN_REG EQU CYREG_NVIC_CLRENA0 SCSI_ATN_ISR__INTC_CLR_PD_REG EQU CYREG_NVIC_CLRPEND0 -SCSI_ATN_ISR__INTC_MASK EQU 0x01 -SCSI_ATN_ISR__INTC_NUMBER EQU 0 +SCSI_ATN_ISR__INTC_MASK EQU 0x800 +SCSI_ATN_ISR__INTC_NUMBER EQU 11 SCSI_ATN_ISR__INTC_PRIOR_NUM EQU 7 -SCSI_ATN_ISR__INTC_PRIOR_REG EQU CYREG_NVIC_PRI_0 +SCSI_ATN_ISR__INTC_PRIOR_REG EQU CYREG_NVIC_PRI_11 SCSI_ATN_ISR__INTC_SET_EN_REG EQU CYREG_NVIC_SETENA0 SCSI_ATN_ISR__INTC_SET_PD_REG EQU CYREG_NVIC_SETPEND0 @@ -116,34 +116,34 @@ SCSI_RST_ISR__INTC_SET_EN_REG EQU CYREG_NVIC_SETENA0 SCSI_RST_ISR__INTC_SET_PD_REG EQU CYREG_NVIC_SETPEND0 ; SDCard_BSPIM -SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB06_07_ACTL -SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_REG EQU CYREG_B0_UDB06_07_ST -SDCard_BSPIM_BitCounter_ST__MASK_REG EQU CYREG_B0_UDB06_MSK -SDCard_BSPIM_BitCounter_ST__MASK_ST_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_BitCounter_ST__PER_ST_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_BitCounter_ST__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB06_ACTL -SDCard_BSPIM_BitCounter_ST__STATUS_CNT_REG EQU CYREG_B0_UDB06_ST_CTL -SDCard_BSPIM_BitCounter_ST__STATUS_CONTROL_REG EQU CYREG_B0_UDB06_ST_CTL -SDCard_BSPIM_BitCounter_ST__STATUS_REG EQU CYREG_B0_UDB06_ST -SDCard_BSPIM_BitCounter__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB06_07_ACTL -SDCard_BSPIM_BitCounter__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB06_07_CTL -SDCard_BSPIM_BitCounter__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB06_07_CTL -SDCard_BSPIM_BitCounter__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB06_07_CTL -SDCard_BSPIM_BitCounter__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB06_07_CTL -SDCard_BSPIM_BitCounter__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB06_07_MSK -SDCard_BSPIM_BitCounter__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB06_07_MSK -SDCard_BSPIM_BitCounter__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB06_07_MSK -SDCard_BSPIM_BitCounter__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB06_07_MSK -SDCard_BSPIM_BitCounter__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB06_ACTL -SDCard_BSPIM_BitCounter__CONTROL_REG EQU CYREG_B0_UDB06_CTL -SDCard_BSPIM_BitCounter__CONTROL_ST_REG EQU CYREG_B0_UDB06_ST_CTL -SDCard_BSPIM_BitCounter__COUNT_REG EQU CYREG_B0_UDB06_CTL -SDCard_BSPIM_BitCounter__COUNT_ST_REG EQU CYREG_B0_UDB06_ST_CTL -SDCard_BSPIM_BitCounter__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_BitCounter__PERIOD_REG EQU CYREG_B0_UDB06_MSK -SDCard_BSPIM_BitCounter__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_RxStsReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B1_UDB06_07_ACTL -SDCard_BSPIM_RxStsReg__16BIT_STATUS_REG EQU CYREG_B1_UDB06_07_ST +SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB02_03_ACTL +SDCard_BSPIM_BitCounter_ST__16BIT_STATUS_REG EQU CYREG_B0_UDB02_03_ST +SDCard_BSPIM_BitCounter_ST__MASK_REG EQU CYREG_B0_UDB02_MSK +SDCard_BSPIM_BitCounter_ST__MASK_ST_AUX_CTL_REG EQU CYREG_B0_UDB02_MSK_ACTL +SDCard_BSPIM_BitCounter_ST__PER_ST_AUX_CTL_REG EQU CYREG_B0_UDB02_MSK_ACTL +SDCard_BSPIM_BitCounter_ST__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB02_ACTL +SDCard_BSPIM_BitCounter_ST__STATUS_CNT_REG EQU CYREG_B0_UDB02_ST_CTL +SDCard_BSPIM_BitCounter_ST__STATUS_CONTROL_REG EQU CYREG_B0_UDB02_ST_CTL +SDCard_BSPIM_BitCounter_ST__STATUS_REG EQU CYREG_B0_UDB02_ST +SDCard_BSPIM_BitCounter__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB02_03_ACTL +SDCard_BSPIM_BitCounter__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB02_03_CTL +SDCard_BSPIM_BitCounter__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB02_03_CTL +SDCard_BSPIM_BitCounter__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB02_03_CTL +SDCard_BSPIM_BitCounter__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB02_03_CTL +SDCard_BSPIM_BitCounter__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB02_03_MSK +SDCard_BSPIM_BitCounter__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB02_03_MSK +SDCard_BSPIM_BitCounter__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB02_03_MSK +SDCard_BSPIM_BitCounter__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB02_03_MSK +SDCard_BSPIM_BitCounter__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB02_ACTL +SDCard_BSPIM_BitCounter__CONTROL_REG EQU CYREG_B0_UDB02_CTL +SDCard_BSPIM_BitCounter__CONTROL_ST_REG EQU CYREG_B0_UDB02_ST_CTL +SDCard_BSPIM_BitCounter__COUNT_REG EQU CYREG_B0_UDB02_CTL +SDCard_BSPIM_BitCounter__COUNT_ST_REG EQU CYREG_B0_UDB02_ST_CTL +SDCard_BSPIM_BitCounter__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB02_MSK_ACTL +SDCard_BSPIM_BitCounter__PERIOD_REG EQU CYREG_B0_UDB02_MSK +SDCard_BSPIM_BitCounter__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB02_MSK_ACTL +SDCard_BSPIM_RxStsReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB03_04_ACTL +SDCard_BSPIM_RxStsReg__16BIT_STATUS_REG EQU CYREG_B0_UDB03_04_ST SDCard_BSPIM_RxStsReg__4__MASK EQU 0x10 SDCard_BSPIM_RxStsReg__4__POS EQU 4 SDCard_BSPIM_RxStsReg__5__MASK EQU 0x20 @@ -151,13 +151,13 @@ SDCard_BSPIM_RxStsReg__5__POS EQU 5 SDCard_BSPIM_RxStsReg__6__MASK EQU 0x40 SDCard_BSPIM_RxStsReg__6__POS EQU 6 SDCard_BSPIM_RxStsReg__MASK EQU 0x70 -SDCard_BSPIM_RxStsReg__MASK_REG EQU CYREG_B1_UDB06_MSK -SDCard_BSPIM_RxStsReg__STATUS_AUX_CTL_REG EQU CYREG_B1_UDB06_ACTL -SDCard_BSPIM_RxStsReg__STATUS_REG EQU CYREG_B1_UDB06_ST +SDCard_BSPIM_RxStsReg__MASK_REG EQU CYREG_B0_UDB03_MSK +SDCard_BSPIM_RxStsReg__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB03_ACTL +SDCard_BSPIM_RxStsReg__STATUS_REG EQU CYREG_B0_UDB03_ST SDCard_BSPIM_TxStsReg__0__MASK EQU 0x01 SDCard_BSPIM_TxStsReg__0__POS EQU 0 -SDCard_BSPIM_TxStsReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB05_06_ACTL -SDCard_BSPIM_TxStsReg__16BIT_STATUS_REG EQU CYREG_B0_UDB05_06_ST +SDCard_BSPIM_TxStsReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B1_UDB07_08_ACTL +SDCard_BSPIM_TxStsReg__16BIT_STATUS_REG EQU CYREG_B1_UDB07_08_ST SDCard_BSPIM_TxStsReg__1__MASK EQU 0x02 SDCard_BSPIM_TxStsReg__1__POS EQU 1 SDCard_BSPIM_TxStsReg__2__MASK EQU 0x04 @@ -167,28 +167,48 @@ SDCard_BSPIM_TxStsReg__3__POS EQU 3 SDCard_BSPIM_TxStsReg__4__MASK EQU 0x10 SDCard_BSPIM_TxStsReg__4__POS EQU 4 SDCard_BSPIM_TxStsReg__MASK EQU 0x1F -SDCard_BSPIM_TxStsReg__MASK_REG EQU CYREG_B0_UDB05_MSK -SDCard_BSPIM_TxStsReg__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB05_ACTL -SDCard_BSPIM_TxStsReg__STATUS_REG EQU CYREG_B0_UDB05_ST -SDCard_BSPIM_sR8_Dp_u0__16BIT_A0_REG EQU CYREG_B0_UDB06_07_A0 -SDCard_BSPIM_sR8_Dp_u0__16BIT_A1_REG EQU CYREG_B0_UDB06_07_A1 -SDCard_BSPIM_sR8_Dp_u0__16BIT_D0_REG EQU CYREG_B0_UDB06_07_D0 -SDCard_BSPIM_sR8_Dp_u0__16BIT_D1_REG EQU CYREG_B0_UDB06_07_D1 -SDCard_BSPIM_sR8_Dp_u0__16BIT_DP_AUX_CTL_REG EQU CYREG_B0_UDB06_07_ACTL -SDCard_BSPIM_sR8_Dp_u0__16BIT_F0_REG EQU CYREG_B0_UDB06_07_F0 -SDCard_BSPIM_sR8_Dp_u0__16BIT_F1_REG EQU CYREG_B0_UDB06_07_F1 -SDCard_BSPIM_sR8_Dp_u0__A0_A1_REG EQU CYREG_B0_UDB06_A0_A1 -SDCard_BSPIM_sR8_Dp_u0__A0_REG EQU CYREG_B0_UDB06_A0 -SDCard_BSPIM_sR8_Dp_u0__A1_REG EQU CYREG_B0_UDB06_A1 -SDCard_BSPIM_sR8_Dp_u0__D0_D1_REG EQU CYREG_B0_UDB06_D0_D1 -SDCard_BSPIM_sR8_Dp_u0__D0_REG EQU CYREG_B0_UDB06_D0 -SDCard_BSPIM_sR8_Dp_u0__D1_REG EQU CYREG_B0_UDB06_D1 -SDCard_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG EQU CYREG_B0_UDB06_ACTL -SDCard_BSPIM_sR8_Dp_u0__F0_F1_REG EQU CYREG_B0_UDB06_F0_F1 -SDCard_BSPIM_sR8_Dp_u0__F0_REG EQU CYREG_B0_UDB06_F0 -SDCard_BSPIM_sR8_Dp_u0__F1_REG EQU CYREG_B0_UDB06_F1 -SDCard_BSPIM_sR8_Dp_u0__MSK_DP_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL -SDCard_BSPIM_sR8_Dp_u0__PER_DP_AUX_CTL_REG EQU CYREG_B0_UDB06_MSK_ACTL +SDCard_BSPIM_TxStsReg__MASK_REG EQU CYREG_B1_UDB07_MSK +SDCard_BSPIM_TxStsReg__STATUS_AUX_CTL_REG EQU CYREG_B1_UDB07_ACTL +SDCard_BSPIM_TxStsReg__STATUS_REG EQU CYREG_B1_UDB07_ST +SDCard_BSPIM_sR8_Dp_u0__16BIT_A0_REG EQU CYREG_B0_UDB07_08_A0 +SDCard_BSPIM_sR8_Dp_u0__16BIT_A1_REG EQU CYREG_B0_UDB07_08_A1 +SDCard_BSPIM_sR8_Dp_u0__16BIT_D0_REG EQU CYREG_B0_UDB07_08_D0 +SDCard_BSPIM_sR8_Dp_u0__16BIT_D1_REG EQU CYREG_B0_UDB07_08_D1 +SDCard_BSPIM_sR8_Dp_u0__16BIT_DP_AUX_CTL_REG EQU CYREG_B0_UDB07_08_ACTL +SDCard_BSPIM_sR8_Dp_u0__16BIT_F0_REG EQU CYREG_B0_UDB07_08_F0 +SDCard_BSPIM_sR8_Dp_u0__16BIT_F1_REG EQU CYREG_B0_UDB07_08_F1 +SDCard_BSPIM_sR8_Dp_u0__A0_A1_REG EQU CYREG_B0_UDB07_A0_A1 +SDCard_BSPIM_sR8_Dp_u0__A0_REG EQU CYREG_B0_UDB07_A0 +SDCard_BSPIM_sR8_Dp_u0__A1_REG EQU CYREG_B0_UDB07_A1 +SDCard_BSPIM_sR8_Dp_u0__D0_D1_REG EQU CYREG_B0_UDB07_D0_D1 +SDCard_BSPIM_sR8_Dp_u0__D0_REG EQU CYREG_B0_UDB07_D0 +SDCard_BSPIM_sR8_Dp_u0__D1_REG EQU CYREG_B0_UDB07_D1 +SDCard_BSPIM_sR8_Dp_u0__DP_AUX_CTL_REG EQU CYREG_B0_UDB07_ACTL +SDCard_BSPIM_sR8_Dp_u0__F0_F1_REG EQU CYREG_B0_UDB07_F0_F1 +SDCard_BSPIM_sR8_Dp_u0__F0_REG EQU CYREG_B0_UDB07_F0 +SDCard_BSPIM_sR8_Dp_u0__F1_REG EQU CYREG_B0_UDB07_F1 + +; SCSI_CTL_IO +SCSI_CTL_IO_Sync_ctrl_reg__0__MASK EQU 0x01 +SCSI_CTL_IO_Sync_ctrl_reg__0__POS EQU 0 +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB00_01_ACTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB00_01_CTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB00_01_CTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB00_01_CTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB00_01_CTL +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB00_01_MSK +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB00_01_MSK +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB00_01_MSK +SCSI_CTL_IO_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB00_01_MSK +SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB00_ACTL +SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_REG EQU CYREG_B0_UDB00_CTL +SCSI_CTL_IO_Sync_ctrl_reg__CONTROL_ST_REG EQU CYREG_B0_UDB00_ST_CTL +SCSI_CTL_IO_Sync_ctrl_reg__COUNT_REG EQU CYREG_B0_UDB00_CTL +SCSI_CTL_IO_Sync_ctrl_reg__COUNT_ST_REG EQU CYREG_B0_UDB00_ST_CTL +SCSI_CTL_IO_Sync_ctrl_reg__MASK EQU 0x01 +SCSI_CTL_IO_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB00_MSK_ACTL +SCSI_CTL_IO_Sync_ctrl_reg__PERIOD_REG EQU CYREG_B0_UDB00_MSK +SCSI_CTL_IO_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB00_MSK_ACTL ; SCSI_In_DBx SCSI_In_DBx__0__MASK EQU 0x01 @@ -304,59 +324,94 @@ SD_Init_Clk__PM_ACT_MSK EQU 0x02 SD_Init_Clk__PM_STBY_CFG EQU CYREG_PM_STBY_CFG2 SD_Init_Clk__PM_STBY_MSK EQU 0x02 +; scsiTarget +scsiTarget_StatusReg__0__MASK EQU 0x01 +scsiTarget_StatusReg__0__POS EQU 0 +scsiTarget_StatusReg__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB11_12_ACTL +scsiTarget_StatusReg__16BIT_STATUS_REG EQU CYREG_B0_UDB11_12_ST +scsiTarget_StatusReg__1__MASK EQU 0x02 +scsiTarget_StatusReg__1__POS EQU 1 +scsiTarget_StatusReg__2__MASK EQU 0x04 +scsiTarget_StatusReg__2__POS EQU 2 +scsiTarget_StatusReg__3__MASK EQU 0x08 +scsiTarget_StatusReg__3__POS EQU 3 +scsiTarget_StatusReg__MASK EQU 0x0F +scsiTarget_StatusReg__MASK_REG EQU CYREG_B0_UDB11_MSK +scsiTarget_StatusReg__MASK_ST_AUX_CTL_REG EQU CYREG_B0_UDB11_MSK_ACTL +scsiTarget_StatusReg__PER_ST_AUX_CTL_REG EQU CYREG_B0_UDB11_MSK_ACTL +scsiTarget_StatusReg__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB11_ACTL +scsiTarget_StatusReg__STATUS_CNT_REG EQU CYREG_B0_UDB11_ST_CTL +scsiTarget_StatusReg__STATUS_CONTROL_REG EQU CYREG_B0_UDB11_ST_CTL +scsiTarget_StatusReg__STATUS_REG EQU CYREG_B0_UDB11_ST +scsiTarget_datapath_PI__16BIT_STATUS_AUX_CTL_REG EQU CYREG_B0_UDB04_05_ACTL +scsiTarget_datapath_PI__16BIT_STATUS_REG EQU CYREG_B0_UDB04_05_ST +scsiTarget_datapath_PI__MASK_REG EQU CYREG_B0_UDB04_MSK +scsiTarget_datapath_PI__MASK_ST_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath_PI__PER_ST_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath_PI__STATUS_AUX_CTL_REG EQU CYREG_B0_UDB04_ACTL +scsiTarget_datapath_PI__STATUS_CNT_REG EQU CYREG_B0_UDB04_ST_CTL +scsiTarget_datapath_PI__STATUS_CONTROL_REG EQU CYREG_B0_UDB04_ST_CTL +scsiTarget_datapath_PI__STATUS_REG EQU CYREG_B0_UDB04_ST +scsiTarget_datapath_PO__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB04_05_ACTL +scsiTarget_datapath_PO__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB04_05_CTL +scsiTarget_datapath_PO__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB04_05_CTL +scsiTarget_datapath_PO__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB04_05_CTL +scsiTarget_datapath_PO__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB04_05_CTL +scsiTarget_datapath_PO__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB04_05_MSK +scsiTarget_datapath_PO__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB04_05_MSK +scsiTarget_datapath_PO__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB04_05_MSK +scsiTarget_datapath_PO__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB04_05_MSK +scsiTarget_datapath_PO__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB04_ACTL +scsiTarget_datapath_PO__CONTROL_REG EQU CYREG_B0_UDB04_CTL +scsiTarget_datapath_PO__CONTROL_ST_REG EQU CYREG_B0_UDB04_ST_CTL +scsiTarget_datapath_PO__COUNT_REG EQU CYREG_B0_UDB04_CTL +scsiTarget_datapath_PO__COUNT_ST_REG EQU CYREG_B0_UDB04_ST_CTL +scsiTarget_datapath_PO__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath_PO__PERIOD_REG EQU CYREG_B0_UDB04_MSK +scsiTarget_datapath_PO__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath__16BIT_A0_REG EQU CYREG_B0_UDB04_05_A0 +scsiTarget_datapath__16BIT_A1_REG EQU CYREG_B0_UDB04_05_A1 +scsiTarget_datapath__16BIT_D0_REG EQU CYREG_B0_UDB04_05_D0 +scsiTarget_datapath__16BIT_D1_REG EQU CYREG_B0_UDB04_05_D1 +scsiTarget_datapath__16BIT_DP_AUX_CTL_REG EQU CYREG_B0_UDB04_05_ACTL +scsiTarget_datapath__16BIT_F0_REG EQU CYREG_B0_UDB04_05_F0 +scsiTarget_datapath__16BIT_F1_REG EQU CYREG_B0_UDB04_05_F1 +scsiTarget_datapath__A0_A1_REG EQU CYREG_B0_UDB04_A0_A1 +scsiTarget_datapath__A0_REG EQU CYREG_B0_UDB04_A0 +scsiTarget_datapath__A1_REG EQU CYREG_B0_UDB04_A1 +scsiTarget_datapath__D0_D1_REG EQU CYREG_B0_UDB04_D0_D1 +scsiTarget_datapath__D0_REG EQU CYREG_B0_UDB04_D0 +scsiTarget_datapath__D1_REG EQU CYREG_B0_UDB04_D1 +scsiTarget_datapath__DP_AUX_CTL_REG EQU CYREG_B0_UDB04_ACTL +scsiTarget_datapath__F0_F1_REG EQU CYREG_B0_UDB04_F0_F1 +scsiTarget_datapath__F0_REG EQU CYREG_B0_UDB04_F0 +scsiTarget_datapath__F1_REG EQU CYREG_B0_UDB04_F1 +scsiTarget_datapath__MSK_DP_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL +scsiTarget_datapath__PER_DP_AUX_CTL_REG EQU CYREG_B0_UDB04_MSK_ACTL + ; SD_Clk_Ctl SD_Clk_Ctl_Sync_ctrl_reg__0__MASK EQU 0x01 SD_Clk_Ctl_Sync_ctrl_reg__0__POS EQU 0 -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B1_UDB07_08_ACTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG EQU CYREG_B1_UDB07_08_CTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG EQU CYREG_B1_UDB07_08_CTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG EQU CYREG_B1_UDB07_08_CTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG EQU CYREG_B1_UDB07_08_CTL -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_MASK_REG EQU CYREG_B1_UDB07_08_MSK -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG EQU CYREG_B1_UDB07_08_MSK -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG EQU CYREG_B1_UDB07_08_MSK -SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG EQU CYREG_B1_UDB07_08_MSK -SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_AUX_CTL_REG EQU CYREG_B1_UDB07_ACTL -SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_REG EQU CYREG_B1_UDB07_CTL -SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_ST_REG EQU CYREG_B1_UDB07_ST_CTL -SD_Clk_Ctl_Sync_ctrl_reg__COUNT_REG EQU CYREG_B1_UDB07_CTL -SD_Clk_Ctl_Sync_ctrl_reg__COUNT_ST_REG EQU CYREG_B1_UDB07_ST_CTL -SD_Clk_Ctl_Sync_ctrl_reg__MASK EQU 0x01 -SD_Clk_Ctl_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG EQU CYREG_B1_UDB07_MSK_ACTL -SD_Clk_Ctl_Sync_ctrl_reg__PERIOD_REG EQU CYREG_B1_UDB07_MSK -SD_Clk_Ctl_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG EQU CYREG_B1_UDB07_MSK_ACTL - -; PARITY_EN -PARITY_EN__0__MASK EQU 0x10 -PARITY_EN__0__PC EQU CYREG_PRT5_PC4 -PARITY_EN__0__PORT EQU 5 -PARITY_EN__0__SHIFT EQU 4 -PARITY_EN__AG EQU CYREG_PRT5_AG -PARITY_EN__AMUX EQU CYREG_PRT5_AMUX -PARITY_EN__BIE EQU CYREG_PRT5_BIE -PARITY_EN__BIT_MASK EQU CYREG_PRT5_BIT_MASK -PARITY_EN__BYP EQU CYREG_PRT5_BYP -PARITY_EN__CTL EQU CYREG_PRT5_CTL -PARITY_EN__DM0 EQU CYREG_PRT5_DM0 -PARITY_EN__DM1 EQU CYREG_PRT5_DM1 -PARITY_EN__DM2 EQU CYREG_PRT5_DM2 -PARITY_EN__DR EQU CYREG_PRT5_DR -PARITY_EN__INP_DIS EQU CYREG_PRT5_INP_DIS -PARITY_EN__LCD_COM_SEG EQU CYREG_PRT5_LCD_COM_SEG -PARITY_EN__LCD_EN EQU CYREG_PRT5_LCD_EN -PARITY_EN__MASK EQU 0x10 -PARITY_EN__PORT EQU 5 -PARITY_EN__PRT EQU CYREG_PRT5_PRT -PARITY_EN__PRTDSI__CAPS_SEL EQU CYREG_PRT5_CAPS_SEL -PARITY_EN__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT5_DBL_SYNC_IN -PARITY_EN__PRTDSI__OE_SEL0 EQU CYREG_PRT5_OE_SEL0 -PARITY_EN__PRTDSI__OE_SEL1 EQU CYREG_PRT5_OE_SEL1 -PARITY_EN__PRTDSI__OUT_SEL0 EQU CYREG_PRT5_OUT_SEL0 -PARITY_EN__PRTDSI__OUT_SEL1 EQU CYREG_PRT5_OUT_SEL1 -PARITY_EN__PRTDSI__SYNC_OUT EQU CYREG_PRT5_SYNC_OUT -PARITY_EN__PS EQU CYREG_PRT5_PS -PARITY_EN__SHIFT EQU 4 -PARITY_EN__SLW EQU CYREG_PRT5_SLW +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB11_12_ACTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_CONTROL_REG EQU CYREG_B0_UDB11_12_CTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_CONTROL_COUNT_REG EQU CYREG_B0_UDB11_12_CTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_CONTROL_REG EQU CYREG_B0_UDB11_12_CTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_COUNT_COUNT_REG EQU CYREG_B0_UDB11_12_CTL +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_MASK_REG EQU CYREG_B0_UDB11_12_MSK +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_MASK_PERIOD_REG EQU CYREG_B0_UDB11_12_MSK +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_MASK_REG EQU CYREG_B0_UDB11_12_MSK +SD_Clk_Ctl_Sync_ctrl_reg__16BIT_PERIOD_PERIOD_REG EQU CYREG_B0_UDB11_12_MSK +SD_Clk_Ctl_Sync_ctrl_reg__1__MASK EQU 0x02 +SD_Clk_Ctl_Sync_ctrl_reg__1__POS EQU 1 +SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_AUX_CTL_REG EQU CYREG_B0_UDB11_ACTL +SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_REG EQU CYREG_B0_UDB11_CTL +SD_Clk_Ctl_Sync_ctrl_reg__CONTROL_ST_REG EQU CYREG_B0_UDB11_ST_CTL +SD_Clk_Ctl_Sync_ctrl_reg__COUNT_REG EQU CYREG_B0_UDB11_CTL +SD_Clk_Ctl_Sync_ctrl_reg__COUNT_ST_REG EQU CYREG_B0_UDB11_ST_CTL +SD_Clk_Ctl_Sync_ctrl_reg__MASK EQU 0x03 +SD_Clk_Ctl_Sync_ctrl_reg__MASK_CTL_AUX_CTL_REG EQU CYREG_B0_UDB11_MSK_ACTL +SD_Clk_Ctl_Sync_ctrl_reg__PERIOD_REG EQU CYREG_B0_UDB11_MSK +SD_Clk_Ctl_Sync_ctrl_reg__PER_CTL_AUX_CTL_REG EQU CYREG_B0_UDB11_MSK_ACTL ; SCSI_ATN SCSI_ATN__0__MASK EQU 0x20 @@ -372,6 +427,7 @@ SCSI_ATN__DM1 EQU CYREG_PRT12_DM1 SCSI_ATN__DM2 EQU CYREG_PRT12_DM2 SCSI_ATN__DR EQU CYREG_PRT12_DR SCSI_ATN__INP_DIS EQU CYREG_PRT12_INP_DIS +SCSI_ATN__INTSTAT EQU CYREG_PICU12_INTSTAT SCSI_ATN__INT__MASK EQU 0x20 SCSI_ATN__INT__PC EQU CYREG_PRT12_PC5 SCSI_ATN__INT__PORT EQU 12 @@ -392,6 +448,7 @@ SCSI_ATN__SIO_DIFF EQU CYREG_PRT12_SIO_DIFF SCSI_ATN__SIO_HYST_EN EQU CYREG_PRT12_SIO_HYST_EN SCSI_ATN__SIO_REG_HIFREQ EQU CYREG_PRT12_SIO_REG_HIFREQ SCSI_ATN__SLW EQU CYREG_PRT12_SLW +SCSI_ATN__SNAP EQU CYREG_PICU12_SNAP ; SCSI_Out SCSI_Out__0__AG EQU CYREG_PRT4_AG @@ -772,60 +829,60 @@ SCSI_Out__CD__PRTDSI__SYNC_OUT EQU CYREG_PRT6_SYNC_OUT SCSI_Out__CD__PS EQU CYREG_PRT6_PS SCSI_Out__CD__SHIFT EQU 1 SCSI_Out__CD__SLW EQU CYREG_PRT6_SLW -SCSI_Out__DBP__AG EQU CYREG_PRT4_AG -SCSI_Out__DBP__AMUX EQU CYREG_PRT4_AMUX -SCSI_Out__DBP__BIE EQU CYREG_PRT4_BIE -SCSI_Out__DBP__BIT_MASK EQU CYREG_PRT4_BIT_MASK -SCSI_Out__DBP__BYP EQU CYREG_PRT4_BYP -SCSI_Out__DBP__CTL EQU CYREG_PRT4_CTL -SCSI_Out__DBP__DM0 EQU CYREG_PRT4_DM0 -SCSI_Out__DBP__DM1 EQU CYREG_PRT4_DM1 -SCSI_Out__DBP__DM2 EQU CYREG_PRT4_DM2 -SCSI_Out__DBP__DR EQU CYREG_PRT4_DR -SCSI_Out__DBP__INP_DIS EQU CYREG_PRT4_INP_DIS -SCSI_Out__DBP__LCD_COM_SEG EQU CYREG_PRT4_LCD_COM_SEG -SCSI_Out__DBP__LCD_EN EQU CYREG_PRT4_LCD_EN -SCSI_Out__DBP__MASK EQU 0x04 -SCSI_Out__DBP__PC EQU CYREG_PRT4_PC2 -SCSI_Out__DBP__PORT EQU 4 -SCSI_Out__DBP__PRT EQU CYREG_PRT4_PRT -SCSI_Out__DBP__PRTDSI__CAPS_SEL EQU CYREG_PRT4_CAPS_SEL -SCSI_Out__DBP__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT4_DBL_SYNC_IN -SCSI_Out__DBP__PRTDSI__OE_SEL0 EQU CYREG_PRT4_OE_SEL0 -SCSI_Out__DBP__PRTDSI__OE_SEL1 EQU CYREG_PRT4_OE_SEL1 -SCSI_Out__DBP__PRTDSI__OUT_SEL0 EQU CYREG_PRT4_OUT_SEL0 -SCSI_Out__DBP__PRTDSI__OUT_SEL1 EQU CYREG_PRT4_OUT_SEL1 -SCSI_Out__DBP__PRTDSI__SYNC_OUT EQU CYREG_PRT4_SYNC_OUT -SCSI_Out__DBP__PS EQU CYREG_PRT4_PS -SCSI_Out__DBP__SHIFT EQU 2 -SCSI_Out__DBP__SLW EQU CYREG_PRT4_SLW -SCSI_Out__IO__AG EQU CYREG_PRT6_AG -SCSI_Out__IO__AMUX EQU CYREG_PRT6_AMUX -SCSI_Out__IO__BIE EQU CYREG_PRT6_BIE -SCSI_Out__IO__BIT_MASK EQU CYREG_PRT6_BIT_MASK -SCSI_Out__IO__BYP EQU CYREG_PRT6_BYP -SCSI_Out__IO__CTL EQU CYREG_PRT6_CTL -SCSI_Out__IO__DM0 EQU CYREG_PRT6_DM0 -SCSI_Out__IO__DM1 EQU CYREG_PRT6_DM1 -SCSI_Out__IO__DM2 EQU CYREG_PRT6_DM2 -SCSI_Out__IO__DR EQU CYREG_PRT6_DR -SCSI_Out__IO__INP_DIS EQU CYREG_PRT6_INP_DIS -SCSI_Out__IO__LCD_COM_SEG EQU CYREG_PRT6_LCD_COM_SEG -SCSI_Out__IO__LCD_EN EQU CYREG_PRT6_LCD_EN -SCSI_Out__IO__MASK EQU 0x08 -SCSI_Out__IO__PC EQU CYREG_PRT6_PC3 -SCSI_Out__IO__PORT EQU 6 -SCSI_Out__IO__PRT EQU CYREG_PRT6_PRT -SCSI_Out__IO__PRTDSI__CAPS_SEL EQU CYREG_PRT6_CAPS_SEL -SCSI_Out__IO__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT6_DBL_SYNC_IN -SCSI_Out__IO__PRTDSI__OE_SEL0 EQU CYREG_PRT6_OE_SEL0 -SCSI_Out__IO__PRTDSI__OE_SEL1 EQU CYREG_PRT6_OE_SEL1 -SCSI_Out__IO__PRTDSI__OUT_SEL0 EQU CYREG_PRT6_OUT_SEL0 -SCSI_Out__IO__PRTDSI__OUT_SEL1 EQU CYREG_PRT6_OUT_SEL1 -SCSI_Out__IO__PRTDSI__SYNC_OUT EQU CYREG_PRT6_SYNC_OUT -SCSI_Out__IO__PS EQU CYREG_PRT6_PS -SCSI_Out__IO__SHIFT EQU 3 -SCSI_Out__IO__SLW EQU CYREG_PRT6_SLW +SCSI_Out__DBP_raw__AG EQU CYREG_PRT4_AG +SCSI_Out__DBP_raw__AMUX EQU CYREG_PRT4_AMUX +SCSI_Out__DBP_raw__BIE EQU CYREG_PRT4_BIE +SCSI_Out__DBP_raw__BIT_MASK EQU CYREG_PRT4_BIT_MASK +SCSI_Out__DBP_raw__BYP EQU CYREG_PRT4_BYP +SCSI_Out__DBP_raw__CTL EQU CYREG_PRT4_CTL +SCSI_Out__DBP_raw__DM0 EQU CYREG_PRT4_DM0 +SCSI_Out__DBP_raw__DM1 EQU CYREG_PRT4_DM1 +SCSI_Out__DBP_raw__DM2 EQU CYREG_PRT4_DM2 +SCSI_Out__DBP_raw__DR EQU CYREG_PRT4_DR +SCSI_Out__DBP_raw__INP_DIS EQU CYREG_PRT4_INP_DIS +SCSI_Out__DBP_raw__LCD_COM_SEG EQU CYREG_PRT4_LCD_COM_SEG +SCSI_Out__DBP_raw__LCD_EN EQU CYREG_PRT4_LCD_EN +SCSI_Out__DBP_raw__MASK EQU 0x04 +SCSI_Out__DBP_raw__PC EQU CYREG_PRT4_PC2 +SCSI_Out__DBP_raw__PORT EQU 4 +SCSI_Out__DBP_raw__PRT EQU CYREG_PRT4_PRT +SCSI_Out__DBP_raw__PRTDSI__CAPS_SEL EQU CYREG_PRT4_CAPS_SEL +SCSI_Out__DBP_raw__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT4_DBL_SYNC_IN +SCSI_Out__DBP_raw__PRTDSI__OE_SEL0 EQU CYREG_PRT4_OE_SEL0 +SCSI_Out__DBP_raw__PRTDSI__OE_SEL1 EQU CYREG_PRT4_OE_SEL1 +SCSI_Out__DBP_raw__PRTDSI__OUT_SEL0 EQU CYREG_PRT4_OUT_SEL0 +SCSI_Out__DBP_raw__PRTDSI__OUT_SEL1 EQU CYREG_PRT4_OUT_SEL1 +SCSI_Out__DBP_raw__PRTDSI__SYNC_OUT EQU CYREG_PRT4_SYNC_OUT +SCSI_Out__DBP_raw__PS EQU CYREG_PRT4_PS +SCSI_Out__DBP_raw__SHIFT EQU 2 +SCSI_Out__DBP_raw__SLW EQU CYREG_PRT4_SLW +SCSI_Out__IO_raw__AG EQU CYREG_PRT6_AG +SCSI_Out__IO_raw__AMUX EQU CYREG_PRT6_AMUX +SCSI_Out__IO_raw__BIE EQU CYREG_PRT6_BIE +SCSI_Out__IO_raw__BIT_MASK EQU CYREG_PRT6_BIT_MASK +SCSI_Out__IO_raw__BYP EQU CYREG_PRT6_BYP +SCSI_Out__IO_raw__CTL EQU CYREG_PRT6_CTL +SCSI_Out__IO_raw__DM0 EQU CYREG_PRT6_DM0 +SCSI_Out__IO_raw__DM1 EQU CYREG_PRT6_DM1 +SCSI_Out__IO_raw__DM2 EQU CYREG_PRT6_DM2 +SCSI_Out__IO_raw__DR EQU CYREG_PRT6_DR +SCSI_Out__IO_raw__INP_DIS EQU CYREG_PRT6_INP_DIS +SCSI_Out__IO_raw__LCD_COM_SEG EQU CYREG_PRT6_LCD_COM_SEG +SCSI_Out__IO_raw__LCD_EN EQU CYREG_PRT6_LCD_EN +SCSI_Out__IO_raw__MASK EQU 0x08 +SCSI_Out__IO_raw__PC EQU CYREG_PRT6_PC3 +SCSI_Out__IO_raw__PORT EQU 6 +SCSI_Out__IO_raw__PRT EQU CYREG_PRT6_PRT +SCSI_Out__IO_raw__PRTDSI__CAPS_SEL EQU CYREG_PRT6_CAPS_SEL +SCSI_Out__IO_raw__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT6_DBL_SYNC_IN +SCSI_Out__IO_raw__PRTDSI__OE_SEL0 EQU CYREG_PRT6_OE_SEL0 +SCSI_Out__IO_raw__PRTDSI__OE_SEL1 EQU CYREG_PRT6_OE_SEL1 +SCSI_Out__IO_raw__PRTDSI__OUT_SEL0 EQU CYREG_PRT6_OUT_SEL0 +SCSI_Out__IO_raw__PRTDSI__OUT_SEL1 EQU CYREG_PRT6_OUT_SEL1 +SCSI_Out__IO_raw__PRTDSI__SYNC_OUT EQU CYREG_PRT6_SYNC_OUT +SCSI_Out__IO_raw__PS EQU CYREG_PRT6_PS +SCSI_Out__IO_raw__SHIFT EQU 3 +SCSI_Out__IO_raw__SLW EQU CYREG_PRT6_SLW SCSI_Out__MSG__AG EQU CYREG_PRT4_AG SCSI_Out__MSG__AMUX EQU CYREG_PRT4_AMUX SCSI_Out__MSG__BIE EQU CYREG_PRT4_BIE @@ -973,44 +1030,6 @@ SCSI_RST__SHIFT EQU 6 SCSI_RST__SLW EQU CYREG_PRT6_SLW SCSI_RST__SNAP EQU CYREG_PICU6_SNAP -; SCSI_ID -SCSI_ID__0__MASK EQU 0x80 -SCSI_ID__0__PC EQU CYREG_PRT5_PC7 -SCSI_ID__0__PORT EQU 5 -SCSI_ID__0__SHIFT EQU 7 -SCSI_ID__1__MASK EQU 0x40 -SCSI_ID__1__PC EQU CYREG_PRT5_PC6 -SCSI_ID__1__PORT EQU 5 -SCSI_ID__1__SHIFT EQU 6 -SCSI_ID__2__MASK EQU 0x20 -SCSI_ID__2__PC EQU CYREG_PRT5_PC5 -SCSI_ID__2__PORT EQU 5 -SCSI_ID__2__SHIFT EQU 5 -SCSI_ID__AG EQU CYREG_PRT5_AG -SCSI_ID__AMUX EQU CYREG_PRT5_AMUX -SCSI_ID__BIE EQU CYREG_PRT5_BIE -SCSI_ID__BIT_MASK EQU CYREG_PRT5_BIT_MASK -SCSI_ID__BYP EQU CYREG_PRT5_BYP -SCSI_ID__CTL EQU CYREG_PRT5_CTL -SCSI_ID__DM0 EQU CYREG_PRT5_DM0 -SCSI_ID__DM1 EQU CYREG_PRT5_DM1 -SCSI_ID__DM2 EQU CYREG_PRT5_DM2 -SCSI_ID__DR EQU CYREG_PRT5_DR -SCSI_ID__INP_DIS EQU CYREG_PRT5_INP_DIS -SCSI_ID__LCD_COM_SEG EQU CYREG_PRT5_LCD_COM_SEG -SCSI_ID__LCD_EN EQU CYREG_PRT5_LCD_EN -SCSI_ID__PORT EQU 5 -SCSI_ID__PRT EQU CYREG_PRT5_PRT -SCSI_ID__PRTDSI__CAPS_SEL EQU CYREG_PRT5_CAPS_SEL -SCSI_ID__PRTDSI__DBL_SYNC_IN EQU CYREG_PRT5_DBL_SYNC_IN -SCSI_ID__PRTDSI__OE_SEL0 EQU CYREG_PRT5_OE_SEL0 -SCSI_ID__PRTDSI__OE_SEL1 EQU CYREG_PRT5_OE_SEL1 -SCSI_ID__PRTDSI__OUT_SEL0 EQU CYREG_PRT5_OUT_SEL0 -SCSI_ID__PRTDSI__OUT_SEL1 EQU CYREG_PRT5_OUT_SEL1 -SCSI_ID__PRTDSI__SYNC_OUT EQU CYREG_PRT5_SYNC_OUT -SCSI_ID__PS EQU CYREG_PRT5_PS -SCSI_ID__SLW EQU CYREG_PRT5_SLW - ; SCSI_In SCSI_In__0__AG EQU CYREG_PRT12_AG SCSI_In__0__BIE EQU CYREG_PRT12_BIE @@ -1805,7 +1824,7 @@ CYDEV_DMA_CHANNELS_AVAILABLE EQU 24 CYDEV_ECC_ENABLE EQU 0 CYDEV_HEAP_SIZE EQU 0x1000 CYDEV_INSTRUCT_CACHE_ENABLED EQU 1 -CYDEV_INTR_RISING EQU 0x00000001 +CYDEV_INTR_RISING EQU 0x00000000 CYDEV_PROJ_TYPE EQU 0 CYDEV_PROJ_TYPE_BOOTLOADER EQU 1 CYDEV_PROJ_TYPE_LOADABLE EQU 2 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c index 6fd46ba..2f14425 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/cymetadata.c @@ -26,131 +26,276 @@ __attribute__ ((__section__(".cyconfigecc"), used)) #error "Unsupported toolchain" #endif const uint8 cy_meta_configecc[] = { - 0x01u, 0x45u, 0x00u, 0x40u, 0x07u, 0x52u, 0x00u, 0x40u, - 0x01u, 0x64u, 0x00u, 0x40u, 0x02u, 0x03u, 0x01u, 0x40u, - 0x3Fu, 0x04u, 0x01u, 0x40u, 0x2Au, 0x05u, 0x01u, 0x40u, - 0x03u, 0x06u, 0x01u, 0x40u, 0x41u, 0x07u, 0x01u, 0x40u, - 0x01u, 0x0Du, 0x01u, 0x40u, 0x09u, 0x15u, 0x01u, 0x40u, - 0x43u, 0x16u, 0x01u, 0x40u, 0x3Au, 0x17u, 0x01u, 0x40u, - 0x02u, 0x40u, 0x01u, 0x40u, 0x01u, 0x41u, 0x01u, 0x40u, - 0x01u, 0x42u, 0x01u, 0x40u, 0x02u, 0x43u, 0x01u, 0x40u, - 0x02u, 0x44u, 0x01u, 0x40u, 0x02u, 0x45u, 0x01u, 0x40u, - 0x04u, 0x48u, 0x01u, 0x40u, 0x0Eu, 0x49u, 0x01u, 0x40u, - 0x04u, 0x50u, 0x01u, 0x40u, 0x01u, 0x51u, 0x01u, 0x40u, - 0x36u, 0x02u, 0x14u, 0xFFu, 0x18u, 0x04u, 0x19u, 0x0Cu, - 0x1Cu, 0xE1u, 0x2Cu, 0xFFu, 0x34u, 0xF0u, 0x64u, 0x10u, - 0x86u, 0x0Fu, 0x98u, 0x40u, 0xB0u, 0x40u, 0x00u, 0x01u, - 0x1Du, 0x01u, 0x2Du, 0x01u, 0x30u, 0x01u, 0x31u, 0x01u, - 0x39u, 0x02u, 0x3Eu, 0x01u, 0x56u, 0x08u, 0x58u, 0x04u, - 0x59u, 0x0Bu, 0x5Bu, 0x04u, 0x5Cu, 0x90u, 0x5Du, 0x90u, - 0x5Fu, 0x01u, 0x80u, 0x6Cu, 0x81u, 0x41u, 0x84u, 0x68u, - 0x86u, 0x04u, 0x88u, 0x6Cu, 0x89u, 0x81u, 0x8Bu, 0x40u, - 0x8Du, 0x41u, 0x91u, 0x04u, 0x92u, 0x02u, 0x94u, 0x10u, - 0x95u, 0xE2u, 0x96u, 0x68u, 0x97u, 0x08u, 0x98u, 0x10u, - 0x99u, 0x88u, 0x9Au, 0xC5u, 0x9Bu, 0x61u, 0x9Cu, 0x6Cu, - 0x9Du, 0x47u, 0x9Fu, 0x98u, 0xA0u, 0x6Cu, 0xA1u, 0x10u, - 0xA4u, 0x04u, 0xA5u, 0x41u, 0xA8u, 0x93u, 0xA9u, 0x40u, - 0xAAu, 0x20u, 0xACu, 0x0Fu, 0xADu, 0x01u, 0xAEu, 0x90u, - 0xAFu, 0x40u, 0xB2u, 0x78u, 0xB4u, 0x07u, 0xB5u, 0xC0u, - 0xB6u, 0x80u, 0xB7u, 0x3Fu, 0xB9u, 0x80u, 0xBAu, 0x38u, - 0xBBu, 0x20u, 0xBEu, 0x40u, 0xBFu, 0x40u, 0xD4u, 0x09u, + 0x02u, 0x45u, 0x00u, 0x40u, 0x08u, 0x52u, 0x00u, 0x40u, + 0x02u, 0x64u, 0x00u, 0x40u, 0x45u, 0x00u, 0x01u, 0x40u, + 0x32u, 0x01u, 0x01u, 0x40u, 0x44u, 0x02u, 0x01u, 0x40u, + 0x54u, 0x03u, 0x01u, 0x40u, 0x3Du, 0x04u, 0x01u, 0x40u, + 0x5Bu, 0x05u, 0x01u, 0x40u, 0x0Bu, 0x06u, 0x01u, 0x40u, + 0x4Eu, 0x07u, 0x01u, 0x40u, 0x10u, 0x09u, 0x01u, 0x40u, + 0x3Cu, 0x0Au, 0x01u, 0x40u, 0x3Fu, 0x0Bu, 0x01u, 0x40u, + 0x0Au, 0x0Du, 0x01u, 0x40u, 0x02u, 0x0Fu, 0x01u, 0x40u, + 0x03u, 0x15u, 0x01u, 0x40u, 0x48u, 0x16u, 0x01u, 0x40u, + 0x43u, 0x17u, 0x01u, 0x40u, 0x03u, 0x19u, 0x01u, 0x40u, + 0x02u, 0x1Bu, 0x01u, 0x40u, 0x07u, 0x40u, 0x01u, 0x40u, + 0x10u, 0x41u, 0x01u, 0x40u, 0x08u, 0x42u, 0x01u, 0x40u, + 0x05u, 0x43u, 0x01u, 0x40u, 0x08u, 0x44u, 0x01u, 0x40u, + 0x13u, 0x45u, 0x01u, 0x40u, 0x06u, 0x46u, 0x01u, 0x40u, + 0x01u, 0x47u, 0x01u, 0x40u, 0x08u, 0x48u, 0x01u, 0x40u, + 0x09u, 0x49u, 0x01u, 0x40u, 0x06u, 0x50u, 0x01u, 0x40u, + 0x36u, 0x02u, 0x65u, 0x02u, 0x00u, 0xC9u, 0x01u, 0x9Cu, + 0x18u, 0x08u, 0x19u, 0x04u, 0x1Cu, 0xE1u, 0x21u, 0x04u, + 0x30u, 0x04u, 0x31u, 0x08u, 0x34u, 0x03u, 0x82u, 0x0Fu, + 0x01u, 0x40u, 0x06u, 0x0Cu, 0x07u, 0x18u, 0x0Au, 0x60u, + 0x0Cu, 0x02u, 0x0Fu, 0x20u, 0x10u, 0x90u, 0x12u, 0x48u, + 0x14u, 0x90u, 0x16u, 0x24u, 0x17u, 0x24u, 0x19u, 0x24u, + 0x1Au, 0x10u, 0x1Bu, 0x09u, 0x1Fu, 0x03u, 0x23u, 0x04u, + 0x26u, 0x80u, 0x2Au, 0x90u, 0x2Cu, 0x01u, 0x2Du, 0x24u, + 0x2Fu, 0x12u, 0x30u, 0x01u, 0x31u, 0x40u, 0x32u, 0x1Cu, + 0x33u, 0x38u, 0x34u, 0xE0u, 0x36u, 0x02u, 0x37u, 0x07u, + 0x3Eu, 0x41u, 0x3Fu, 0x01u, 0x58u, 0x04u, 0x59u, 0x04u, + 0x5Bu, 0x04u, 0x5Cu, 0x99u, 0x5Fu, 0x01u, 0x85u, 0x01u, + 0x87u, 0x2Cu, 0x88u, 0x08u, 0x89u, 0x32u, 0x8Bu, 0x01u, + 0x8Fu, 0x08u, 0x90u, 0x04u, 0x92u, 0x02u, 0x96u, 0x03u, + 0x97u, 0x40u, 0x98u, 0x04u, 0x99u, 0x06u, 0x9Au, 0x01u, + 0x9Eu, 0x04u, 0xA0u, 0x08u, 0xA4u, 0x08u, 0xA5u, 0x01u, + 0xA7u, 0x1Au, 0xAAu, 0x04u, 0xABu, 0x40u, 0xACu, 0x08u, + 0xB2u, 0x07u, 0xB3u, 0x07u, 0xB4u, 0x08u, 0xB5u, 0x40u, + 0xB7u, 0x38u, 0xB8u, 0x20u, 0xB9u, 0x08u, 0xBEu, 0x10u, + 0xBFu, 0x10u, 0xD8u, 0x04u, 0xD9u, 0x0Bu, 0xDCu, 0x99u, + 0xDFu, 0x01u, 0x01u, 0x28u, 0x03u, 0x02u, 0x05u, 0x10u, + 0x0Au, 0x78u, 0x0Cu, 0x80u, 0x0Du, 0x10u, 0x0Eu, 0x60u, + 0x12u, 0x0Cu, 0x13u, 0x48u, 0x14u, 0x90u, 0x16u, 0x04u, + 0x17u, 0x40u, 0x18u, 0x40u, 0x19u, 0xA8u, 0x1Bu, 0x20u, + 0x1Eu, 0x20u, 0x1Fu, 0x14u, 0x21u, 0x84u, 0x22u, 0x01u, + 0x25u, 0x40u, 0x27u, 0x14u, 0x29u, 0x01u, 0x2Bu, 0x01u, + 0x2Eu, 0x14u, 0x31u, 0x80u, 0x32u, 0x18u, 0x36u, 0x08u, + 0x37u, 0x10u, 0x39u, 0x48u, 0x3Au, 0x08u, 0x3Bu, 0x01u, + 0x3Du, 0x80u, 0x3Fu, 0x14u, 0x69u, 0x80u, 0x6Bu, 0x01u, + 0x7Eu, 0x80u, 0x81u, 0x80u, 0x83u, 0x04u, 0x85u, 0x40u, + 0x8Bu, 0x10u, 0x8Fu, 0x01u, 0xC0u, 0x47u, 0xC2u, 0xFEu, + 0xC4u, 0xF7u, 0xCAu, 0x69u, 0xCCu, 0x6Eu, 0xCEu, 0x7Bu, + 0xDEu, 0x80u, 0xE0u, 0x01u, 0xE2u, 0x20u, 0x04u, 0x0Fu, + 0x05u, 0x55u, 0x06u, 0xF0u, 0x07u, 0xAAu, 0x0Bu, 0xFFu, + 0x0Eu, 0xFFu, 0x10u, 0xFFu, 0x13u, 0xFFu, 0x15u, 0x0Fu, + 0x16u, 0xFFu, 0x17u, 0xF0u, 0x1Du, 0x69u, 0x1Fu, 0x96u, + 0x24u, 0x33u, 0x25u, 0x33u, 0x26u, 0xCCu, 0x27u, 0xCCu, + 0x28u, 0x55u, 0x2Au, 0xAAu, 0x2Bu, 0xFFu, 0x2Cu, 0x96u, + 0x2Eu, 0x69u, 0x31u, 0xFFu, 0x34u, 0xFFu, 0x3Eu, 0x10u, + 0x3Fu, 0x01u, 0x56u, 0x02u, 0x57u, 0x2Cu, 0x58u, 0x04u, + 0x59u, 0x04u, 0x5Bu, 0x0Bu, 0x5Du, 0x90u, 0x5Fu, 0x01u, + 0x84u, 0x38u, 0x85u, 0x10u, 0x8Au, 0x45u, 0x8Eu, 0x38u, + 0x90u, 0x07u, 0x92u, 0x40u, 0x94u, 0x06u, 0x96u, 0x40u, + 0x98u, 0x08u, 0x9Cu, 0x02u, 0x9Du, 0x03u, 0x9Fu, 0x0Cu, + 0xA0u, 0x02u, 0xA1u, 0x05u, 0xA3u, 0x0Au, 0xA6u, 0x10u, + 0xA8u, 0x20u, 0xA9u, 0x06u, 0xABu, 0x09u, 0xACu, 0x01u, + 0xAEu, 0x02u, 0xB0u, 0x07u, 0xB1u, 0x0Fu, 0xB2u, 0x40u, + 0xB5u, 0x10u, 0xB6u, 0x38u, 0xBEu, 0x44u, 0xBFu, 0x11u, + 0xD4u, 0x40u, 0xD8u, 0x04u, 0xD9u, 0x04u, 0xDBu, 0x0Bu, + 0xDCu, 0x09u, 0xDDu, 0x90u, 0xDFu, 0x01u, 0x02u, 0x0Au, + 0x03u, 0x10u, 0x05u, 0x08u, 0x07u, 0x01u, 0x0Au, 0x64u, + 0x0Bu, 0x02u, 0x0Cu, 0x02u, 0x0Eu, 0x20u, 0x10u, 0x01u, + 0x12u, 0x40u, 0x13u, 0x14u, 0x15u, 0x04u, 0x16u, 0x08u, + 0x17u, 0x80u, 0x1Au, 0x50u, 0x1Bu, 0x41u, 0x1Du, 0x10u, + 0x20u, 0x04u, 0x23u, 0x80u, 0x27u, 0x40u, 0x28u, 0x40u, + 0x29u, 0x20u, 0x2Du, 0x04u, 0x2Fu, 0x24u, 0x31u, 0x80u, + 0x35u, 0x08u, 0x37u, 0x81u, 0x3Au, 0x04u, 0x3Cu, 0x20u, + 0x3Eu, 0x08u, 0x61u, 0x20u, 0x63u, 0x21u, 0x67u, 0x80u, + 0x6Cu, 0x20u, 0x6Du, 0x91u, 0x6Fu, 0x02u, 0x76u, 0x02u, + 0x77u, 0x02u, 0x78u, 0x02u, 0x7Au, 0x03u, 0x7Eu, 0x80u, + 0x81u, 0x20u, 0x82u, 0x04u, 0x83u, 0x40u, 0x84u, 0x80u, + 0x86u, 0x10u, 0x88u, 0x10u, 0x8Eu, 0x40u, 0x90u, 0x40u, + 0x91u, 0x80u, 0x92u, 0x02u, 0x93u, 0x08u, 0x95u, 0x60u, + 0x96u, 0x6Cu, 0x97u, 0x14u, 0x98u, 0x01u, 0x99u, 0x88u, + 0x9Au, 0x08u, 0x9Bu, 0x11u, 0x9Cu, 0x90u, 0x9Du, 0x11u, + 0x9Fu, 0x48u, 0xA1u, 0x80u, 0xA2u, 0x10u, 0xA3u, 0x20u, + 0xA4u, 0x80u, 0xA6u, 0x88u, 0xA7u, 0x01u, 0xAFu, 0x01u, + 0xB0u, 0x01u, 0xB3u, 0x40u, 0xB7u, 0x02u, 0xC0u, 0xA7u, + 0xC2u, 0x3Fu, 0xC4u, 0xEFu, 0xCAu, 0x65u, 0xCCu, 0xD8u, + 0xCEu, 0x62u, 0xD8u, 0x8Eu, 0xDEu, 0x81u, 0xE2u, 0x01u, + 0xE4u, 0x08u, 0xE6u, 0x03u, 0xE8u, 0x02u, 0x00u, 0x03u, + 0x0Au, 0x01u, 0x0Fu, 0x08u, 0x15u, 0x28u, 0x17u, 0x44u, + 0x19u, 0x2Cu, 0x1Bu, 0x81u, 0x1Eu, 0x03u, 0x1Fu, 0x03u, + 0x20u, 0x03u, 0x24u, 0x03u, 0x27u, 0x80u, 0x28u, 0x03u, + 0x2Bu, 0x04u, 0x2Du, 0xD4u, 0x2Fu, 0x22u, 0x30u, 0x02u, + 0x33u, 0xE0u, 0x34u, 0x01u, 0x35u, 0x18u, 0x36u, 0x02u, + 0x37u, 0x07u, 0x3Bu, 0x30u, 0x3Eu, 0x51u, 0x40u, 0x64u, + 0x41u, 0x02u, 0x42u, 0x30u, 0x45u, 0xE2u, 0x46u, 0x0Du, + 0x47u, 0xCFu, 0x48u, 0x37u, 0x49u, 0xFFu, 0x4Au, 0xFFu, + 0x4Bu, 0xFFu, 0x4Fu, 0x2Cu, 0x56u, 0x01u, 0x58u, 0x04u, + 0x59u, 0x04u, 0x5Au, 0x04u, 0x5Bu, 0x04u, 0x5Cu, 0x90u, + 0x5Du, 0x09u, 0x5Fu, 0x01u, 0x62u, 0xC0u, 0x66u, 0x80u, + 0x68u, 0x40u, 0x69u, 0x40u, 0x6Eu, 0x08u, 0x88u, 0x01u, + 0x8Au, 0x06u, 0x94u, 0x05u, 0x96u, 0x02u, 0x98u, 0x03u, + 0x9Au, 0x04u, 0x9Cu, 0x04u, 0x9Eu, 0x03u, 0xB6u, 0x07u, + 0xBAu, 0x80u, 0xD8u, 0x0Bu, 0xDCu, 0x09u, 0xDFu, 0x01u, + 0x01u, 0x01u, 0x02u, 0x04u, 0x05u, 0x10u, 0x09u, 0x40u, + 0x0Eu, 0x01u, 0x0Fu, 0x14u, 0x10u, 0x20u, 0x11u, 0x10u, + 0x13u, 0x02u, 0x19u, 0x42u, 0x1Bu, 0x10u, 0x1Eu, 0x01u, + 0x1Fu, 0x40u, 0x21u, 0x10u, 0x22u, 0x58u, 0x23u, 0x20u, + 0x29u, 0x04u, 0x2Au, 0x20u, 0x2Bu, 0x01u, 0x30u, 0x40u, + 0x32u, 0x58u, 0x39u, 0x80u, 0x41u, 0x10u, 0x42u, 0x50u, + 0x48u, 0x40u, 0x49u, 0x04u, 0x4Au, 0x08u, 0x51u, 0x08u, + 0x52u, 0x40u, 0x53u, 0x01u, 0x59u, 0xA8u, 0x5Au, 0x02u, + 0x60u, 0x64u, 0x61u, 0x80u, 0x69u, 0x40u, 0x6Au, 0x08u, + 0x6Bu, 0x88u, 0x70u, 0x90u, 0x71u, 0x01u, 0x72u, 0x20u, + 0x7Eu, 0x80u, 0x81u, 0x08u, 0x83u, 0x01u, 0x85u, 0x80u, + 0x88u, 0x20u, 0x89u, 0x10u, 0x8Cu, 0x10u, 0x8Eu, 0x40u, + 0x90u, 0x44u, 0x91u, 0x91u, 0x92u, 0x52u, 0x95u, 0x60u, + 0x96u, 0x2Cu, 0x97u, 0x97u, 0x99u, 0x80u, 0x9Au, 0x02u, + 0x9Bu, 0x02u, 0x9Cu, 0x42u, 0x9Du, 0x01u, 0x9Eu, 0x40u, + 0x9Fu, 0x08u, 0xA0u, 0x20u, 0xA1u, 0x40u, 0xA3u, 0x23u, + 0xA4u, 0x90u, 0xA5u, 0x20u, 0xA6u, 0x89u, 0xA7u, 0x10u, + 0xABu, 0x80u, 0xAFu, 0x20u, 0xB0u, 0x12u, 0xB5u, 0x08u, + 0xB6u, 0x08u, 0xC0u, 0x4Au, 0xC2u, 0xE1u, 0xC4u, 0x0Eu, + 0xCAu, 0x0Eu, 0xCCu, 0x0Eu, 0xCEu, 0x08u, 0xD0u, 0x07u, + 0xD2u, 0x04u, 0xD6u, 0x0Fu, 0xD8u, 0x0Fu, 0xDEu, 0x80u, + 0xE0u, 0x01u, 0xE2u, 0x10u, 0xE4u, 0x04u, 0xE6u, 0x02u, + 0xE8u, 0x01u, 0xEAu, 0x50u, 0xEEu, 0x80u, 0x10u, 0x04u, + 0x12u, 0x02u, 0x16u, 0x03u, 0x18u, 0x04u, 0x1Au, 0x01u, + 0x2Au, 0x04u, 0x2Eu, 0x04u, 0x32u, 0x07u, 0x58u, 0x04u, + 0x5Cu, 0x09u, 0x5Fu, 0x01u, 0x00u, 0x08u, 0x01u, 0x01u, + 0x03u, 0x0Au, 0x09u, 0x08u, 0x0Au, 0x84u, 0x0Du, 0x10u, + 0x0Eu, 0x60u, 0x10u, 0x22u, 0x11u, 0x12u, 0x13u, 0x02u, + 0x17u, 0xA0u, 0x18u, 0x20u, 0x1Cu, 0x20u, 0x1Eu, 0x20u, + 0x20u, 0x40u, 0x21u, 0x04u, 0x22u, 0x40u, 0x2Au, 0x82u, + 0x2Bu, 0x16u, 0x30u, 0x22u, 0x31u, 0x08u, 0x32u, 0x40u, + 0x38u, 0x60u, 0x39u, 0x01u, 0x3Bu, 0x04u, 0x41u, 0x08u, + 0x42u, 0x04u, 0x43u, 0x01u, 0x48u, 0x04u, 0x49u, 0x48u, + 0x50u, 0x42u, 0x51u, 0x20u, 0x52u, 0x45u, 0x58u, 0x80u, + 0x60u, 0x02u, 0x62u, 0x80u, 0x78u, 0x02u, 0x91u, 0x31u, + 0x92u, 0x40u, 0x96u, 0x04u, 0x97u, 0x14u, 0x98u, 0x80u, + 0x99u, 0x42u, 0x9Au, 0x02u, 0x9Bu, 0xA2u, 0x9Cu, 0x02u, + 0x9Du, 0x10u, 0x9Eu, 0x04u, 0xA0u, 0x20u, 0xA1u, 0x40u, + 0xA3u, 0x02u, 0xA4u, 0x10u, 0xA5u, 0x20u, 0xA6u, 0x81u, + 0xA8u, 0x80u, 0xA9u, 0x08u, 0xAAu, 0x04u, 0xABu, 0x01u, + 0xACu, 0x50u, 0xADu, 0x20u, 0xB2u, 0x40u, 0xB5u, 0x40u, + 0xB6u, 0x08u, 0xB7u, 0x20u, 0xC0u, 0x0Fu, 0xC2u, 0x7Eu, + 0xC4u, 0xCFu, 0xCAu, 0x0Fu, 0xCCu, 0x0Fu, 0xCEu, 0x0Fu, + 0xD0u, 0x07u, 0xD2u, 0x0Cu, 0xD6u, 0x08u, 0xD8u, 0x08u, + 0xDEu, 0x01u, 0xE4u, 0x40u, 0xE8u, 0x0Au, 0xEEu, 0x07u, + 0x8Eu, 0x01u, 0x9Eu, 0x41u, 0xA4u, 0x02u, 0xA8u, 0x41u, + 0xABu, 0x08u, 0xAEu, 0x09u, 0xAFu, 0x82u, 0xB2u, 0x01u, + 0xB4u, 0x41u, 0xB5u, 0x10u, 0xB6u, 0x20u, 0xB7u, 0x04u, + 0xE4u, 0x40u, 0xE8u, 0x40u, 0xEAu, 0x01u, 0xECu, 0xD0u, + 0x00u, 0x01u, 0x01u, 0x33u, 0x03u, 0xCCu, 0x08u, 0x02u, + 0x0Fu, 0xFFu, 0x11u, 0x96u, 0x13u, 0x69u, 0x17u, 0xFFu, + 0x1Du, 0x55u, 0x1Fu, 0xAAu, 0x21u, 0xFFu, 0x29u, 0x0Fu, + 0x2Bu, 0xF0u, 0x34u, 0x01u, 0x35u, 0xFFu, 0x36u, 0x02u, + 0x3Eu, 0x50u, 0x3Fu, 0x10u, 0x58u, 0x04u, 0x59u, 0x04u, + 0x5Fu, 0x01u, 0x82u, 0x02u, 0x85u, 0x33u, 0x86u, 0x80u, + 0x87u, 0xCCu, 0x88u, 0x80u, 0x8Au, 0x40u, 0x8Bu, 0xFFu, + 0x8Eu, 0x08u, 0x91u, 0xFFu, 0x92u, 0x04u, 0x94u, 0x06u, + 0x95u, 0x0Fu, 0x96u, 0x08u, 0x97u, 0xF0u, 0x98u, 0x80u, + 0x9Au, 0x20u, 0x9Du, 0x55u, 0x9Eu, 0x60u, 0x9Fu, 0xAAu, + 0xA0u, 0x02u, 0xA2u, 0x04u, 0xA4u, 0x10u, 0xA9u, 0x69u, + 0xAAu, 0x80u, 0xABu, 0x96u, 0xACu, 0x01u, 0xADu, 0xFFu, + 0xB0u, 0x01u, 0xB2u, 0x0Eu, 0xB4u, 0x10u, 0xB6u, 0xE0u, + 0xB7u, 0xFFu, 0xBEu, 0x15u, 0xBFu, 0x40u, 0xD8u, 0x04u, + 0xD9u, 0x04u, 0xDBu, 0x04u, 0xDCu, 0x09u, 0xDFu, 0x01u, + 0x00u, 0x01u, 0x01u, 0x20u, 0x06u, 0x61u, 0x07u, 0x08u, + 0x0Cu, 0x02u, 0x0Eu, 0x22u, 0x0Fu, 0x04u, 0x15u, 0x80u, + 0x16u, 0x10u, 0x17u, 0x11u, 0x1Au, 0x0Au, 0x1Cu, 0x48u, + 0x1Eu, 0x02u, 0x1Fu, 0x08u, 0x22u, 0x20u, 0x26u, 0x40u, + 0x28u, 0x08u, 0x29u, 0x02u, 0x2Cu, 0x08u, 0x2Fu, 0x02u, + 0x31u, 0x02u, 0x32u, 0x08u, 0x33u, 0x40u, 0x34u, 0x08u, + 0x35u, 0x02u, 0x37u, 0x40u, 0x38u, 0x82u, 0x3Du, 0x20u, + 0x3Fu, 0x08u, 0x5Du, 0x08u, 0x5Eu, 0x01u, 0x5Fu, 0xA0u, + 0x6Eu, 0x20u, 0x6Fu, 0x01u, 0x81u, 0x28u, 0x83u, 0x20u, + 0x84u, 0x04u, 0x8Au, 0x04u, 0x8Bu, 0x04u, 0x8Du, 0x40u, + 0x8Fu, 0x10u, 0x98u, 0x08u, 0x99u, 0x02u, 0x9Au, 0x10u, + 0x9Bu, 0x48u, 0xA0u, 0x08u, 0xA1u, 0x02u, 0xA6u, 0x61u, + 0xA8u, 0x08u, 0xA9u, 0x02u, 0xB4u, 0x08u, 0xB7u, 0x40u, + 0xC0u, 0xFAu, 0xC2u, 0xF0u, 0xC4u, 0xF0u, 0xCAu, 0x35u, + 0xCCu, 0xDBu, 0xCEu, 0x69u, 0xD6u, 0xF0u, 0xE2u, 0x80u, + 0xE4u, 0x60u, 0xE6u, 0x01u, 0xE8u, 0x50u, 0x82u, 0x01u, + 0x85u, 0x02u, 0x86u, 0x30u, 0x8Au, 0x40u, 0x8Fu, 0x08u, + 0xE2u, 0x23u, 0xE4u, 0x40u, 0xE8u, 0x02u, 0xEAu, 0x20u, + 0xEEu, 0x60u, 0xE0u, 0x01u, 0xE6u, 0x10u, 0xA8u, 0x40u, + 0xABu, 0x20u, 0xECu, 0x80u, 0x00u, 0xD0u, 0x04u, 0x24u, + 0x06u, 0x43u, 0x08u, 0x11u, 0x0Au, 0x22u, 0x0Cu, 0xD0u, + 0x10u, 0x20u, 0x12u, 0xD0u, 0x14u, 0x28u, 0x16u, 0x83u, + 0x18u, 0xD0u, 0x1Eu, 0x0Cu, 0x20u, 0xD0u, 0x26u, 0x01u, + 0x28u, 0xD0u, 0x2Eu, 0x02u, 0x30u, 0xF0u, 0x36u, 0x0Fu, + 0x3Au, 0x02u, 0x58u, 0x0Bu, 0x5Cu, 0x09u, 0x5Fu, 0x01u, + 0x80u, 0x38u, 0x81u, 0x46u, 0x84u, 0x43u, 0x85u, 0x39u, + 0x86u, 0x3Cu, 0x87u, 0x06u, 0x88u, 0x48u, 0x8Au, 0x20u, + 0x8Bu, 0x46u, 0x8Du, 0x04u, 0x8Fu, 0x20u, 0x90u, 0x38u, + 0x94u, 0x61u, 0x95u, 0x01u, 0x96u, 0x1Eu, 0x97u, 0x5Eu, + 0x98u, 0x23u, 0x99u, 0x42u, 0x9Au, 0x44u, 0x9Bu, 0x04u, + 0x9Cu, 0x18u, 0x9Eu, 0x20u, 0xA0u, 0x10u, 0xA1u, 0x46u, + 0xA4u, 0x28u, 0xA5u, 0x42u, 0xA6u, 0x10u, 0xA8u, 0x20u, + 0xA9u, 0x77u, 0xAAu, 0x18u, 0xABu, 0x08u, 0xADu, 0x46u, + 0xB1u, 0x08u, 0xB2u, 0x60u, 0xB3u, 0x70u, 0xB4u, 0x1Eu, + 0xB5u, 0x0Fu, 0xB6u, 0x01u, 0xB9u, 0x20u, 0xBAu, 0x08u, + 0xBBu, 0x0Cu, 0xBEu, 0x40u, 0xBFu, 0x01u, 0xD4u, 0x09u, 0xD8u, 0x0Bu, 0xD9u, 0x0Bu, 0xDBu, 0x0Bu, 0xDCu, 0x99u, - 0xDDu, 0x90u, 0xDFu, 0x01u, 0x00u, 0x01u, 0x04u, 0x28u, - 0x06u, 0x80u, 0x0Cu, 0x02u, 0x0Du, 0x01u, 0x0Eu, 0x29u, - 0x17u, 0x69u, 0x1Au, 0x80u, 0x1Du, 0x30u, 0x1Eu, 0x28u, - 0x1Fu, 0x40u, 0x21u, 0x02u, 0x22u, 0x02u, 0x25u, 0x90u, - 0x27u, 0x08u, 0x29u, 0x40u, 0x2Fu, 0xAAu, 0x31u, 0x80u, - 0x36u, 0x06u, 0x37u, 0x60u, 0x3Cu, 0x80u, 0x3Du, 0x20u, - 0x3Eu, 0x81u, 0x4Bu, 0xC0u, 0x58u, 0x40u, 0x5Du, 0x24u, - 0x5Eu, 0x02u, 0x5Fu, 0x40u, 0x60u, 0x01u, 0x66u, 0x40u, - 0x78u, 0x02u, 0x7Cu, 0x02u, 0x98u, 0x40u, 0xC0u, 0x78u, - 0xC2u, 0xF0u, 0xC4u, 0xF0u, 0xCAu, 0xF8u, 0xCCu, 0xF8u, - 0xCEu, 0xB0u, 0xD6u, 0xF8u, 0xD8u, 0x18u, 0xDEu, 0x81u, - 0xD6u, 0x08u, 0xDBu, 0x04u, 0xDDu, 0x90u, 0x00u, 0x01u, - 0x02u, 0x40u, 0x05u, 0x10u, 0x07u, 0x61u, 0x0Du, 0x02u, - 0x0Eu, 0x21u, 0x0Fu, 0x08u, 0x17u, 0x1Au, 0x1Du, 0x40u, - 0x24u, 0x01u, 0x25u, 0x0Cu, 0x26u, 0x02u, 0x27u, 0x60u, - 0x2Au, 0x02u, 0x2Bu, 0x80u, 0x2Cu, 0x02u, 0x2Eu, 0x01u, - 0x2Fu, 0x28u, 0x36u, 0x46u, 0x3Cu, 0x80u, 0x3Du, 0x28u, - 0x44u, 0x80u, 0x45u, 0xA8u, 0x4Cu, 0x80u, 0x4Du, 0x04u, - 0x4Eu, 0x02u, 0x54u, 0x02u, 0x56u, 0x10u, 0x57u, 0x84u, - 0x59u, 0x80u, 0x60u, 0x02u, 0x66u, 0x20u, 0x6Cu, 0x14u, - 0x6Eu, 0xA1u, 0x6Fu, 0x3Bu, 0x74u, 0x40u, 0x77u, 0x02u, - 0x7Cu, 0x02u, 0x94u, 0x28u, 0x95u, 0x04u, 0x96u, 0x01u, - 0x99u, 0x10u, 0x9Bu, 0x08u, 0x9Cu, 0x02u, 0x9Du, 0x40u, - 0x9Eu, 0x40u, 0x9Fu, 0x61u, 0xA1u, 0x32u, 0xA2u, 0x04u, - 0xA4u, 0x42u, 0xA6u, 0x01u, 0xA7u, 0xAAu, 0xAAu, 0x40u, - 0xADu, 0x21u, 0xC0u, 0xF0u, 0xC2u, 0xF0u, 0xC4u, 0x70u, - 0xCAu, 0xF0u, 0xCCu, 0xD0u, 0xCEu, 0x70u, 0xD0u, 0xF0u, - 0xD2u, 0x10u, 0xD6u, 0x08u, 0xD8u, 0x28u, 0xDEu, 0x80u, - 0xEAu, 0x80u, 0x84u, 0x80u, 0x89u, 0x40u, 0x9Cu, 0x80u, - 0xA1u, 0x40u, 0xAAu, 0x40u, 0xADu, 0x01u, 0xB0u, 0x85u, - 0xB2u, 0x10u, 0xE6u, 0x20u, 0x00u, 0x04u, 0x02u, 0x08u, - 0x04u, 0x10u, 0x05u, 0x18u, 0x06u, 0x0Cu, 0x07u, 0x25u, - 0x08u, 0x20u, 0x09u, 0x20u, 0x0Au, 0x0Cu, 0x0Bu, 0x18u, - 0x0Eu, 0x03u, 0x0Fu, 0x01u, 0x11u, 0x08u, 0x12u, 0x04u, - 0x13u, 0x33u, 0x14u, 0x03u, 0x19u, 0x2Eu, 0x1Au, 0x30u, - 0x1Bu, 0x10u, 0x1Cu, 0x03u, 0x20u, 0x03u, 0x26u, 0x01u, - 0x28u, 0x03u, 0x2Eu, 0x48u, 0x30u, 0x40u, 0x32u, 0x01u, - 0x34u, 0x3Cu, 0x35u, 0x38u, 0x36u, 0x02u, 0x37u, 0x07u, - 0x3Bu, 0x20u, 0x3Eu, 0x44u, 0x54u, 0x40u, 0x58u, 0x0Bu, - 0x59u, 0x0Bu, 0x5Bu, 0x0Bu, 0x5Cu, 0x99u, 0x5Du, 0x90u, - 0x5Fu, 0x01u, 0x80u, 0x01u, 0x82u, 0x02u, 0x88u, 0x06u, - 0x8Bu, 0x07u, 0x8Eu, 0x10u, 0x91u, 0x01u, 0x92u, 0x08u, - 0x97u, 0x02u, 0x98u, 0x02u, 0x9Au, 0x01u, 0xA1u, 0x07u, - 0xA8u, 0x01u, 0xA9u, 0x04u, 0xAAu, 0x04u, 0xACu, 0x08u, - 0xAEu, 0x10u, 0xB0u, 0x07u, 0xB1u, 0x07u, 0xB2u, 0x07u, - 0xB6u, 0x18u, 0xB8u, 0x0Au, 0xBEu, 0x40u, 0xBFu, 0x01u, - 0xD8u, 0x0Bu, 0xD9u, 0x04u, 0xDBu, 0x04u, 0xDCu, 0x09u, - 0xDFu, 0x01u, 0x00u, 0x10u, 0x01u, 0x40u, 0x03u, 0x40u, - 0x05u, 0x10u, 0x07u, 0x61u, 0x09u, 0x20u, 0x0Au, 0x80u, - 0x0Eu, 0x69u, 0x10u, 0x02u, 0x12u, 0x08u, 0x13u, 0x20u, - 0x16u, 0x12u, 0x17u, 0x12u, 0x18u, 0x10u, 0x19u, 0x81u, - 0x1Du, 0x84u, 0x1Eu, 0x4Au, 0x1Fu, 0x10u, 0x21u, 0x01u, - 0x25u, 0x40u, 0x27u, 0x08u, 0x29u, 0x11u, 0x32u, 0x0Au, - 0x35u, 0x10u, 0x36u, 0x02u, 0x3Bu, 0x20u, 0x3Du, 0x88u, - 0x3Eu, 0x20u, 0x46u, 0x20u, 0x47u, 0x08u, 0x64u, 0x05u, - 0x65u, 0x04u, 0x68u, 0x02u, 0x78u, 0x02u, 0x7Cu, 0x02u, - 0x8Du, 0x40u, 0x92u, 0x01u, 0x98u, 0x02u, 0x99u, 0x10u, - 0x9Au, 0x12u, 0x9Bu, 0x73u, 0x9Cu, 0x80u, 0x9Du, 0x80u, - 0x9Eu, 0x20u, 0xA0u, 0x80u, 0xA1u, 0x24u, 0xA2u, 0x12u, - 0xA5u, 0x80u, 0xA6u, 0x01u, 0xC0u, 0xFBu, 0xC2u, 0xFAu, - 0xC4u, 0xF3u, 0xCAu, 0x05u, 0xCCu, 0xA3u, 0xCEu, 0x74u, - 0xD8u, 0x70u, 0xDEu, 0x81u, 0xE0u, 0x40u, 0x33u, 0x40u, - 0xCCu, 0x10u, 0x9Fu, 0x40u, 0x9Fu, 0x40u, 0xABu, 0x40u, - 0xEEu, 0x80u, 0x14u, 0x40u, 0xC4u, 0x04u, 0xB0u, 0x40u, - 0xEAu, 0x01u, 0x20u, 0x10u, 0x26u, 0x80u, 0x8Eu, 0x80u, - 0xC8u, 0x60u, 0x08u, 0x02u, 0x5Bu, 0x20u, 0x5Fu, 0x40u, - 0x84u, 0x02u, 0x8Bu, 0x20u, 0x93u, 0x40u, 0xA8u, 0x10u, - 0xAFu, 0x40u, 0xC2u, 0x10u, 0xD4u, 0x80u, 0xD6u, 0x20u, - 0xE4u, 0x40u, 0xECu, 0x80u, 0xEEu, 0x40u, 0x01u, 0x01u, - 0x0Bu, 0x01u, 0x11u, 0x01u, 0x1Bu, 0x01u, 0x00u, 0x03u, - 0x1Fu, 0x00u, 0x20u, 0x00u, 0x00u, 0x91u, 0xFFu, 0x6Eu, - 0x7Fu, 0x24u, 0x80u, 0x00u, 0x90u, 0x6Cu, 0x40u, 0x00u, - 0x00u, 0x71u, 0x60u, 0x82u, 0xC0u, 0x10u, 0x08u, 0xEFu, - 0x00u, 0x00u, 0x9Fu, 0x00u, 0xC0u, 0x6Cu, 0x02u, 0x00u, - 0xC0u, 0x6Cu, 0x01u, 0x00u, 0x80u, 0x24u, 0x00u, 0x48u, - 0xC0u, 0x00u, 0x04u, 0x6Cu, 0x00u, 0x48u, 0x00u, 0x00u, - 0x00u, 0x0Fu, 0x00u, 0xF0u, 0x00u, 0x00u, 0xFFu, 0x10u, - 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x40u, 0x40u, - 0x32u, 0x05u, 0x10u, 0x00u, 0x04u, 0xFEu, 0xDBu, 0xCBu, - 0x3Fu, 0xFFu, 0xFFu, 0xFFu, 0x22u, 0x00u, 0xF0u, 0x08u, - 0x04u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x24u, - 0x04u, 0x0Bu, 0x0Bu, 0x0Bu, 0x90u, 0x99u, 0x00u, 0x01u, + 0xDDu, 0x90u, 0xDFu, 0x01u, 0x00u, 0x08u, 0x01u, 0x01u, + 0x03u, 0x08u, 0x04u, 0x04u, 0x05u, 0x10u, 0x06u, 0x80u, + 0x07u, 0x02u, 0x09u, 0x49u, 0x0Au, 0x04u, 0x0Cu, 0x20u, + 0x0Eu, 0x42u, 0x0Fu, 0x10u, 0x10u, 0x20u, 0x11u, 0x10u, + 0x12u, 0x40u, 0x15u, 0x19u, 0x16u, 0x01u, 0x19u, 0x54u, + 0x1Au, 0x04u, 0x1Bu, 0x1Cu, 0x1Eu, 0x42u, 0x20u, 0x0Cu, + 0x21u, 0x08u, 0x23u, 0x94u, 0x29u, 0x14u, 0x2Au, 0x02u, + 0x2Bu, 0x02u, 0x30u, 0x20u, 0x31u, 0x08u, 0x38u, 0x80u, + 0x39u, 0x11u, 0x3Bu, 0x04u, 0x59u, 0x0Au, 0x5Bu, 0xA0u, + 0x61u, 0x40u, 0x78u, 0x02u, 0x7Eu, 0x80u, 0x8Bu, 0x01u, + 0x90u, 0x80u, 0x91u, 0x19u, 0x96u, 0x04u, 0x97u, 0x14u, + 0x98u, 0x02u, 0x99u, 0x0Au, 0x9Au, 0xC3u, 0x9Bu, 0x02u, + 0x9Du, 0x10u, 0x9Fu, 0x01u, 0xA0u, 0x20u, 0xA1u, 0x41u, + 0xA2u, 0x80u, 0xA3u, 0x02u, 0xA4u, 0x04u, 0xA5u, 0x08u, + 0xA6u, 0x01u, 0xA7u, 0x1Cu, 0xC0u, 0xFEu, 0xC2u, 0xFFu, + 0xC4u, 0xFEu, 0xCAu, 0x0Fu, 0xCCu, 0x06u, 0xCEu, 0x0Fu, + 0xD6u, 0x0Fu, 0xD8u, 0x08u, 0xDEu, 0x81u, 0xE4u, 0x20u, + 0xECu, 0x80u, 0xA4u, 0x02u, 0xB2u, 0x40u, 0xECu, 0x80u, + 0xB0u, 0x02u, 0xECu, 0x80u, 0x58u, 0x10u, 0x80u, 0x80u, + 0x86u, 0x80u, 0x88u, 0x10u, 0xD4u, 0x80u, 0xE2u, 0x40u, + 0xE6u, 0x80u, 0x53u, 0x81u, 0x57u, 0x0Au, 0x59u, 0x04u, + 0x5Cu, 0x02u, 0x60u, 0x08u, 0x64u, 0x80u, 0x81u, 0x04u, + 0x82u, 0x40u, 0x84u, 0x08u, 0x98u, 0x80u, 0x9Au, 0x80u, + 0xD4u, 0xE0u, 0xD6u, 0xE0u, 0xD8u, 0xC0u, 0xE2u, 0x20u, + 0xE6u, 0x90u, 0x8Cu, 0x02u, 0x92u, 0x40u, 0x9Au, 0x80u, + 0x9Cu, 0x02u, 0xAFu, 0x80u, 0xB3u, 0x02u, 0xB7u, 0x09u, + 0xEEu, 0x10u, 0x23u, 0x08u, 0x8Fu, 0x08u, 0x92u, 0x40u, + 0x9Au, 0x80u, 0xC8u, 0x10u, 0x0Cu, 0x01u, 0x51u, 0x02u, + 0x54u, 0x20u, 0x80u, 0x20u, 0x8Cu, 0x40u, 0xC2u, 0x04u, + 0xD4u, 0x03u, 0xE6u, 0x08u, 0x02u, 0x04u, 0x03u, 0x10u, + 0x04u, 0x80u, 0x07u, 0x40u, 0x09u, 0x02u, 0x0Bu, 0x01u, + 0x0Cu, 0x18u, 0x80u, 0x08u, 0x85u, 0x02u, 0x94u, 0x80u, + 0x9Cu, 0x10u, 0x9Fu, 0x10u, 0xADu, 0x02u, 0xB0u, 0x11u, + 0xB7u, 0x10u, 0xC0u, 0x0Fu, 0xC2u, 0x0Fu, 0xEAu, 0x04u, + 0xEEu, 0x06u, 0x83u, 0x40u, 0x8Eu, 0x04u, 0x93u, 0x01u, + 0x9Au, 0x04u, 0x9Bu, 0x40u, 0xE6u, 0x08u, 0xABu, 0x01u, + 0x23u, 0x10u, 0x27u, 0x08u, 0x88u, 0x01u, 0x92u, 0x40u, + 0x97u, 0x10u, 0x9Au, 0x80u, 0xB3u, 0x10u, 0xC8u, 0x60u, + 0x08u, 0x01u, 0x56u, 0x80u, 0x5Au, 0x40u, 0x92u, 0x40u, + 0x9Au, 0x80u, 0x9Cu, 0x01u, 0xB3u, 0x08u, 0xC2u, 0x10u, + 0xD4u, 0xC0u, 0x01u, 0x01u, 0x09u, 0x01u, 0x0Bu, 0x01u, + 0x0Du, 0x01u, 0x11u, 0x01u, 0x1Bu, 0x01u, 0x00u, 0x00u, + 0xC0u, 0x01u, 0x02u, 0x00u, 0x00u, 0x08u, 0xFFu, 0x21u, + 0x80u, 0x40u, 0x00u, 0x00u, 0x90u, 0x40u, 0x40u, 0x00u, + 0x00u, 0x10u, 0x60u, 0x80u, 0x7Fu, 0x22u, 0x80u, 0x08u, + 0x1Fu, 0x01u, 0x20u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, + 0xC0u, 0x01u, 0x01u, 0x00u, 0xC0u, 0x07u, 0x04u, 0x18u, + 0xC0u, 0x01u, 0x08u, 0x00u, 0x00u, 0x01u, 0x9Fu, 0x00u, + 0x00u, 0x3Fu, 0xFFu, 0x80u, 0x00u, 0x00u, 0x00u, 0x40u, + 0x00u, 0x82u, 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x01u, + 0x63u, 0x02u, 0x50u, 0x00u, 0x04u, 0x0Eu, 0xFCu, 0xBDu, + 0x3Du, 0xFFu, 0xFFu, 0xFFu, 0x22u, 0x00u, 0xF0u, 0x08u, + 0x04u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, + 0x04u, 0x0Bu, 0x0Bu, 0x04u, 0x90u, 0x99u, 0x00u, 0x01u, 0x00u, 0x00u, 0xC0u, 0x00u, 0x40u, 0x01u, 0x10u, 0x11u, 0xC0u, 0x01u, 0x00u, 0x11u, 0x40u, 0x01u, 0x40u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, - 0x00u, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0xFFu, 0xFFu, 0x00u, 0xFFu, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x30u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x00u, 0x00u, 0xFFu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x02u, 0x00u, 0xF1u, 0x0Eu, 0x0Eu, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, - 0x00u, 0xFCu, 0xFCu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, - 0xF0u, 0x00u, 0x0Fu, 0xF0u, 0x00u, 0x00u, 0x00u, 0x00u, - 0x00u, 0x01u, 0x00u, 0x00u, 0xF0u, 0x0Fu, 0x0Fu, 0x00u, - 0x00u, 0x00u, 0x00u, 0x01u + 0x00u, 0xFCu, 0xFCu, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, + 0x0Fu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, + 0xF0u, 0x0Fu, 0x0Fu, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x01u }; #if defined(__GNUC__) || defined(__ARMCC_VERSION) @@ -175,6 +320,272 @@ const uint8 cy_meta_wonvl[] = { 0xBCu, 0x90u, 0xACu, 0xAFu }; +#if defined(__GNUC__) || defined(__ARMCC_VERSION) +__attribute__ ((__section__(".cyeeprom"), used)) +#elif defined(__ICCARM__) +#pragma location=".cyeeprom" +#else +#error "Unsupported toolchain" +#endif +const uint8 cy_eeprom[] = { + 0x00u, 0x20u, 0x63u, 0x6Fu, 0x64u, 0x65u, 0x73u, 0x72u, + 0x63u, 0x20u, 0x20u, 0x20u, 0x20u, 0x20u, 0x20u, 0x20u, + 0x20u, 0x20u, 0x53u, 0x43u, 0x53u, 0x49u, 0x32u, 0x53u, + 0x44u, 0x32u, 0x2Eu, 0x30u, 0x61u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x63u, 0x6Fu, 0x64u, 0x65u, 0x73u, 0x72u, 0x63u, 0x5Fu, + 0x30u, 0x30u, 0x30u, 0x30u, 0x30u, 0x30u, 0x30u, 0x31u, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu +}; + #if defined(__GNUC__) || defined(__ARMCC_VERSION) __attribute__ ((__section__(".cyflashprotect"), used)) #elif defined(__ICCARM__) diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/eeprom.hex b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/eeprom.hex index e69de29..b3534b8 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/eeprom.hex +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/eeprom.hex @@ -0,0 +1,33 @@ +:400000000020636F646573726320202020202020202053435349325344322E30610000000000000000000000000000000000000000000000000000000000000000000000B1 +:40004000636F64657372635F3030303030303031FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:40008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:4000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:40010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:40014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:40018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:4001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:40020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:40024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:40028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:4002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:40030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:40034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:40038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:4003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:40040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:40044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:40048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:4004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:40050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:40054000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:40058000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:4005C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:40060000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:40064000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:40068000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:4006C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:40070000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:40074000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:40078000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:4007C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:00000001FF diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/post_link.bat b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/post_link.bat deleted file mode 100755 index d6f7bdc..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/post_link.bat +++ /dev/null @@ -1,19 +0,0 @@ -@REM This script allows a 3rd party IDE to use CyHexTool to perform -@REM any post processing that is necessary to convert the raw flash -@REM image into a complete hex file to use in programming the PSoC. -@REM USAGE: post_link.bat -@REM arg1: Persistant path back to the directory containing the app project. -@REM arg2: Path (relative to arg1) of the directory where the hex files go. -@REM arg3: Name of the project. -@REM NOTE: This script is auto generated. Do not modify. - -"C:\Program Files (x86)\Cypress\PSoC Creator\2.2\PSoC Creator\bin\cyvalidateide.exe" -dev CY8C5268AXI-LP047 -ide "%~1\%~3" -flsAddr 0x0 -flsSize 0x40000 -sramAddr 0x1FFF8000 -sramSize 0x10000 -@IF %errorlevel% NEQ 0 EXIT /b %errorlevel% -move "%~1\%~2\%~n3.hex" "%~1\%~2\%~n3.ihx" -@IF %errorlevel% NEQ 0 EXIT /b %errorlevel% -"C:\Program Files (x86)\Cypress\PSoC Creator\2.2\PSoC Creator\bin\cyhextool" -o "%~1\%~2\%~n3.hex" -f "%~1\%~2\%~n3.ihx" -prot "%~dp0protect.hex" -id 2E12F069 -a EEPROM=90200000:800,PROGRAM=00000000:40000,CONFIG=80000000:8000,PROTECT=90400000:100 -meta 0001 -cunv 00004005 -wonv BC90ACAF -ecc "%~dp0config.hex" -@IF %errorlevel% NEQ 0 EXIT /b %errorlevel% -CD /D "C:\Keil\UV4" -@IF %errorlevel% NEQ 0 EXIT /b %errorlevel% -IF NOT EXIST "Z:\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\SCSI2SD.svd" rem "Z:\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\SCSI2SD.sfr" -@IF %errorlevel% NEQ 0 EXIT /b %errorlevel% diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h index f65cb9d..0044977 100644 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoC5/project.h @@ -23,40 +23,39 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include #include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include #include #include +#include +#include +#include +#include +#include +#include #include #include #include diff --git a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoCCreatorExportIDE.xml b/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoCCreatorExportIDE.xml deleted file mode 100755 index 54231d3..0000000 --- a/software/SCSI2SD/SCSI2SD.cydsn/Generated_Source/PSoCCreatorExportIDE.xml +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - SCSI2SD.svd - SCSI2SD_datasheet.pdf - - .\Generated_Source\PSoC5\cm3gcc.ld - .\Generated_Source\PSoC5\Cm3RealView.scat - .\Generated_Source\PSoC5\Cm3Iar.icf - - - - - .\main.c - .\loopback.c - .\blinky.c - .\bits.c - .\device.h - .\blinky.h - .\loopback.h - .\bits.h - - - - - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\diagnostic.c - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\disk.c - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\geometry.c - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\inquiry.c - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\mode.c - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\scsi.c - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\scsiPhy.c - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\sd.c - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\diagnostic.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\disk.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\geometry.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\inquiry.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\led.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\mode.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\scsi.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\scsiPhy.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\sense.h - \\xengarden\michael\projects\SCSI2SD\git\software\SCSI2SD\SCSI2SD.cydsn\sd.h - - - - - .\Generated_Source\PSoC5\cyfitter_cfg.h - .\Generated_Source\PSoC5\cyfitter_cfg.c - .\Generated_Source\PSoC5\cydevice.h - .\Generated_Source\PSoC5\cydevicegnu.inc - .\Generated_Source\PSoC5\cydevicerv.inc - .\Generated_Source\PSoC5\cydevice_trm.h - .\Generated_Source\PSoC5\cydevicegnu_trm.inc - .\Generated_Source\PSoC5\cydevicerv_trm.inc - .\Generated_Source\PSoC5\cyfittergnu.inc - .\Generated_Source\PSoC5\cyfitterrv.inc - .\Generated_Source\PSoC5\cyfitter.h - .\Generated_Source\PSoC5\SCSI_In_DBx_aliases.h - .\Generated_Source\PSoC5\SCSI_In_DBx.c - .\Generated_Source\PSoC5\SCSI_In_DBx.h - .\Generated_Source\PSoC5\SCSI_Out_DBx_aliases.h - .\Generated_Source\PSoC5\SCSI_Out_DBx.c - .\Generated_Source\PSoC5\SCSI_Out_DBx.h - .\Generated_Source\PSoC5\SD_MISO_aliases.h - .\Generated_Source\PSoC5\SD_MISO.c - .\Generated_Source\PSoC5\SD_MISO.h - .\Generated_Source\PSoC5\SD_MOSI_aliases.h - .\Generated_Source\PSoC5\SD_MOSI.c - .\Generated_Source\PSoC5\SD_MOSI.h - .\Generated_Source\PSoC5\SD_SCK_aliases.h - .\Generated_Source\PSoC5\SD_SCK.c - .\Generated_Source\PSoC5\SD_SCK.h - .\Generated_Source\PSoC5\SD_CS_aliases.h - .\Generated_Source\PSoC5\SD_CS.c - .\Generated_Source\PSoC5\SD_CS.h - .\Generated_Source\PSoC5\SD_DAT1_aliases.h - .\Generated_Source\PSoC5\SD_DAT1.c - .\Generated_Source\PSoC5\SD_DAT1.h - .\Generated_Source\PSoC5\SD_DAT2_aliases.h - .\Generated_Source\PSoC5\SD_DAT2.c - .\Generated_Source\PSoC5\SD_DAT2.h - .\Generated_Source\PSoC5\SD_WP_aliases.h - .\Generated_Source\PSoC5\SD_WP.c - .\Generated_Source\PSoC5\SD_WP.h - .\Generated_Source\PSoC5\SD_CD_aliases.h - .\Generated_Source\PSoC5\SD_CD.c - .\Generated_Source\PSoC5\SD_CD.h - .\Generated_Source\PSoC5\SCSI_ID_aliases.h - .\Generated_Source\PSoC5\PARITY_EN_aliases.h - .\Generated_Source\PSoC5\PARITY_EN.c - .\Generated_Source\PSoC5\PARITY_EN.h - .\Generated_Source\PSoC5\SCSI_In_aliases.h - .\Generated_Source\PSoC5\SCSI_Out_aliases.h - .\Generated_Source\PSoC5\LED1_aliases.h - .\Generated_Source\PSoC5\LED1.c - .\Generated_Source\PSoC5\LED1.h - .\Generated_Source\PSoC5\Cm3Start.c - .\Generated_Source\PSoC5\core_cm3_psoc5.h - .\Generated_Source\PSoC5\core_cm3.h - .\Generated_Source\PSoC5\CyBootAsmGnu.s - .\Generated_Source\PSoC5\CyBootAsmRv.s - .\Generated_Source\PSoC5\CyDmac.c - .\Generated_Source\PSoC5\CyDmac.h - .\Generated_Source\PSoC5\CyFlash.c - .\Generated_Source\PSoC5\CyFlash.h - .\Generated_Source\PSoC5\CyLib.c - .\Generated_Source\PSoC5\CyLib.h - .\Generated_Source\PSoC5\cypins.h - .\Generated_Source\PSoC5\cyPm.c - .\Generated_Source\PSoC5\cyPm.h - .\Generated_Source\PSoC5\CySpc.c - .\Generated_Source\PSoC5\CySpc.h - .\Generated_Source\PSoC5\cytypes.h - .\Generated_Source\PSoC5\cyutils.c - .\Generated_Source\PSoC5\core_cmFunc.h - .\Generated_Source\PSoC5\core_cmInstr.h - .\Generated_Source\PSoC5\CyBootAsmIar.s - .\Generated_Source\PSoC5\project.h - .\Generated_Source\PSoC5\SD_Init_Clk.c - .\Generated_Source\PSoC5\SD_Init_Clk.h - .\Generated_Source\PSoC5\SD_Data_Clk.c - .\Generated_Source\PSoC5\SD_Data_Clk.h - .\Generated_Source\PSoC5\SD_Clk_Ctl.c - .\Generated_Source\PSoC5\SD_Clk_Ctl.h - .\Generated_Source\PSoC5\SDCard.c - .\Generated_Source\PSoC5\SDCard.h - .\Generated_Source\PSoC5\SDCard_PM.c - .\Generated_Source\PSoC5\SDCard_INT.c - .\Generated_Source\PSoC5\SDCard_PVT.h - .\Generated_Source\PSoC5\SCSI_RST_aliases.h - .\Generated_Source\PSoC5\SCSI_RST.c - .\Generated_Source\PSoC5\SCSI_RST.h - .\Generated_Source\PSoC5\SCSI_ATN_aliases.h - .\Generated_Source\PSoC5\SCSI_ATN.c - .\Generated_Source\PSoC5\SCSI_ATN.h - .\Generated_Source\PSoC5\SCSI_RST_ISR.c - .\Generated_Source\PSoC5\SCSI_RST_ISR.h - .\Generated_Source\PSoC5\SCSI_ATN_ISR.c - .\Generated_Source\PSoC5\SCSI_ATN_ISR.h - .\Generated_Source\PSoC5\cymetadata.c - .\Generated_Source\PSoC5\cydeviceiar.inc - .\Generated_Source\PSoC5\cydeviceiar_trm.inc - .\Generated_Source\PSoC5\cyfitteriar.inc - .\Generated_Source\PSoC5\cydisabledsheets.h - .\Generated_Source\PSoC5\prebuild.bat - .\Generated_Source\PSoC5\postbuild.bat - .\Generated_Source\PSoC5\CyElfTool.exe - .\Generated_Source\PSoC5\libelf.dll - - - - - .\Generated_Source\PSoC5\ARM_GCC\CyComponentLibrary.a - - - - - .\Generated_Source\PSoC5\ARM_Keil_MDK\CyComponentLibrary.a - - - - - .\Generated_Source\PSoC5\IAR\CyComponentLibrary.a - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/SCSI2SD/SCSI2SD.cydsn/OddParityGen/OddParityGen.cysym b/software/SCSI2SD/SCSI2SD.cydsn/OddParityGen/OddParityGen.cysym new file mode 100755 index 0000000000000000000000000000000000000000..b715b18acc4fa6f5879841092a58bc610f31edd0 GIT binary patch literal 74109 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 A(*OVf literal 0 HcmV?d00001 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/OddParityGen/OddParityGen.v b/software/SCSI2SD/SCSI2SD.cydsn/OddParityGen/OddParityGen.v new file mode 100755 index 0000000..6239bee --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/OddParityGen/OddParityGen.v @@ -0,0 +1,44 @@ + +//`#start header` -- edit after this line, do not edit this line +// Copyright (C) 2013 Michael McMaster +// +// This file is part of SCSI2SD. +// +// SCSI2SD is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// SCSI2SD is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with SCSI2SD. If not, see . +`include "cypress.v" +//`#end` -- edit above this line, do not edit this line +// Generated on 10/15/2013 at 22:01 +// Component: OddParityGen +module OddParityGen ( + output DBP, + input [7:0] DBx, + input EN +); + +//`#start body` -- edit after this line, do not edit this line + + // For some reason the "simple" implementation uses up about 34% of all + // PLD resources on a PSoC 5LP + // 1 ^ DBx[0] ^ DBx[1] ^ DBx[2] ^ DBx[3] ^ DBx[4] ^ DBx[5] ^ DBx[6] ^ DBx[7] + + // Breaking the expression up into parts seems to use much less resources. + wire tmp = 1 ^ DBx[0]; + wire tmpa = DBx[1] ^ DBx[2]; + wire tmpb = DBx[3] ^ DBx[4]; + wire tmpc = DBx[5] ^ DBx[6] ^ DBx[7]; + assign DBP = EN ? tmp ^ tmpa ^ tmpb ^ tmpc : 0; +//`#end` -- edit above this line, do not edit this line +endmodule +//`#start footer` -- edit after this line, do not edit this line +//`#end` -- edit above this line, do not edit this line diff --git a/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cycdx b/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cycdx new file mode 100644 index 0000000..dffcd83 --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cycdx @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cydwr b/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cydwr index f845643fde498dc33a50ee0930cb07b6fd488c17..a1d19a0f071bb2181e35d698402729daf0429783 100755 GIT binary patch delta 8399 zcmeyfjeYJ9_6=EltXvEX3|!6meB1N+7`e|%DBocP3h;hnK5E#w>_;M%h{;mvtcyYN+ivVUJMDd*`*%O*J*U_8{*h~D zukY+xGoQhlYiI2(DGCaP2m}Q55hyNNmJj;)b9SCN5YU4rC=e)Mm0v;nwDnU>s*>Hh zQ#vVcTqd+u1x)3j&z%%G_@_goKE%17vhcAYRXOOWka(@UL?SUna#8{=q|=T-rpUye zmD8-)TLR1CD`q6N2fN`M>OW5EFq}8ViZAXmq8-^jr6Q5&%bo0IsZqSGFW#-#w4J-( zwLPVs#itD^DBroHiYpEexUW`^Fl7?3?$k4!Mq_xgXVuVifZ<+EwT zrk+QvKZaG-AI*pzSI(K5RN6J#<=HjasjpMl)*YPq&9S|-XE3NJPnX6twV{sj%ryz_ zBirtJawn)LC_~t-_s%WO^;nynpdkVC;k$qJAXZtvIiPkEKZ?RC9eq48OPxY%8$GTr zuyDEYsDHKi>~LmGReM`wf7HO|Kpof@K6jNa{UJ@qR-=$-Uzw!mOb^Met$Qps(KD>S zr}rxTEtd5@{A7$z+n#rv@(`d#;DM?M-TbNU)@+ul0?ViP-yBIU8Gc&U|QWRT#VFSn8*t1lW!~G9avfobHzj{O- zc$+t7jV~}Dq+Z%R1X9Bm+gG3B^UsmAAn zO^<=^w0A?k_Gmt-QjhFpupd%o^K_-@ev3dro~d zjJK%vZIw|rQ4Zq*&2u3dG3$iS>dgn6-~u_wc^yCYN#l7dtPGRT(PrkFtOK9AfVg>5 zHd27d4cYpH5hk#P?FdnN1)RHKA-sNjaGrw*9eXw_Hv`4QQE1a_XQqOY%XTsLxsjfN zOsx5vid+4SQZnL`Y>fXRLO5#X>fp&rnX@MEA>sIu zk5Wd$V5eLCKA^XFX8g_wJ?`Q z6&3sy!x2(5TXCY?B@z4dWI)!Afm9nKW@*5bLh1v?reggPhQE1j#9-CtBxO-%T}}80 z49D-xXSNmI`?hB4_UFMU@!BDwkM$F6|_S1}&fk7%3 zfqlBL>E(nXHH#7?Y~EL=mk7)RmGRNh+2x8k_|oF=xpZBUY8yteMYPIhkIlYWo(7v- zNP|XlZ+Fu;?CbKdu$Xb9I2IAcxaCTzer~?nNBOZwtrJY@J~FQl6oDAEq_}2KZnRwV z4w`5oRd6q>k5s*3*{y=tJ4z3=A!^7(A+q60L38*k}`?Og3ufdqNv=;_j7hJ&;p{tOu9q1c`L6cR$ z)p}m;#VF@to^9-y?+S9V#?@lrdR_E8Y!%fRfCr<7*6zud=~M+81)cF%H6_P{OcSo7 z4AJ>Czb!y#QO$(y(-+$GX#FVOw_6uiTP?hDxpt6hN7IKr>9oc4U${b;$Xjp6N5?vU z7SN{ZBS5W!uPA@mTOE_a`pk@5;q`b16o$pFZ@pn4bq3uJ3~YFjtmt3If1mn@(EoWh zZLllUF8=Z(hz@=+f1mW7=XZxgX8eyj<1Kqk9*mXHFi2rI^*?HjY`j@*Gz^-ltqg3z zN#bQ->%0tTiMCJ2d#nS-ukl^ERS_&a=7ktE=eq&pm$`tovyJ34tmLjtu*Aba!bU0KAK>u#uZX2C=r=3-q z`#l>c;CnkCoEK(7-6oTRBM1ze1VryJ-KxFpP3okEE^Y2O@Gtq@*kGj)Y?QFioh-8- z_n^}x!}35Lj0O)aanlvrAO=~kiJT%>+w!T75Hju9nZB3i6Y^^RI*;)T3Rx#fQisoB zhh`v%6ZK3MFZ?7CxYs$yamlPzq*tt;lz6t`5zyxt1`f|}Y;i28CzvYIYE~*w(!*+( z0`o|Rp}ZrxajIwowIZ(ruIJyA`Y3U=Mh0J9r0J?^N&mc(KRxrvedwNVY?n7-ru=zV zL~}reuIK}U1Qvb$d}5OXzj$Dhi(Ij~vmBmeITCqrpi8md?k{JiWM2@&_If)HjFw7t zq|-8m>>#n!uYRx$@Pl0|6iHX@+0_kn9DJBn1kHN}dF-Wcj?@QDDQ9u9;YF+2UTk<# zGMdgUT{w}0lbS3#SCS6hF1amhu$t)#Hyu01IDz`==%EXV_}jA0G7HMZA~kFdh4eDf z9Vt87;N8$%_RZ7Kp_2yQYHVf8u(cK^6KR-%bxA))I_RRN=EAHPI-hz5J2gW~pV)KO7k)0dB7vQt7VHHPGH*rRp9sar zYv++Mr2Evy<%mk~tg*WSbJRWh+|{gg(M0VeqFp?EJ6|xm4)U&u=`gI2Sn5B(8<@ zawd^cC?z#DqBqQs3AzdL;23FXngdzTwnb6PP-i7iY5_iwmvd4rJ84*%OD$z70{uCo zk?K;#hqOLyjVd(ULC`AmvWwQ37BHg|ouXw!Mts*6jx>grK2n)A836_f${EqzPvY|G z=^ky}6-%gfYj&xX*hkN^0xy&3U27ZLYu^&p6DROuP!@R-T$<&1?jskS^NAQc22qj> zy3+~Ez;9Skrdx)3?KK)2DhP^1Ajs-0+OU^(-&`thC8o)zaK>yag04qCwK{R%KCX!( zPBbLP8Wy5Hr&5 z(%91x#KJqlh)F_PMShQy=3vl0s3YdNj37n_ zFpPD7`fH@YHm91exhdAEgnC*Zj}idGabSVge{TQM&rTR)CG z2S36P1qGv-ir|iYEfiy>tKuYj6kAq)qRL6mjn6*jrp}7HtUKy4=i(}Vi^+mDBQ6bW z&IlXvKnS5T%Zj)3RHyUKwa+WZ5}q5*wlKdd&LcCd{}GX?lk?gEY8I#;jmqzIK(0_Y zeJ07mQD0DPsFL48IQ*nbYOF`c9l*y3vbunFUvE!P8)(rJo2a*nDFQ~KXDEky*=Z#)WNV`fg^+%mV&6p_|eH?HsBgk6bu+PwMr~}uut=#`f}in zzFF4{)NF}(3HcI@H6V>Z<;_-H*pd~pL(4H$UCzs^%(DcBX}1kLK(PmXUg8xTLdaol}4 zuEEs?kM6TPn@MG=)8o*y#tl&_g>ydr*y3CeT8d%(6vH^@YoUlm2|5L~8{5cIyERH4 zHTh72T@nk{SK%W1Xh9Zzki94zf`E2w#8R!ffN9(yD0n1_aVA70cWf_fzw21bKNS{9 zaGP?k_LeQ@4`(^a03*I5cCQDcw}!=JX}# zZ!PVb52k47qu8C{Pd!|I+%`7muDl7kEZs!;Xv|S>^)2>rVi>RK zgN1AZ>G|18N`!9krJ+4Hj9~EP8utGB+V*pE)z$gu_0p9)-F*qYeUz#z(ZvUd>MJ%L zSi7;}Du+Xe$=F5YBv^jAK9%|aNR4O;F+&SgEi#afkVpSRHX@CSnzr;MJLr*MO7fsEbwKYoEo3{^~271FKiTsw=isobfRp z>^6*-h-=ojN$h=vQHhM0akmVq{Y9t0t`;9u+uCDO-*zungWpW;xx=tSF6W(7-fjSj2{_(h zyB)IM8c&{i=I#P-vRd?@d%P#xHu_rk5IU)TVNXbmFcRA<9N-;pDTQYQ3j2MgQ zXRsiX+n#j`Op(ggn8=`AYR?i2D-?`E|FokUV9ze+Na)IeC3dX#An7}aBfO;0!%&P{ z@i@C5aydDHU6TyyIj7y=M`>Q9(>qh-DOZm!y(}QrIwk&GWGO&+pOJ#LMb9r)^(}dq zk*XA$w?p(Rj#7f`Z+*8Q=}QN%7} z#+ug!r8E%l6L*-hm-^t`rP|tU zexB$FVuf5n0CH&&kXOQPA(wy*%XtuZ&{=$VeuZ@y3*owE0LKlv%zhw3OxuVfvygJ< zY!?!Z(vGlb<2ax=tyYuMlNA=-99;@T|DktX#iP0%M5fkHlDC?bhP<193Gx+EO6@xW z@@<*Oxd8{ueqSjmPfY4t^JAKG==zzeQmOO`vAU!#CC+VPoM@w)xIBk8o<)7mXMqO} zFNovi%iHmBjpkdLp>c!foIaYN^`S9`S`MekYH8>u{>Ub!^}N|8%{Y5Kuu8U?Q~Omx zTdVT2vstbcCW=;GL4A&3IU|RQZv#Ks>bkprV2UE|8mqLJNz{F4&9))&z{0K%f(@b0 z%%zO2Jb=gIy!8$J^j&uWp$71>ra`Tki&sg!n7wW*%FlNn>8HLvOX@LwKRln{S79Gn z5>YKr{JjO$OPx$G!wT}MGW9T6IE$JOi4S~@XGAXQu|5lFstNLST*b4kS z8Keysz8+kP%+2wTN zxm718+hs6%1};#q_|LPL)d?{7_`vn)~fqRg#^6g8<%yK;?Le zcJi)YT(v4u7Iow6@yjTB;<_vT$}{uobNJZkT5>{(qMVL@i7>xXo)7XQMHbU_6r~)) zk1m65mmsU0!VEb@lB$s)^wTKy-aygy@L+y2?n#$PYvP-|N{FG!d$X|pTtW_V5&HEE zRJpKYYYVgJ&{+d4lzI^coDUna{fJixfJy6+8x%dXnivmXsYknH5Q9*ciIr`&$ucX8= zljR}W1*6D|9a5Q)06y(Unjie^_+483>l~DHV?X>)t9pDuCQom&b0(Civx;&?A$aiO zQKwTSDJB;pa|HD|wIbN%!cKgOg1G$0QX)wwu$y#3Pl>Q_kjch0ARlAOajyR zO%_%mPuyrl%M3_@3E|ze8wOCfN~; z!`b5Qo2caK6iaR52Y<6rjj$)wo8;r)*PdLK+gytvikr~cUet;2Wf|~c+O6s2str<( zjNs;;;$uR1!Y)eUpnRC9oy)C6x#@*s8O;{X>a#UZY{fm*P4n5YAX~O zUTrSD%>j7Dj_&rNE+)zl7;zk)cMK z91)6{ySv_Gk=>>aIX`5yohTjMD(-P!8X*WC%n!Su4O;oAFI#G7t2i!%lB?919xQ zuW?&(hRtL?-#tGYu#-#1&eAT6vMW5^j=scg>v6>r@U&N17xWJ}*9D6wI*CP%=O76@ zpe*ts$z`Ar?WAE3$KkQvI+ZXkwVUe=m<{+(NE=$O84EnDVDDQDj_r?DE$v0CYjQ~O z{Z!Bu`G~R_TW$e0M}Q{quqHkoLY;69y@7AW>UE65&Vsc2lLJyYmW)${3vim=t)nXs z^2bj*=|o(eA6s$Tz0F$7)XQ;^xE_c}FQt7G*WMX33ec zY^qh^gcgl~JHy)f^Sb?%+$tw*L)0r$TZcFnGnA9hixQ^P{>+fzFK4?0-GF*TKZ(Xf z1-o^OXPN?Y6Iiz#Hs_!~5?jROV38e*o^MgBXx&Q^b1MH5>c!mGVTB!*QRYW$$|+i# zNKmU7Sg3co?J}58Dq&zfeC}Zpan*X9h*)ZY1!2}iZqgWqmQu_5Fl9cuIB{UL-2Oz! ztFK1oLHc?5xJ6;(Qkto+a-)MTsnK6h##r)AT8X6%IEJdC-rUF|OMb_{Y|MO@SBxV4 zdZTy5ai`RcjUzqeG3w+wd$ak5ps_nPef+5>#r^0h*qYr^*Y=X`ZPxLP?a@YOMYQ?q z_3TQi_41XPXT7)`gCEI;y^!PlTvV`^YG_97#_Z@3#53#Jbk4RlnKAu#^d}=vI*XCG zK_s!-BJ3$wDYH<_-g8L+@#s%>htb3_u^-8tVRFoeC=iBIJ6j3{_g7a6(>Z%(wk|PF z8JP(v_a|mkJA}7pQz(Pizl6crSSlp+{7D73HFWo{@{aX1ZKy_IPG+I|AdH$)(lH>y z1|!awZCBk6kMx_1Is+7ZJHI+;JgO}|NXh(k<&IHmRjrlLAioRuf|iP=Nuzcpi_cK}WbyewUEh=?9v%0+hA?d`Gd#=5@|Dj%g|0?`a z(w>{ghAsy%NE#pxm7WPBZ@=N1(=d-f( z1ETjq@g+@M)0Hs!8>mvutEBu4tO3A{S513vg)kgI7Al0f(vvELJ-e2n$63212AeEG z?LDuswq`WiQGk1>6V`6T$P!pItw4zx7~}``;nU7o}71kD>ttqbN5q`01PRtK^5!5AqRmr9mc8yc&pC1 z0y+Jonw0i!Pz%CvFdaHGMHq(FB3yUOJ;5H{TLDXsI-8mAq?!uCe*vib+PicKK>7$GAgyAma{Pq%KqrcmUO{XOyOAQQYTj{zz=P=WgbDk4Kr4vT0|)ZmV===0+3hm zhJFtQ1uytJSaG3d0?)mtx=NXko z!!{oS9I#uYKLF3)W^Dg45&ggR1gtV#Q1mL)ovNVsUc>ao6-4 zAtT5C1nQ3`PuD&pV)vR~h5(?&y7l=;-gW}$R@Q&gM_$r*m?iudc>%e(JJp#Wk+ICRhpcncbw^DltxqasdPC8qj& zHN=sCs{MaxGz3(||D^wSz$L&jj{dpnzZQRI0m*w7To1)`E?;zI%zyuX%=-^XAC0rW zY0&~Z{+kHi-1c8Z$d7z@NuNf3d|iY9V4Q^GTLlZAdBVW+Q4a_D+oFLxAONVoRpZaN zR}jCA_X1Sc{{*!DQp<1T{|z|BE(|{(1dxYK8Fk zn0^1NNTuUnMXKfhonoi|%+RX2xqnqh6Ddv_psysd-3AXvCLI&OlqZJHyVDOWQV@5C z*8e`=Pkeuu$J%x`!?q61kUDBl!moeD0#CH>H~f}=`kn6P->SaT_`T=;Gdcbn(gzxU zMcOgzcWZF`SBv-;l@J5}o!S4U{&YY8nJfR`rg9;2Ur@k?H~C1{~h}O;dH7v{a>Sn>6|7eCC-_@yVW&O`N*0n zc?*ma>y{!(`s4{a#4QfU>JA9KbT7c!_=kpPNkDvjAJpDQ3IG~^PT${i24J86JDvD2 z{Z&K@=C2~aU;iqSY5iA`7!d$SB9Xr<{eQ4J50H%mQ-~3V3w_>HjlhH2tp|b!L(btN<>3?bj)9EdZ30 z0%nju;|5^N_}!e}M-f1?#?e6ho#GKRA{x8Xu;2dP{Mrxx*B}F`PfK_AZz6c$e=Tf0 z<^8{EDf{0O?%fvffxor$Zq-5*aHZkhC^Qg2$q=5eg#h|=G{NEf*$rr96M)>IzdIl> z(3foiOlXk@3GdBIH)rep`Jr5k<85;G-9SvE5?~aVaM2wiThkp(d47zAb!CrSLvunE{`j6oJWs?NHTgl#XDhf%^Y_qW}-g3Ld*em`W2 zvWQ4Y=3g#vzaA(Sc7-i%$Mmp%9t_&uAN(biMtdDmGgdPO%Ut9hWWLW(X^I$pneL|% znWWezENEx}?P2jW)N=_Qj5ZyBagukxv2W)LgI(bG$~?(F)ilvG(=>%{aSFRWRx5s# zFlmy{BT=`8TTeY#ON!DvhYm?O#G#IWGeUYkM(SZ|CU?l|r11SAuh!glVc=>k^l~#( zL`U$ulQ|!vf=1X^ihDvi;~giL?+=BU(rF{45)j|zXSRTy)`*9M&)q#}msUTbrFEGj zA-WEZbKRYi1tTNKpFJjt$*{H|3#Ma_cBK&s=3a9R!x?q{A@T3KzVY3$P6 z6jaEgiX%1&pfshhd7i@BM;ZY7RZ;us_}GUmR8#w?7(h=9w2#)yVDpNIHznpEWUj-d zq%SYk$;!^6WH@J=O5O~V^KaZLYbVexIEE8k9HWu&%MB6OC}8c{ZYIb-A?|u$i!oZm zsklZHFmdu2<(KHKeS#gA@U}i~Qh4Lv}XtwZ1d)5qY(br1s2` z(63oIvgimBrrgb8mK1h8Ng$S69GP=}iMxdko^xMkax*MyW3j(BV1H#7b4?L(sBzfo z?5ICW;9+o?^8Ra2CMga!_+S9&-~tumt_C<}8LP;(H>F9FLjx0Jtc?JA+9e+w%T2e8 zJL$eBR@#GiRYa7RHTNT?`o%|?NQ|V-Bvn#aw2D(n^jI4L2Cxh`ag&j=2L;>3$HRTNbj)3&HZ}i9qhx}--M10k1dZUaI=;(1n>EA zL}c6KcntVP?sbpNE=O=orYCdf97SohF(B)NG>w+r-4wC;;JKiN6zPYizBcEtYs9lu zj10U+uXKHrAG3-lYO{G1WuyDlDGgV4SEKo9A@ntZkT$wQ2!!BM=>Jc~ z@`Y$Z3Fi)L2!XX=XB~71&QUgI$w1lQhH4y@bZEONpl4mdt(5deZqYy&#nkmN{vx%< zCyS7`o>Zxkxw3?2NZjO&a>xR9oveUVqij2mgqoTj&Mn5k# zo_Fc`(0)-6G#^D7wm8Mfji;=N=I9(FwuG+y911P&gVg48E4u^P46OUPWLp=q9@Rns z)ytxO!jnG#P07)RQ-M{%yu0p4H(}Ql7zfPBbD2l+m(s(C5El5ROc!oWkGdPrGc5B_ zSa7zvV|O7v8I5hTmzh^!qxEB-HnmpjcDxBXsx(D#q16lg(JE3K$J3?QLnoEra3(w#$k~LL%h|M@CYhzfiRZJFryd+Aicrmhh+bBUT}N1n zYUN$G2Fe(Da9d4lZN#>iGSeA1UApFX%ph&&kfc}0DVrq}UN+1kU56ifF~{Q2SA`9T zSv6EmLZfA_6a)U2{OU)=udfU{76x{$%lM)ni}o{M{WSJ)01%p)9nYOljDy z`q9Co^Q4(R!rxkufDcoq41ON9D78C2jY&sNV5hFXHJL)vdyBXXJQe_QXTvnAhzo<9siz$2oW(_~A z9L}WPS1$CK@|)o;giN?@MuVP>x{tE|09%N^&uDsc~V`Wirgod@f z&{}$K$mV0T*368vWK!-=Ze(@CL`!CtZ z26WQ8FLocEQ24gB6U+LAPJjoqIrtrqS*%+hI_!XD)zre@VD@ zDQ^2kPNGf*6uv;c+GYl`0BnYe;4*osiy??##MA)HJJ}~8szX!2H1bt_#sS2B-;UTG z!8z~+!&A+*U>O{Fm)lEY3=vym)woq?KUjL+j?;@dQaethppRFC-kRip@d(sFno)qDC6~l zqE_tf9^7nfk~XKD>bS9VUaF|D%|2FZv2p_&)dv6(SD=SipTe0A zmqg%}RqF^`oU)gOOFZ0Zug7mbnrg^}^2&ObTe(IBs52bdwbzx^)4&jxH1lAwDwQDg32za_v`5V78)mRe9_T| z0)2waG^4puDbpQnrnOO7pmC+O(W$W|41E@eUm4aX&ox}3SL{z|Fgfx6<(oF=em*`!I_~~&j~WffanmCQG?$JM#yT4RL)M8VTvs0 zhB?-_oYCZq6+t~35y-TF@XpDBuBz$wNIPSJrmeZS)AGyqEC!De=% z?B+kdHw-Ihl8!5>xGLr+&z>pY`q@Mecf)_nL(_n;GnZYKdtl11Jq=E4<*3Ga*L6-jOifix;g<`*u=k6sMe;n&-#A#x;vE9CCW4J?K72S1uUkNLDzoQNmE&+{7EmGW zXeoIebbjJ@xzWE~M38NiiZkW{|0+4>477t&I+zi59TIBm+|04#uJ$z8pGR1$(w=Fq zNF@f(lYW-yyZBSL#P$tkZsvJ>EwLxe*qmN)pD(k2kphNP#y77T*lVWFEsu~Xz*iuCXh%P)9MXF=a*BMdXM^1wsx7ih0%^Sofn^=XDaDe*F- z!4Quc=@}Y*qKMDbG(by>s5hTqWq5pBLZ%&2oj01jusklCQ`9{xC==WZKW;7^gR_Ax z>%bg@3pFJxb0F#?LJ-|SO^9R1DFW8Hp9_H}M#P2^L*6AJto^KUce`ambe?7lb{R-L zcrHJ)bS_&DUKv?QJhRm!8_Q$ z#9WD2zviAG%V3xvO@PQjkI{(QOQF+h#I`GUuDaN2$ezkPs>fo=&8b}H*AKPPm8fwP zf}3^EN#|3ySI=1{35-Bjghk2ys4(07-u?+=95-bm_T=lS|bt2m$7+n=?_3 z-w6flrm+m|TlQ`r{;~8dxlw_2iOz@5VHeAp_)>L_k2)a;y~>`Z6)X!KHL z!|W~iBvH&iH>HK!*;Ei@sA4tlH}yzLeavuQF--SJ_T6x#z6dX0*@67IK1QZO)R-93 zXpVYqV!IIQ7nyg9TUu5(>s*rrk}R1DI}hy|vK%4kuM*=#Lm=tmJCoj8I|JEiu*J;) zT7Iy=8*Fl~j;_>bdLRk6=?|%4A~J_RD>#ddqKh`OC#3^>4?I(KBTEa(iE+5hc6PCf zcY0-SQhHDrQWZ5ktCn2!XuE@W;1Yl+QaD#a5G-ri3sYo#v{DS&OHO}fZ0JTQ)3~W> zLf!J`F>mw2+!DtzO*=O`rpmZp`6izRrsX}H#k;TNGThZ;#UX5_DXIOOjN9%sGeRVE z+c#clCo$Y=2yP*@?X@d8(4}-1Lp%;WSNX8*5Ms}BOW|+o9CxB%M_)yWZx)|xc1q5yvi4*0G9*o(eL= z-vmaSmH3F4lwo-Av%;!WO^lqq_|B)e*-xgfr32P-Uu5N%*5~eu<8#&uCYoy`{HIFN zx#__BW&HYnEazR{0rV-rS}L8Q$wMrn-eo8Kv+dLM06Ect)JarG zv|!2ojKPZ-uFeS-)QOd8u^fX7SkOtBHtR^qS_X}?&|VlDbx9Rf1j=sD+4`s5Yb^&K z^NpB=-KZ?zRB;0_79IjVF3^B`lv^DeOJtc`ZiE9yXn0@~o7|}bZ4r8drnsA1qdbDL z10IAu-b)I6GUn>D?`uus0@t#kXVhwj)NkBze!!Tp+|RkViYm_h{UJ}waziwSvXr|C z-Fo5h&|K3ZxeFm7qxV~Q%4CddXfIWt;|_(Ut{3|=87_M7zoWQGSWoa2Pe&zbOah9C zR3GxiNI$Phz}tM94~gV?-nJ-e?-YhH8!mSr=sR8H{MWmAmq|0@H2(SoZOqvI3CSS~ z-P~tBHyV-f=mCuDeCjA!NQ`f^Be}oOj?ho-XYg=vDn|;Z@7$;n^=V)G<)H~wFDvRH z3AZ1avGc;#Ned!vu)f$Pn4`5Evr;!|M{2*BsmO;yg_DjOrQ(=`4PF^z6eJYKJ%-yg z!@=$g4AQahe38l!5xixMx$Q9u4 zRm8b@vYse~AAa_B2?6d^HipJSr_KY_y=6@`Irk)vI}f?N-DU`F%;1kGK_)SVO!8Kb zIr5PW6@_8S$5fpSTXshy0T`f<*@MdbDnCTRN6Aukw6KeXl{o4Ya9nYRZ9&-Zo8&yS z+kRk{;Y^uD6txM?=wU);^WziL!=O;W%m5Mrsxsw`evRf0I5)Sku6rhE=?z_aLW+pxc7W5+n;>oEa>?2PW&%5by-UyjnZ0Od9qq#hriu4bf7bd`6*@oV_d`PZg-Pez+CsRqeYH-)U z$Q6o$0ZEJSg+m05vZ2f9R41nN*6c^PmDZ!}ga7#S{bb1gn-&9V{8L5PNc7pJTLtB* z)b{db(OBdKb zf|-04g&v6i#piLFa!w2OQU;XKYORdaf>r-;ggVHsxh+$sB(Soy)?Q>FWt#;UxDH*L z=L=(Ko~FFM#e{$fBwVWe%NnIzL&jrvH(!*B)L4NTq78Jvy`&a>tZe_#5Y?2rwg7w7 zeHbv%Qp7cB78KnFzp#|Pw8q_do_RNNHZVxa+K@W^VlDV@iIqf^dX-$esoHRbvpjkE z<#xsW8R5Otg-D`3l;20atLwl=LhRNY%x*h3n8~mzG{;*QyY1ybG8BCpdepNyD!>$S>eZKIjG-FxqaG&^{W}kT;1|${TD%!^Q8l3cC@)V0>| z*F}z%$*=KQQ=cZ%Q=|Qpp736Zu4UVuM?088_l&y3k-|>q`l#JZW%}6FLT&pC z9e5!grD>!|TxC^w2!p=k;sPe!%Oc-9Ye7WPo`q0(R9~b3gM!b2#0joE_!8gIB=!0A z;_gWoa)2T+0r-HbSwdA|vGQcyS_eOXDQJ?7M##9?#|gsT_GEAvM74w3ytv=qX(T)| z%#iqP(X~8VtK2*mRk&?rOpvv3T&K0eViQ{+g|kx?Q-9FGns<38TKk zkE&y4z~#%H=KwUu7U`8EaKLTI9}%jy!w1es(LaI{kI~sm27|bW7F$N_Kk_Hs_dXg= z1W1INctUxp49HCrlzH+nr*>-{3UvT~zwU)WRW%zxMdI%f}F$M>jJ$K$VpL88PWvhO-?ANH- zA^tq;EAl4R>2&<{NbG#9SjuUy=UYf+_U13WD@X?HNCr6V1%#CLfNyj1PL?$e6q1d9jeUK555bMMAqIycp7!=HyK| zC+JaGeGwMb3Yx@|^5;e#V?7FmCT*ZuoUZWSjge60>LC#EeL;2LIfUssAX}&F@mq`NAESENsj1fC5e*3s1 zJ1+Af9BKvvjmiW|PS>8m9yonX*8>5_Hwj*7-_ypr!?e=q6tfWl+K$JdL>%VtYvh;s zH}~G~dBh64AH(a@nP;lyO#}>@mosPhvj%dKK*TokSOuhG6Zno*KM88X2`H^Hgr@0i zPdi%9I&$KzQetaFTr43o8CwRs*bqH(TZYzS*`%Llb>OdF84n4RYSBN1&8j6)qpgj5 z6e+0B=G)bx1$Bob5YLX#VPtzFQ{})4)4Z8%CjnzN`Ac+b##2=XZZ3cQ?9r>;!jV&0 zw;JE72qF>SNW-VG2P7tX6O1G0G>tIe6l$+;wvhT*Q6+^o^Jy#(452Bv2n=vb5yTyN zcRPtXYK34;Sc(}{RbKg)uW2y(TSAsVXM}-HT@2njyE0;F(nPjS)49N-s5cG)cJq}S z{#7@*$uxo(xG!V{`XXS5M}(4sgMHu?5SZ*Z zgok@;n?c5EMru|%5UOwm$aQHR%`T{FSqRPA3hD^?59F#Z+*?SW6H|I=E z6y}>Zc!T|>_WEMS)OlpbJ@l|u3$MszuJi}Gbq3%smKlzOm@XLC%OJ2AU2yjWYpo9Q zzp6bZ_inm6YAgG@6Hx=#_HNSa2N4gqd7-%B!ymr5hVJT1eel3nH6Jft@=HJAzL~Tv zQp#k}n{g*!aS-Ycg>`5416gv-@JA@&i^J~jK-HNN^k%sc<|11qEMTVLT#AN4?$e~& z7Af%cV}U>?FFxgH;cNeCXIKjd4lSB;7Kp&0ec}m;8yQTN?VvySX$>ze=VnOsQNNX* z>QrIa-}Q{^o=v$5C;%N`QIDn(be-@?~st9mY&jAw%Vrv##!N40yGdP3Gr) zaeANP+1qF)mIrk#?*Pwq;v@7|TUy77SF8n;H{{&_j94&|Lj4H+`POK$VKRa~hi=jV z8o$0`ih%`&M(ja-|Z``ijW z7}s7}?muwm+9wC{#Vt@%@6-93XY9OBkIg@uX@2j5p--8IbY($?Cr*tUZdy-Q`r*@5i9P%H_2fc&Uw==ZvO#&`4x)hKy z!`3gU&%82L`*p)nn{v4JhOAst_G^i8b8kY{zJztlerTqh>#|nng|>n#`?hge%9{v_ zf%|@ub%beYFOE;|J$UL5sannXhhMCy06)bdxqud14}p&g*-y6B`KyALkcF$Wp~-}@ zDM-Joc-(cW(yV%(pZ2{?2$9OCA!Cp>F$z?T`6~+W_Ytd*2ddOk2v;9 z{#|0iQ)9S)xyHw)IZt$L5+{R6VWbKuq?v_6_kv0!OMlNd3PdO2erTp=Q~t0?=9#a# zTr!=XF3~+`IPcI3C8S=J1g{qIcdhqP=4rKoH&SO#MNTR_7&>M(iNErF;1L)&Z{%+!C8jNyTcBH(O0;OWaf*Z z3JhKqec620J)%{YF9={dZi%*pqC33ZL8&+Tb0{C)2*oLV4;Az)Ot~;O)$@#nafQ6p zuVr#{tjAkGM#Rn+*NEtt3g2oxFv>sHvXF;dwimz)JZ!V8(`@Vpvyfg$rWb!uS3j!- zT5JCVRIT&5h3E7BDXZ&-R#H1^j$X%8Qya;~;`Iymp%9EC55OQO$9PlAZ+J%0|A(q~ zj_#y+;)P>uY$qGrwr$(?#!fc2ZQI`1wr!i=7&p)FJ?FjW{?k)kJ*Q4j&vbXybk(Qe znR>Tqw09tI*V2nj8}$hq$(LJ)E~iBOC$JH{Z)b1S3mcbj$<9;F6#~ zlaNp)MuoID%Ju08rr_URshmbj=o(`YObBVlPKg{!3I>~N3I+zEXZO2K%gKnBs2gnx z-Ct?S;tgp`CXK3K5UheMrG<0=mr8Ju=?KY*B*Qy^6LEnmrfZZqya_(JVvK%$_uQL* zf6SKqyzlF0{$d=t=bS0$N~w*LLMz6D45qPiZ;tz{`FWh&>^NK3nx5*|OFiToti_$O z8>Dk~ALX2eJh=*mYI1L#(i--~M!r8}eVL{OkAWuF@%d7&z|`He9e;x;996~^n{oA) z12!rk)mY*N#NslesIX*0=}u3rqk*gR zN(O|mp*4UZB5%~ismp8Eze3E=Q{GNpuxd~(42f!w#z#T|aBp5r_hxh`)<#FDtXu!5C60Q^47tH z>$&g?a21pdmokWj8HW(d$R9t0&dU7;-8TUkS5MP+RU9O@+j z)}3`hhY_bdW$0~rMK}J=Mn>t~9l7N0J(1*PLIC@j?%UF4H~nkq;iNE3BX76c(Mygp z@~~9L<{SgP>&7`0nT3|l7++mD`olb3ztU|qQ!H~@2{LC zt+yS(L7$1-eemo)9EwJ3P)Ro@F7-mUYd({|Y3ZA+LA)|<>A-X-(ep*xUEd7Zh}EP8 z%zFC#C8?loR$z?XiaonwfRQE3L)Y%Fi9z5piv~vw3#%;_kHQa#RPAL)Krspfy z^F-=IPAJa4dh0d&y+3+y`ru3s7Z!OKd1HwSnMOia=Te8bQ5QkGR>h}G@A>7A;x@*M z!1Chb^zB4Q#LdDphYF2US!MG2tpjVZpWC9o8s3)Kd8RBD=5akxYF9y+R>1}=4DH7Z zLm(7|I7C<#m9gHn%0K?;PFWhz3tzoMd5FeI@AR+FeR4eqyLMXvlS2)kBYwqCB&@=M zCSyN(CRr8Z-i*%Cz;}pTkkJXhGN9I)Q9@Le-4j)*vz4TZ}8AA^j%h&yS&-v9eDk zihJSzRJF#j`<7S4Fc)?eHeNwXV;Ube#oV|#F9~JAPW_`s|8WGc(ai7uBBy(On|Zg~ z99{9R38Ytgx1)v^)ujU41I^j#e$Iqc8*0f;q?Qtf?_l1Ix_5LS6Mi1H`#oNHcOII& z#_SuTJnh>MmiYm{y{)*|(MUp;)M|e5ejPHA;qBVib2oQeI2fe1-Z8l{+MJK>=^r;R zpZ0ov{d=7Jd~Zj3Ba!{lZeOHu{uCqBpLOv{TA`$*+k{n8-lMJZN_sirv8nxIsq#j; z-x^Q9cNvR^6o<#gt8R3>6rZ9^PnvX6|=BudoR%BQ{Bvnu2$+`XC@h zwFA^p9`%Wgj1a-pgq^(|oGq~qPjM98=yxAFk@N3OaU(Dsj)w0Ux-A@iEQ*4IdG&T6 z7=}Y>nGW`jO#yc=Bdnt53)t?>GuZ37p7dH>*U`Vcb@Vr|T32XZj6B)o4+!g61`9PU z%%c-s=-Glf!cC5Lb4zXzmIikz=e_%p`C~n(FIr%wxQ1JXUsXAE3l>PLw!DZL)?P$pRzplNIp`h3qi z<3Q|lw!&$18nvJ6@Wi(KGvJ0)6CVE4H>_9jTI+Qbo~Vd_Z8)=AhksY3SVV%kje3&a zJDj>?igN$*ai>6JHy%_h83T!kxkC!3*8gpF=JpZGq6rM2gqJEPSEw7 z_pQM#3lolahR$cEkULBH)26th9ub5XKmP%TX>&ZS?AjTW7QMTUlVmKVi9qoz9aofH z^s7ZhfWd5W8lz8y@vh}-(JP`Ls0FY)q=EWb+KxC`TXWaFB)~S3j|i2AZb1LCJV`5% z(apJr|GszDqOy$S`(hEe09<*^=a$^fNI$Q+)EvRcSHpOcc>e6<7%j%fG9kwpl@99`Y$S;-fqO>o zB42pIB(szI@JcpUq~bEI2ImYB?kQChMt!63yhw94Y*{*Wmx4S0t;< z6H!%`ilVjaN;p|CPnI21^7_d1sP)5AUo@e}#}S(jA@)o6KPM*{NsCjGJl>)3f6r_P zhxa83wTx_XVgrxzA~cIH@y zo2c;o^A^mqA~@@H>+2<_#f!`B#Ibv@ezpQQ&m76kiti*(@c?kOAbgMMS#<27y-_*0 z+FAJ>QqeipP)wCGl8;TNX|gffo5SWoxN{p56^9S!;`$}nBw>WDmykPKM6bmK9!fYC z(2Z4hm)*G78~Rb?Kt2j_!Ziga$X|>!-=P=m_?3RJbuPUJUUZ>4V$hot`wPFt#QsrZ zMa{(lZ8cZ9Vk^Nyt^dJNX;!bfjjjiJF%=55uW}-;&2lXwLk30&qUT6A#I(IslhgcrB3^pJtjI35Xo@Y#Z-T5yXt#l=wDy3s7{4WhzzK-vTgsjO(EW z_Y351q0VQb3DPgbLyeY5O62c<<7Wq}2Q{&$Eml|#Jr!H*B}J{4q)k@5`Sy@F+wQ8Z zAgX2PM-Z8-{;n0TA3{BhRLr)`pP!swho3f!8~tZE1|AvBpl^U=vsWTw!diTYub}#n zX0GU)o0pv~<4YyZgqw?Dmr~~_t**?-2$$y+u5jfjdNN{+|HiO+G1+n4dW_Q`KyJ zs)J#bTY1Lv6I-%7p@r~raQPG>jco{tQ%48znmkQr)$qWx9mVn$+HI5CfI_o&^nD40 zbz`Q>MOPoG#<^8<>v@LD3f|3;*8XQcym7Sc^Vyyy@CHjhz1nqQRSs)Zt zHpmv}dX(%i)U1a=pquMDyyCJ?bgOCqizW4&mTPS13SEnGA;*^-awsj+Ko!apWAhLt zv#OYaGxy@JRHKd>E~|>Dd*|dIeJ{5T)*R6;~Gu6RAkDImz0iPicUM z_#?;IPOA?%H^9SZLix4z6axlvDxtGOKa3ZmL`)e z8uB%);cI*TYx526a~L^}k&Cu|`h4_x>aBx2t1o(Y3hdEDnQOX2@X{yV>1`@&xae!W z>Aq!E^jZODDkQVi<#3KOJ{?tX)bRaJNr{MSkMEDiqS}tz8J*hg{siL9Hul&ZzR*8V z&nn&``K@Am#wH8;uuznS=DU?YJWm(g@(fddI~Xy>)~unibT!gdT*X>fJ3$qJ7u~h| zN=3r@cYQ;lm?(u`+|_c^C1T0}y8bSWF6HhoVP;m`9o0`0QIAO#+w(Tf# zZsLwIZ@nK`c7(cM+Dzn6<{+G24s?e=DQ!i}RNitV5^ChKu<~^as9>sX$*I`3OVKLk z+GV(#bC_&5gUyt>qL-sMH5R{-!Of7}D8MBxBy4(Ocz_&|Kt@K)tS|#*FL-z{0Dljo zayCjLHelGfJx6eE+|J29%<bVqS(exw`~zZWIQO4A zFG{T(mi<7omK97iL%9RjPto3C8)iePodle-H-RfxvMNp z&fGDI|Nhk;2>i1U1+0>n^TofY8Nn&8s0$~(f$fn?*NY!8U?9!+aN4c}U#&j0+E9I=S9fQ5Q+_yt$tHh2w#&$tB z;iMNJdQAkPb>+?W{H{8s1b8^K>yPIrO}+y2Y%{~efJEZ5%#By?PH{D3_>01-QST@S zcoa96|Bdtp@=SR*X%{o15*C31){1zmQ@wezC~y5qP+=K-SE*`>Ki4OUCeSKxmTWGGK&jht`)3l&$;&? zmdl(Vas0C8-4wprbbVwP0WexsB4LT|9$!@f$QO~R1tj>Gsex;k@};$j*;zi*qfb|G zwru@8%!wyK(MZSYv9HO0mc7VReEEjU-4MO`rJ8k-BOGHo#>4!ljXWaxQP*7Yd@?Df9Wk&7%#h1?+Z@~N7aQz z>-B=u3I{;5(r9kT!-!q&9Gex9(0PVmm|WS?CL<$=s;z+JXQM-`24SZC+C^(ZN*Pr9h04zLI}7 zXG_eCh1`}?_tV9|#72Dh$#W9MJOp4(7*WT*Dllk#Qa4ZlW&ev*gGg3!9S4L8 z__&g$)NUy@_`d40HiRo>=@y!wmm3e}LY@YP_*>?3QIiK>Lk2Ha^0#$n<@uu;${Ii4 zV%u}ib^K@i6oF_H?YCL*t<6pPazRx{7~@ZO_r2O-M|&#QIehiN5zKhsNBnx~$QI@Z zh-U0o{`qZ*)9vXKr2gR@#;&IXXdL7q4O2r?711uHlBy^-h+`780nLGznJcO8Yjx=Y z1*lc+A1vTCwX2&y3=)D@!&gBU7v`yI{bd)rf@%&~w?X{+1}E^e@70b4lC(!0u@#00 z^L->!ipAN)aA!RExbW}zR&aTLZ4NioKAGoQMK?2l!iT7t8H)Tp8pqq z9K)RhAyI%OEBgyXe^iN1?5jYCA2Hmi1=@w2CRk!=Krtu_mBkD zUaSl{5)cZEhKUlAr1xX0${v0lT8-svgm3nAX*qiG5kD_gl8RrDUVm*!9llW_7Tt%) zQtV4@*FlTwjN!25hf#k-+9oN8ydPTp@PEw=nIlL1OQ+(65>#AOMoFHj5T*8Bh=E2C73^@Z^% ze!rF6wC%)pJY|5(9Q{o8txo42RW*Gst|Ww{Od4V{sjLXiF6@<+Kb^()Du#Enik}0o zE;Fp3W2EIaVu$EHm_PEW&!@x5^$m>?UFB+S#MlsbsaP|{eIi5r)U?$Rcr29qG83W2 zUo#4%Mc0ICQWf8*h}aUf0Y>tQuVV)8h^Z?JOSM`>H!%T?hwp!F`YS;~i01~*QT+)- zcXqF&0XJ|BwABIPttn)KuG)j<6?j9|s71Bpvc@h|=i5~sa@`gm(R7fWv-@%}uO_OQ zieSjxNPLhW=aY0NmpyS{DEdlh$bn;e+n8zLIuMFu{||sOXSd{5zjs72Ab1oVQ3~Mj z@yAzrnmt>pa+Z1Y^ll%hyqRCC;1V>iURT=UMOt_8;`D+0CQEr}d>r)V>Y$X9T3Btg zYi%dm*pB$*HhauR*}vL&0!gB*Hax=Z0B(qJ@8Q!ice7*bwt2SX=_Ss}KvQ&GIuP6V zjJ+zc84zo^ZSjqf{VsWo%>JdhHJ;<;h0HlR83ATO*zd}BDGcsrgJR2lRo`}&HCx7UU*{I3v0Cj658b;4xF*LUy#q%eBsxX0O;TD=c<0x*} zi%}0#{5cfZL~=K;6rs)-Z)_%hc14Y(>ZNlOK8b_Jky%$uygVC=iE0TXEBH%+#+I(V zK$tUrtmfk8RB>gc7q{S%nl<}cGrbGk?8LHhg@K_%;MSPAByd{WIX9Zo*c?PuY<_upyPJ);?o#Fr&MS@9qw zZ6>V&+t?<+{gWA!5^fB?oGPdzCeRB`V@Hv`CG1l?gMFJP1e(|QQVKPR9%r6_S;Ikl zEhQ6lr5L$y!EomcT@ej(a}1tV*_@;@gLevDz81Lf6Ukg%JIz-GuvS^3kmLg-zqEZW z!OOBX(Bh0F3|b-UqG)W~R_cT;+%&~2O%3J#(svwdb*)mNbqc5YkWvsp8Do}X;FK6f zGp2UNCBqZi@J~?KOT9Uyw&<@{M3Ymw^s5;^Gsv33*O4wJITE$Uqj}Zbvl*|0XZCK3 zVZvIq1Rjr0tf|q5!ui%WnpNg?>ysKE7Sg4eZj?NXE_f194B%)RX4+OIGi%aA@(!qJ zhWeWZ7@J6P?*6Ju-#iVO#cjuXV>=9{ECRPavZ+lqPN;t}9MCUo45sZk5E>gd%r&tg z{DdP*PMGCC4;+INV@utL@#M6aW>YlX5#ON2gslfK9xa5=bcPv~eQH{f?hIDBPa$Id#c`7z(HD^0Anc4cg)XCRzeq?}92JLsJ zFN2UL&FQRZ0Va`-da}GisLlo@w$R5I_@woIS(6&rSr2D{z_EiH)9E{X7-H+sl}V_~ z{1k51YSDr%YIKSKuc9_RNA^*-!1@&Uwz@rPgT!0?og`e>`-puKifoB+DD^!?Ho0ge z=VyJyvO97MCpWckpx%pkwCcAWiY{ztfsp}UW`T=Y@ERiXDmKqvxf71DMu21ctuZ{^^>6tFkf(c; z#+8;fen20xKLLX>gLZaPZ+RDM2^DnWVD{rZ`kL7wBof>jV5k(o4zz1 z9x1GCE_;yF*mx2)c%8)1Rv~%|9SZQzzXhA3G6tYMLs}L*sZO*z-j<{gOwb8FS?E!; zIjJ+2g)SG3u|uasVCF13^=HGI2d)b+sKUp9J=;TkW0s3}1+&hY2?zgJ;XoTNS@?|) zAPwsoJC$K{k+}X-lERRx2OY(X&KEmH(Tn!*bZFJ@#H*sQg_PeNvBBjSicym~>!*NX z_d?jF07nROAh8`tCiMZ$y`BE*gXLOfUG;VpLzk%ekt1a3=UQ0$lWRf9DUPRDAoHGL zsKs5JD=A243Zg;SOF+&lmCoB}s*Y{fyYedlhat#yu1E88H|41?xUTxRj}RP3C8S=S zsu(7F6}t-j&H4+RBchA-%8_ajTst%-{itZ$f@r?bwNF~6*x4|VyIP<9d^Z22!IhH| z-oj}kgrKVs?O!f2!Gdry zfkE~1QM9&Dvaxu)?z0hWfihO%Q;gCvS75r2?i!Ibj_&5hY)ZSnZ-|Y5o0w({C*p8w z$2rUGHBLDo#BpY^J^4)pq=N;$n)x;=kMazE!@=}F{E?Y4y)wShF2uD8*A;-Nt4o^1 zste(<0<;w+Cchb|pMqZgm?;AaF@&M`NyvRL00E5p#8sIG%{q+7Xx*d5bx4}oR7Bps z+92Z#dDwhPXJNd_0YS)HyFJLw+v|uLN2{yA+K}d<9`JH>wtDt(1L(^x%wcBRkmtXo zh4AinB}>^kT<064x;3M4yx?;dEr3NHOFp8MNXYn157xz$W$~HG#JpHhaTNju?1?ig zyqrRpTiCr+ElqvP<%Ku-KM}D4SMDIFt7Ojx%<}6HNAuNEwI=c?k9n1x7{WyIL?~@~NxK|&1eP2;<*ftLBp#n~!<^~+$G_ZNaJVTRNnc6Pkgt~i}6w?e#DioO7$`}_azj0l{FX z$#D0=8vDN4@lY0xT$ovz%CaSk;^gVBD(2)5h0kbqxsDkH>i-)dDDrlOtB&pZHGf%w zVXsu6H|gZpVKSjVPi9@q*`-_hGRUBy`1Oex_6f3H zPIr77J&aau00NLY>Dy_7%-{L$D>OWQ>${wr0eG_Hipr73NK3?T&D1{4K`C@;88*j? zEutOS|5q(8_{d)3YcEt@p|5&U?7wra6Mgln^l?@{nd8^EDilemUZh_uti4bQx9T7Z z9@T!DsPyA#zUtBV94L4B2AmVfUA-qS@n>nddjJqh*?b*;O0_Sy|89E7T^+cL+(39! zr2Q(~lB?_R^irio9{pZ0Kqxx?Ug*P@ko__bx$M}zaIQx%&QU8yQrUZ7; zvLV&6h0NR~Y%JT@JVErCUWY1j^}PPC>@c+jQ{wLKg{te@A7`>)Q=!+P4kro4s7)40 z7@Sy^A{yK0juK&vqe15SKDNS_cJV#>DFNO~R`?tEJoy-9LYXv?F`NCGM-x-dvijZH z>Je5gn+6+JBW{{@@!FG>i8kuDOSUz(G^}#UzO&~OkLc5c%JKj94!igM=KiW-jUiGd zhozPqQ)O8}CU+5>Cc0({#DItZ<2_&@^~eMy<)EZveu-0iGB6ggi{l|lTW{!g#$x)? zg!{Kf-{-fJ3nyPSi$)#Zt$4T*__Eekn0-vk&??4(`=rg8cuP(aVGIm5sCw%x)lLQ; zj9#V^9wrkZggEzky!LbkCq3t_6hGr{=_(f>T&Oq=&(|r_c{Q$;Y4E3$jHd;$kDvxDGf;D{E(lrm87~75_)N3jhFbvXRJp|U1=0j-@d8N`yhgRmr znb%n{5)av+t)<-{EfwId)Z2N>g-~Mx{<#50!0u>#Vsd>BHIn$z>|WeC8bSh^sxv`( z#Q+XBmwNV8t6VCW>{sS20WJ${G3;zrtQPTRNL3B0F?bs6m4(iYg<&WYW!}&5yruoT zoQQnoBTT<<8@)nv(4@%9D=FS@CLSKF0|b1)KP0AdZLPZT6I%o&eP+^AV;%TXHJv=vhB6kNi=z?5%%0cG zTpQ`Wne!)haGWXK*oIg6f%#Y3pV@#s}-x16m$cT3f1pj(} z!)TCA%i$y1MzGear&|);O3H*?I(TG9Gnheh;6Jxj(2mr=r!g$mT_1c5HK-{DKZDdK6;Dw_Jby~=fT9(qsjesECAN1K z`Gd@Ag2VG&9&VaA|IatPL#CZ4JG8-kNW$CNRd-&xy_M`tf05Ep@x=LkX{j(T}Io$5FY5uKD8B_oI+guO`OY znT$z~q3HJqm1xU4kfooYpsgy%yACpDy@|9V@keOHJ=JiU7zX*RKzWJTd+vpSmL@W(&}JCxP?vtw%@#-=Iaiy!vB-TPJ>(BC;%1+=z$Rk z=+{pgJ5d`$BS||mdl8|l3~hT{bF2~lP;3fP)a1fEkko9E;N_aJx@>RKBWaKUZiA@#oaBaJnU*14;FF-o;F-x0&`dm(vI}oRX#`V(v z(F&H4BGsOnBU(JE@T(i_RSuf3R|tuT}XNGN)}sa$1AP0)vagN^^|vL zA6PeYP;#-bQoZvtQUx#eopnDU&ilf2*r#=y7mOumcn{jJ^_Dhtncrl$`s&F;TZ+w< z8!{brRq3iSjm@XBQ-==xR39dw3qr8(aq= zl3OW@m6@EF5HHqdBEn>_rl|Q!3$2CRlVufdGn>8k%4W+&FXB25y1DNB5r9HA@V_;_ z^0=aRp_gxAHRbV&lg6kAkraHED}$nm?}!pBBagx_{#>`MI5lT>`%jWi#`h@{>q=lq z8M=(rTn{r!rxepXS|WVKP?O_ci20Iwd(Zrd+VfDPD+u7jHM<;f?nZGzU`0472|Oom zU~4Vw8Ry_h+~-Tkd6HTr^+X`ST{AItZo+uW$uN+VUj;7<5HsWW61nY~B76)_$Z5X` z^so*eFo$v*t?^$aGt%6Z=moz@K-`p9@kb|Xntq#mEp?WdJ3cQ%-IZ=9&gWvr-#N&MZJ9e1lh~1H+QZnDcVzVt5u)2+Dz{@ zn$MIUPGuN~lG$oLU7m3%SnKypmPMu~p}rQ+wKk~BBq!b4RG`LuIjeKDQ;@bR87Zzg z>c-y#sXybWTiS)~*IFd8Hq@SmvIFC57lFWw17g>jQ>`s;B`pP1N&Onk){~MBUGOs!->Yb{tx>sUda6>Q zRC&bil5`_gv%oahCTQev62!&K?#76mwDem?$*E|t>oN`Q!+*iV`14g&dCohj;o5-A zTpDT?duzh%qiLhot|q*cdW5^%P}r*ul~Ut(?`E^+GP7Dmk|TGVGcM|?W-!7xT0K}Q z>E3I>Zk{+HW2nNqlBAou3z98RHVuvE*W{3Cz#EcI*doJ778T|!ytzIa3N0_BvVy~u zwt=R@Bs5~$h5eBhxxj8vrG;?JF||5Le+iBYWufhx6qVjx9 zYm^5@F2!^uqO*gJ^W*xIj@-U%d-U*UKjv8(1jc!PGjbDmt8^XlTvbio!RHW);HycW;%4@Lgbcncy0b0+6els>wU81g+~NXf`@x$ zi$elGn8|Gv7@xVUykHVA(?U^)Bw@?E@7c(b~V6`yT7<3?q7cI%EpIXKurIaEaSmo>o<8;es+Qkjwl*}HsZc#083 z*VZ^s7$u_%KU!?^hQ?ooJ(G~qUVe6|#{W$;ruWcro^|W4rkL|ka6?lq#V>|&jlaZ4 zcRGbpNfIua?#;tlYM0oaNB^ok#rbP{AZA^A<+I6c1k>o z*qvm6aK)_$Q(O%F%tV@DG@vQ6_l3l_O z)w>S{n_Hrw3Qq-WW`f&g;p2+3xvQXc;B>22%XJ{J~_i7R}`Jony-`O zyE+I1p!o~qXzRgaqZd~#e#d+$l56_Koo8U|sJ>ckn{-ijL z@$?7~O+ki}M{O)hCiv?>&=xrP^uYJ`0XG$G&RX!j#6WEA@e$$!tIr*K+tLO4(l5>^ ze`6#WNAae)+)F_;k`3h@WtlktnF(u^+f5E6#@pb8tm8Fcn&08AhXy0ztyAS_k8?Z4 z47He&L<^onxC5NVF=oO(y8d zJnHVrNza6=y(c`X#D65IiNawt1eIWv?*5xHBJVO`R)5LE#BYcCAd@9rk>_v;>kR%C zscUm-U{Z)5+lZLgK{xD)!tScp0v#G$kJ5@@x`_~B{q^8+5RhfXS;OZpovi+PLB;E#OXVI#Hgp*PtwNR#}41Kp$Um=jMn2!Ako zj)I_|U7libX$;zsZW;*8B6Iv{F>M1ej%o`t&R28Sn4wEg-H|hOyzEuU8)__qi~Z^y zM#>xS|1?PLh8uA(=lY46a^(Zb2yHbbfFIzspp+$C+M zIbw{OXyM&T9U*_Ax0%k{=zgd$*=Xeml14+g6mC$UeAjy$N9P`7+$H>v!Sv4M+$G%j zTwtWew{N0_g*wOK15o2C8*@^Apy=9$aj4Gk(ec-)uM(KoEf5M4U8(BIv#)?s^47B zXqhkk@;5&}B=-<(N|bwCFNndQ^4;d2ZC2cO3_$_bM01 z_;&q!tIJf_(H;CLU|wgU6fG!hG3Q@uSGW6}k2^ znRg~qMhzuJzLci$rS-q%mN!ni0L_VjTk8B0E)MJjMxCJ-Q7gmD%1boxcQ<|5;L_EeFo{NOwZhMM+KZgS*gT zV`*dJtea2lxoXbCi*t*e$(c`L1}nQYb)kzv?78!Q%zn(R|Bsk3cBcPdn-8<_vsWR9 zwYoihDR=HXbkL;hL=0}hOBSPZfMbX>ROPP;`9lgFjAwJa} zo`oLA@?|$o!@R{Se0XwfzlojevUA?nlWS!Xdj|a$Vg4_jDQdq5XDH-N=sbzS(9@gHqRE_?#N z!N&E|*>_1P@`2LF-Jj!%{9F1*?v{bH-$?@t6y5oHikCqi!ygOl&{An7YW`#BJL5Sk zzwb)_nz`wTqs9FCBc}JYQsB1496^BoZj#NdcR>=$<#NJ1A8+C)sX0RNl`iSkB(g4O z>m&W?9Y_H^oQqT3dZK%%E%6QZe=U`=pM=|vH;@b!;6Ol-L_k3BKbDH1jJUp%ysC<* zzNDO({8hTNy|yUo$cTclC=~MVoC*ahd62T^Bk@a;NU7PN3Mj>b5VJs{eRI@3j`+kp zlaT;~;Q)l*0Jtv2cf1O^xOgJpZ!G9Au zI_FQt&f@-LzocR9iq<}A!>`mk@_OE14`w?wX%%a17iLo|qpY&yG#R9gl9`U2PN6M$ z_YaGI>+Ggi{Qr>n5@Z-s{N;W*Ix0T8VVBnVgQQS}>1OO6qwdQIwg#ZdR3BaGnqJ4$KEW zMzvYAkMYkSc6?^`ukShru#u|Y3a ze0Md8dStbe!hpry73p(_K=e!VOcb@5-jebUf0|Kb76Y0X*BSpC(sum7^KGh7F#2 z=+T-A^FIB#Xk2JHc3C;5?15+Iu%P~!0yTk)Sp9V@rI&ER`&%-b!Q*qH)6*!_+^2QU zL(TJAS_8Mw-Vm`SEyaCz1V%OP^edJaY( z{|URZvFj2Vv^rvo$};y!d~j#O@&Qlxe&hal`u6A;mmj~D@Tz&FVN&xJ>*y*IobtS% zN2w!;wN0C!#&l9~!PS~N21(McJY-hAXPW(*mYoy`z*Nr!H>H#-y>Z&2ncKg>TL{pvVV$9-6ZF{F%kQ^Q- zMZ~BvQS1n8H>s9iz-Zt51zVik4yXCere#hAO3*azft*`L7A`k9f~iQnlTk*YTufe7 z!XS~o#tDr!s(sgaXwI&Q@}{7R!y1NLO`;w zuz(^sDWau>a2=PF^DmLYTvcBB9uh2CTV-hfY@7};@Z5V@-rr|tymOAgU+Z08YX z=KBIBEO-CZABsD-GQKHUk*3t=AadK9xDgxu^#x_3GrE9vaISqt(EG%7wEph5(WIsu1d>E4|+gI^V@7eaeuLafqguCGE3->;_qIKCy;fBqS z<6l5CB3A$8rtU1pX|dz!l$8ZTpo0H7MEPCQ+Sfss?DI(0577<_ePp&Q_)LTi`gzii6R5ZEH)UCwRfLFf6CX>_6){8T+h)l2 z(p&5UVu0g)n!)FIW=T7cE8J(EL_3gYJvG;T-A2Ke(NjiXaTL<4(u##z=QU-}c{GO+ z{7&;p^hf=U)9g=JarU4b-ERF;D_S7xn`vue;FB-(G1K0c2c!1hgi6nt+rR_xQX_6XHG=T1iyLhh6<3DcK$m+Z*ZZ%sa2$W1-q8jvwrQ8kQIRGp&sGJ5uZ_Jn1e%i) zX`hS2Y9>;-Pqi#6#hy2#$_lORsUMXS+CG+Q)sAStc*o(psojT0*PVj&c$Y2JWpi0Q z0-EWyADyA(6*BX(j@a>Ziw$9fSGAi1iO9@b$j<@!Uj9o`6=huYxq3!rL@cVI&G@#DRDR| zv-4Vu|C4H_rJveAXL>eG4R(eI?ngQ>R|A)Z%oCw83UbNd=o)O+_2yJu+yXZpfy61i zwa?9w3hDgYW%suk>hf$)$>uCx88&4qzmiZ@Fauw5$P{+|*m6Z+Kj3cG_?+}aAR;x3 z-Q7X?uZt~Ihnw^Ae$xo&W2eddKYs?_p@DKxdc`s6zgWe|Xd`+Bm`@4PNu2n$3(|Br z3o{31NE~hqRHqvug-NtHgNB-8OhjypSI59&-xvbtQMsm5GQf*WPwf0vjr`2*95?F+mN^oi^u;}zqHYU0s7iL7s& z_T>3*okkW+9ZICJU>gZABao?><$qC9Sk`HvU|DZDabe+D@qldWIR>X3V`c~QxL2%- z$4)pTt7*IocTRiGdJflS@%B-C0J@oT9K+?mzlZSuPO*4{>v16vARs6xAfTU_1|%XY zc$F+~y(oa%tKTG;FVYuCj-btjE{L;!X;vBPS%;5G4?Yx0lVQ?mdiF)xQ5lyB$)8Hl z*AdgSV|a&Zc=t>;rR0SY;b{>fv)%c8+?76NZ^pN!8Q(b5U#V?9;#(e_oU8R-d>-AU zG(iy9_KY==gL<#xm@cIcZxX~3k9egKlEj#ykRuVm>*fi#mL_AiY9@QZxR)dH5cUY? z8A@4TFJc{7AGr{~mjK;L$}x5ZZ7N^ra>Zip5ZfS?qtKpE_qrPM`Y>Na@pii#k7soZ z(BplwETuCeqpw51kFW@pz-COwlOkelGq#*);YlcIsN2K?i0 z_|okJ?@=Y(4dpvnNTgGaNpsAUBySiiGA7F=YMyPavuC=3)x{~l_;AyRz+Z;)2`Z+p z+;D8ldG9_P9V-Pi>1MMxWOP>&yCRRy9lqlIkZS(^$bOt@lOSp9ofR zBN(41>nOUlzsZr4)tl_O?$ZMCYHv%T-Etf^n6Pb!r3_}-N*FhVx7=uAmaySM*eV&; z3q&=p<<|Q^uCvQEdiFN}b@l2NnORjmfiUEWPHZ+dR%Jq;ETh)sWK+Xpdx8KYj8s@& z%9_9N+Vg_k;EM(O9!^v6(t1S|awS(J-iNj1$f4{*y6=1r=ds4SDjO3lBxTpt->Ifv zFoM24B)WaG%pO_3)7yo^w+3ya!Tq6i4>i!)imc%Fi)Br9(}3EqA9yFSYm7gz>%D^= zjBq~?nV|oFKe5NObeQrV-5h`d1oU$O61K57w!TW6u*XqF9j=uo#_xmDr~?X8Vv>#P zjpseM6E1++s4oYjLQ4uoRb{~6AgxGLkrcR(0rxW*4>FqwP+bK7MYR8%ZJkNdKvhYj zRkZq}EI+jGa6WIo9&J@#U*52=Tk3i>{V5n;>Uq@TQ1pw_O<(kzCOGjmFFF#l+X8Im zY&bt}vNh|rirvI)?Dq)IWLUQc-E{-3pGu^+`0S&}CJEYZbWhn{{3Ly1>-nr#EUuW_ z$Ev)piCaZ>@TuKSappIgyKAEh|3$9DomRE&Kh9O8yvM)3ceuibEOj^t>mF)x%59_#Ugr?Xq3pGM<%V^QM z-w1s2CBW__33*NYyUFw}|4H-7t0u7>$tAArvl2%a;<|PGsXo;@aok2E{SKs{=ux!{VB?Ec2!{!GhJba}HZ;-}i~>yU z*Xaoq2|n}Vdham{sKq;JJ=X|KqD^Y+7}a92tX#Yxvt2uklnDe2SGGcPu6~HsR26yy z(_L(Q!G!eai~J-TN_n5&CH@_~3EINsmN7#x;KD@Zwh9gcEg*xbJKU{2^*uRN`s(cq zAhh6~xSXHKG3Uo2R))gCoUX9Zo9h(c6W3FNaERZlhxtOyIrQ*B)GWvjPy+uO*2b9T ziNpi3CJixN?ghR!vHTg)g<;F^j2;~KjzS&!&(|+v`?uFr36PSnwD<}>c)FD!gp$Yq z;p?5FE9t(q(b!JMw$VvCw!33H>DcPnwmY_M+vbjK+vd05-+S))?m6R*`$z4Xwd$!= zbIz*q?72{Ly|rm`j_gATJwjd46nL?YKzz1Brj2C0`Kq8#M)QF(_)2%{l*^N&g5WS|UtWk!oEC>|QByv&M zIyIUxzJ=<#1QJeSmneQ1<8+waiDCCA7Ye};ovk9pHAzGQ;~`gH&g_B$J1{M`%??;( z?Nf-^4{syUzkGNxEV=~~AyoLOqLEk9$IWN~U)e^V{H%y|PY|@(?`KfTBz31vadq{- zqThNNta4Nh&=kwHG#PS=Cn9j7PO23i&9P{h{56*g=Z@&+L_C@K`<`%aOJNL-OO{}( zwKbRethW<+baeQbak1jwPZO$&35{&$SP_T2aEz{&8}5G2sZ${9eVJ6izFCX%ik%)Uhg(nmq*_(3VB>-sSHXORExci&lfFPVfON z9&<04RyqrH&_>e!JimQhVtmmQ=E7QT{r)p>Uz0_!3i$0n-AB1X_FA0w8Z#kG{oK0_m zHKqmjI1+t%z2q6GZjg532>}^)Z4Mkw+#*4}O+k7>cq?hX8D4MBgaDg3>(6AXI_Vs| zt^!6O&A%SAZToO*r1_e0wJFVL4yegpn&0~utw$CVR9Hq&Ax~+I)wn|T=>!MxWEAP* z^^VNbIK^0xU+HJ-^yfy#$Vth-7lssvQP6lAEmbYC@ytstMFwA&Pz{3TS9Q4Bnq)mH z(WU8E=OLI%FPm$7Lu+P@iinq(Nl4ur^;mz7<9{z0D{}NpQ%+nk*3(yqLggV5)zdTj zR(qUs(@@EZIBTE~(hFliP-L0k@Z+zZ7KKDY1xsWGl~I!XRsnI3!Y^E51p{PhLZ-rDBqu=0o|G&ZoKU%`zL?DUJ0l6GFF#Io< zi`rW2o7*^Cq)7ck>BBMqo6-$qtiu@J3t*JX6n~?tFng;g%oY3sQ*@?(jw~@2Cac{B z7uA78y?M*7-5{@vRlzhu)yisp%5ngleF9paUX!1yS5E*xZD!ja9e30-%Y9B-?J91F zJ6X)XG6cpxKnsoE7MpS}R)aU188msChK`%~_S+{%(ta@b@!#9q+p2Fpx`wCqblVE3 zo1J-f7j?p0kF5W2_mJnRm0nYAG{oeZDLHfcPUcz$xd z?C}7vBC-A{i;XpG{mPfT(#(`|xu#RVmqQW8SAHu~;eQ!Es9M)1rW&l-fP3LFqMl8M zWNk#l{^p8_8uGI`=+e4C;J38B)Vit0;*+Z=yRX{E-KMyb+)_=s|9soshgx-lcCAo|^tuMwg6(nwf{=#sH`iS!S&JX0OED5_T*J$gQ8Nymu%?Z+^u{IPU(qqg0WqL4seGRcm@6+>rgUQQ(gn~sf`B@+C1Yh;Pr4>7ql_Q<$te; zKV({}zr?>8*A|7ffSM=2YihXV`7iX(x|NNtOtkS~I<~UvtY?~UJZ)MfpVzpjhbwb0rMxt?aNS4Z_7x-i#@_c?f$$Muq{uW`&sMM;xV7HUQps(E0pKt5#K|350wx3%?X>S zHy^|?Wu`B7mVSoTiUF89v~zGD<~ywo8sG1-8nSi+WhqB^3W6Ageidg0jZ6y7rE}Wd zvKkki-vbaEz2urtBW)2jx2m0q*ea_qkj7oPbZIng`x9_}msfRdfo2+6VT)p_$4S_Y z;nQ{H1{*=+dXp)rXGpuJEwt(19>A8K)1I938?5ryuEO!u96{ zY01&@K~Darg;lk4KUi*BwBWjxS_+@#@n5SX1bEUtDI`8)34EpW%54{x3Qg5-#1sQ_XO3JKZl#+ZJw7aF*5)cO^*v0GiJWfi@3!>eRY=|gjTTU-{WFNY;$j;^w^lug4; zZzk;{0)xC;eOK|FaCfA5|8sUn;D3hV(ISG(xxkiQlJLK+J$ZARi*zYld@+<^50NA_ zW;syd4)#CjerV}l0_3Cxt-n0{CJD~$AS*4lM)Mq z(svbwh@#Sa7x&>xX(aUVonWK(g3V<;Xnr-K3aQP5)Ft1BOMV>B{C3Ebhu~iMc2H zW@))2qbuDjxUKB&n&4yNfR?*@kD(RY)}KQfMS4`FdLj@u@FMoTW87(dvyjQBqZr_R zczJ$fG9e8Zh13!Ci!-g&>seLCx%MUaFV>%Zy1zeFbS_h_GOt3gTJ$eZde^7c*ZY0L znc8Uuniv2D45ywjdtdmaN}dX`cIq03jfW);E{wLyd5063(-$S zp=ZrO5D{CA0K_Hn6ei^*2`cFg?CLN0Y1`Z1l4HciZ}iYzwNY6PMV^rw%`;Tai^Di_8ZhxnWun=5dKuuXmC>+NcImNUK!FBeuQOZnjt(Oi{j%gm?Urnfyh>CHc+fMeT}8!$(T zRFn%7c`ERPs-YASH%y_$VBDPMV+*Ah!+}So#b9N;T#FB6Z>h@4<24VPZ**LwZQ;xE zO~>Dl2zDwcGBqt2PS_&MbJ!DCl9W!zTPI>ut0-2_0K^Vnax}$m%hMgT?$)FYLW*W3 z=KY&wDKzlhG^ScLJ(E{q`uS!9PLI+hxJSKKO(j_95+~uF3t2+~bC9E>*Nz*1FHh|W zUBL#>gf4oPfC#o^`a>i4RJSKTPd7%vtgao)WO}u{#)Rb`w`z}LbpTMXktQi~eryY!FNG~1dp)_nqw3nZ zxXuglL3bOm*~HrE=SN(s5EbeTUXXnM8(= zYU@IZ^QZNHvYQKqAVa=AxLawEOpN52ck9O38R_{vb~$|uq(4RUQrXRi%w_Tkew`%@ zGMyAB;$e>?72d^CI%OnKLVH;)Nz5bfYn-8?`9-RM=arU6ZqPWB_>Cg2G>TtJ0nKmq z*gd>1hAranFA>F)Q@tcl^%Hf)G|1yXQ#!bjI_l11ZKBZXwpdR<&<5kN+oURE6R;QMNwHOxTWq5qvnS!b@CV?J9=80CzPSU5$#88mc zbBPeg5{}v4Mul{Srb24ZHtm}xeL)wHRzfMibng#f^sJcg+V+~WN#dF;OpH_shV71v zU6#=l9RJ?(D5q|gM$`k7SA;`zzu!RSNXgya`Yhho!A?D)Eco0IQz0(>ZEHD|9maxT znT=_{yNBR9LA@tD7o0nmxW>%LG0i2-4~|a+1n8}@CwgB5=-m^#%dMTD8_g~BjuCGUj8QViFfgd;^%l43Y60i_{@7%<_8f0>$6MY=O6@-oBtA+-;^<^j$|;LAL~< z_)obI%gq{^rJ$SlcM9NnG^ro=dU0ST2nMqSB()eQPdGN8 z6dPoiM7UI7UO?icn;+iWkY(W|d0}RQ;HYqx9#N$DRN*od-O9Z8BElRLTO_-qp(Wj4 zk)52XnuW?RVq;a#j7J%%T&9mcQyDLN?eXlN=Y`^(cvrLFPO{$esf3|~14{XiXQ>+r zfkf(C-Zdj_O(skgB9`NSHxTyUUJE6hW?ZfbUO*&K_oJgq5WCRd*_xh;Gmk zdG+N`PgV8h;i3Vmp&9hm`WhplPy#t&4|7-cMd+I;A^1tw>D#l;huxZvw?CF+>ib`|txj^2CjIJC^@5~9x@w;A_h;iEs9EcFar%aSHsvZR7K^TH&`E^H=ho z!D;@=K1~km(AM{N8sDEv*%;BA)$;Gp^VEyKF`^s-3R#ptl-xzRE7R!sT2 zStGZ{ME*W8we>$aVb-}b6&c6{#K7&J&lHr*t;`K=Z4`~2E#vg{1);vM^?4Wdh%rI_ z=Vj^+5)8h;zN`fz5D*ODWhzQyqI!yAN^&ZSB4T<zp7>0ZD>xNbJvTi#I1W5HeApsbk=S9s0`6(D9Rw$@_phx0=hU( zREp@Q+)ft^gP#2NG#b_#nyfHvwv^C@{U@&hT1YEg=}ma-rt$1zXMvN7o4&)ZAa^xj z09wrq{zqVn#<=*-d$KF-dMpv!N{#RbD|_qOK0mLrsdB~GLOJj zYMjY)d?UQQc)@kFk`FpvRO;ezY5>nmnY z>yk7~LE{tV)qGX9b&Hw?SR)c$Kk1hJkGjYBRu+lal4D(5tyY?mz5)Xo*8G_5*|^=Y zEitk+z_52Q^M)C)n8tSLOuHP;v=g1)4)QqWJ zBy2{g2sRTD*yVR*+{PnH5h#-m?ugVC+VP!{k+@#PbAKpOVeQ< za7%y3-^=RVGEIdmdg751q843$O}Xyx1^LUOKWANc7?~TcDqk|Te;CT~@v#ukNF09z zLLPk`Qu4d1I|24K*fa3UukhByd3oMXZ*&0{99ck08 z&RlEYQHcU_u>}0Ou}P5(U+$s~zFSJQV|-3;$USy*r^9#j-wEU~*e56t4p*fQ^Q~O6 zV-Va0lV`Wod6H6|SYg3NsnR#7Bx{LMzH>1(+i~Muu?Ks0ffhdviVCFK42a^Z)!cEj z6FR2mn9yvB#Wn=jPmt|c7GT)JwEo0tZ49LssUEgxLHt3k72vbrZ3q4Bbs#_H7h(-r z!V9_=(GGu{W+`@U*H<9ps?;ky-`74?oCT_I>rPxrG-}$TFDSiZX{Cl&HXW(l;7FoR zs2#GH$Il-zdF=pi*me%#b z&Z0(kS(}SN`fbdSHJoGTf4iVO)l#rWyUB{@atQArG#0B1UD^1PNmPUH^vTjW?R-34 znpZ^D^HatR+?*$p`MhdH%3chf(W4c)my`w5>^1!16&03Z>}~{>R9I5hRBB+<_z8Co zQ_(S&!ed5l#vA)*vSdtxVM0ih?D9d3ad9spl?ldJxG)ZA3wOy9v+)XMGum+C<(dWJciz(7dxF#et8AS`;`sa0=0Y){!F6rUg+#wL=4 z!4i<`8;VpW0kzGa%wL=?G)4@fc#aDD8zi>PH$1B=11jwt?-dLUL0}?)@R?blPoP&o z0=;LV<1H?iihIJ&o37pcqEpqRYOL%b6I=`?v@265@xfSCxBO4#hn(KmyUAPk7N6SZ z!_n6TeD|OL|JT><6Vp4UfWXt}(b(44T(ZyIy4(R#wKe}{M;F%$@9O$yM|Ufgk4KA} zhPS(qgW6{|lYpBBe>eZTcioGm_(tsa*Z8ZkWxRCc;2R=aZ|eN5tqvMPA4)PCD?(e{ zXUDtsDd)P53HGY$v7xhcHIA>fLxzGLB!h2;FpGUL6#>N8V3ZJ~w~>zp?FV zJ^}>rHU{u5G{ZI~pDr?VBKU(Z1%97k-J!3{cMram^D4@H5=`v1IA%|gPiLLa&%ZDb z9+lyq_xH9-V!UOj%(HwiCt;DRSTow#5bk%S>P--et`N2^`&b$MVbUoMFOOx~T_l26 zW548H+KGMmFgrMc+R1tmKEp?a_5Ab@ABx`3D0UEed--&d?B#>|g~ZF|gzx1b8Q9-N z-=_>$28Rtqj3;4jkNA7Hfv&IazhZVw{W2YT-^ff=c+m@f@u`z3EZNWjeG>c(F>2O% z4GgYmZ=%BKAC75a=1t_5z7TXg^dGs)dxte_r$iz75&>fSzP8rzEAx3!C=BE2zu zLHF58_UYB(k9Uv5efDBAo9$nApYk%0yokvf`^=K}i+-2%UlI`^TWW02BWPPyg6&OX zgsFxh+}7@-F@k~>GKpRI5eMUVQ@8`*!$HpE!+hCZ%JTe_77pTgMn9(LdnV(ywY{u( zOlTgjdlC$pj`AA5>>oV6)I(#edE16x&CT{Fd&hHN8oQbfGVS=dne*}>2E{%R4|_pp z;CSj-E}xpz(!5#W_UTPe#YFB88g`|A`(xVsYe@#s#Mighe=6q!LrA2!iEd6be#JDZ zOE6OPyV|ihCnOY1Qe&HyY1A|n+2fWAjmvegl7RN}c;+z7GZN98{3|APs8#OMG_G$> zvLzkEbEi2ihg4Ny{A%;B&vM)qLs-(&L49)2YwzJ(0CW~*b^Fg#t-K%c9os%ww*XOl z@(OLt!{{IyBWvjXZZ;;tcL`s?tQ-w+(iIBS{!eD`Q#dshmR5)Cj)H=SG5&-YBADM+ z{I};}V{oBFMH(NjzdxM(KGeNC`80ND^z0ZojQUZAPzY)UB>}N7_~CP%->rDSUM7pR zJV||)I@{^@YHpx!k66j*8K1+f=qdF#B>Gm+cYbkrPOY7N1vE#sFASCUL6;biDWvD@ zQp=vFO@F!G5d}p(?SHxKU*UpWjvc!g&5Pi8$*uQAq#q4V5ROVqzD2*^zh2j8!)%1y zIyi-Gp>i`tsE;vCxXZYE=9j~R6b(1o?sd@gmrL2{!JV8}<)W1l)e3i;l@8!FV*o;8%U-S&Gh~V z-|e-d1aWlq^``e;|6c2M8F9NNfbb>owN5g38tAy|IMb{7w7pyF<%g?+)3Tk^2b8D_ai8-X-OI)@u3lKiEB*#}Jf z8AvxR3 ze-zSvg^!Z)whss)@-}?_Fn7~H8sbMYa~TN87_nbZ?tV|l;vXDSV&kNn)1gigw1=N` z^jk?HktDTEv0eF^+n3%oLrVN|*RsgGc+-Sik`QE;;nq zj@q3i1>a)_1ByDM*X$tV6f}{jOt7U&>(;h~JOl4Mj62FkQahHAviq9m-s#eH zJ0bkDZ13evhhazn;N?HZ7;gg`1W3&I@VoY1NB%r+dVg8J`rJnT6w45$sf{b;PoP)1 zy8;sNr0pk`=yA-z)57toO&xp`Q}po`+oxX4P&bvi#to5aCTUVAxYV-eT{o}8c3#4T z&GS|Q8pd095$#0`m*RnNyvZI?nqZ*l) zUad|{iyQ3W?2(Fmvp%^9O7l`bzge9D#0H4AX_Yj)Q9{Ckd7xIQP}aP zw_)ri-B8NMM&GeLN{Fx!zlV^hpCf_SBV`?BBMm`ZCAY%)2XW}XI>h_3MC2Y0Pm|=R zo;!7?2X<`;ntABQQ=iLT7`|`dm!yA3qV-{g7Ww`iB>AdkwZAnn3wAFM`Gshzb$T-w zYm^gfps`+;e$N1<@I_4FK&nX|1JRv29O@(+H0>;^Dt7apG+rhMcB7C*YTIb~zy) zGVuXNVp$`3-y7b)ZtJ^G4cdD z!>sLNgos*)zb5<{*QoRE?(mL60E?fw>MNL=eHzhEg#8 zedJ z^2{*;D2_Jx@n`bIG(0I=!%i@frd}RO8rlr99ck=3WX-1~xGeRdr7#%2FB!cro=K;v zZ(TQ|Ks&KvSNltrU@N^(7p=fY*SpU-ldlvkHPkma0zr2bKX`f!ROVB$V8US$J^LL$ zDQ0TYz(94YKOix0I$YLomxtjwu5!~K`FtpaTaMdwETG$Z8yQ=#=VBzcSG+7OATL$g z3EfREeihGEBRfA{K8A1OuU5`>DIw6kzxll#8cj1YOCt&Ge7kE0+tblF3b(u415Kf+ z28P3GkY{@1Jsh3`%ex#&D7MI};uQkOsARhxl-2^aFtc=Ehr_o|MB@srVK}pH)^|^T zG96W*@(Iu@K{)o8_9nN+t~d?=$iZ@xC-QMiqG2;#u4p$97^z6>2jwWRZXymSBWCE- znoWHw-3Lh7Rh=@-qB*k+ACrc~^)!Sn`%9vEs|b8ZU9>|XzaJeul%_=wWE_fe@<+1# za}K4sk7WI`y2;i))9x$2q7czm@;Y}f_siv8h9T2|Qyr60xV1Kklu_fW;YcrfTz-UKw>> zjjbMvzwjoTt5M)zMD)E2GIq+Koic?B(FZ0dv^#EBO=6PfHs*QbjrN>Nt6SK)=HzRe z@L{HVVRJR8L62=F=#<CzIY3RMZ@9*WP zlti%mYMPCf%MG%8n0&m|0$(|9k7D+>d>DYSc34010bt2!KSE^ej%Xi1m-Y1$VoE+k z<00ejDRip?`+7&QiMe|<21rh(ZIC7tYI=B$oq?qF^)&F9eq=ue^jk0e*wmOh*2T*D zwc6YcCqu{1{V4r?D@q1~~CdIuyL?!~@Kkq&0YHgP^I?Dr zIy_v^u6oosvVD;I`bTOF=ka8kkPqG1xje4@hHDaeYRiycj1lqa4m3MB^=&tm_;uUI z_j!0CvhUt%6Vuw#PX{8Pl^cpvit_na*31a4cX<9MweMlGV>e)r5E%#;Yl7#noRWX0 zm{B+nV;c^};zB#2iVBumj(-wd+6F$jhStdwj3ACZN1sELAxom!+$P^rrG=BoNhHA_ zla1<){^rF!v^mln-{#oI`qi>@uAhw_u67=i^Fz%jUN^#k2!HD_$C_**n+|#aCY`i(I~Gd;65JQn$4Bb*J7Bz9A$5=H>0oKHGCNg}(Whk*?{-$gY?0q755ropXNJbS^NnED&H#YGiFGXtu6O6&l@cFJD_py9`Oi zOHrWNe8vMVOr6I@KLJZqyinkIs7hv3s@anfGosi?DV$XH1GP?>ftal<&Eew5t+#rv z1ue4Df;eI-TA$7VuM>>qONuI40qNSp3Z-aLFz}x2?8Iy~6%N^)a5n~nLuKBKR_6(^ zowcAeMDdNaKux0l(ZmX!#L^I4cyEXsDe*;EVqkw*}fe4%~a}t{Zmj=y4_{#mZQ_YmPvlh@a zZujA)9xOuOO$`lM?ZE-biBAjOV8mX#oAt+KS*5hj{#BJvn<}MW1x=tdZh+HF4ei;D z8a9JU&w?C)E+ zJK5X&r%j9uGLXub365uU3FwSV`p24l$K;`lf3W#A3dh6w!pYEz(6N;wR8Es4IJIm& z3UQy8aiUsR+OI=Z?MGYyid(Rjq~`E_rRFj!R~Py3jnohw)}oqAPeh&~Xk+xJ7-dVj zE?VaFF%Cl)`Hq;ql5ug*Xw?PfJQkQk=B(GinxveDbb`6D8Oo4kElcv@7N_C%7}e<_ z+Yw}7%KKVoBG0zhHyn5g)N4~+727S;DVk_6#Ia6x^H!5}e@x6|So`^=<^Pz|j~`@iYV&Bb3bHU*Da-6JB*IwJGkzHs9$$g|mO_DN zPh=)|*7KM%C=Spmi}t@%-2ndAYB8e@|{I@LBlj_*Avt?dT&nX6s9>cGLS~w=K3JJs+$dclN8bEa5!h zm=(IPxTD=P%3S`;Cd(Fe0K>z@I)>J;3 zo+u*;hB;0Imjn% z6bMBj*&_a|BrSF#!3cA--e`-ZC({0%6}R988}tz+ zll~t~=(qkH=FqqQ48ZLi$Nj4*CVM7KYtnuZ08syB`~pDvk6-v(B&$|AfS$RClD|>8 z+FuQ2eA})gSn!NyuZJQZhb|_G;&&yGO!`M5$et#eLY_|FvxNmcbOMjC#KbXjx^uTlt8&4p3Wu zLmCbK=SUKuO{J0rQotG_37Z%0w%PN>`PGRwEl*{%z=2O-E>@hV1BraRIfD!6-q{@S zkmle5)wsETeBwEzSm$|-Bl3!H`VUgEZ*RzU3=eTK+Tz}$o9kr@Ka>MZ4tjU%@VCyb z^_xh?sod5ChD2byx63Uw4chqU=H=5|b{fJXNKJFh=j>IiErxC7G# zkZ@LW@ZT%9G$J*QT!^{P^_VmjqydB=Ndi17uIz;1IMx6U&zXJeViBg>J0YDa` zC-n@tpGBkov?^Vx?#o_?Q-3rSYn-*12kW^tH3u2YZUm+FXtEwJM(CYAU<=%p)hwt9 zM{o!EX4B4|3k|#$SXFHx>k{aAb|HoQ`-6g*vc`D8YGMfgaR-Gw{nJEKj-7`I5UMJuLZ^RYDphHV@mUc) zP$xj=sd6WO-}1kdp|+^695;snt|#}8LI0`c_e;GJq}?I6e9MJmAJDUD`LzFf*5s*2 zdEK@Nq~=`%SMbKv8iZbp-x%oDVv=tzv!p>PM$_Oxe-+aL-H=J^`(N(xeolu1(t~14{W{v%tV~X{b z+U$cZVHztJxsg#bDIQ^zyHs_Q)I8*Io_Mm8- z3r}QRtPIqD{ACe~K}WFgujmF8m;Mz27<4*iTCn}+iNKFfJ_~!F$JK1pe|Ocg8o2}o zT^)XY=%1$FigjMCiU%KTB|%eeCh7?^glzxlzZ&6K>L75#^cb2#?p-ZvlDcy-zSZI^%N-*J2Y_q36;z+q*-s&qF2-*xY$8 zA&~Sw8#wqZ=W=k%jlX-d(|OhDe%s+D$^Po|zpD-o>NQvArh$cz%frQlD%L+KAg2#Z zv{1*+2ri8OTZ0l%rmz1mSh%O`zriz={{;qFtg7Gq6n_2n`{3;i+{MM_@Y0zoNSi?p zsU_W`!QOZYQJjvkt^Z&&%1-AAyRzk&GMS2_&uPP?VK?thJ8Kr&xTCb7JgS>zvFcKr#3WHl^aLICSld@jOx^|B1rA! zZEXpw>bhh9d~A5D3l+>vb2bLVDW{xA+K4LF zv?QpbHYtxpF$o+QsQ`z}{LZmFt;nLn-W`--$B0K->?+HG_Y7I7fc6aVkR8NrM@L>MT(OvR-FT%qy1wB{Zf=JCDiimf!p0pkGmia%a>n4Sw3Er44f$`? zZPE4NA&VHxX75b#BTcNGeR+SRMJl21 zW+mz-=J1&|^?A__H?!S-dzGU{i+^c&X8Rl%qjP_}EIjhDJ>Turp;OrR>d`9`2&K^k z643It=gXehpB}K>v+$ zd2Mg%!?y0tb#;kjtQ4$raele|Yekw0vTjBE>o8V7&AB^DH$)|Gi%>ht+eOjW+Y#5+ zhJQ7~iqOV}_hU%S)b_z0tIU^fsJj*eWQ(WDTOJy+!g~@Qm*rFjb{Su1W9wH)WUElV z;ZQ8d4RxLU@6e?zlpGZty_NSy&)zGSJ&(s`BXoaV62!f|oDC1>ch8%wkB!NveSTah zR9~UJp7!)^tX?lb@@4xj+$9n>Cb73$P6Lk}-h*TT*o)-Q1#emv#|7W2F7l7$IWLF{ zoRBUmy{rp_3}C4sZdeDkXxWkjaLK(hnYY-cC6U6to?x*r*P3vwgNP2jZ;kIRn=blV zBAHj8Sx8<^si#@=y0E`JO73LVAbTF=so1ncu$F0+>6TZC($>oM+xQ&)Dlc;3trBx# zE3ngY+KA~vdaB_jf$?aq0cWr(OgTd3?{aE=$OV>$zZMi)Ihv!YIGVMPArD&e!K#uu z2$c}>qnITIWOXlpxBIAj))3z>@=TW$++5wAWe~CM|r9pdi7jxE#T| zSRl&s3~5fiQ#|2IP=k4l7$W0Csvy)NSdJhdV>T*aB{lxmWk?|8@d8O!yyr9$SuK2K zJbSa*AuEem*|IKwy8+|F0yndeAJeD}-p6)DMBJ|xM1-rFepVM$e`j{dNhY%6_++4M z#!cSo69BofFQo-TM8CK^RX%+j9F#tNq)v}RMBLtM3tp-EO+C_Wf3|wM+zFo6WUp@P zWul1WKCB9!7D;=nG~w!;3;gZgLIGyk5_(-dZ2RU+C467ZvPtrxwoq^d^I7iyaVYq1 zFa4MZvGV5st-#jm68<#(4Bflsr7*UeW_%mJA9dhtA@mAvN`f@BJRNx-P+pfymHuQn zzhz7O`I}fGVayOz3tc9e?K0e?Uxi|B65*#C5-_Qj-URf1v{5FJfDQh*U=x8j zU6q0OwJJ04fQ;ju6T2a~Uh`K7?0_{+yKFXo_b=V9V%E0*_&B<@o%<1Vk|o+t2@@X; znV!kNr$4oyoU5_|(~-*q2#8$WW%AaMDIQu#%^#ZwhCS)s_M=Gfyy?3Rr&Oa&PSFUn z-%6$FHiX;v?Rah-VsMnfOj5*%{t8Cfg#g2h%tKLyLxV%!YEsHud=tjcJK?HfJAMY5N&QC(w$9(!pH z)C@kcfqYCYp%k`@^Ld{?x2#tQo=1J4c6BPn{_8kB$&!)@Y%4#D)W}1$hH#bM1lk|I z-MUH)V3M>g1XML27E$euQ55?JN|AwuRA7M~us~-9onvclJ)!<-_OnnHLjvP@4gKfZ zl`G*fG(6!5nTK5H84e%P2a#0cZcB?=8Rqm*we>nxzqPQSdQ5&Y1PhgREE9|gjkX}O z9l$WlPUX`{4$Lxy*vfzJrWI$|0-{!w6UJeyY`KT#MGrA-&P(o_6wc6l(vXpMb+IR6 zN<8ec_U)jHkxQ`}FJ;-^b9aptG3p)_xvJA(Gn(8sx|L-z{fDw;Ht&!$9=J{;l0A&M zA2-5jQhFG2f#ctm{z$!Xp>>dy@W)=jGz;z&v_@d&jBW$a2BDl@UgWu-e(zt? z$(v{%VkTnY(FsY*^_SfnV>Ll3?LG_x>-610Dd`u@C=T_Xm_k5%a?PBl!+L7-EpNZZsw~j5s4Mr`+qnOBZG;DcgB=Yp|vn zXl|4>F2ma$nE*-tc`{a@JBsYw6yf{qqOHm;uMk+VpKn3_7RlF@LQc~VPYy!bm;N+T zW&mV!*b?kicpcI~u_>zczuZHJ4O}sW1(;3WV{9n0K^!CaNlfjZ4!Am17;MtF{qY?n z8{ZK{MrZYVt6&9g5-BB))%bJqBZwP_>*-n4?&?M`A8bxIRi3Wm_W4&sEh)jrK@mao zP&8r}>Q2@M{L73|e>Q;b$y0EGYdjLQi>mhRl?g*3hgJj*R|>MY3X=EK7s!=fu3{Qg zO>2d=qFItGYS(M9SXQmj8%+L47n`VD$>O-}k z0^ENJCQ$6JR>-Ue36`C+_no+y2I6Th85>a?T*`ru%M$pwHY`aFFAd;pRh%7aJ-!E2 zpg4320*~%1h_%E3aQ_G>|1CH?(8EdTH}BHnSx*dES~k2PW89;kbkoUc?UqVwL&yl| zQL8sBOnbNe!lL~+k`2z?oTv1~6iJ}8^Rbo63K)i)#63?3_h65^%`ueU5XE*bhIaEH zfLfA2WB%>V0kzciUwejm{hoUpges2Ge&3S~Y;7v#5YV~y?=4;BNZ>^-hITr-1W?k* z%w_@B=R|}ERfpgthHcn($HWaD4V$7PZBWO=%0bkML#L+P`GWR(kFYVH&;a!lR`|yzCSI5}-UURtaixut zI-meGuB1cM#k=6t2^3;lfr8_WGX7f|miV|5-V;VS`z2k`|K8f(aE(U}g4uXImUM~N zwu>SBvDG8`RT4Gv;khgrkkqa$?CJMQ+l{sz?Nvk7+SZA1b)5mfX$$K_i~g2UuvFmAm3#t|UJ94ShpKXCiZ&>pkmogu zQ=u|oYLm9RJt)f!b>I#+oOHM+YfI=_qnC{txJaeaEWUo z+16y44m}0&Jc@lKiO4|XKX0!vkg&CY3|?tM{>M<#_hx9~?2mFNjEhT&hvRTxF`!}X zByKrSLUc>5=51AG4yLh~Ns5+v_|JTMAcJdiUtOe~LNR??Et$xG6Cw^NM$`Vq;)rYz z0|R<#O`$RHxIucLk)jj%VPVRL(qo6efm1>5<4_JQ-6VJEk-v*8wTJvy*OlQfzF7R+ zG;}z-L}5!DwFU4|sr|9~Kdu~t53IHP^@OdEkQ%Eiap#xuMMY_5?RJPmItB#kEW307 z;^2>q*FagsKAKjLy}xl$*dkU^TKatdhq|{8t7_~1#c7aEL2}a|NJ*D;hXP82s7QCG zbSTmY(v5U?hjh1er*wz-TYH1&9M3uL`@PTax%WQL{bTR7=9)F;7;}vI8Dq}9Hp%8? z1z-e10HwREp?+1X4IrFa+^`(By^L!;8LFqgsH9xIZ}%DBEI!~jZ|h%B?`)6eoZot4 zZxj2c?O2OFR85bQ(pCEDS64#%?s3ANY7+XD|Ke53+%clN0)kGd(e=yo4KHE@t>`SX z5U%J|3ub8@H~E|$(TnMn>+fE!r{S*7bnj|8uXh{?-Z>Gt(It^~8F1~uH}!CQ4sb#H zLBkt?PvV!>Xi1>f?sA+Yh4huO*^wkvdhg8N(>cTp{izJ^LJqtAELP51(-T*T%?8Fz zSK2rwQBu#dpyYP`;_M$oLh^_?(aoagYc0NOX2PlkD}A2b+w%0O=97^P+>Be@Te7Vk zQy}RlF&X5G@JBLr%3BCi?(L)L0K=Z8U zcRTU`R!e8eR!2q~S$B73DB_+kmY%Smt?ATG;l9a=td(5L;&WqRpHHtsZ=zigoqHGv zg!u;RBV5z)3l}wUJg{e5XaL3Ngf~l;gfdyG-`KM=TC!upGf(KVOOSRcT^&B*wrbdx z5VsW-L^yRLhn{zr-S@USxsKL13KjVDbL?n7G>I7b0#;qBCsXqf`0t^aVY{JDlcktm z=%PocmdA(%hc#*p4YRMCWm3Yp#ae8nJO}(Gc$eB=?bCCu=*tauG^I6t)uU^WLU>Tq zHGK+7=Uz)Lp`$Y*^?_xuq2nGE7c~v#@mpl?OINmxLdke9+>a0YQFgX6`f|iT?f9GW zHK`Xf{}Q#UqF9+Q5_|~8>d%nZ?=4@e4XIrj6@z%;l#z!!IV9Zo0Ux*x?rrt>bVs^y}p&Z^JM|bdblFU-sTu30n zU54_9u?`_xS_@Uyb|HLJ*wsi(?c{E9F0YPTh$EB(BPxF5S=NHPJyA*Xiu?TxU+Oru z5i2cu0^P!BT(e<3p6&AfE_Zq_;d}XKcU8ufHlJzhs1d8w@7^h#ap zQYnCLO0#lR(=9LQZA|~#5_*Nr^!p!V$qa6|n=bCxl;k_+qFR4O(TU1zR@{p|trIqe z;YIqE0IQiceOi=@y=E1-9h0k(qR_NWx+ouiDb;7f%burH`D}SMQ6aWeKrU&E9ZxDD z9fl6$9aCgyMz~Jr%Sf8KDgWX}8w_5@aiVfT(|P<@!L1v4J*jw|4_-u$1`>Y7_M-Ig zlJu`aP(IE?t)*{HS23eW60hxno4CM(XMly}Dr}bC-bnf&)jf~dIQ!ZwHA;po>TyF4 zb$lvYH6I*K6jTpx>TpkznwNC)U&y1B2l62>NGw$30}7c)!n%W4NK}+sV0yd6NJwh{^-8Q*gO|pTp-#u$<&S9Bd~AS zcQ>kWPbuQlmbZv=n4krG`ZsNaTj|u}PuGEyv?=}g>%az-D2vHPSbp~S;AV65vGT6UOluw(4K;~As%6P%U#hM!=BYjj244#WB-n~_uIuLi@`)z zYdlF3@SyhmnMztF9eaZji}+_(o1@1rFNcVpw(zwV1j^c8X90hyElM7wEM}u8?gtCX z@*zUxo=(#n<*6P&-?uE?hGz~Ss$IAu2mU^zC;i7KY0v1BMUsjq7DB8G=s)60(UQ`AAS!D&(C&`+c^KpAPHO+BS4YgTYg zDK#7nX@Uuk`-Tgg_T=*TclR;o-`;=3xIwsh5iscEU|g? zgtSMAJ7~xvbV6A;t9NuVO}~)-3Et6b`qwQVo{^j$6cKf2Nz3CrBC$6JDAXY5J2+YO z)Fctqaah)r2{r$yI>Md(RX7dj<9AVV!y?G7tc0$|F-Ky7tg^A5|I&;qgAH8>7=)>2#2?9pg1q{@o_6-KaBC&mV&9$ZR2){D+ z>mEy6Dw8iu2cLvs*YId1#zaa!Z{!&rMUk_>m?$i$p)H$T9({Jha^x?FdZH5A%{^Gm zX-7)n%tm~*g+~-07NHc<(i;7FGYqcb?e-$brh_~L`QXOmTC9k<^KHBmVKxhN*03Uf zInmcZdZ`t??~X1#EpHdEqVCr>9}Tb{7o5jS4nKuXvK5`wS!jz5xKDe&J?NY8_(dCi zAFNgHIccipVO6mMVgR9TnQ|v?M^*6@Df|Pb#5W&fPlfE^X`6Pxt#|gR@sS7TwyH0* z$K^f6r+K&hnYdDQoXN*GJMC$v^2zvIS!ji8@_*!1WEzWjur@rwK$D>%>8`PE?I7Mi9^TdIP-tafkw1{=n-8Pyz zBj*1NLGBOZGJF1ompr1X@=77R4bDZ6M>nKMi1-)spg;;j+`Y36A3nkN{i z&SD}gTF2F5`f(hjn_5nOe4^>7kR5N=PgpBM4>Ic9b#C@8sOPcdi{4QF;a8=?(y z*@f>1-dr1q^;`whrhvKInR3F@gfzmSUPi(*IsbcUi`4f;$NOW) zI%x!>ubU5aBPbT8EQ5Ax1rZqW7i$Ov>!PZUn z@ekY%Ut{fES*r!i3bU(0y^@Cu1U3j!3{f$VH>`d#*yR)ZZk9%SyfR-|Z%gBLK}F`G zez_eOH!UZKF51*a|D`$Q zG>}E2vD{%hpGa?te7kb zDRdoUB0NU%LRe^z*S(N;FY5$JY$#&QC|Wl8q_~Y!cpvcRL01L}N|?>supQ0{_hY4R z$)?~Qvu*|NqT8BCxD>$(XP`atm1Jb@PIA;j(!ZGlz3#+S+*x4lfxX~KJn`IVHTeF4 zfT?T#K%Xm`-zfLOW5K?_#5`zf|2TkLMWS4fnAWG&wr7^WUzA)x-J`MvTG~h(!&EI= z!avIGeURioJlAE-ZUXP3;_yQke|FzoHc&s$|HFXNXV(eGH4 zjXpT!Lv~yJk#NMvWM_Q6^nM}oluKg^^@7B=;qa#af+U)k!`*7!TIP!Ak)7Xlu!yeH zyY=f}*#yEy?oIxTA0I#Qin>dt6xKD`xOZeIe4I}knVvVye!SvF?|1!bn9eGbx@3bS&=#Il{%Mx^6M6_e*WX}&~hbH%$3shvP}5`M~|vC->D^0j`e zq2GxFpO;!^U9v9S?c;sk$2yW$g*AmXznWz-(*0+%>3?sQu50^Q&IPtvv);OK0r4D7 zblZ=7++EsX2Uk_naHQhKX>qnd-P)awIn#H%mzk2+t3EgbH$F337Ax%Mi*--__sjgfX&CPOn96KCtyetzzL|=gnEU6K z-+b|zB}TmPtHejVRKZ`-;I9er7k;(V$o_8gf^fK@hBpk-WZ#S9fEbDbha=? zsMm0N>^yVAo_dz~b};wINFqe}M&fvG6xI2}vv0%d(`>+8T&!?mLDd5R1=HKwA(yV` z{nU5&SA)yP`B?Q_9NsrdWX|!d9FT@|`%~xpvFbctBW&&vH^;>Y&td78M-)hJ-HbYa zPag7}!%3n)+d)ONNGu+Ew!7sYr)87wTe;wDTV<6Nn9b-cl?6=4sfF+*SZtzvuoQZB&_L~KeF{N4Xh&Ilp59C`vf&`hlhfNc7526;MYi6v65qB8(U~nWA-+)8#l7ClVBo!Xp1r=n$3zN zh94@CxnA6u%rqy#s8!@7)oyh3QLPBxg6LKF$7xI)?MXkWx57;U1fxbapLe=6G2@O= zQ7^@qzlu>Jcn{uZ{W8LcfFG~uLmd!}bw8nk?Gp$|Qq6XXxMxv`z?^bQk4bPC-o{9@ z1~X_nz`hEU^aCDa8u$muhrl74^YG45LN7M0Q2Z$LXs?n6bTyn2li@@^)z3@XIb`3m ze@<{#5sxii3To~^qhy*EvNU9jY3sREH7IexrROUlBR%a^(dZ#1Nf(e^W69rQ`98G& zad8Uxq3@4|W06Io#)Pw`t)rcTwpk^kpbvX!!)=-`8cRzz zE9*H`4=<`O^JUx%tjV2raNMZoF!y576~h~jRl2

<8DVT;E~Lu>|kkvyBx#d460A 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 VK12QIe`L_%0&*el0qC{_`+t_*{&@fZ diff --git a/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cyprj b/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cyprj index 75b82ba..9fc9ceb 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cyprj +++ b/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.cyprj @@ -102,6 +102,13 @@ + + + + + + + @@ -217,6 +224,13 @@ + + + + + + + @@ -841,14 +855,14 @@ - + - + @@ -862,14 +876,14 @@ - + - + @@ -878,7 +892,7 @@ - + @@ -887,7 +901,7 @@ - + @@ -1594,6 +1608,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1608,6 +1772,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1803,6 +2027,6 @@ - + \ No newline at end of file diff --git a/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.svd b/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.svd new file mode 100644 index 0000000..84c4ea3 --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/SCSI2SD.svd @@ -0,0 +1,52 @@ + + + CY8C5268AXI_LP047 + 0.1 + CY8C52LP + 8 + 32 + + + SD_Clk_Ctl + No description available + 0x4000647B + + 0 + 0x1 + registers + + + + SD_Clk_Ctl_CONTROL_REG + No description available + 0x0 + 8 + read-write + 0 + 0 + + + + + SCSI_CTL_IO + No description available + 0x40006470 + + 0 + 0x1 + registers + + + + SCSI_CTL_IO_CONTROL_REG + No description available + 0x0 + 8 + read-write + 0 + 0 + + + + + \ No newline at end of file diff --git a/software/SCSI2SD/SCSI2SD.cydsn/TopDesign/TopDesign.cysch b/software/SCSI2SD/SCSI2SD.cydsn/TopDesign/TopDesign.cysch index 3887ee34b3fb86533864fc727540d5d034b58ec9..682304adc08d7318155de0bd03f3461d8fe2a17b 100755 GIT binary patch literal 123320 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�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 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/config.c b/software/SCSI2SD/SCSI2SD.cydsn/config.c new file mode 100755 index 0000000..9776757 --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/config.c @@ -0,0 +1,75 @@ +// Copyright (C) 2013 Michael McMaster +// +// This file is part of SCSI2SD. +// +// SCSI2SD is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// SCSI2SD is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with SCSI2SD. If not, see . + +#include "device.h" +#include "config.h" + +#include + +// CYDEV_EEPROM_ROW_SIZE == 16. +static char magic[CYDEV_EEPROM_ROW_SIZE] = "codesrc_00000001"; + +// Config shadow RAM (copy of EEPROM) +static Config shadow = +{ + 0, // SCSI ID + " codesrc", // vendor (68k Apple Drive Setup: Set to " SEAGATE") + " SCSI2SD", //prodId (68k Apple Drive Setup: Set to " ST225N") + "2.0a", // revision (68k Apple Drive Setup: Set to "1.0 ") + 1, // enable parity + 0, // disable unit attention, + 0, // overclock SPI + 0, // Max blocks (0 == disabled) + "" // reserved +}; + +// Global +Config* config = NULL; + +void configInit() +{ + // We could map cfgPtr directly into the EEPROM memory, + // but that would waste power. Copy it to RAM then turn off + // the EEPROM. + CFG_EEPROM_Start(); + CyDelayUs(5); // 5us to start per datasheet. + + // Check magic + int shadowRows = (sizeof(shadow) / CYDEV_EEPROM_ROW_SIZE) + 1; + int shadowBytes = CYDEV_EEPROM_ROW_SIZE * shadowRows; + uint8* eeprom = (uint8*)CYDEV_EE_BASE; + if (memcmp(eeprom + shadowBytes, magic, sizeof(magic))) + { + CySetTemp(); + int row; + int status = CYRET_SUCCESS; + for (row = 0; (row < shadowRows) && (status == CYRET_SUCCESS); ++row) + { + CFG_EEPROM_Write(((uint8*)&shadow) + (row * CYDEV_EEPROM_ROW_SIZE), row); + } + if (status == CYRET_SUCCESS) + { + CFG_EEPROM_Write((uint8*)magic, row); + } + } + else + { + memcpy(&shadow, eeprom, sizeof(shadow)); + } + config = &shadow; + CFG_EEPROM_Stop(); +} \ No newline at end of file diff --git a/software/SCSI2SD/SCSI2SD.cydsn/config.h b/software/SCSI2SD/SCSI2SD.cydsn/config.h new file mode 100755 index 0000000..23b5410 --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/config.h @@ -0,0 +1,41 @@ +// Copyright (C) 2013 Michael McMaster +// +// This file is part of SCSI2SD. +// +// SCSI2SD is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// SCSI2SD is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with SCSI2SD. If not, see . +#ifndef Config_H +#define Config_H + +#include "device.h" + +typedef struct +{ + uint8 scsiId; + char vendor[8]; + char prodId[16]; + char revision[4]; + uint8 enableParity; + uint8 enableUnitAttention; + uint8 overclockSPI; + uint32 maxBlocks; + + // Pad to 64 bytes, which is what we can fit into a USB HID packet. + char reserved[28]; +} Config; + +extern Config* config; + +void configInit(); + +#endif diff --git a/software/SCSI2SD/SCSI2SD.cydsn/disk.c b/software/SCSI2SD/SCSI2SD.cydsn/disk.c index 61e1101..a3ef45b 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/disk.c +++ b/software/SCSI2SD/SCSI2SD.cydsn/disk.c @@ -17,6 +17,7 @@ #include "device.h" #include "scsi.h" +#include "config.h" #include "disk.h" #include "sd.h" @@ -33,8 +34,10 @@ static int doSdInit() { blockDev.state = blockDev.state | DISK_INITIALISED; - // TODO artificially limit this value according to EEPROM config. - blockDev.capacity = sdDev.capacity; + // artificially limit this value according to EEPROM config. + blockDev.capacity = + (config->maxBlocks && (sdDev.capacity > config->maxBlocks)) + ? config->maxBlocks : sdDev.capacity; } return result; } diff --git a/software/SCSI2SD/SCSI2SD.cydsn/inquiry.c b/software/SCSI2SD/SCSI2SD.cydsn/inquiry.c index f71128b..bd7f7cd 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/inquiry.c +++ b/software/SCSI2SD/SCSI2SD.cydsn/inquiry.c @@ -17,11 +17,12 @@ #include "device.h" #include "scsi.h" +#include "config.h" #include "inquiry.h" #include -static const uint8 StandardResponse[] = +static uint8 StandardResponse[] = { 0x00, // "Direct-access device". AKA standard hard disk 0x00, // device type qualifier @@ -29,16 +30,11 @@ static const uint8 StandardResponse[] = 0x02, // SCSI-2 Inquiry response 31, // standard length 0, 0, //Reserved -0, // We don't support anything at all -/* TODO testing Apple Drive Setup. Make configurable! -'c','o','d','e','s','r','c',' ', -'S','C','S','I','2','S','D',' ',' ',' ',' ',' ',' ',' ',' ',' ', -'2','.','0','a' -*/ -' ','S','E','A','G','A','T','E', -' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','T','2','2','5','N', -'1','.','0',' ' +0 // We don't support anything at all }; +// Vendor set by config 'c','o','d','e','s','r','c',' ', +// prodId set by config'S','C','S','I','2','S','D',' ',' ',' ',' ',' ',' ',' ',' ',' ', +// Revision set by config'2','.','0','a' static const uint8 SupportedVitalPages[] = { @@ -103,7 +99,14 @@ void scsiInquiry() else { memcpy(scsiDev.data, StandardResponse, sizeof(StandardResponse)); - scsiDev.dataLen = sizeof(StandardResponse); + uint8* out = scsiDev.data + sizeof(StandardResponse); + memcpy(out, config->vendor, sizeof(config->vendor)); + out += sizeof(config->vendor); + memcpy(out, config->prodId, sizeof(config->prodId)); + out += sizeof(config->prodId); + memcpy(out, config->revision, sizeof(config->revision)); + out += sizeof(config->revision); + scsiDev.dataLen = out - scsiDev.data; scsiDev.phase = DATA_IN; if (!lun) scsiDev.unitAttention = 0; diff --git a/software/SCSI2SD/SCSI2SD.cydsn/main.c b/software/SCSI2SD/SCSI2SD.cydsn/main.c index 85d2f6b..1c5d6e1 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/main.c +++ b/software/SCSI2SD/SCSI2SD.cydsn/main.c @@ -20,6 +20,7 @@ #include "loopback.h" #include "scsi.h" #include "scsiPhy.h" +#include "config.h" #include "disk.h" #include "led.h" @@ -41,6 +42,8 @@ int main() // Will not return if uncommented. // scsi2sd_test_loopback(); + configInit(); + scsiInit(0, 1); // ID 0 is mac boot disk scsiDiskInit(); diff --git a/software/SCSI2SD/SCSI2SD.cydsn/scsi.c b/software/SCSI2SD/SCSI2SD.cydsn/scsi.c index 0d80fe1..24e3b63 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/scsi.c +++ b/software/SCSI2SD/SCSI2SD.cydsn/scsi.c @@ -18,6 +18,7 @@ #include "device.h" #include "scsi.h" #include "scsiPhy.h" +#include "config.h" #include "bits.h" #include "diagnostic.h" #include "disk.h" @@ -64,7 +65,7 @@ static void enter_MessageIn(uint8 message) static void process_MessageIn() { scsiEnterPhase(MESSAGE_IN); - scsiWrite(scsiDev.msgIn); + scsiWriteByte(scsiDev.msgIn); if (scsiDev.atnFlag) { @@ -79,10 +80,17 @@ static void process_MessageIn() else { // MESSAGE_REJECT. Go back to command phase + // TODO MESSAGE_REJECT moved to messageReject method. scsiDev.phase = COMMAND; } } +static void messageReject() +{ + scsiEnterPhase(MESSAGE_IN); + scsiWriteByte(MSG_REJECT); +} + static void enter_Status(uint8 status) { scsiDev.status = status; @@ -92,7 +100,7 @@ static void enter_Status(uint8 status) static void process_Status() { scsiEnterPhase(STATUS); - scsiWrite(scsiDev.status); + scsiWriteByte(scsiDev.status); // Command Complete occurs AFTER a valid status has been // sent. then we go bus-free. @@ -113,13 +121,11 @@ static void process_DataIn() } scsiEnterPhase(DATA_IN); - while ((scsiDev.dataPtr < scsiDev.dataLen) && - !scsiDev.resetFlag && - !scsiDev.atnFlag) - { - scsiWrite(scsiDev.data[scsiDev.dataPtr]); - ++scsiDev.dataPtr; - } + + uint32 len = scsiDev.dataLen - scsiDev.dataPtr; + scsiWrite(scsiDev.data + scsiDev.dataPtr, len); + scsiDev.dataPtr += len; + if ((scsiDev.dataPtr >= scsiDev.dataLen) && (transfer.currentBlock == transfer.blocks)) @@ -136,21 +142,18 @@ static void process_DataOut() } scsiEnterPhase(DATA_OUT); - while ((scsiDev.dataPtr < scsiDev.dataLen) && - !scsiDev.resetFlag && - !scsiDev.atnFlag) - { - scsiDev.parityError = 0; - scsiDev.data[scsiDev.dataPtr] = scsiRead(); - if (scsiDev.parityError) - { - scsiDev.sense.code = ABORTED_COMMAND; - scsiDev.sense.asc = SCSI_PARITY_ERROR; - enter_Status(CHECK_CONDITION); - break; - } - ++scsiDev.dataPtr; + scsiDev.parityError = 0; + uint32 len = scsiDev.dataLen - scsiDev.dataPtr; + scsiRead(scsiDev.data + scsiDev.dataPtr, len); + scsiDev.dataPtr += len; + + // TODO re-implement parity checking + if (0 && scsiDev.parityError && config->enableParity) + { + scsiDev.sense.code = ABORTED_COMMAND; + scsiDev.sense.asc = SCSI_PARITY_ERROR; + enter_Status(CHECK_CONDITION); } if ((scsiDev.dataPtr >= scsiDev.dataLen) && @@ -167,15 +170,11 @@ static void process_Command() scsiDev.parityError = 0; memset(scsiDev.cdb, 0, sizeof(scsiDev.cdb)); - scsiDev.cdb[0] = scsiRead(); + scsiDev.cdb[0] = scsiReadByte(); int group = scsiDev.cdb[0] >> 5; int cmdSize = CmdGroupBytes[group]; - int i; - for (i = 1; i < cmdSize; ++i) - { - scsiDev.cdb[i] = scsiRead(); - } + scsiRead(scsiDev.cdb + 1, cmdSize - 1); uint8 command = scsiDev.cdb[0]; uint8 lun = scsiDev.cdb[1] >> 5; @@ -214,14 +213,13 @@ static void process_Command() } // Some old SCSI drivers do NOT properly support // unitAttention. OTOH, Linux seems to require it - // TODO MAKE CONFIGURABLE. - /* confirmed LCIII with unknown scsi driver fials here. - else if (scsiDev.unitAttention) + // confirmed LCIII with unknown scsi driver fials here. + else if (scsiDev.unitAttention && config->enableUnitAttention) { scsiDev.sense.code = UNIT_ATTENTION; scsiDev.sense.asc = scsiDev.unitAttention; enter_Status(CHECK_CONDITION); - }*/ + } else if (lun) { scsiDev.sense.code = ILLEGAL_REQUEST; @@ -319,8 +317,8 @@ static void doReserveRelease() static void scsiReset() { ledOff(); - SCSI_Out_DBx_Write(0); - SCSI_ClearPin(SCSI_Out_DBP); + // done in verilog SCSI_Out_DBx_Write(0); + SCSI_CTL_IO_Write(0); SCSI_ClearPin(SCSI_Out_ATN); SCSI_ClearPin(SCSI_Out_BSY); SCSI_ClearPin(SCSI_Out_ACK); @@ -329,11 +327,10 @@ static void scsiReset() SCSI_ClearPin(SCSI_Out_REQ); SCSI_ClearPin(SCSI_Out_MSG); SCSI_ClearPin(SCSI_Out_CD); - SCSI_ClearPin(SCSI_Out_IO); scsiDev.parityError = 0; scsiDev.phase = BUS_FREE; - + if (scsiDev.unitAttention != POWER_ON_RESET) { scsiDev.unitAttention = SCSI_BUS_RESET; @@ -354,9 +351,9 @@ static void scsiReset() CyDelay(10); // 10ms. reset = SCSI_ReadPin(SCSI_RST_INT); } while (reset); - + scsiDev.resetFlag = 0; - scsiDev.atnFlag = 0; + scsiDev.atnFlag = 0; } static void enter_SelectionPhase() @@ -394,6 +391,7 @@ static void process_SelectionPhase() // Wait until the end of the selection phase. while (!scsiDev.resetFlag) { + scsiDev.atnFlag |= SCSI_ReadPin(SCSI_ATN_INT); if (!SCSI_ReadPin(SCSI_In_SEL)) { break; @@ -428,7 +426,7 @@ static void process_MessageOut() scsiDev.atnFlag = 0; scsiDev.parityError = 0; - scsiDev.msgOut = scsiRead(); + scsiDev.msgOut = scsiReadByte(); if (scsiDev.parityError) { @@ -437,7 +435,7 @@ static void process_MessageOut() // same set of messages. while (SCSI_ReadPin(SCSI_ATN_INT) && !scsiDev.resetFlag) { - scsiRead(); + scsiReadByte(); } // Go-back and try the message again. @@ -515,18 +513,18 @@ static void process_MessageOut() else if (scsiDev.msgOut >= 0x20 && scsiDev.msgOut <= 0x2F) { // Two byte message. We don't support these. read and discard. - scsiRead(); + scsiReadByte(); } else if (scsiDev.msgOut == 0x01) { // Extended message. - int msgLen = scsiRead(); + int msgLen = scsiReadByte(); if (msgLen == 0) msgLen = 256; int i; for (i = 0; i < msgLen && !scsiDev.resetFlag; ++i) { // Discard bytes. - scsiRead(); + scsiReadByte(); } // We don't support ANY extended messages. @@ -536,15 +534,16 @@ static void process_MessageOut() // We don't support any 2-byte messages either. // And we don't support any optional 1-byte messages. // In each case, the correct response is MESSAGE REJECT. - enter_MessageIn(MSG_REJECT); + messageReject(); } else { - enter_MessageIn(MSG_REJECT); + messageReject(); } // Re-check the ATN flag. We won't get another interrupt if // it stays asserted. + CyDelayUs(2); // DODGY HACK scsiDev.atnFlag |= SCSI_ReadPin(SCSI_ATN_INT); } @@ -553,6 +552,7 @@ static void process_MessageOut() // This is a hack until I work out why the ATN ISR isn't // running when it should. static int atnErrCount = 0; +static int atnHitCount = 0; static void checkATN() { int atn = SCSI_ReadPin(SCSI_ATN_INT); @@ -561,6 +561,10 @@ static void checkATN() atnErrCount++; scsiDev.atnFlag = 1; } + else if (atn && scsiDev.atnFlag) + { + atnHitCount++; + } } void scsiPoll(void) @@ -671,10 +675,9 @@ void scsiPoll(void) } } -void scsiInit(int scsiId, int enableParity) +void scsiInit() { - scsiDev.scsiIdMask = 1 << scsiId; - scsiDev.enableParity = enableParity; + scsiDev.scsiIdMask = 1 << (config->scsiId); scsiDev.atnFlag = 0; scsiDev.resetFlag = 1; diff --git a/software/SCSI2SD/SCSI2SD.cydsn/scsi.h b/software/SCSI2SD/SCSI2SD.cydsn/scsi.h index 9073ccc..91c0fa6 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/scsi.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/scsi.h @@ -66,7 +66,6 @@ typedef enum typedef struct { uint8_t scsiIdMask; - int enableParity; // Set to true (1) if the ATN flag was set, and we need to // enter the MESSAGE_OUT phase. @@ -107,7 +106,7 @@ typedef struct extern ScsiDevice scsiDev; -void scsiInit(int scsiId, int enableParity); +void scsiInit(); void scsiPoll(void); diff --git a/software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.c b/software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.c index ebf52e8..53d2b5f 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.c +++ b/software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.c @@ -31,72 +31,67 @@ CY_ISR_PROTO(scsiAttentionISR); CY_ISR(scsiAttentionISR) { scsiDev.atnFlag = 1; - // Not needed when using pin value for interrupt SCSI_ATN_ClearInterrupt(); + SCSI_ATN_ClearInterrupt(); } -// Spins until the SCSI pin is true, or the reset flag is set. -static inline void waitForPinTrue(int pin) +uint8 scsiReadByte(void) { - int finished = SCSI_ReadPin(pin); - while (!finished && !scsiDev.resetFlag) - { - finished = SCSI_ReadPin(pin); - } -} - -// Spins until the SCSI pin is true, or the reset flag is set. -static inline void waitForPinFalse(int pin) -{ - int finished = !SCSI_ReadPin(pin); - while (!finished && !scsiDev.resetFlag) - { - finished = !SCSI_ReadPin(pin); - } -} - -static inline void deskewDelay(void) -{ - // Delay for deskew + cable skew. total 55 nanoseconds. - // Assumes 66MHz. - CyDelayCycles(4); -} - -uint8 scsiRead(void) -{ - SCSI_SetPin(SCSI_Out_REQ); - waitForPinTrue(SCSI_In_ACK); - deskewDelay(); - - uint8 value = ~SCSI_In_DBx_Read(); - scsiDev.parityError = scsiDev.parityError || - (Lookup_OddParity[value] != SCSI_ReadPin(SCSI_In_DBP)); - - SCSI_ClearPin(SCSI_Out_REQ); - waitForPinFalse(SCSI_In_ACK); + while (!(CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 1)) {} + CY_SET_REG8(scsiTarget_datapath__F0_REG, 0); + while (!(CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 2)) {} + uint8 value = CY_GET_REG8(scsiTarget_datapath__F1_REG); return value; } -void scsiWrite(uint8 value) +void scsiRead(uint8* data, uint32 count) { - SCSI_Out_DBx_Write(value); - if (Lookup_OddParity[value]) + int prep = 0; + int i = 0; + + while (i < count) { - SCSI_SetPin(SCSI_Out_DBP); + if (prep < count && (CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 1)) + { + CY_SET_REG8(scsiTarget_datapath__F0_REG, 0); + ++prep; + } + if ((CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 2)) + { + data[i] = CY_GET_REG8(scsiTarget_datapath__F1_REG); + ++i; + } } - deskewDelay(); +} - SCSI_SetPin(SCSI_Out_REQ); +void scsiWriteByte(uint8 value) +{ + while (!(CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 1)) {} + CY_SET_REG8(scsiTarget_datapath__F0_REG, value); - // Initiator reads data here. + // TODO maybe move this TX EMPTY check to scsiEnterPhase ? + //while (!(CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 4)) {} + while (!(CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 2)) {} + value = CY_GET_REG8(scsiTarget_datapath__F1_REG); +} - waitForPinTrue(SCSI_In_ACK); +void scsiWrite(uint8* data, uint32 count) +{ + int prep = 0; + int i = 0; - SCSI_ClearPin(SCSI_Out_DBP); - SCSI_Out_DBx_Write(0); - SCSI_ClearPin(SCSI_Out_REQ); - - // Wait for ACK to clear. - waitForPinFalse(SCSI_In_ACK); + while (i < count) + { + if (prep < count && (CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 1)) + { + CY_SET_REG8(scsiTarget_datapath__F0_REG, data[prep]); + ++prep; + } + if ((CY_GET_REG8(scsiTarget_StatusReg__STATUS_REG) & 2)) + { + CY_GET_REG8(scsiTarget_datapath__F1_REG); + ++i; + } + } } static void busSettleDelay(void) @@ -128,20 +123,13 @@ void scsiEnterPhase(int phase) SCSI_ClearPin(SCSI_Out_CD); } - if (phase & __scsiphase_io) - { - SCSI_SetPin(SCSI_Out_IO); - } - else - { - SCSI_ClearPin(SCSI_Out_IO); - } + SCSI_CTL_IO_Write(phase & __scsiphase_io ? 1 : 0); } else { SCSI_ClearPin(SCSI_Out_MSG); SCSI_ClearPin(SCSI_Out_CD); - SCSI_ClearPin(SCSI_Out_IO); + SCSI_CTL_IO_Write(0); } busSettleDelay(); } @@ -150,9 +138,9 @@ void scsiPhyInit() { SCSI_RST_ISR_StartEx(scsiResetISR); SCSI_ATN_ISR_StartEx(scsiAttentionISR); - + // Interrupts may have already been directed to the (empty) // standard ISR generated by PSoC Creator. SCSI_RST_ClearInterrupt(); - // Not needed for pin level interrupt SCSI_ATN_ClearInterrupt(); -} \ No newline at end of file + SCSI_ATN_ClearInterrupt(); +} diff --git a/software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.h b/software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.h index 0a51f9d..786fb29 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/scsiPhy.h @@ -31,11 +31,10 @@ extern const uint8 Lookup_OddParity[256]; void scsiPhyInit(); -uint8 scsiRead(void); -void scsiWrite(uint8 value); - -// Returns true if the ATN flag becomes set, indicating a parity error. -int scsiWriteMsg(uint8 msg); +uint8 scsiReadByte(void); +void scsiRead(uint8* data, uint32 count); +void scsiWriteByte(uint8 value); +void scsiWrite(uint8* data, uint32 count); void scsiEnterPhase(int phase); diff --git a/software/SCSI2SD/SCSI2SD.cydsn/scsiTarget/scsiTarget.cysym b/software/SCSI2SD/SCSI2SD.cydsn/scsiTarget/scsiTarget.cysym new file mode 100755 index 0000000000000000000000000000000000000000..2671f59329d771b20843194fa2dbaefb8d06de57 GIT binary patch literal 77821 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 literal 0 HcmV?d00001 diff --git a/software/SCSI2SD/SCSI2SD.cydsn/scsiTarget/scsiTarget.v b/software/SCSI2SD/SCSI2SD.cydsn/scsiTarget/scsiTarget.v new file mode 100755 index 0000000..50815f6 --- /dev/null +++ b/software/SCSI2SD/SCSI2SD.cydsn/scsiTarget/scsiTarget.v @@ -0,0 +1,320 @@ + +//`#start header` -- edit after this line, do not edit this line +// Copyright (C) 2013 Michael McMaster +// +// This file is part of SCSI2SD. +// +// SCSI2SD is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// SCSI2SD is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with SCSI2SD. If not, see . +`include "cypress.v" +//`#end` -- edit above this line, do not edit this line +// Generated on 10/16/2013 at 00:01 +// Component: scsiTarget +module scsiTarget ( + output [7:0] DBx_out, // Active High, connected to SCSI bus via inverter + output REQ, // Active High, connected to SCSI bus via inverter + input nACK, // Active LOW, connected directly to SCSI bus. + input [7:0] nDBx_in, // Active LOW, connected directly to SCSI bus. + input IO, // Active High, set by CPU via status register. + input nRST, // Active LOW, connected directly to SCSI bus. + input clk +); + + +//`#start body` -- edit after this line, do not edit this line + +///////////////////////////////////////////////////////////////////////////// +// Force Clock Sync +///////////////////////////////////////////////////////////////////////////// +// The udb_clock_enable primitive component is used to indicate that the input +// clock must always be synchronous and if not implement synchronizers to make +// it synchronous. +wire op_clk; +cy_psoc3_udb_clock_enable_v1_0 #(.sync_mode(`TRUE)) ClkSync +( + .clock_in(clk), + .enable(1'b1), + .clock_out(op_clk) +); + +///////////////////////////////////////////////////////////////////////////// +// FIFO Status Register +///////////////////////////////////////////////////////////////////////////// +// Status Register: scsiTarget_StatusReg__STATUS_REG +// Bit 0: Tx FIFO not full +// Bit 1: Rx FIFO not empty +// Bit 2: Tx FIFO empty +// Bit 3: Rx FIFO full +// +// TX FIFO Register: scsiTarget_scsiTarget_u0__F0_REG +// RX FIFO Register: scsiTarget_scsiTarget_u0__F1_REG +// Use with CY_GET_REG8 and CY_SET_REG8 +wire f0_bus_stat; // Tx FIFO not full +wire f0_blk_stat; // Tx FIFO empty +wire f1_bus_stat; // Rx FIFO not empty +wire f1_blk_stat; // Rx FIFO full +cy_psoc3_status #(.cy_force_order(1), .cy_md_select(8'h00)) StatusReg +( + /* input */ .clock(op_clk), + /* input [04:00] */ .status({4'b0, f1_blk_stat, f0_blk_stat, f1_bus_stat, f0_bus_stat}) +); + +///////////////////////////////////////////////////////////////////////////// +// CONSTANTS +///////////////////////////////////////////////////////////////////////////// +localparam IO_WRITE = 1'b1; +localparam IO_READ = 1'b0; + +///////////////////////////////////////////////////////////////////////////// +// STATE MACHINE +///////////////////////////////////////////////////////////////////////////// +// TX States: +// IDLE +// Wait for an entry in the FIFO, and for the SCSI Initiator to be ready +// FIFOLOAD +// Load F0 into A0. Feed (old) A0 into the ALU SRCA. +// TX +// Load data register from PO. PO is fed by A0 going into the ALU via SRCA +// A0 must remain unchanged. +// DESKEW_INIT +// DBx output signals will be output in this state +// Load deskew clock count into A0 from D0 +// DESKEW +// DBx output signals will be output in this state +// Wait for the SCSI deskew time of 55ms. (DEC A0). +// A1 must be fed into SRCA, so PO is now useless. +// READY +// REQ and DBx output signals will be output in this state +// Wait for acknowledgement from the SCSI initiator. +// RX +// Dummy state for flow control. +// REQ signal will be output in this state +// PI enabled for input into ALU "PASS" operation, storing into F1. +// +// RX States: +// IDLE +// Wait for a dummy "enabling" entry in the input FIFO, and wait for space +// in output the FIFO, and for the SCSI Initiator to be ready +// FIFOLOAD +// Load F0 into A0. +// The input FIFO is used to control the number of bytes we attempt to +// read from the SCSI bus. +// READY +// REQ signal will be output in this state +// Wait for the initiator to send a byte on the SCSI bus. +// RX +// REQ signal will be output in this state +// PI enabled for input into ALU "PASS" operation, storing into F1. + + +localparam STATE_IDLE = 3'b000; +localparam STATE_FIFOLOAD = 3'b001; +localparam STATE_TX = 3'b010; +localparam STATE_DESKEW_INIT = 3'b011; +localparam STATE_DESKEW = 3'b100; +// This state intentionally not used. +localparam STATE_READY = 3'b110; +localparam STATE_RX = 3'b111; + +// state selects the datapath register. +reg[2:0] state; + +// Data being read/written from/to the SCSI bus +reg[7:0] data; + +// Set by the datapath zero detector (z1). High when A1 counts down to zero. +// D1 set to constant by .d1_init_a(4) (55ns at 66MHz) +wire deskewComplete; + +// Parallel input to the datapath SRCA. +// Selected for input through to the ALU if CFB EN bit set for the datapath +// state and enabled by PI DYN bit in CFG15-14 +wire[7:0] pi; + +// Parallel output from the selected SRCA value (A0 or A1) to the ALU. +wire[7:0] po; + +// Set true to trigger storing A1 into F1. +wire fifoStore; + +// Set Output Pins +assign REQ = state[1] & state[2]; // STATE_READY & STATE_RX +assign DBx_out[7:0] = data; +assign pi[7:0] = ~nDBx_in[7:0]; // Invert active low scsi bus +assign fifoStore = (state == STATE_RX) ? 1'b1 : 1'b0; + +always @(posedge op_clk) begin + case (state) + STATE_IDLE: + begin + // Check that SCSI initiator is ready, and input FIFO is not empty, + // and output FIFO is not full. + // Note that output FIFO is unused in TX mode. + if (nACK & !f0_blk_stat && !f1_blk_stat) + state <= STATE_FIFOLOAD; + else + state <= STATE_IDLE; + + // Clear our output pins + data <= 8'b0; + end + + STATE_FIFOLOAD: + state <= IO == IO_WRITE ? STATE_TX : STATE_READY; + + STATE_TX: + begin + state <= STATE_DESKEW_INIT; + data <= po; + end + + STATE_DESKEW_INIT: state <= STATE_DESKEW; + + STATE_DESKEW: + if(deskewComplete) state <= STATE_READY; + else state <= STATE_DESKEW; + + STATE_READY: + //if ((IO == IO_WRITE) & ~nACK) state <= STATE_IDLE; + //else if ((IO == IO_READ) & ~nACK) state <= STATE_RX; + if (~nACK) state <= STATE_RX; + else state <= STATE_READY; + + STATE_RX: state <= STATE_IDLE; + + default: state <= STATE_IDLE; + endcase +end + +cy_psoc3_dp #(.d1_init(3), +.cy_dpconfig( +{ + `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0, + `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE, + `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA, + `CS_CMP_SEL_CFGA, /*CFGRAM0: IDLE*/ + `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0, + `CS_SHFT_OP_PASS, `CS_A0_SRC___F0, `CS_A1_SRC_NONE, + `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA, + `CS_CMP_SEL_CFGA, /*CFGRAM1: FIFO Load*/ + `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0, + `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE, + `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA, + `CS_CMP_SEL_CFGA, /*CFGRAM2: TX*/ + `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0, + `CS_SHFT_OP_PASS, `CS_A0_SRC___D0, `CS_A1_SRC_NONE, + `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA, + `CS_CMP_SEL_CFGA, /*CFGRAM3: DESKEW INIT*/ + `CS_ALU_OP__DEC, `CS_SRCA_A0, `CS_SRCB_D0, + `CS_SHFT_OP_PASS, `CS_A0_SRC__ALU, `CS_A1_SRC_NONE, + `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA, + `CS_CMP_SEL_CFGA, /*CFGRAM4: DESKEW*/ + `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0, + `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE, + `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA, + `CS_CMP_SEL_CFGA, /*CFGRAM5: Not used*/ + `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0, + `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE, + `CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA, + `CS_CMP_SEL_CFGA, /*CFGRAM6: READY*/ + `CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0, + `CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE, + `CS_FEEDBACK_ENBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA, + `CS_CMP_SEL_CFGA, /*CFGRAM7: RX*/ + 8'hFF, 8'h00, /*CFG9: */ + 8'hFF, 8'hFF, /*CFG11-10: */ + `SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH, + `SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL, + `SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI, + `SC_SI_A_DEFSI, /*CFG13-12: */ + `SC_A0_SRC_ACC, `SC_SHIFT_SL, `SC_PI_DYN_EN, + 1'h0, `SC_FIFO1_ALU, `SC_FIFO0_BUS, + `SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN, + `SC_FB_NOCHN, `SC_CMP1_NOCHN, + `SC_CMP0_NOCHN, /*CFG15-14: */ + 10'h00, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX, + `SC_FIFO_LEVEL,`SC_FIFO__SYNC,`SC_EXTCRC_DSBL, + `SC_WRK16CAT_DSBL /*CFG17-16: */ +} +)) datapath( + /* input */ .reset(1'b0), + /* input */ .clk(op_clk), + /* input [02:00] */ .cs_addr(state), + /* input */ .route_si(1'b0), + /* input */ .route_ci(1'b0), + /* input */ .f0_load(1'b0), + /* input */ .f1_load(fifoStore), + /* input */ .d0_load(1'b0), + /* input */ .d1_load(1'b0), + /* output */ .ce0(), + /* output */ .cl0(), + /* output */ .z0(deskewComplete), + /* output */ .ff0(), + /* output */ .ce1(), + /* output */ .cl1(), + /* output */ .z1(), + /* output */ .ff1(), + /* output */ .ov_msb(), + /* output */ .co_msb(), + /* output */ .cmsb(), + /* output */ .so(), + /* output */ .f0_bus_stat(f0_bus_stat), + /* output */ .f0_blk_stat(f0_blk_stat), + /* output */ .f1_bus_stat(f1_bus_stat), + /* output */ .f1_blk_stat(f1_blk_stat), + + /* input */ .ci(1'b0), // Carry in from previous stage + /* output */ .co(), // Carry out to next stage + /* input */ .sir(1'b0), // Shift in from right side + /* output */ .sor(), // Shift out to right side + /* input */ .sil(1'b0), // Shift in from left side + /* output */ .sol(), // Shift out to left side + /* input */ .msbi(1'b0), // MSB chain in + /* output */ .msbo(), // MSB chain out + /* input [01:00] */ .cei(2'b0), // Compare equal in from prev stage + /* output [01:00] */ .ceo(), // Compare equal out to next stage + /* input [01:00] */ .cli(2'b0), // Compare less than in from prv stage + /* output [01:00] */ .clo(), // Compare less than out to next stage + /* input [01:00] */ .zi(2'b0), // Zero detect in from previous stage + /* output [01:00] */ .zo(), // Zero detect out to next stage + /* input [01:00] */ .fi(2'b0), // 0xFF detect in from previous stage + /* output [01:00] */ .fo(), // 0xFF detect out to next stage + /* input [01:00] */ .capi(2'b0), // Software capture from previous stage + /* output [01:00] */ .capo(), // Software capture to next stage + /* input */ .cfbi(1'b0), // CRC Feedback in from previous stage + /* output */ .cfbo(), // CRC Feedback out to next stage + /* input [07:00] */ .pi(pi), // Parallel data port + /* output [07:00] */ .po(po) // Parallel data port +); +//`#end` -- edit above this line, do not edit this line +endmodule +//`#start footer` -- edit after this line, do not edit this line +//`#end` -- edit above this line, do not edit this line + + + + + + + + + + + + + + + + + + diff --git a/software/SCSI2SD/SCSI2SD.cydsn/sd.c b/software/SCSI2SD/SCSI2SD.cydsn/sd.c index 94284f8..e66af34 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/sd.c +++ b/software/SCSI2SD/SCSI2SD.cydsn/sd.c @@ -17,6 +17,7 @@ #include "device.h" #include "scsi.h" +#include "config.h" #include "disk.h" #include "sd.h" @@ -169,24 +170,21 @@ int sdIsReadReady() void sdReadSector() { - // We have a spi FIFO of 4 bytes. use it. - // This is much better, byut after 4 bytes we're still - // blocking a bit. - int i; - for (i = 0; i < SCSI_BLOCK_SIZE; i+=4) + int prep = 0; + int i = 0; + while (i < SCSI_BLOCK_SIZE) { - SDCard_WriteTxData(0xFF); - SDCard_WriteTxData(0xFF); - SDCard_WriteTxData(0xFF); - SDCard_WriteTxData(0xFF); - - while(!(SDCard_ReadTxStatus() & SDCard_STS_SPI_DONE)) - {} - scsiDev.data[i] = SDCard_ReadRxData(); - scsiDev.data[i+1] = SDCard_ReadRxData(); - scsiDev.data[i+2] = SDCard_ReadRxData(); - scsiDev.data[i+3] = SDCard_ReadRxData(); + if (prep < SCSI_BLOCK_SIZE && (SDCard_ReadTxStatus() & SDCard_STS_TX_FIFO_NOT_FULL)) + { + SDCard_WriteTxData(0xFF); + prep++; + } + if(SDCard_ReadRxStatus() & SDCard_STS_RX_FIFO_NOT_EMPTY) + { + scsiDev.data[i] = SDCard_ReadRxData(); + i++; + } } @@ -213,21 +211,18 @@ int sdWriteSector() sdSpiByte(0xFC); // MULTIPLE byte start token int i; - for (i = 0; i < SCSI_BLOCK_SIZE; i+=4) + for (i = 0; i < SCSI_BLOCK_SIZE; i++) { - SDCard_WriteTxData(scsiDev.data[i]); - SDCard_WriteTxData(scsiDev.data[i+1]); - SDCard_WriteTxData(scsiDev.data[i+2]); - SDCard_WriteTxData(scsiDev.data[i+3]); - - while(!(SDCard_ReadTxStatus() & SDCard_STS_SPI_DONE)) + while(!(SDCard_ReadTxStatus() & SDCard_STS_TX_FIFO_NOT_FULL)) {} + SDCard_WriteTxData(scsiDev.data[i]); } - - SDCard_ReadRxData(); - SDCard_ReadRxData(); - SDCard_ReadRxData(); - SDCard_ReadRxData(); + while(!(SDCard_ReadTxStatus() & SDCard_STS_SPI_DONE)) + {} + SDCard_ReadRxData(); + SDCard_ReadRxData(); + SDCard_ReadRxData(); + SDCard_ReadRxData(); sdSpiByte(0x00); // CRC sdSpiByte(0x00); // CRC @@ -430,7 +425,7 @@ int sdInit() // now set the sd card up for full speed SD_Data_Clk_Start(); // Turn on the fast clock - SD_Clk_Ctl_Write(1); // Select the fast clock source. + SD_Clk_Ctl_Write(config->overclockSPI ? 2 : 1); // Select the fast clock source. SD_Init_Clk_Stop(); // Stop the slow clock. if (!sdReadCSD()) goto bad; @@ -446,7 +441,6 @@ out: } - void sdPrepareWrite() { // Set the number of blocks to pre-erase by the multiple block write command diff --git a/software/SCSI2SD/SCSI2SD.cydsn/sd.h b/software/SCSI2SD/SCSI2SD.cydsn/sd.h index 3473a7d..53e4079 100755 --- a/software/SCSI2SD/SCSI2SD.cydsn/sd.h +++ b/software/SCSI2SD/SCSI2SD.cydsn/sd.h @@ -46,7 +46,7 @@ typedef struct { int version; // SDHC = version 2. int ccs; // Card Capacity Status. 1 = SDHC or SDXC - int capacity; // in 512 byte blocks + uint32 capacity; // in 512 byte blocks } SdDevice; extern SdDevice sdDev;