1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32 33 34 35 36
37
38 package ti.sysbios.family.arm.a8;
39
40 /*!
41 * ======== TimestampProvider ========
42 * A8 TimestampProvider.
43 *
44 * The source of the timestamps for the A8 TimestampProvider is
45 * the A8's internal PMC counter which counts CPU cycles.
46 *
47 * As this counter is only 32 bits in length, provision is made
48 * in the get64() API to test if an overflow has occurred since
49 * the last invocation of get64() and compensate the return value
50 * accordingly.
51 *
52 * As it is possible for the 32 bit counter to roll over more
53 * than once between successive get64() calls, it is up to the user
54 * to call the get64() API often enough to guarantee coherency in
55 * successive timestamps. A simple mechanism to do this would be
56 * to add a Clock function that simply invokes get64():
57 *
58 * @p(code)
59 * var Clock = xdc.useModule('ti.sysbios.knl.Clock');
60 * var TimestampProvider = xdc.useModule('ti.sysbios.family.arm.a8.TimestampProvider');
61 * var clockParams = new Clock.Params();
62 * clockParams.period = 1; // call every Clock tick
63 * Clock.create($externModFxn(TimestampProvider.get64), 1, clockParams);
64 * @p
65 *
66 * @p(html)
67 * <h3> Calling Context </h3>
68 * <table border="1" cellpadding="3">
69 * <colgroup span="1"></colgroup> <colgroup span="5" align="center">
70 * </colgroup>
71 *
72 * <tr><th> Function </th><th> Hwi </th><th> Swi </th>
73 * <th> Task </th><th> Main </th><th> Startup </th></tr>
74 * <!-- -->
75 * <tr><td> {@link #get32} </td><td> Y </td><td> Y </td>
76 * <td> Y </td><td> Y </td><td> N </td></tr>
77 * <tr><td> {@link #get64} </td><td> Y </td><td> Y </td>
78 * <td> Y </td><td> Y </td><td> N </td></tr>
79 * <tr><td> {@link #getFreq} </td><td> Y </td><td> Y </td>
80 * <td> Y </td><td> Y </td><td> N </td></tr>
81 * <tr><td colspan="6"> Definitions: <br />
82 * <ul>
83 * <li> <b>Hwi</b>: API is callable from a Hwi thread. </li>
84 * <li> <b>Swi</b>: API is callable from a Swi thread. </li>
85 * <li> <b>Task</b>: API is callable from a Task thread. </li>
86 * <li> <b>Main</b>: API is callable during any of these phases: </li>
87 * <ul>
88 * <li> In your module startup after this module is started
89 * (e.g. TimestampProvider_Module_startupDone() returns TRUE). </li>
90 * <li> During xdc.runtime.Startup.lastFxns. </li>
91 * <li> During main().</li>
92 * <li> During BIOS.startupFxns.</li>
93 * </ul>
94 * <li> <b>Startup</b>: API is callable during any of these phases:</li>
95 * <ul>
96 * <li> During xdc.runtime.Startup.firstFxns.</li>
97 * <li> In your module startup before this module is started
98 * (e.g. TimestampProvider_Module_startupDone() returns FALSE).</li>
99 * </ul>
100 * </ul>
101 * </td></tr>
102 *
103 * </table>
104 * @p
105 */
106
107 @ModuleStartup
108
109 module TimestampProvider inherits ti.sysbios.interfaces.ITimestamp
110 {
111 /*! @_nodoc */
112 @XmlDtd
113 metaonly struct Module_View {
114 };
115
116 internal:
117
118 119 120
121 Void initCCNT();
122
123 124 125
126 UInt32 getOverflowCCNT();
127
128 struct Module_State {
129 UInt32 upper32Bits;
130 }
131 }