1 /*
2  * hal.h
3  *
4  * Copyright (C) 2007 - 2011 Texas Instruments Incorporated - http://www.ti.com/
5  *
6  *
7  *  Redistribution and use in source and binary forms, with or without
8  *  modification, are permitted provided that the following conditions
9  *  are met:
10  *
11  *    Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  *
14  *    Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the
17  *    distribution.
18  *
19  *    Neither the name of Texas Instruments Incorporated nor the names of
20  *    its contributors may be used to endorse or promote products derived
21  *    from this software without specific prior written permission.
22  *
23  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 
36 /**
37  @page hal Hardware Abstraction Layer (HAL)
38  This page introduces the user to the topic.
39 */
40 
41 /**
42  @file hal.h
43  @brief Hardware Abstraction Layer (HAL)
44 
45  This file defines and exports all the objects and symbols required to use
46  the Hardware Abstraction Layer (HAL).
47 */
48 
49 #ifndef _HAL_H_
50 #define _HAL_H_
51 
52 #define T_ARCH_MSP430 0
53 #define T_ARCH_MSP432 1
54 
55 // Event types  send async to DLL First word in message
56 enum EVENT_TYPE_FLAGS
57 {
58     // set if breakpoint is hit
59     BP_HIT_FLAG = 0x1,
60     // State Sotrage Event
61     STATE_STORAGE_FLAG = 0x2,
62     //JSTATE Capute
63     JSTATE_CAPTURE_FLAG = 0x4,
64 	//Power profiling data capture
65 	ENERGYTRACE_INFO = 0x8,
66 	// Variable watch event
67     VARIABLE_WATCH_FLAG = 0x10
68 };
69 
70 #define NO_FLAG			0x00
71 #define LOCK_INFO_A_FLAG	0x01
72 
73 #define HAL_FUNCTION(x) short x (unsigned short flags)
74 typedef short (*HalFuncInOut)(unsigned short);
75 
76 struct _DeviceSettings_
77 {
78     unsigned long  clockControlType;
79     unsigned short stopFLL;
80     unsigned short assertBslValidBit;
81 };
82 typedef struct _DeviceSettings_ DeviceSettings;
83 
84 struct _DevicePowerSettings_
85 {
86     unsigned long powerTestRegMask;
87     unsigned long powerTestRegDefault;
88     unsigned long enableLpmx5TestReg;
89     unsigned long disableLpmx5TestReg;
90 
91     unsigned short powerTestReg3VMask;
92     unsigned short powerTestReg3VDefault;
93     unsigned short enableLpmx5TestReg3V;
94     unsigned short disableLpmx5TestReg3V;
95 };
96 typedef struct _DevicePowerSettings_ DevicePowerSettings;
97 
98 typedef struct _ARMConfigSettings
99 {
100     unsigned long scsBase; // System Control Space base address
101     unsigned long fpbBase; // FLASH Patch Block base address
102     unsigned long interruptOptions; // Options to enable/disable interrupts when single stepping or letting the device run
103     unsigned long ulpDebug; // Options to enable/disable entry to LPM. poll for PB hit in low poer mode
104 } ARMConfigSettings;
105 
106 #ifndef HAL_REC
107 #define HAL_REC
108 struct _HalRec_
109 {
110   unsigned short id;
111   void  *function;
112 };
113 typedef struct _HalRec_ HalRec;
114 #endif
115 
116 extern void _init_Hal(void);
117 
118 #define MACRO_LIST                           \
119     MACRO(Init)                              \
120     MACRO(SetVcc)                            \
121     MACRO(GetVcc)                            \
122     MACRO(StartJtag)                         \
123     MACRO(StartJtagActivationCode)           \
124     MACRO(StopJtag)                          \
125     MACRO(Configure)                         \
126     MACRO(GetFuses)                          \
127     MACRO(BlowFuse)                          \
128     MACRO(WaitForEem)                        \
129     MACRO(BitSequence)                       \
130     MACRO(GetJtagId)                         \
131     MACRO(SetDeviceChainInfo)                \
132     MACRO(SetChainConfiguration)             \
133     MACRO(GetNumOfDevices)                   \
134     MACRO(GetInterfaceMode)                  \
135     MACRO(GetDeviceIdPtr)                    \
136     MACRO(SyncJtag_AssertPor_SaveContext)    \
137     MACRO(SyncJtag_Conditional_SaveContext)  \
138     MACRO(RestoreContext_ReleaseJtag)        \
139     MACRO(ReadMemBytes)                      \
140     MACRO(ReadMemWords)                      \
141     MACRO(ReadMemQuick)                      \
142     MACRO(WriteMemBytes)                     \
143     MACRO(WriteMemWords)                     \
144     MACRO(EemDataExchange)                   \
145     MACRO(EemDataExchangeAFE2xx)             \
146     MACRO(SingleStep)                        \
147     MACRO(ReadAllCpuRegs)                    \
148     MACRO(WriteAllCpuRegs)                   \
149     MACRO(Psa)                               \
150     MACRO(ExecuteFunclet)                    \
151     MACRO(ExecuteFuncletJtag)                \
152     MACRO(GetDcoFrequency)                   \
153     MACRO(GetDcoFrequencyJtag)               \
154     MACRO(GetFllFrequency)                   \
155     MACRO(GetFllFrequencyJtag)               \
156     MACRO(WaitForStorage)                    \
157     MACRO(SyncJtag_AssertPor_SaveContextX)   \
158     MACRO(SyncJtag_Conditional_SaveContextX) \
159     MACRO(RestoreContext_ReleaseJtagX)       \
160     MACRO(ReadMemBytesX)                     \
161     MACRO(ReadMemWordsX)                     \
162     MACRO(ReadMemQuickX)                     \
163     MACRO(WriteMemBytesX)                    \
164     MACRO(WriteMemWordsX)                    \
165     MACRO(EemDataExchangeX)                  \
166     MACRO(SingleStepX)                       \
167     MACRO(ReadAllCpuRegsX)                   \
168     MACRO(WriteAllCpuRegsX)                  \
169     MACRO(PsaX)                              \
170     MACRO(ExecuteFuncletX)                   \
171     MACRO(GetDcoFrequencyX)                  \
172     MACRO(GetFllFrequencyX)                  \
173     MACRO(WaitForStorageX)                   \
174     MACRO(BlowFuseXv2)                       \
175     MACRO(BlowFuseFram)                      \
176     MACRO(SyncJtag_AssertPor_SaveContextXv2) \
177     MACRO(SyncJtag_Conditional_SaveContextXv2)\
178     MACRO(RestoreContext_ReleaseJtagXv2)      \
179     MACRO(ReadMemWordsXv2)                    \
180     MACRO(ReadMemQuickXv2)                    \
181     MACRO(WriteMemWordsXv2)                   \
182     MACRO(EemDataExchangeXv2)                 \
183     MACRO(SingleStepXv2)                      \
184     MACRO(ReadAllCpuRegsXv2)                  \
185     MACRO(WriteAllCpuRegsXv2)                 \
186     MACRO(PsaXv2)                             \
187     MACRO(ExecuteFuncletXv2)                  \
188     MACRO(UnlockDeviceXv2)                    \
189     MACRO(MagicPattern)                       \
190     MACRO(UnlockC092)                         \
191     MACRO(HilCommand)                         \
192     MACRO(PollJStateReg)                      \
193     MACRO(PollJStateRegFR57xx)                \
194     MACRO(IsJtagFuseBlown)                    \
195     MACRO(ResetXv2)                           \
196     MACRO(WriteFramQuickXv2)                  \
197     MACRO(SendJtagMailboxXv2)                 \
198     MACRO(SingleStepJStateXv2)                \
199     MACRO(PollJStateRegEt8)                   \
200     MACRO(ResetStaticGlobalVars)              \
201     MACRO(Reset430I)                          \
202     MACRO(PollJStateReg430I)                  \
203     MACRO(PollJStateReg20)                    \
204     MACRO(SwitchMosfet)                       \
205     MACRO(ResetL092)                          \
206     MACRO(DummyMacro)                         \
207     MACRO(Reset5438Xv2)                       \
208     MACRO(LeaSyncConditional)                 \
209     MACRO(GetJtagIdCodeArm)                   \
210     MACRO(ScanApArm)                          \
211     MACRO(MemApTransactionArm)                \
212     MACRO(ReadAllCpuRegsArm)                  \
213     MACRO(WriteAllCpuRegsArm)                 \
214     MACRO(EnableDebugArm)                     \
215     MACRO(DisableDebugArm)                    \
216     MACRO(RunArm)                             \
217     MACRO(HaltArm)                            \
218     MACRO(ResetArm)                           \
219     MACRO(SingleStepArm)                      \
220     MACRO(WaitForDebugHaltArm)                \
221     MACRO(MemApTransactionArmSwd)             \
222     MACRO(GetInterfaceModeArm)                \
223     MACRO(PollDStatePCRegEt)                  \
224     MACRO(GetCpuIdArm)                        \
225     MACRO(CheckDapLockArm)                    \
226     MACRO(UnlockDap)                          \
227     MACRO(UssSyncConditional)
228 
229 #define MACRO(x)  ID_##x,
230 enum hal_id
231 {
232     MACRO(Zero)
233     MACRO_LIST
234     NUM_MACROS
235 };
236 #undef MACRO
237 
238 
239 #define HAL_FUNCTIONS_DEFAULT_SIZE    NUM_MACROS
240 #define HAL_FUNCTIONS_SIZE   (NUM_MACROS+2)
241 
242 extern HalRec hal_functions_[HAL_FUNCTIONS_SIZE];
243 
244 #endif
245 
246