📄 hw_serial.h
字号:
/* * 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 * * 惧淡螟侯涪荚は·Free Software Foundation によって给山されている * GNU General Public License の Version 2 に淡揭されている掘凤か·笆 * 布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ * アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ * ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 * に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· * この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 * み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ * (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する * ことˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚を倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· * 塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ * ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい * かなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: hw_serial.h,v 1.4 2002/04/10 11:08:33 hiro Exp $ *//* * タ〖ゲット巴赂シリアルI/Oモジュ〖ル∈DVE68K/40脱∷ */#ifndef _HW_SERIAL_H_#define _HW_SERIAL_H_#include "dve68k.h"#include "sys_config.h"/* * シリアルポ〖トのハ〖ドウェア巴赂攫鼠の年盗 */typedef struct hardware_serial_port_descripter { INT *initflag; /* 介袋步貉フラグへのポインタ */ IOREG *data; /* デ〖タレジスタの戎孟 */ IOREG *cntrl; /* コントロ〖ルレジスタの戎孟 */ BOOL sendflag; /* 流慨充哈みイネ〖ブルフラグ */ byte cr3_def; /* デフォ〖ルトの肋年猛 (CR3) */ byte cr4_def; /* デフォ〖ルトの肋年猛 (CR4) */ byte cr5_def; /* デフォ〖ルトの肋年猛 (CR5) */ byte brg2_def; /* デフォ〖ルトの肋年猛 (ボ〖レ〖ト布疤) */ byte brg1_def; /* デフォ〖ルトの肋年猛 (ボ〖レ〖ト惧疤) */} HWPORT;/* * MPSCコントロ〖ルレジスタの肋年猛 */#define MPSC_RESET 0x18 /* ポ〖トリセットコマンド */#define MPSC_EOI 0x38 /* EOI (End of Interrupt) */#define CR3_DEF 0xc1 /* デ〖タ 8bit, 减慨イネ〖ブル */#define CR4_DEF 0x44 /* ストップビット 1bit, パリティなし */#define CR5_DEF 0xea /* デ〖タ 8bit, 流慨イネ〖ブル */#define BRG2_DEF 0x1e /* 9600bps (布疤) */#define BRG1_DEF 0x00 /* 9600bps (惧疤) */#define CR10_DEF 0x00 /* NRZ */#define CR14_DEF 0x07 /* ボ〖レ〖トジェネレ〖タイネ〖ブル */#define CR15_DEF 0x56 /* ボ〖レ〖トジェネレ〖タ蝗脱 */#define CR1_ALL 0x12 /* 链充哈みを钓材 */#define CR1_RECV 0x10 /* 减慨充哈みのみ钓材 */#define CR1_DOWN 0x00 /* 链充哈みを敦贿 *//* * シリアルI/Oの充哈みハンドラのベクタ戎规 */#define INHNO_SERIAL GP0_VEC/* * 你レベルポ〖ト攫鼠瓷妄ブロックの介袋猛 */#define NUM_PORT 2 /* サポ〖トするシリアルポ〖トの眶 */static INT initflag[2] = { 0, 0 } ; /* 介袋步貉フラグ */#define HWPORT1 { &initflag[0], MPSC_DATAA, MPSC_CNTRLA, 0, \ CR3_DEF, CR4_DEF, CR5_DEF, BRG2_DEF, BRG1_DEF }#define HWPORT2 { &initflag[1], MPSC_DATAB, MPSC_CNTRLB, 0, \ CR3_DEF, CR4_DEF, CR5_DEF, BRG2_DEF, BRG1_DEF }/* * シリアルI/Oポ〖トの介袋步 */Inline BOOLhw_port_initialize(HWPORT *p){ /* * MPSC の肋年 */ io_write(p->cntrl, MPSC_RESET); if (initflag[0] <= 0 && initflag[1] <= 0) { mpsc_write(MPSC_CNTRLA, MPSC_CR2, 0x18); mpsc_write(MPSC_CNTRLB, MPSC_CR2, 0x00); } mpsc_write(p->cntrl, MPSC_CR1, CR1_RECV); p->sendflag = 0; mpsc_write(p->cntrl, MPSC_CR4, p->cr4_def); mpsc_write_brg(p->cntrl, MPSC_CR12, 0x01, p->brg2_def, p->brg1_def); mpsc_write_brg(p->cntrl, MPSC_CR12, 0x02, p->brg2_def, p->brg1_def); mpsc_write(p->cntrl, MPSC_CR15, CR15_DEF); mpsc_write(p->cntrl, MPSC_CR14, CR14_DEF); mpsc_write(p->cntrl, MPSC_CR10, CR10_DEF); mpsc_write(p->cntrl, MPSC_CR3, p->cr3_def); mpsc_write(p->cntrl, MPSC_CR5, p->cr5_def); /* * 充哈み簇息の肋年 */ if (initflag[0] <= 0 && initflag[1] <= 0) { dga_set_ilv(DGA_CSR25, GP0IL_BIT, IRQ_LEVEL6); /* 充哈みレベル肋年 */ *DGA_CSR21 |= GP0_BIT; /* 充哈みマスク豺近 */ } *(p->initflag) = 1; /* 介袋步フラグ肋年 */ return(FALSE);}/* * シリアルI/Oポ〖トの姜位 */Inline voidhw_port_terminate(HWPORT *p){ *(p->initflag) = -1; /* 介袋步フラグ肋年 */ /* * MPSC の充哈み簇犯の肋年 */ mpsc_write(p->cntrl, MPSC_CR1, CR1_DOWN); p->sendflag = 0; /* * 充哈み簇息の肋年 */ if (initflag[0] <= 0 && initflag[1] <= 0) { *DGA_CSR21 &= ~GP0_BIT; /* 充哈みマスク肋年 */ }}/* * シリアルポ〖ト充哈みサ〖ビスル〖チン∈涟数徊救∷ */extern void serial_handler_in(ID portid);extern void serial_handler_out(ID portid);/* * シリアルI/Oポ〖トの充哈みハンドラ */Inline voidhw_serial_handler(){ if (initflag[0] > 0) { serial_handler_in(1); serial_handler_out(1); } if (initflag[1] > 0) { serial_handler_in(2); serial_handler_out(2); } mpsc_write(MPSC_CNTRLA, MPSC_CR0, MPSC_EOI);}/* * 矢机を减慨したか々 */Inline BOOLhw_port_getready(HWPORT *p){ return((mpsc_read(p->cntrl, MPSC_SR0) & 0x01) != 0);}/* * 矢机を流慨できるか々 */Inline BOOLhw_port_putready(HWPORT *p){ return((mpsc_read(p->cntrl, MPSC_SR0) & 0x04) != 0);}/* * 减慨した矢机の艰り叫し */Inline bytehw_port_getchar(HWPORT *p){ return(io_read(p->data));}/* * 流慨する矢机の今き哈み */Inline voidhw_port_putchar(HWPORT *p, byte c){ io_write(p->data, c);}/* * 流慨扩告簇眶 */Inline voidhw_port_sendstart(HWPORT *p){ if (!(p->sendflag)) { mpsc_write(p->cntrl, MPSC_CR1, CR1_ALL); p->sendflag = 1; }}Inline voidhw_port_sendstop(HWPORT *p){ if (p->sendflag) { mpsc_write(p->cntrl, MPSC_CR1, CR1_RECV); p->sendflag = 0; }}#endif /* _HW_SERIAL_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -