]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad/driverlib/MSP430FR5xx_6xx/framctl.c
78165d84b4eb045d9832bbc853e96bbbe6f5c3e6
[freertos] / FreeRTOS / Demo / MSP430X_MSP430FR5969_LaunchPad / driverlib / MSP430FR5xx_6xx / framctl.c
1 /* --COPYRIGHT--,BSD\r
2  * Copyright (c) 2014, Texas Instruments Incorporated\r
3  * All rights reserved.\r
4  *\r
5  * Redistribution and use in source and binary forms, with or without\r
6  * modification, are permitted provided that the following conditions\r
7  * are met:\r
8  *\r
9  * *  Redistributions of source code must retain the above copyright\r
10  *    notice, this list of conditions and the following disclaimer.\r
11  *\r
12  * *  Redistributions in binary form must reproduce the above copyright\r
13  *    notice, this list of conditions and the following disclaimer in the\r
14  *    documentation and/or other materials provided with the distribution.\r
15  *\r
16  * *  Neither the name of Texas Instruments Incorporated nor the names of\r
17  *    its contributors may be used to endorse or promote products derived\r
18  *    from this software without specific prior written permission.\r
19  *\r
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
31  * --/COPYRIGHT--*/\r
32 //*****************************************************************************\r
33 //\r
34 // framctl.c - Driver for the framctl Module.\r
35 //\r
36 //*****************************************************************************\r
37 \r
38 //*****************************************************************************\r
39 //\r
40 //! \addtogroup framctl_api framctl\r
41 //! @{\r
42 //\r
43 //*****************************************************************************\r
44 \r
45 #include "inc/hw_regaccess.h"\r
46 #include "inc/hw_memmap.h"\r
47 \r
48 #ifdef __MSP430_HAS_FRAM__\r
49 #include "framctl.h"\r
50 \r
51 #include <assert.h>\r
52 \r
53 void FRAMCtl_write8(uint8_t *dataPtr,\r
54                     uint8_t *framPtr,\r
55                     uint16_t numberOfBytes)\r
56 {\r
57     while(numberOfBytes > 0)\r
58     {\r
59         //Write to Fram\r
60         *framPtr++ = *dataPtr++;\r
61         numberOfBytes--;\r
62     }\r
63 }\r
64 \r
65 void FRAMCtl_write16(uint16_t *dataPtr,\r
66                      uint16_t *framPtr,\r
67                      uint16_t numberOfWords)\r
68 {\r
69     while(numberOfWords > 0)\r
70     {\r
71         //Write to Fram\r
72         *framPtr++ = *dataPtr++;\r
73         numberOfWords--;\r
74     }\r
75 }\r
76 \r
77 void FRAMCtl_write32(uint32_t *dataPtr,\r
78                      uint32_t *framPtr,\r
79                      uint16_t count)\r
80 {\r
81     while(count > 0)\r
82     {\r
83         //Write to Fram\r
84         *framPtr++ = *dataPtr++;\r
85         count--;\r
86     }\r
87 }\r
88 \r
89 void FRAMCtl_fillMemory32(uint32_t value,\r
90                           uint32_t *framPtr,\r
91                           uint16_t count)\r
92 {\r
93     while(count > 0)\r
94     {\r
95         //Write to Fram\r
96         *framPtr++ = value;\r
97         count--;\r
98     }\r
99 }\r
100 \r
101 void FRAMCtl_enableInterrupt(uint8_t interruptMask)\r
102 {\r
103     uint8_t waitSelection;\r
104 \r
105     waitSelection = (HWREG8(FRAM_BASE + OFS_FRCTL0) & 0xFF);\r
106     // Clear lock in FRAM control registers\r
107     HWREG16(FRAM_BASE + OFS_FRCTL0) = FWPW | waitSelection;\r
108 \r
109     // Enable user selected interrupt sources\r
110     HWREG16(FRAM_BASE + OFS_GCCTL0) |= interruptMask;\r
111 }\r
112 \r
113 uint8_t FRAMCtl_getInterruptStatus(uint16_t interruptFlagMask)\r
114 {\r
115     return (HWREG16(FRAM_BASE + OFS_GCCTL1) & interruptFlagMask);\r
116 }\r
117 \r
118 void FRAMCtl_disableInterrupt(uint16_t interruptMask)\r
119 {\r
120     uint8_t waitSelection;\r
121 \r
122     waitSelection = (HWREG8(FRAM_BASE + OFS_FRCTL0) & 0xFF);\r
123     //Clear lock in FRAM control registers\r
124     HWREG16(FRAM_BASE + OFS_FRCTL0) = FWPW | waitSelection;\r
125 \r
126     HWREG16(FRAM_BASE + OFS_GCCTL0) &= ~(interruptMask);\r
127 }\r
128 \r
129 void FRAMCtl_configureWaitStateControl(uint8_t waitState)\r
130 {\r
131     // Clear lock in FRAM control registers\r
132     HWREG16(FRAM_BASE + OFS_FRCTL0) = FWPW;\r
133 \r
134     HWREG8(FRAM_BASE + OFS_FRCTL0_L) &= ~NWAITS_7;\r
135     HWREG8(FRAM_BASE + OFS_FRCTL0_L) |= (waitState);\r
136 }\r
137 \r
138 void FRAMCtl_delayPowerUpFromLPM(uint8_t delayStatus)\r
139 {\r
140     uint8_t waitSelection;\r
141 \r
142     waitSelection = (HWREG8(FRAM_BASE + OFS_FRCTL0) & 0xFF);\r
143 \r
144     // Clear lock in FRAM control registers\r
145     HWREG16(FRAM_BASE + OFS_FRCTL0) = FWPW | waitSelection;\r
146 \r
147     HWREG8(FRAM_BASE + OFS_GCCTL0_L) &= ~0x02;\r
148     HWREG8(FRAM_BASE + OFS_GCCTL0_L) |= delayStatus;\r
149 }\r
150 \r
151 #endif\r
152 //*****************************************************************************\r
153 //\r
154 //! Close the doxygen group for framctl_api\r
155 //! @}\r
156 //\r
157 //*****************************************************************************\r