XINU
Functions | Variables
clkinit.c File Reference
#include <xinu.h>
Include dependency graph for clkinit.c:

Go to the source code of this file.

Functions

void clkinit (void)
 

Variables

uint32 clktime
 起動してからの現在の時間[s] More...
 
uint32 count1000
 最後のクロックチックからのミリ秒 More...
 
uint32 preempt
 プリエンプションカウンタ(クロックが一刻みする度に、クロック割り込みハンドラが値を繰り下げる) More...
 
qid16 sleepq
 スリープ中のプロセスキュー More...
 

Function Documentation

◆ clkinit()

void clkinit ( void  )

Definition at line 15 of file clkinit.c.

References AM335X_TIMER1MS_ADDR, AM335X_TIMER1MS_CLKCTRL_ADDR, AM335X_TIMER1MS_CLKCTRL_EN, AM335X_TIMER1MS_IRQ, AM335X_TIMER1MS_TCLR_AR, AM335X_TIMER1MS_TCLR_ST, AM335X_TIMER1MS_TIER_OVF_IT_ENA, AM335X_TIMER1MS_TIOCP_CFG_SOFTRESET, AM335X_TIMER1MS_TISTAT_RESETDONE, clkhandler(), clktime, count1000, newqueue(), preempt, QUANTUM, set_evec(), sleepq, am335x_timer1ms::tclr, am335x_timer1ms::tier, am335x_timer1ms::tiocp_cfg, am335x_timer1ms::tistat, am335x_timer1ms::tldr, am335x_timer1ms::tnir, am335x_timer1ms::tpir, and am335x_timer1ms::ttgr.

Referenced by sysinit().

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
uint32 tnir
ネガティブインクリメントレジスタ
Definition: clock.h:60
#define QUANTUM
ミリ秒単位のタイムスライス
Definition: kernel.h:93
qid16 sleepq
スリープ中のプロセスキュー
Definition: clkinit.c:7
#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
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ clktime

uint32 clktime

起動してからの現在の時間[s]

Definition at line 5 of file clkinit.c.

Referenced by clkhandler(), clkinit(), getutime(), and xsh_uptime().

◆ count1000

uint32 count1000

最後のクロックチックからのミリ秒

Definition at line 6 of file clkinit.c.

Referenced by clkhandler(), and clkinit().

◆ preempt

uint32 preempt

プリエンプションカウンタ(クロックが一刻みする度に、クロック割り込みハンドラが値を繰り下げる)

プリエンプションカウンタ

Definition at line 9 of file clkinit.c.

Referenced by clkhandler(), clkinit(), and resched().

◆ sleepq

qid16 sleepq

スリープ中のプロセスキュー

Definition at line 7 of file clkinit.c.

Referenced by clkhandler(), clkinit(), recvtime(), sleepms(), and wakeup().