📄 sio.c
字号:
/************************************************************************
撪 梕 : 僔儕傾儖捠怣娭學
旛 峫 : MCU70婎斅梡丄(RS232C僐儊儞僩偼JIS昞婰)
----------------------------------------------------------------
俠俹倀 : H8S/2144(HD64F2144FA20)
婎 斅 : PTA MAIN BD夵
奐敪尵岅 : YCH8,YAH8(僀僄儘乕僜僼僩)
僞 僽 : 4
----------------------------------------------------------------
惢 嶌 :乮桳乯僄儖丒傾儞僪丒僄僼
************************************************************************/
/*----- 夵 斉 棜 楌 --------------------------------------------------
No | 擭 寧 擔 | 巵柤 | 撪 梕
01 | 1999-09-02 | 悰尨 | 弶斉姰惉
02 | 2001-02-20 | 悰尨 | MUU70梡丂尦僋儘僢僋18.432MHz偵曄峏
03 | 2001-03-06 | 悰尨 | MUU70梡丂億乕僩妱晅曄峏
04 | 2001-03-21 | 悰尨 | 娭悢擖懼(幚峴僼傽僀儖僒僀僘弅彫)
05 | 2001-03-30 | 悰尨 | 斈梡斉
-----------------------------------------------------------------------*/
/********************************************
忦審僐儞僷僀儖
*********************************************/
//#define CLK18 // 19.6608MHz偺帪僐儊儞僩偵偡傞
/********************************************
僿僢僟
*********************************************/
#include "H8S2144.h" // H8S/2144 儗僕僗僞掕媊
#include "global.h" // 嫟捠掕媊
#include "extern.h" // 奜晹僾儘僩僞僀僾愰尵
#include "data.h"
#define NUL 0x00 // 僰儖丄嬻
#define TXBUF_SIZE 0x400 // 憲怣僶僢僼傽僒僀僘
#define TXBUF_MASK TXBUF_SIZE-1 // 憲怣僶僢僼傽儅僗僋(儕儞僌僶僢僼傽僄儞僪張棟梡)
#define RXBUF_SIZE 0x200 // 庴怣僶僢僼傽僒僀僘
#define RXBUF_MASK RXBUF_SIZE-1 // 庴怣僶僢僼傽儅僗僋(儕儞僌僶僢僼傽僄儞僪張棟梡)
/********************************************
掕媊
*********************************************/
#ifdef CLK18
// 冇=18.432MHZ帪偺價僢僩儗乕僩
#define SCI_BRR_1152 4 // 115200bps(n=0)
#define SCI_BRR_576 9 // 57600bps(n=0)
#define SCI_BRR_384 14 // 38400bps(n=0)
#define SCI_BRR_192 29 // 19200bps(n=0)
#define SCI_BRR_96 59 // 9600bps(n=0)
#define SCI_BRR_48 119 // 4800bps(n=0)
#define SCI_BRR_24 239 // 2400bps(n=0)
#define SCI_BRR_12 119 // 1200bps(n=1)
#define SCI_BRR_6 239 // 600bps(n=1)
#define SCI_BRR_3 119 // 300bps(n=2)
#else
// 冇=19.6608MHz偺價僢僩儗乕僩
#define SCI_BRR_1152 4 // 嬤帡抣115200bps(n=0)
#define SCI_BRR_576 9 // 嬤帡抣57600bps(n=0)
#define SCI_BRR_384 15 // 38400bps(n=0)
#define SCI_BRR_192 31 // 19200bps(n=0)
#define SCI_BRR_96 63 // 9600bps(n=0)
#define SCI_BRR_48 127 // 4800bps(n=0)
#define SCI_BRR_24 255 // 2400bps(n=0)
#define SCI_BRR_12 127 // 1200bps(n=1)
#define SCI_BRR_6 255 // 600bps(n=1)
#define SCI_BRR_3 127 // 300bps(n=2)
#endif
#define SCI_CKS0 0 // 僋儘僢僋慖戰冇
#define SCI_CKS1 1 // 僋儘僢僋慖戰冇/4
#define SCI_CKS2 2 // 僋儘僢僋慖戰冇/16
#define SCI_CKS3 3 // 僋儘僢僋慖戰冇/64
#define SCI_CH 3 // SCI僠儍儞僱儖巊梡悢
#define RS_DELIM 0x0a // 暥帤楍揮憲偺僨儕儈僞
/********************************************
僾儘僩僞僀僾愰尵
*********************************************/
//--- 僌儘乕僶儖 ---
// 傾僾儕働乕僔儑儞娭悢
void sci_bps(int ch, long bps); // 儃乕儗乕僩愝掕
void rs_pointer_init(int ch); // 憲庴怣僶僢僼傽億僀儞僞僇僂儞僞弶婜壔
void rs_rs_cmd(int ch, int); // RS(RTS) ON/OFF憖嶌
void rs_er_cmd(int ch, int); // ER(DTR) ON/OFF憖嶌
int rs_cs_sts(int ch); // CS(CTS) 偺忬懺庢摼
int rs_dr_sts(int ch); // DR(DSR) 偺忬懺庢摼
int rs_cd_sts(int ch); // CD(DCD) 偺忬懺庢摼
int rs_ci_sts(int ch); // CI(RI) 偺忬懺庢摼
void rs_232ttl(int ch); // SCI0 232C/TTL愗懼
unsigned int rs_putcheck(int ch); // 憲怣僶僢僼傽嬻偒僶僀僩悢偺庢摼
int rs_putc(int ch, unsigned char); // 1僶僀僩憲怣
int rs_puts(int ch, unsigned char *); // 暥帤楍偺憲怣
int rs_putn(int ch, unsigned char *, unsigned int); // n僶僀僩憲怣
unsigned int rs_getcheck(int ch); // 庴怣僶僀僩悢偺庢摼
unsigned char rs_getc(int ch); // 1僶僀僩庴怣(傾僗僉乕梡)
int rs_getch(int ch); // 1僶僀僩庴怣(僶僀僫儕梡)
int rs_gets(int ch, unsigned char *, unsigned int); // 暥帤楍偺庴怣
int rs_getn(int ch, unsigned char *, unsigned int); // n僶僀僩庴怣
// 僕儑僽娭悢
void rs_txcont_job(int ch); // 僼儘乕惂屼僕儑僽(CTS偱憲怣妱崬傪惂屼偡傞)
void rs_job(int ch); // RS(RTS)偺惂屼(僼儘乕惂屼)
void tx_job(int ch); // 憲怣僕儑僽(億乕儕儞僌愱梡)
// 妱崬娭悢
interrupt void IntERI0(void); // SCI0 僄儔乕妱崬
interrupt void IntERI1(void); // SCI1 僄儔乕妱崬
interrupt void IntERI2(void); // SCI2 僄儔乕妱崬
interrupt void IntRXI0(void); // SCI0 庴怣妱崬
interrupt void IntRXI1(void); // SCI1 庴怣妱崬
interrupt void IntRXI2(void); // SCI2 庴怣妱崬
interrupt void IntTXI0(void); // SCI0 憲怣妱崬
interrupt void IntTXI1(void); // SCI1 憲怣妱崬
interrupt void IntTXI2(void); // SCI2 憲怣妱崬
//--- 儘乕僇儖 ---
void rxerr_job(int ch); // 庴怣僄儔乕僕儑僽(妱崬傛傝僐乕儖)
void rx_job(int ch); // 庴怣妱崬僕儑僽(妱崬傛傝僐乕儖)
void inttx_job(int ch); // 憲怣妱崬僕儑僽(妱崬傛傝僐乕儖)
void sci_init(int ch, unsigned char, unsigned char); // 僔儕傾儖億乕僩弶婜壔
void rs_inttx(int ch, int); // 憲怣妱崬ON/OFF
void rs_intrx(int ch, int); // 庴怣妱崬ON/OFF
/********************************************
曄悢愰尵
*********************************************/
// 僌儘乕僶儖
// 儘乕僇儖
static unsigned char *ssr[SCI_CH] = {SCI0_SSR_P,SCI1_SSR_P,SCI2_SSR_P}; // 僔儕傾儖僗僥乕僞僗儗僕僗僞
static unsigned char *scr[SCI_CH] = {SCI0_SCR_P,SCI1_SCR_P,SCI2_SCR_P}; // 僔儕傾儖僐儞僩儘乕儖儗僕僗僞
static unsigned char *tdr[SCI_CH] = {SCI0_TDR_P,SCI1_TDR_P,SCI2_TDR_P}; // 憲怣僨乕僞儗僕僗僞
static unsigned char *rdr[SCI_CH] = {SCI0_RDR_P,SCI1_RDR_P,SCI2_RDR_P}; // 庴怣僨乕僞儗僕僗僞
static unsigned char rs_send_buf[SCI_CH][TXBUF_SIZE]; // 憲怣僶僢僼傽
static unsigned char rs_recv_buf[SCI_CH][RXBUF_SIZE]; // 庴怣僶僢僼傽
static unsigned int rs_send_rp[SCI_CH]; // 憲怣僶僢僼傽撉崬傒億僀儞僞
static unsigned int rs_send_wp[SCI_CH]; // 憲怣僶僢僼傽彂崬傒億僀儞僞
static unsigned int rs_send_c[SCI_CH]; // 憲怣僶僢僼傽巆僇僂儞僞
static unsigned int rs_recv_rp[SCI_CH]; // 庴怣僶僢僼傽撉崬傒億僀儞僞
static unsigned int rs_recv_wp[SCI_CH]; // 庴怣僶僢僼傽彂崬傒億僀儞僞
static unsigned int rs_recv_c[SCI_CH]; // 庴怣僶僢僼傽巆僇僂儞僞
static unsigned int orerr_c[SCI_CH]; // 僆乕僶乕儔儞僄儔乕僇僂儞僞 统计接收过程中overrun error
static unsigned int frerr_c[SCI_CH]; // 僼儗乕儈儞僌僄儔乕僇僂儞僞 统计接收过程中frame error
static unsigned int peerr_c[SCI_CH]; // 僷儕僥傿僄儔乕僇僂儞僞 统计接收过程中parity error
/************************************************************************
* 奣梫 : 儃乕儗乕僩愗傝懼偊 *
* 婡擻 : *
* 堷悢 : int ch 僠儍儞僱儖 *
* long bps (300,1200,2400,4800,9600,19200,38400,57600,115200) *
* 栠抣 : void *
* 揈梫 : 斈梡 *
* 嶌惉 : 2001/03/16 Y.Sugawara *
************************************************************************/
void sci_bps(int ch, long bps)
{
unsigned char br;
unsigned char ck;
switch(bps)
{
case 300: // 300bps
br = SCI_BRR_3; //SCI_BRR_3=127
ck = SCI_CKS2; //SCI_CKS2=2
break;
case 1200: // 1200bps
br = SCI_BRR_12 ; //SCI_BRR_12=127
ck = SCI_CKS1 ; //SCI_CKS1 =1
break;
case 2400: // 2400bps
br = SCI_BRR_24 ; //SCI_BRR_24=255
ck = SCI_CKS0 ; //SCI_CKS0=0
break;
case 4800: // 4800bps
br = SCI_BRR_48 ; //SCI_BRR_48=127
ck = SCI_CKS0 ; //SCI_CKS0=0
break;
case 9600: // 9600bps
br = SCI_BRR_96 ; //SCI_BRR_96=63
ck = SCI_CKS0 ;
break;
case 19200: // 19200bps
br = SCI_BRR_192 ; //SCI_BRR_192=31
ck = SCI_CKS0 ;
break;
case 38400: // 38400bps
br = SCI_BRR_384 ; //SCI_BRR_384=15
ck = SCI_CKS0 ;
break;
case 57600: // 57600bps
br = SCI_BRR_576 ; //SCI_BRR_576=9
ck = SCI_CKS0 ;
break;
case 115200: // 115200bps
br = SCI_BRR_1152 ; //SCI_BRR_1152=4
ck = SCI_CKS0 ;
break;
default: // 晄摉僐儅儞僪
return;
}
sci_init(ch, br, ck); // 儃乕儗乕僩愝掕
rs_rs_cmd(ch, ON); // RS(RTS) ON
rs_er_cmd(ch, OFF); // ER(DTR) OFF
rs_pointer_init(ch); // 憲庴怣僶僢僼傽億僀儞僞丒僇僂儞僞弶婜壔
}
/************************************************************************
* 奣梫 : 僔儕傾儖僀儞僞僼僃乕僗偺弶婜壔 *
* 婡擻 : *
* 堷悢 : int ch 僠儍儞僱儖斣崋 *
* unsigned char br 儃乕儗乕僩抣(bps) *
* 15:38400,31:19200,63:9600,127:4800,255:2400(CKS1,0=00) *
* 127:1200,255:600(CKS1,0=01) *
* 127:300(CKS1,0=10) *
* unsigned char cksel 儃乕儗乕僩僋儘僢僋慖戰 *
* 000000xx *
* ++--- CKS1,0 僋儘僢僋慖戰 00:冇 01:冇/4 *
* 10:冇/16 11:冇/64 *
* *
* 栠抣 : void *
* 揈梫 : MCU70愱梡 *
* 嶌惉 : 2001/03/09 Y.Sugawara *
************************************************************************/
void sci_init(int ch, unsigned char br,unsigned char cksel)
{
unsigned char wk; // 儚乕僋
if(ch == 0)
{
// 僠儍儞僱儖侽
// 偟側偔偰傕偄偄偗偳擮偺堊
wk = SCI0_RDR; // 庴怣僨乕僞儗僕僗僞僟儈乕儕乕僪
wk = SCI0_RDR; // 庴怣僨乕僞儗僕僗僞僟儈乕儕乕僪
wk = SCI0_RDR; // 庴怣僨乕僞儗僕僗僞僟儈乕儕乕僪
SCI0_BRR = br; //BRR:bit rate register // 價僢僩儗乕僩儗僕僗僞0
SCI0_SMR = B8("00001000"); // 僔儕傾儖儌乕僪儗僕僗僞0
// 00001000 弶婜抣
// ||||||++--- CKS1,CKS0:选择时钟源作为波特率发生器;00:*clock;01:*/4clock;10:*/16clock;11:*/64clock
// |||||+--- MP multiprocessor 通信模式眮E疚唬
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -