📄 hw_serial.c
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * Copyright (C) 2004 by SEIKO EPSON Corp, JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ * *//* * タ〖ゲット巴赂シリアルI/Oモジュ〖ル */#include "jsp_kernel.h"#include "hw_serial.h"/* * シリアルポ〖トの介袋步ブロック */const SIOPINIB siopinib_table[TNUM_PORT] = { { 0, S1C33_INHNO_SERIAL0ERR, S1C33_INHNO_SERIAL0RX, S1C33_INHNO_SERIAL0TX, },#if TNUM_PORT == 2 { 1, S1C33_INHN1_SERIAL0ERR, S1C33_INHN1_SERIAL0RX, S1C33_INHN1_SERIAL0TX, },#endif /* of #if TNUM_PORT == 2 */};/* * シリアルポ〖トの扩告ブロック */SIOPCB siopcb_table[TNUM_PORT];/* * SIO ID から瓷妄ブロックへの恃垂マクロ */#define get_siopinib(sioid) (&(siopinib_table[INDEX_SIO(sioid)]))#define get_siopcb(sioid) (&(siopcb_table[INDEX_SIO(sioid)]))/* * 减慨充り哈みサ〖ビスル〖チン. */voidsio_in_service(ID sioid){ SIOPCB *pcb; sio_clr_errflag(INDEX_SIO(sioid)); pcb = get_siopcb(sioid); if (pcb->rx_cbrflag){ /* 减慨材墙コ〖ルバックル〖チンを钙叫す。*/ sio_ierdy_rcv(pcb->exinf); }}/* * 流慨窗位充り哈みサ〖ビスル〖チン */voidsio_out_service(ID sioid){ SIOPCB *pcb; pcb = get_siopcb(sioid); if (pcb->tx_cbrflag){ /* 流慨材墙コ〖ルバックル〖チンを钙叫す。*/ sio_ierdy_snd(pcb->exinf); }}#ifdef SIO_ERR_HANDLER/* * 减慨エラ〖充り哈みサ〖ビスル〖チン */voidsio_err_service(ID sioid){ SIOPCB *pcb; UB status; /* エラ〖フラグをクリア */ sio_clr_errflag(INDEX_SIO(sioid)); /* ポ〖トを浩刨介袋步する */ sio_opn_por(sioid, (VP_INT)NULL);}#endif /* of #ifdef SIO_ERR_HANDLER *//* * シリアルポ〖ト扩告テ〖ブル介袋步 */voidsio_initialize (void){ int iLoop; /* * SIO 扩告ブロックの介袋步 */ for (iLoop = 0 ; iLoop < TNUM_PORT ; iLoop++ ) { siopcb_table[iLoop].inib = &siopinib_table[iLoop]; siopcb_table[iLoop].exinf = (VP_INT)NULL; siopcb_table[iLoop].openflag = FALSE; siopcb_table[iLoop].tx_cbrflag = FALSE; siopcb_table[iLoop].rx_cbrflag = FALSE; }}/* * コ〖ルバックを钓材する */voidsio_ena_cbr(SIOPCB *siopcb, UINT cbrtn){ UB ch_no, sio_ctl; ch_no = siopcb->inib->ch_no; sio_ctl = ((s1c33Serial_t *)S1C33_SERIAL_BASE)->stChannel01[ch_no].bControl; switch (cbrtn){ case SIO_ERDY_SND: siopcb->tx_cbrflag = TRUE; break; case SIO_ERDY_RCV: siopcb->rx_cbrflag = TRUE; break; } return;}/* * コ〖ルバックを敦贿する */voidsio_dis_cbr(SIOPCB *siopcb, UINT cbrtn){ UB ch_no, sio_ctl; ch_no = siopcb->inib->ch_no; sio_ctl = ((s1c33Serial_t *)S1C33_SERIAL_BASE)->stChannel01[ch_no].bControl; switch (cbrtn){ case SIO_ERDY_SND: siopcb->tx_cbrflag = FALSE; break; case SIO_ERDY_RCV: siopcb->rx_cbrflag = FALSE; break; } /* * 流慨怠墙铜跟ビットを肋年する */ ((s1c33Serial_t *)S1C33_SERIAL_BASE)->stChannel01[ch_no].bControl = sio_ctl; return;}/* * SIO 充り哈み */voidsio_in_handler (void){ sio_clr_factor(SIO_INT_RCV); sio_in_service(1);}voidsio_out_handler (void){ sio_clr_factor(SIO_INT_SND); sio_out_service(1); }#ifdef SIO_ERR_HANDLERvoidsio_err_handler (void){ sio_clr_factor(SIO_INT_ERR); sio_err_service(1); }#endif /* of #ifdef SIO_ERR_HANDLER */#if TNUM_PORT >= 2voidsio_in2_handler (void){ sio_clr_factor(SIO_INT_RCV << 3); sio_in_handler(2); }voidsio_out2_handler (void){ sio_clr_factor(SIO_INT_SND << 3); sio_out_handler(2); }#ifdef SIO_ERR_HANDLERvoidsio_err2_handler (void){ sio_clr_factor(SIO_INT_ERR << 3) sio_err_handler(2); }#endif /* of #ifdef SIO_ERR_HANDLER */#endif /* of #if TNUM_PORT >= 2 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -