Add second SPI master for 5.2 board
[SCSI2SD.git] / software / SCSI2SD / v5.2 / SCSI2SD.cydsn / Generated_Source / PSoC5 / NOR_SO.c
1 /*******************************************************************************
2 * File Name: NOR_SO.c  
3 * Version 2.20
4 *
5 * Description:
6 *  This file contains API to enable firmware control of a Pins component.
7 *
8 * Note:
9 *
10 ********************************************************************************
11 * Copyright 2008-2015, Cypress Semiconductor Corporation.  All rights reserved.
12 * You may use this file only in accordance with the license, terms, conditions, 
13 * disclaimers, and limitations in the end user license agreement accompanying 
14 * the software package with which this file was provided.
15 *******************************************************************************/
16
17 #include "cytypes.h"
18 #include "NOR_SO.h"
19
20 /* APIs are not generated for P15[7:6] on PSoC 5 */
21 #if !(CY_PSOC5A &&\
22          NOR_SO__PORT == 15 && ((NOR_SO__MASK & 0xC0) != 0))
23
24
25 /*******************************************************************************
26 * Function Name: NOR_SO_Write
27 ****************************************************************************//**
28 *
29 * \brief Writes the value to the physical port (data output register), masking
30 *  and shifting the bits appropriately. 
31 *
32 * The data output register controls the signal applied to the physical pin in 
33 * conjunction with the drive mode parameter. This function avoids changing 
34 * other bits in the port by using the appropriate method (read-modify-write or
35 * bit banding).
36 *
37 * <b>Note</b> This function should not be used on a hardware digital output pin 
38 * as it is driven by the hardware signal attached to it.
39 *
40 * \param value
41 *  Value to write to the component instance.
42 *
43 * \return 
44 *  None 
45 *
46 * \sideeffect
47 *  If you use read-modify-write operations that are not atomic; the Interrupt 
48 *  Service Routines (ISR) can cause corruption of this function. An ISR that 
49 *  interrupts this function and performs writes to the Pins component data 
50 *  register can cause corrupted port data. To avoid this issue, you should 
51 *  either use the Per-Pin APIs (primary method) or disable interrupts around 
52 *  this function.
53 *
54 * \funcusage
55 *  \snippet NOR_SO_SUT.c usage_NOR_SO_Write
56 *******************************************************************************/
57 void NOR_SO_Write(uint8 value)
58 {
59     uint8 staticBits = (NOR_SO_DR & (uint8)(~NOR_SO_MASK));
60     NOR_SO_DR = staticBits | ((uint8)(value << NOR_SO_SHIFT) & NOR_SO_MASK);
61 }
62
63
64 /*******************************************************************************
65 * Function Name: NOR_SO_SetDriveMode
66 ****************************************************************************//**
67 *
68 * \brief Sets the drive mode for each of the Pins component's pins.
69
70 * <b>Note</b> This affects all pins in the Pins component instance. Use the
71 * Per-Pin APIs if you wish to control individual pin's drive modes.
72 *
73 * \param mode
74 *  Mode for the selected signals. Valid options are documented in 
75 *  \ref driveMode.
76 *
77 * \return
78 *  None
79 *
80 * \sideeffect
81 *  If you use read-modify-write operations that are not atomic, the ISR can
82 *  cause corruption of this function. An ISR that interrupts this function 
83 *  and performs writes to the Pins component Drive Mode registers can cause 
84 *  corrupted port data. To avoid this issue, you should either use the Per-Pin
85 *  APIs (primary method) or disable interrupts around this function.
86 *
87 * \funcusage
88 *  \snippet NOR_SO_SUT.c usage_NOR_SO_SetDriveMode
89 *******************************************************************************/
90 void NOR_SO_SetDriveMode(uint8 mode)
91 {
92         CyPins_SetPinDriveMode(NOR_SO_0, mode);
93 }
94
95
96 /*******************************************************************************
97 * Function Name: NOR_SO_Read
98 ****************************************************************************//**
99 *
100 * \brief Reads the associated physical port (pin status register) and masks 
101 *  the required bits according to the width and bit position of the component
102 *  instance. 
103 *
104 * The pin's status register returns the current logic level present on the 
105 * physical pin.
106 *
107 * \return 
108 *  The current value for the pins in the component as a right justified number.
109 *
110 * \funcusage
111 *  \snippet NOR_SO_SUT.c usage_NOR_SO_Read  
112 *******************************************************************************/
113 uint8 NOR_SO_Read(void)
114 {
115     return (NOR_SO_PS & NOR_SO_MASK) >> NOR_SO_SHIFT;
116 }
117
118
119 /*******************************************************************************
120 * Function Name: NOR_SO_ReadDataReg
121 ****************************************************************************//**
122 *
123 * \brief Reads the associated physical port's data output register and masks 
124 *  the correct bits according to the width and bit position of the component 
125 *  instance. 
126 *
127 * The data output register controls the signal applied to the physical pin in 
128 * conjunction with the drive mode parameter. This is not the same as the 
129 * preferred NOR_SO_Read() API because the 
130 * NOR_SO_ReadDataReg() reads the data register instead of the status 
131 * register. For output pins this is a useful function to determine the value 
132 * just written to the pin.
133 *
134 * \return 
135 *  The current value of the data register masked and shifted into a right 
136 *  justified number for the component instance.
137 *
138 * \funcusage
139 *  \snippet NOR_SO_SUT.c usage_NOR_SO_ReadDataReg 
140 *******************************************************************************/
141 uint8 NOR_SO_ReadDataReg(void)
142 {
143     return (NOR_SO_DR & NOR_SO_MASK) >> NOR_SO_SHIFT;
144 }
145
146
147 /* If interrupt is connected for this Pins component */ 
148 #if defined(NOR_SO_INTSTAT) 
149
150     /*******************************************************************************
151     * Function Name: NOR_SO_SetInterruptMode
152     ****************************************************************************//**
153     *
154     * \brief Configures the interrupt mode for each of the Pins component's
155     *  pins. Alternatively you may set the interrupt mode for all the pins
156     *  specified in the Pins component.
157     *
158     *  <b>Note</b> The interrupt is port-wide and therefore any enabled pin
159     *  interrupt may trigger it.
160     *
161     * \param position
162     *  The pin position as listed in the Pins component. You may OR these to be 
163     *  able to configure the interrupt mode of multiple pins within a Pins 
164     *  component. Or you may use NOR_SO_INTR_ALL to configure the
165     *  interrupt mode of all the pins in the Pins component.       
166     *  - NOR_SO_0_INTR       (First pin in the list)
167     *  - NOR_SO_1_INTR       (Second pin in the list)
168     *  - ...
169     *  - NOR_SO_INTR_ALL     (All pins in Pins component)
170     *
171     * \param mode
172     *  Interrupt mode for the selected pins. Valid options are documented in
173     *  \ref intrMode.
174     *
175     * \return 
176     *  None
177     *  
178     * \sideeffect
179     *  It is recommended that the interrupt be disabled before calling this 
180     *  function to avoid unintended interrupt requests. Note that the interrupt
181     *  type is port wide, and therefore will trigger for any enabled pin on the 
182     *  port.
183     *
184     * \funcusage
185     *  \snippet NOR_SO_SUT.c usage_NOR_SO_SetInterruptMode
186     *******************************************************************************/
187     void NOR_SO_SetInterruptMode(uint16 position, uint16 mode)
188     {
189                 if((position & NOR_SO_0_INTR) != 0u) 
190                 { 
191                          NOR_SO_0_INTTYPE_REG = (uint8)mode; 
192                 }
193     }
194     
195     
196     /*******************************************************************************
197     * Function Name: NOR_SO_ClearInterrupt
198     ****************************************************************************//**
199     *
200     * \brief Clears any active interrupts attached with the component and returns 
201     *  the value of the interrupt status register allowing determination of which
202     *  pins generated an interrupt event.
203     *
204     * \return 
205     *  The right-shifted current value of the interrupt status register. Each pin 
206     *  has one bit set if it generated an interrupt event. For example, bit 0 is 
207     *  for pin 0 and bit 1 is for pin 1 of the Pins component.
208     *  
209     * \sideeffect
210     *  Clears all bits of the physical port's interrupt status register, not just
211     *  those associated with the Pins component.
212     *
213     * \funcusage
214     *  \snippet NOR_SO_SUT.c usage_NOR_SO_ClearInterrupt
215     *******************************************************************************/
216     uint8 NOR_SO_ClearInterrupt(void)
217     {
218         return (NOR_SO_INTSTAT & NOR_SO_MASK) >> NOR_SO_SHIFT;
219     }
220
221 #endif /* If Interrupts Are Enabled for this Pins component */ 
222
223 #endif /* CY_PSOC5A... */
224
225     
226 /* [] END OF FILE */