Explicitly handle line endings for this repo
[sitara-dss-files/am335x-dss-files.git] / am335x-bbb-pru-startup.js
1 /*\r
2  *\r
3  * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ \r
4  * \r
5  * \r
6  *  Redistribution and use in source and binary forms, with or without \r
7  *  modification, are permitted provided that the following conditions \r
8  *  are met:\r
9  *\r
10  *    Redistributions of source code must retain the above copyright \r
11  *    notice, this list of conditions and the following disclaimer.\r
12  *\r
13  *    Redistributions in binary form must reproduce the above copyright\r
14  *    notice, this list of conditions and the following disclaimer in the \r
15  *    documentation and/or other materials provided with the   \r
16  *    distribution.\r
17  *\r
18  *    Neither the name of Texas Instruments Incorporated nor the names of\r
19  *    its contributors may be used to endorse or promote products derived\r
20  *    from this software without specific prior written permission.\r
21  *\r
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
23  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
24  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
25  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
26  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
27  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
28  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
29  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
30  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
31  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
32  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
33  *\r
34 */\r
35 \r
36 \r
37 //----------------------------------------------------------------------------\r
38 // Purpose: Prepare the AM335x SOC so CCS can connect to the PRU as if it were\r
39 // any other standalone CPU.  \r
40 //\r
41 // This script is only intended to be used as described in \r
42 // http://processors.wiki.ti.com/index.php/PRU-ICSS_Debug_on_AM335x\r
43 // In particular, it does NOT WORK as a standalone script.  \r
44 //\r
45 // Presumptions:\r
46 // - Target system is BeagleBone Black or BeagleBone White\r
47 // - The target configuration has launched\r
48 // - PRU connection occurs after this script runs\r
49 //----------------------------------------------------------------------------\r
50 \r
51 //----------------------------------------------------------------------------\r
52 // Constants\r
53 //----------------------------------------------------------------------------\r
54 var AM335X_INPUT_EN   = 1 << 5;\r
55 var AM335X_PULL_DISA  = 1 << 3;\r
56 var AM335X_PIN_OUTPUT = AM335X_PULL_DISA;\r
57 var AM335X_PIN_INPUT  = AM335X_INPUT_EN | AM335X_PULL_DISA;\r
58 \r
59 //----------------------------------------------------------------------------\r
60 // Invoke the main function in this file\r
61 //----------------------------------------------------------------------------\r
62 startup_pru();\r
63 \r
64 //****************************************************************************\r
65 // STARTUP_PRU\r
66 //****************************************************************************\r
67 function startup_pru()\r
68 {\r
69    var errCode = 0;\r
70 \r
71    //-------------------------------------------------------------------------\r
72    // Import the DSS packages into our namespace to save on typing\r
73    //-------------------------------------------------------------------------\r
74    importPackage(Packages.com.ti.debug.engine.scripting);\r
75    importPackage(Packages.com.ti.ccstudio.scripting.environment);\r
76    importPackage(Packages.java.lang);\r
77 \r
78    //-------------------------------------------------------------------------\r
79    // Create our scripting environment object - which is the main entry\r
80    // point into any script and the factory for creating other Scriptable\r
81    // servers and Sessions\r
82    //-------------------------------------------------------------------------\r
83    script = ScriptingEnvironment.instance();\r
84 \r
85    //-------------------------------------------------------------------------\r
86    // Get the Debug Server and start a Debug Session\r
87    //-------------------------------------------------------------------------\r
88    debugServer = script.getServer("DebugServer.1");\r
89 \r
90    //-------------------------------------------------------------------------\r
91    // Open a session on the Debug Access Port (DAP)\r
92    //-------------------------------------------------------------------------\r
93    var debugSessionDAP = debugServer.openSession("*", "CS_DAP_M3");\r
94 \r
95    //-------------------------------------------------------------------------\r
96    // Connect to the DAP.  Error check.\r
97    //-------------------------------------------------------------------------\r
98    print("Connecting to DAP");\r
99    try\r
100    {\r
101       debugSessionDAP.target.connect();\r
102    }\r
103    catch (ex)\r
104    {\r
105       throw "Aborting!";\r
106    }\r
107 \r
108    //-------------------------------------------------------------------------\r
109    // Init steps for PRU carried out by the DAP\r
110    //-------------------------------------------------------------------------\r
111    print("Enabling JTAG clock");\r
112    debugSessionDAP.expression.evaluate(\r
113       "*((unsigned int*) 0x44e00414 ) |= 0x02;");\r
114 \r
115    print("Configuring PRU pins");\r
116    PRU_PINMUX_Config(debugSessionDAP.memory);\r
117    \r
118    print("Enabling ICSS clock");\r
119    debugSessionDAP.expression.evaluate(\r
120       "*((unsigned int*) 0x44e00140 ) = 0x02;");\r
121    debugSessionDAP.expression.evaluate(\r
122       "*((unsigned int*) 0x44E000E8 ) = 0x02;");\r
123 \r
124    print("Resetting ICSS");\r
125    debugSessionDAP.expression.evaluate(\r
126       "*((unsigned int*) 0x44E00C00 ) |= 0x2;");\r
127    debugSessionDAP.expression.evaluate(\r
128       "*((unsigned int*) 0x44E00C00 ) &= ~0x2;");\r
129 \r
130    print("Done");\r
131 }\r
132 \r
133 //****************************************************************************\r
134 // PRU_PINMUX_Config\r
135 //****************************************************************************\r
136 function PRU_PINMUX_Config(dsDAP_mem)\r
137 {\r
138    // GEL_TextOut("****** PRU Cape GPI/O PINMUX is being configured  ***** \n","Output",1,1,1);\r
139 \r
140    //-------------------------------------------------------------------------\r
141    // LEDS\r
142    //-------------------------------------------------------------------------\r
143    //red led  = pru0 r30_3  ARM pin c12\r
144    dsDAP_mem.writeData(0, 0x44e1099c, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
145 \r
146    //green led = pru0 r30_2 arm pin d12\r
147    dsDAP_mem.writeData(0, 0x44e10998, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
148 \r
149    //blue led  = pru0 r30_0 arm pin a13\r
150    dsDAP_mem.writeData(0, 0x44e10990, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
151 \r
152    //orange led = pru0 r30_1 arm pin b13 \r
153    dsDAP_mem.writeData(0, 0x44e10994, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
154 \r
155    //RGB_0 led = pru1 r30_2 arm pin r3 \r
156    dsDAP_mem.writeData(0, 0x44e108AC, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
157 \r
158    //RGB_1 led = pru1 r30_3 arm pin r4 \r
159    dsDAP_mem.writeData(0, 0x44e108B0, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
160 \r
161    //RGB_2 led = pru0 r30_4 arm pin t1 \r
162    dsDAP_mem.writeData(0, 0x44e108B4, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
163 \r
164    //-------------------------------------------------------------------------\r
165    // Switches\r
166    //-------------------------------------------------------------------------\r
167    //switch 1 = pru0 r31_5 c13\r
168    dsDAP_mem.writeData(0, 0x44e109a4, AM335X_PIN_INPUT  | 6, 32); //mode 6\r
169 \r
170    //switch 2 = pru0 r31_7 a14  \r
171    dsDAP_mem.writeData(0, 0x44e109ac, AM335X_PIN_INPUT  | 6, 32); //mode 6\r
172 \r
173    //-------------------------------------------------------------------------\r
174    // Audio\r
175    //-------------------------------------------------------------------------\r
176    //audio data pr1 r30_0 r1 \r
177    dsDAP_mem.writeData(0, 0x44e108a0, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
178 \r
179    //audio clk pr1 r30_1 r2\r
180    dsDAP_mem.writeData(0, 0x44e108a4, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
181 \r
182    //audio sync pr1 r30_2 r3\r
183    dsDAP_mem.writeData(0, 0x44e108a8, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
184 \r
185    //-------------------------------------------------------------------------\r
186    // UART\r
187    //-------------------------------------------------------------------------\r
188    //Uart txd d15\r
189    dsDAP_mem.writeData(0, 0x44e10984, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
190 \r
191    //UART rxd d16\r
192    dsDAP_mem.writeData(0, 0x44e10980, AM335X_PIN_INPUT  | 5, 32); //mode 5\r
193 \r
194    //UART rts b17\r
195    dsDAP_mem.writeData(0, 0x44e1097C, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
196 \r
197    //UART cts a17\r
198    dsDAP_mem.writeData(0, 0x44e10978, AM335X_PIN_INPUT  | 5, 32); //mode 5\r
199 \r
200    //-------------------------------------------------------------------------\r
201    // LCD\r
202    //-------------------------------------------------------------------------\r
203    //lcd rs t3 \r
204    dsDAP_mem.writeData(0, 0x44e108B8, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
205 \r
206    //lcd r/w t4\r
207    dsDAP_mem.writeData(0, 0x44e108BC, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
208 \r
209    //lcd e v5 \r
210    dsDAP_mem.writeData(0, 0x44e108E8, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
211 \r
212    //lcd data4 b16 \r
213    dsDAP_mem.writeData(0, 0x44e10958, AM335X_PIN_OUTPUT | 6, 32); //mode 6\r
214 \r
215    //lcd data5 a16\r
216    dsDAP_mem.writeData(0, 0x44e1095C, AM335X_PIN_OUTPUT | 6, 32); //mode 6\r
217 \r
218    //lcd data6 u5 \r
219    dsDAP_mem.writeData(0, 0x44e108e0, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
220 \r
221    //lcd data7 r5 \r
222    dsDAP_mem.writeData(0, 0x44e108e4, AM335X_PIN_OUTPUT | 4, 32); //mode 4      \r
223 \r
224    //-------------------------------------------------------------------------\r
225    // TEMP SENSOR\r
226    //-------------------------------------------------------------------------\r
227    //gpmc ad14 - input (GPI direct)\r
228    dsDAP_mem.writeData(0, 0x44E10838, AM335X_PIN_INPUT  | 6, 32); //mode 6\r
229 \r
230    //lcd data7 - output (DIGIO)\r
231    dsDAP_mem.writeData(0, 0x44E108BC, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
232 }\r