⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sh1sci2.c

📁 符合日本著名的ITRON规范的开源操作系统。 TOPPERS/JSP内核就是TOPPERS工程按μITRON4.0研发的第一个 软件
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  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 *  Copyright (C) 2003-2004 by CHUO ELECTRIC WORKS Co.,LTD. *  *  惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation  *  によって给山されている GNU General Public License の Version 2 に淡 *  揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア *  を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 *      脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 *      荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 *      の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 *      脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ *      とˉ *    (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 *        侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに *        鼠桂することˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ *  *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お *  よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も *  崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 *  儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ *  *//* *   SH1柒垄シリアルコミュニケ〖ションインタフェ〖スSCI脱 词白ドライバ *   (臭)面丙澜侯疥澜μITRON烹很SH1CPUボ〖ド脱 *     *   SCI0(RS232C)/SCI1(RS485)サポ〖ト * *    sh1sci.{c,h}とhw_serial.hの尸充の答洁 *      ˇsh1sci.{c,h}¨シリアルデバイスに巴赂する婶尸のみ淡揭 *      ˇhw_serial.h¨充哈みコントロ〖ラ巴赂 *       *      ˇクロック件侨眶巴赂について *        ˇデバイス巴赂のパラメ〖タはsh1sci.c柒で脱罢する。 *        ˇ络傅のクロック件侨眶はコンパイルオプションとして涂える */#include <s_services.h>#include <sh1sci2.h>/* *  コントロ〖ルレジスタのアドレス ∈すべて1バイトサイズ∷ */	/*  チャネル0  */#define SCI_SMR0 (VB *)0x5fffec0	/*  シリアルモ〖ドレジスタ */#define SCI_BRR0 (VB *)0x5fffec1	/*  ビットレ〖トレジスタ  */#define SCI_SCR0 (VB *)0x5fffec2	/*  シリアルコントロ〖ルレジスタ */#define SCI_TDR0 (VB *)0x5fffec3	/*  トランスミットデ〖タレジスタ */#define SCI_SSR0 (VB *)0x5fffec4	/*  シリアルステ〖タスレジスタ */#define SCI_RDR0 (VB *)0x5fffec5	/*  レシ〖ブデ〖タレジスタ */	/*  チャネル1  */#define SCI_SMR1 (VB *)0x5fffec8	/*  シリアルモ〖ドレジスタ */#define SCI_BRR1 (VB *)0x5fffec9	/*  ビットレ〖トレジスタ  */#define SCI_SCR1 (VB *)0x5fffeca	/*  シリアルコントロ〖ルレジスタ */#define SCI_TDR1 (VB *)0x5fffecb	/*  トランスミットデ〖タレジスタ */#define SCI_SSR1 (VB *)0x5fffecc	/*  シリアルステ〖タスレジスタ */#define SCI_RDR1 (VB *)0x5fffecd	/*  レシ〖ブデ〖タレジスタ *//* *  コントロ〖ルレジスタの肋年猛 *//*  シリアルステ〖タスレジスタSSRの称ビット  */#define SSR_TDRE	0x80u	/* トランスミットデ〖タレジスタエンプティ */#define SSR_RDRF	0x40u	/* レシ〖ブデ〖タレジスタフル 		*/#define SSR_ORER	0x20u	/* オ〖バ〖ランエラ〖 			*/#define SSR_FER		0x10u	/* フレ〖ミングエラ〖 			*/#define SSR_PER		0x08u	/* パリティエラ〖 			*/#define SSR_TEND	0x04u	/* トランスミットエンド 		*/#define SSR_MPB		0x02u	/* マルチプロセッサビット 		*/#define SSR_MPBT	0x01u	/* マルチプロセッサビットトランスファ 	*//*  シリアルコントロ〖ルレジスタSCRの称ビット  */#define SCR_TIE		0x80u	/* トランスミットインタラプトイネ〖ブル */#define SCR_RIE		0x40u	/* レシ〖ブインタラプトイネ〖ブル 	*/#define SCR_TE		0x20u	/* トランスミットイネ〖ブル 		*/#define SCR_RE		0x10u	/* レシ〖ブイネ〖ブル 			*/#define SCR_MPIE	0x08u	/* マルチプロセッサインタラプトイネ〖ブル */				/* トランスミットエンドインタラプト	*/#define SCR_TEIE	0x04u	/* イネ〖ブル 				*/#define SCR_CKE_MASK	0x03u	/* クロックソ〖ス联买脱マスク		*/#define SCR_CKE		0x00u	/* クロックイネ〖ブル			*/				/*   拇殊票袋及のとき  			*/				/*   	柒婶クロック蝗脱  		*/				/*   	叫蜗なし  			*//*  シリアルモ〖ドジスタSMRの称ビット  */				/* コミュニケ〖ションモ〖ド 	*/#define SMR_CA_CLOCK	0x80u	/* 	クロック票袋及 		*/#define SMR_CA_ASYNC	0x00u	/* 	拇殊票袋及奶 		*/	/*  拇殊票袋及奶慨数¨Asynchronous Communication method */				/* キャラクタレングス 		*/#define SMR_CHR8	0x00u	/* 	8ビット 		*/#define SMR_CHR7	0x40u	/* 	7ビット 		*/				/* パリティイネ〖ブル 		*/#define SMR_PE		0x20u	/* 	パリティあり 		*/#define SMR_PE_NON	0x00u	/* 	パリティなし 		*/#define SMR_OE_ODD	0x10u	/* パリティモ〖ド∈瘩眶パリティ∷*/#define SMR_STOP2	0x08u	/* ストップビットレングス¨2 	*/#define SMR_STOP1	0x00u	/* ストップビットレングス¨1 	*/#define SMR_MP		0x04u	/* マルチプロセッサモ〖ド 	*//* *  シリアルコントロ〖ルレジスタのベ〖スからのオフセット */#define SMR (VB *)0x0	/*  シリアルモ〖ドレジスタ */#define BRR (VB *)0x1	/*  ビットレ〖トレジスタ  */#define SCR (VB *)0x2	/*  シリアルコントロ〖ルレジスタ */#define TDR (VB *)0x3	/*  トランスミットデ〖タレジスタ */#define SSR (VB *)0x4	/*  シリアルステ〖タスレジスタ */#define RDR (VB *)0x5	/*  レシ〖ブデ〖タレジスタ *//* *  クロック件侨眶巴赂 *  クロック件侨眶は19.6608MHz *//* *  チャネル0:尸件孺とビットレ〖トの肋年 */#if CONFIG_BAUD == 9600/* *  クロック	 19.6608MHz *  ビットレ〖ト 9600bps * *   n=0(尸件しないのでそのまま) *   N=63で疙汗0% *  よって、 *   シリアルモ〖ドレジスタSMRのクロックセレクトビットCKS=00 *   ビットレ〖トレジスタBRR=63 */#define SMR_CKS_0 	0x0u	/*  尸件孺  		*/#define SCI_BRR_0 	63u	/*  ビットレ〖ト  	*//* *  ボ〖レ〖ト肋年稿、クロックが奥年するまでの略ち箕粗 *   ∈呵介の1ビット尸∷  *  BPS=9600bpsの眷圭 *   t = 1 / BPS = 104,167 = 105,000[nsec] */#define SH1SCI_DELAY0 	105000#elif CONFIG_BAUD == 19200/* *  クロック	 19.6608MHz *  ビットレ〖ト 19200bps * *   n=0(尸件しないのでそのまま) *   N=31で疙汗0% *  よって、 *   シリアルモ〖ドレジスタSMRのクロックセレクトビットCKS=00 *   ビットレ〖トレジスタBRR=31 */#define SMR_CKS_0 	0x0u	/*  尸件孺  		*/#define SCI_BRR_0 	31u	/*  ビットレ〖ト  	*//* *  ボ〖レ〖ト肋年稿、クロックが奥年するまでの略ち箕粗 *   ∈呵介の1ビット尸∷  *  BPS=19200bpsの眷圭 *   t = 1 / BPS = 52,083 = 53,000[nsec] */#define SH1SCI_DELAY0 	53000#elif CONFIG_BAUD == 38400/* *  クロック	 19.6608MHz *  ビットレ〖ト 38400bps * *   n=0(尸件しないのでそのまま) *   N=15で疙汗0% *  よって、 *   シリアルモ〖ドレジスタSMRのクロックセレクトビットCKS=00 *   ビットレ〖トレジスタBRR=15 */#define SMR_CKS_0 	0x0u	/*  尸件孺  		*/#define SCI_BRR_0 	15u	/*  ビットレ〖ト  	*//* *  ボ〖レ〖ト肋年稿、クロックが奥年するまでの略ち箕粗 *   ∈呵介の1ビット尸∷  *  BPS=38400bpsの眷圭 *   t = 1 / BPS = 26,042 = 27,000[nsec] */#define SH1SCI_DELAY0 	27000#else	/*  CONFIG_BAUD  */#error chanel0 is unsupported baud rate.#endif 	/*  CONFIG_BAUD  *//* *  チャネル1:尸件孺とビットレ〖トの肋年 */#if CONFIG_BAUD_2 == 9600/* *  クロック	 19.6608MHz *  ビットレ〖ト 9600bps * *   n=0(尸件しないのでそのまま) *   N=63で疙汗0% *  よって、 *   シリアルモ〖ドレジスタSMRのクロックセレクトビットCKS=00 *   ビットレ〖トレジスタBRR=63 */#define SMR_CKS_1 	0x0u	/*  尸件孺  		*/#define SCI_BRR_1 	63u	/*  ビットレ〖ト  	*//* *  ボ〖レ〖ト肋年稿、クロックが奥年するまでの略ち箕粗 *   ∈呵介の1ビット尸∷  *  BPS=9600bpsの眷圭 *   t = 1 / BPS = 104,167 = 105,000[nsec] */#define SH1SCI_DELAY1 	105000#elif CONFIG_BAUD_2 == 19200/* *  クロック	 19.6608MHz *  ビットレ〖ト 19200bps * *   n=0(尸件しないのでそのまま) *   N=31で疙汗0% *  よって、 *   シリアルモ〖ドレジスタSMRのクロックセレクトビットCKS=00 *   ビットレ〖トレジスタBRR=31 */#define SMR_CKS_1 	0x0u	/*  尸件孺  		*/#define SCI_BRR_1 	31u	/*  ビットレ〖ト  	*//* *  ボ〖レ〖ト肋年稿、クロックが奥年するまでの略ち箕粗 *   ∈呵介の1ビット尸∷  *  BPS=19200bpsの眷圭 *   t = 1 / BPS = 52,083 = 53,000[nsec] */#define SH1SCI_DELAY1 	53000#elif CONFIG_BAUD_2 == 38400/* *  クロック	 19.6608MHz *  ビットレ〖ト 38400bps * *   n=0(尸件しないのでそのまま) *   N=15で疙汗0% *  よって、 *   シリアルモ〖ドレジスタSMRのクロックセレクトビットCKS=00 *   ビットレ〖トレジスタBRR=15 */#define SMR_CKS_1 	0x0u	/*  尸件孺  		*/#define SCI_BRR_1 	15u	/*  ビットレ〖ト  	*//* *  ボ〖レ〖ト肋年稿、クロックが奥年するまでの略ち箕粗 *   ∈呵介の1ビット尸∷  *  BPS=38400bpsの眷圭 *   t = 1 / BPS = 26,042 = 27,000[nsec] */#define SH1SCI_DELAY1 	27000#else	/*  CONFIG_BAUD  */#error chanel1 is unsupported baud rate.#endif 	/*  CONFIG_BAUD  *//* *  シリアルポ〖トの介袋步ブロック */static const SIOPINIB siopinib_table[TNUM_PORT] = {#if TNUM_PORT == 1	{		(UW)SCI_SMR0,		SCI_BRR_0,		IPRD,		0,		(SMR_CA_ASYNC | SMR_CHR8 | SMR_PE_NON | SMR_STOP1 | SMR_CKS_0),		SH1SCI_DELAY0,		RS232C_INTERFACE,	},#elif TNUM_PORT == 2	/* of #if TNUM_PORT == 1 */	{		(UW)SCI_SMR0,		SCI_BRR_0,		IPRD,		0,		(SMR_CA_ASYNC | SMR_CHR8 | SMR_PE_NON | SMR_STOP1 | SMR_CKS_0),		SH1SCI_DELAY0,		RS232C_INTERFACE,	},	{		(UW)SCI_SMR1,		SCI_BRR_1,		IPRE,		12,		(SMR_CA_ASYNC | SMR_CHR8 | SMR_PE_NON | SMR_STOP1 | SMR_CKS_1),		SH1SCI_DELAY1,		RS485_INTERFACE,	},#endif	/* of #if TNUM_PORT == 1 */};/* *  シリアルI/Oポ〖ト瓷妄ブロックのエリア *    ID = 1 をSCI0に滦炳させているˉ */static SIOPCB	siopcb_table[TNUM_SIOP];/* *  シリアルI/Oポ〖トIDから瓷妄ブロックを艰り叫すためのマクロ */#define INDEX_SIOP(siopid)	((UINT)((siopid) - 1))#define get_siopcb(siopid)	(&(siopcb_table[INDEX_SIOP(siopid)]))/* *  矢机を减慨できるか々 */Inline BOOLsh1sci_getready(SIOPCB *siopcb){	VB ssr = sil_reb_mem(siopcb->inib->base + SSR);	return(ssr & SSR_RDRF);}/* *  矢机を流慨できるか々 */Inline BOOLsh1sci_putready(SIOPCB *siopcb){	VB ssr = sil_reb_mem(siopcb->inib->base + SSR);	return(ssr & SSR_TDRE);}/* *  减慨した矢机の艰叫し */Inline charsh1sci_getchar(SIOPCB *siopcb){	char data;	data = sil_reb_mem(siopcb->inib->base + RDR);		/*  レシ〖ブデ〖タレジスタフルˇフラグのクリア  */	sh1_anb_reg(siopcb->inib->base + SSR, (VB)~SSR_RDRF);	return data;}/* *  流慨する矢机の今哈み */Inline voidsh1sci_putchar(SIOPCB *siopcb, char c){	if (siopcb->inib->rs485if) {		if (!(sil_reh_mem(PB_DR) & PB_TXE1)) {			sh1_orh_reg(PB_DR, PB_TXE1);	/* TXENA ON 		*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -