📄
字号:
#ifndef _HW_SERIAL_H_
#define _HW_SERIAL_H_
/*
* 僞乕僎僢僩埶懚僔儕傾儖I/O儌僕儏乕儖乮GBA梡乯
* SIO傪巊梡
*/
#include "witz_gba.h"
#include "sys_defs.h"
#include "sys_config.h"
/*
* 僔儕傾儖I/O偺妱崬傒僴儞僪儔偺儀僋僞斣崋
*/
#define INHNO_SERIAL IRQ_NUMBER_SIO
/*
* 僔儕傾儖億乕僩偺僴乕僪僂僃傾埶懚忣曬偺掕媊
* Not yet! m68k偺傛偆偵僐儞僩儘乕儖丒儗僕僗僞傪峔憿懱偵偡傞
*/
typedef struct hardware_serial_port_descripter {
INT *initflag; /* 弶婜壔嵪僼儔僌傊偺億僀儞僞 */
BOOL sendflag; /* 憲怣妱傝崬傒僀僱乕僽儖丒僼儔僌 */
} HWPORT;
/*
* 掅儗儀儖億乕僩忣曬娗棟僽儘僢僋偺弶婜抣
*/
#define NUM_PORT 1 /* 僒億乕僩偡傞僔儕傾儖丒億乕僩偺悢 */
static INT initflag[1] = { 0 } ; /* 弶婜壔嵪僼儔僌 */
#define HWPORT1 { &initflag[0], 0 }
/*
* 僔儕傾儖I/O億乕僩偺弶婜壔
*/
Inline BOOL
hw_port_initialize(HWPORT *p)
{
*SIORCNT = UM_ON;
*SIOSCCNT = UM_BR9600 | UM_DATA_8 | UM_RECV_ENA
| UM_UART_ON |UM_IRQ_ON;
*INTIE |= IRQ_BIT_SIO;
*(p->initflag) = 1; /* 弶婜壔僼儔僌愝掕 */
return(FALSE);
}
/*
* 僔儕傾儖I/O億乕僩偺廔椆
*/
Inline void
hw_port_terminate(HWPORT *p)
{
*(p->initflag) = -1; /* 弶婜壔僼儔僌愝掕 */
*SIOSCCNT = 0; /* Disable Interrupt */
}
/*
* 僔儕傾儖丒億乕僩妱崬傒僒乕價僗丒儖乕僠儞乮慜曽嶲徠乯
*/
extern void serial_handler_in(int portid);
extern void serial_handler_out(int portid);
/*
* 僔儕傾儖I/O億乕僩偺妱崬傒僴儞僪儔
*/
Inline void
hw_serial_handler()
{
if(*SIOSCCNT & UM_SD_FULL){
if (initflag[0] > 0){
serial_handler_out(1);
}
else{
}
}
if(!(*SIOSCCNT & UM_RD_EMPTY)){
if (initflag[0] > 0){
serial_handler_in(1);
}
else{
}
}
if(*SIOSCCNT & UM_ERR_FULL){
}
}
/*
* 暥帤傪庴怣偟偨偐丠
*/
Inline BOOL
hw_port_getready(HWPORT *p)
{
return((*SIOSCCNT & UM_RD_EMPTY)!=0);
}
/*
* 暥帤傪憲怣偱偒傞偐丠
*/
Inline BOOL
hw_port_putready(HWPORT *p)
{
return((*SIOSCCNT & UM_SD_FULL)!=0);
}
/*
* 庴怣偟偨暥帤偺庢傝弌偟
*/
Inline byte
hw_port_getchar(HWPORT *p)
{
return(*SIOSIODATA);
}
/*
* 憲怣偡傞暥帤偺彂偒崬傒
*/
Inline void
hw_port_putchar(HWPORT *p, byte c)
{
*SIOSIODATA=c;
}
/*
* 憲怣惂屼娭悢
*/
Inline void
hw_port_sendstart(HWPORT *p)
{
if (!(p->sendflag)) {
*SIOSCCNT |= UM_SEND_ENA;
/* Enable Interrupt */
p->sendflag = 1;
}
}
Inline void
hw_port_sendstop(HWPORT *p)
{
if (p->sendflag) {
*SIOSCCNT &= ~UM_SEND_ENA;
/* Disable Interrupt */
p->sendflag = 0;
}
}
#endif /* _HW_SERIAL_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -