📄 pit.h
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * Copyright (C) 2001-2004 by Industrial Technology Institute, * Miyagi Prefectural Government, JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: pit.h,v 1.2 2004/10/07 17:10:56 honda Exp $ *//* * タイマドライバ * MPC860T柒垄の件袋充哈みタイマPITを蝗脱 */#ifndef _PIT_H_#define _PIT_H_#include <mpc860_sil.h>/* * SIUの柒婶充哈みレベル∈ビットパタ〖ン∷ */#define SIU_INT_PIT LEVEL_TO_BIT_PATTERN(INTLVL_PIT)/* * タイマ猛の柒婶山附の房 */typedef UH CLOCK;/* * タイマに丁惦されるクロック件侨眶[kHz] * TIMER_CLOCK=SYSTEM_CLOCK[MHz] / 4 */#define TIMER_CLOCK (SYSTEM_CLOCK * 1000 / 4)/* * タイマ猛の柒婶山附とミリ擅ˇμ擅帽疤との恃垂 */#define TO_CLOCK(nume, deno) (TIMER_CLOCK * (nume) / (deno))#define TO_USEC(clock) ((clock) * 1000 / TIMER_CLOCK)#define CLOCK_PER_TICK ((CLOCK) (TO_CLOCK(TIC_NUME, TIC_DENO) - 1))/* * 肋年できる呵络のタイマ件袋∈帽疤は柒婶山附∷ */#define MAX_CLOCK ((CLOCK) 0xffffu)/* * タイマの附哼猛を充哈み券栏涟の猛とみなすかの冉们 */#define GET_TOLERANCE 100 /* 借妄觅れの斧姥り猛∈帽疤は柒婶山附∷*/#define BEFORE_IREQ(clock) \ ((clock) >= TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE)/* * コントロ〖ルレジスタの年盗 *//* 件袋充哈みステ〖タスおよび扩告レジスタ */#define PISCR (VH *)(IMMR_BASE + 0x240)#define PISCRK (VW *)(IMMR_BASE + 0x340) /* キ〖レジスタ */#define PISCR_PIRQ 0xff00 /* 件袋充哈み妥滇レベルビット */ #define PISCR_PS BIT8_16 /* 件袋充哈みステ〖タス */ #define PISCR_PIE BIT13_16 /* 件袋充哈みイネ〖ブル */#define PISCR_PITF BIT14_16 /* PITフリ〖ズˇイネ〖ブル */#define PISCR_PTE BIT15_16 /* 件袋タイマˇイネ〖ブル *//* PITカウントレジスタ∈惧疤2バイトのみ∷ */#define PITC (VH *)(IMMR_BASE + 0x244)#define PITCK (VW *)(IMMR_BASE + 0x344) /* キ〖レジスタ *//* PITレジスタ∈惧疤2バイトのみ∷ */#define PITR (VH *)(IMMR_BASE + 0x248)#ifndef _MACRO_ONLY/* * 柒婶レジスタ瘦割のロックとアンロック *//* PISCRロック */Inline voidlock_piscr(){ /* 猛はUNLOCK_KEY笆嘲であれば紊い */ mpc860_wrw_mem(PISCRK, 0);}/* PISCRアンロック */Inline voidunlock_piscr(){ mpc860_wrw_mem(PISCRK, UNLOCK_KEY);}/* PITCロック */Inline voidlock_pitc(){ /* 猛はUNLOCK_KEY笆嘲であれば紊い */ mpc860_wrw_mem(PITCK, 0);}/* PITCアンロック */Inline voidunlock_pitc(){ mpc860_wrw_mem(PITCK, UNLOCK_KEY);}/* * タイマスタ〖ト */Inline voidpit_start(){ unlock_piscr(); /* PISCRアンロック */ mpc860_orh_mem(PISCR, PISCR_PTE); lock_piscr(); /* PISCRロック */}/* * タイマ办箕匿贿 */Inline voidpit_stop(){ unlock_piscr(); /* PISCRアンロック */ mpc860_andh_mem(PISCR, ~PISCR_PTE); lock_piscr(); /* PISCRロック */}/* * タイマ充哈み妥滇のクリア * PISCRレジスタのPSビットに1を今き哈む */Inline voidpit_int_clear(){ /* * SILを蝗脱したときのログ怠墙をオフに */#ifdef SIL_DEBUG BOOL sil_debug_tmp = sil_debug_on; sil_debug_on = FALSE;#endif /* SIL_DEBUG */ unlock_piscr(); /* PISCRアンロック */ mpc860_orh_mem(PISCR, PISCR_PS); lock_piscr(); /* PISCRロック */ /* * SILを蝗脱したときのログ怠墙を牲傅 */#ifdef SIL_DEBUG sil_debug_on = sil_debug_tmp;#endif /* SIL_DEBUG */}/* * タイマの弹瓢借妄 * * タイマを介袋步し·件袋弄なタイマ充哈み妥滇を券栏させるˉ */Inline voidpit_initialize(){ VH piscr; VW sccr; /* タイマ惧嘎猛=恃眶の呵络猛なのでチェックは臼维 */ pit_stop(); /* タイマ匿贿 */ /* * タイマ簇息の肋年 */ /* クロックソ〖ス联买、尸件孺肋年 */ unlock_sccr(); /* SCCRアンロック */ sccr = mpc860_rew_mem(SCCR); sccr = (sccr & ~SCCR_RTDIV) /* リアルタイムクロック尸件:4 */ | SCCR_RTSEL; /* クロックソ〖ス¨EXTCLK */ mpc860_wrw_mem(SCCR, sccr); lock_sccr(); /* SCCRロック */ /* カウンタ誊筛猛肋年 */ unlock_pitc(); /* PITCアンロック */ mpc860_wrh_mem(PITC, CLOCK_PER_TICK); lock_pitc(); /* PITCロック */ unlock_piscr(); /* PISCRアンロック */ piscr = mpc860_reh_mem(PISCR); piscr = (piscr & ~PISCR_PIRQ) | (SIU_INT_PIT << 8) /* 充哈みレベル肋年 */ | PISCR_PIE; /* PIT充哈み钓材 */ mpc860_wrh_mem(PISCR, piscr); lock_piscr(); /* PISCRロック */}/* * タイマの匿贿借妄 * * タイマの瓢侯を匿贿させるˉ */Inline voidpit_terminate(){ pit_stop(); /* タイマを匿贿 */ pit_int_clear(); /* 充り哈み妥滇をクリア */ unlock_piscr(); /* PISCRアンロック */ mpc860_andh_mem(PISCR, ~PISCR_PIE); /* タイマ充哈みを敦贿 */ lock_piscr(); /* PISCRロック */ /* 塑碰はタイマへのクロック丁惦を匿贿する */}/* * タイマの附哼猛の粕叫し * 充哈み敦贿惰粗面で钙び叫すこと */Inline CLOCKpit_get_current(){ CLOCK pitr; pitr = mpc860_reh_mem(PITR); return(CLOCK_PER_TICK - pitr);}/* * タイマ充哈み妥滇のチェック */Inline BOOLpit_fetch_interrupt(){ VH piscr; /* 粕み叫しなので、アンロックしなくて紊い */ piscr = mpc860_reh_mem(PISCR); return(piscr & PISCR_PS);}#endif /* _MACRO_ONLY */#endif /* _PIT_H_ *//* end of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -