XINU
clkinit.c
Go to the documentation of this file.
1 /* clkinit.c - clkinit (BeagleBone Black) */
2 
3 #include <xinu.h>
4 
5 uint32 clktime; /* Seconds since boot */
6 uint32 count1000; /* ms since last clock tick */
7 qid16 sleepq; /* Queue of sleeping processes */
10 
11 /*------------------------------------------------------------------------
12  * clkinit - Initialize the clock and sleep queue at startup
13  *------------------------------------------------------------------------
14  */
15 void clkinit(void)
16 {
17  volatile struct am335x_timer1ms *csrptr =
18  (volatile struct am335x_timer1ms *)AM335X_TIMER1MS_ADDR;
19  /* Pointer to timer CSR in BBoneBlack */
20  volatile uint32 *clkctrl =
22 
23  *clkctrl = AM335X_TIMER1MS_CLKCTRL_EN;
24  while ((*clkctrl) != 0x2) /* Do nothing */
25  ;
26 
27  /* Reset the timer module */
28 
30 
31  /* Wait until the reset is complete */
32 
33  while ((csrptr->tistat & AM335X_TIMER1MS_TISTAT_RESETDONE) == 0)
34  /* Do nothing */;
35 
36  /* Set interrupt vector for clock to invoke clkint */
37 
39 
40  sleepq = newqueue(); /* Allocate a queue to hold the delta */
41  /* list of sleeping processes */
42 
43  preempt = QUANTUM; /* Set the preemption time */
44 
45  clktime = 0; /* Start counting seconds */
46  count1000 = 0;
47  /* The following values are calculated for a */
48  /* timer that generates 1ms tick rate */
49 
50  csrptr->tpir = 1000000;
51  csrptr->tnir = 0;
52  csrptr->tldr = 0xFFFFFFFF - 26000;
53 
54  /* Set the timer to auto reload */
55 
56  csrptr->tclr = AM335X_TIMER1MS_TCLR_AR;
57 
58  /* Start the timer */
59 
60  csrptr->tclr |= AM335X_TIMER1MS_TCLR_ST;
61 
62  /* Enable overflow interrupt which will generate */
63  /* an interrupt every 1 ms */
64 
66 
67  /* Kickstart the timer */
68 
69  csrptr->ttgr = 1;
70 
71  return;
72 }
uint32 preempt
プリエンプションカウンタ(クロックが一刻みする度に、クロック割り込みハンドラが値を繰り下げる) ...
Definition: clkinit.c:9
interrupt clkhandler(void)
Definition: clkhandler.c:9
#define AM335X_TIMER1MS_CLKCTRL_EN
1[ms]タイマーのクロック制御の許可
Definition: clock.h:96
uint32 tier
割り込み許可レジスタ
Definition: clock.h:36
全てのシステムヘッダファイルをインクルードする。
#define AM335X_TIMER1MS_TCLR_AR
自動リロードモード
Definition: clock.h:92
uint32 clktime
起動してからの現在の時間[s]
Definition: clkinit.c:5
#define AM335X_TIMER1MS_ADDR
1[ms]タイマーのアドレス
Definition: clock.h:70
uint32 tistat
ステータスレジスタ
Definition: clock.h:32
uint32 ttgr
トリガレジスタ
Definition: clock.h:46
int32 set_evec(uint32, uint32)
Definition: evec.c:37
#define AM335X_TIMER1MS_TCLR_ST
Start/Stopタイマ制御
Definition: clock.h:90
uint32 count1000
最後のクロックチックからのミリ秒
Definition: clkinit.c:6
void clkinit(void)
Definition: clkinit.c:15
uint32 tnir
ネガティブインクリメントレジスタ
Definition: clock.h:60
#define QUANTUM
ミリ秒単位のタイムスライス
Definition: kernel.h:93
qid16 sleepq
スリープ中のプロセスキュー
Definition: clkinit.c:7
int16 qid16
キューID
Definition: kernel.h:24
#define AM335X_TIMER1MS_CLKCTRL_ADDR
1[ms]タイマーのクロック制御アドレス
Definition: clock.h:94
#define AM335X_TIMER1MS_TISTAT_RESETDONE
1[ms]タイマーのリセット完了状態
Definition: clock.h:76
uint32 tpir
ポジティブインクリメントレジスタ
Definition: clock.h:58
#define AM335X_TIMER1MS_TIOCP_CFG_SOFTRESET
1[ms]タイマーのソフトリセットコンフィグ
Definition: clock.h:74
#define AM335X_TIMER1MS_TIER_OVF_IT_ENA
オーバーフロー割り込みの許可
Definition: clock.h:86
qid16 newqueue(void)
グローバルキューテーブルにキューを割り当て、テーブルを初期化する。
Definition: newqueue.c:15
unsigned int uint32
符号なし32ビット整数(unsigned int)
Definition: kernel.h:15
#define AM335X_TIMER1MS_IRQ
1[ms]タイマーの割り込み番号
Definition: clock.h:72
uint32 tldr
タイマー読み込み値
Definition: clock.h:44
uint32 tclr
オプション機能
Definition: clock.h:40
AM335X SOCのタイマー(1[ms])
Definition: clock.h:23
uint32 tiocp_cfg
OCPインターフェースレジスタ
Definition: clock.h:30