OSDN Git Service

最初のコミット。sample1が通る。
[uzume/uzume_bfin.git] / uzume_prototype / kernel / config / blackfin / _common_bf533 / hw_timer.h
1 /*
2  *  TOPPERS/JSP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Just Standard Profile Kernel
5  *
6  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7  *                              Toyohashi Univ. of Technology, JAPAN
8  *
9  *  TOPPERS/JSP for Blackfin
10  *
11  *  Copyright (C) 2004,2006,2006 by Takemasa Nakamura
12  *  Copyright (C) 2004 by Ujinosuke
13  *
14  *  上記著作権者は,以下の (1)縲鰀(4) の条件か,Free Software Foundation
15  *  によって公表されている GNU General Public License の Version 2 に記
16  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
17  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
18  *  利用と呼ぶ)することを無償で許諾する.
19  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21  *      スコード中に含まれていること.
22  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
24  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
25  *      の無保証規定を掲載すること.
26  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
27  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
28  *      と.
29  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
30  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
31  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
32  *        報告すること.
33  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
34  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
35  *
36  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
37  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
38  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
39  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
40  *
41  *
42  */
43
44 /*
45  *  タイマドライバ(ADSP-BF533用)
46  *
47  */
48
49 #ifndef _HW_TIMER_H_
50 #define _HW_TIMER_H_
51
52 #include <s_services.h>
53 #include <sil.h>
54
55 #ifndef _MACRO_ONLY
56
57
58
59
60 /**************************************************************
61  *  タイマの起動処理
62  *
63  *  タイマを初期化し,周期的なタイマ割込み要求を発生させる.
64  *
65  **************************************************************/
66 Inline void
67 hw_timer_initialize()
68 {
69 #ifdef USE_TIC_CORE
70     // Core timer
71     // TCNTL bit assignement
72     // TMPWR                  0x00000001
73     // TMREN                  0x00000002
74     // TAUTORLD               0x00000004
75     // TINT                   0x00000008
76     *__pTCNTL = 0x00000001;                 // TMPWR : power up timer;
77     *__pTPERIOD = CORECLOCK/1000;           // CORE CLOCK is defined in sys_config.h
78     *__pTCNTL = 0x00000007;                 // TMPWR | TMREN | TAUTORLD;
79 #else
80     // GPT2(General-purpose timer2)
81
82
83     /* TIMERx_CONFIG Registers */
84     // PWM_OUT      0x0001
85     // WDTH_CAP     0x0002
86     // EXT_CLK      0x0003
87     // PULSE_HI     0x0004
88     // PERIOD_CNT   0x0008
89     // IRQ_ENA      0x0010
90     // TIN_SEL      0x0020
91     // OUT_DIS      0x0040
92     // CLK_SEL      0x0080
93     // TOGGLE_HI    0x0100
94     // EMU_RUN      0x0200
95
96     *__pTIMER2_CONFIG = 0x0059; // PERIOD_CNT | OUT_DIS |IRQ_ENA | PWM_OUT ( PWM_OUT, Output Pad disable)
97     *__pTIMER2_PERIOD = SYSCLOCK/1000;  // SYS CLOCK is defined in sys_config.h
98     *__pTIMER2_WIDTH = 1;                   // 0 < width < period
99
100     // TIMEN0           0x0001
101     // TIMEN1           0x0002
102     // TIMEN2           0x0004
103     *__pTIMER_ENABLE = 0x004;           // TIMEN2 timer2 start
104
105     ena_int( INHNO_TIMER );             // enable Timer Interrupt
106 #endif
107     asm("ssync;");
108
109 }
110
111 /**************************************************************
112  *  タイマ割込み要求のクリア
113  **************************************************************/
114 Inline void
115 hw_timer_int_clear()
116 {
117 #ifdef USE_TIC_CORE
118     // Core timer
119     // TCNTL bit assignement
120     // TMPWR                  0x00000001
121     // TMREN                  0x00000002
122     // TAUTORLD               0x00000004
123     // TINT                   0x00000008
124
125     /* TINTはW1Cではないので、TINTのTINTビットは0を書き込む */
126     *__pTCNTL = 0x00000007; // TMPWR | TMREN | TAUTORLD;
127 #else
128     // GPT2(General-purpose timer2)
129
130     // TIMIL0           0x0001
131     // TIMIL1           0x0002
132     // TIMIL2           0x0004
133     *__pTIMER_STATUS = 0x004;   // TIMIL2, Clear interrupt
134 #endif
135     asm("ssync;");
136 }
137
138 /**************************************************************
139  *  タイマの停止処理
140  *
141  *  タイマの動作を停止させる.
142  **************************************************************/
143 Inline void
144 hw_timer_terminate()
145 {
146     /*
147      *  タイマの動作を停止する.
148      */
149 #ifdef USE_TIC_CORE
150     // Core timer
151     // TCNTL bit assignement
152     // TMPWR                  0x00000001
153     // TMREN                  0x00000002
154     // TAUTORLD               0x00000004
155     // TINT                   0x00000008
156     *__pTCNTL = 0x00000005; //TMPWR | TAUTORLD | TINT;      // 停止
157     *__pTCNTL = 0;                          // パワーダウンモード
158 #else
159     // GPT2(General-purpose timer2)
160     // TIMDIS0          0x0001
161     // TIMDIS1          0x0002
162     // TIMDIS2          0x0004
163     *__pTIMER_DISABLE = 0x004;          // TIMDIS2, timer2 disable
164 #endif
165     asm("ssync;");
166 }
167
168
169 #endif /* _MACRO_ONLY */
170 #endif /* _HW_TIMER_H_ */