📄 commrtos.c
字号:
pbuf->RingBufTxCtr--; /* 抗, 单捞磐 墨款磐甫 皑家矫挪促 */
c = *pbuf->RingBufTxOutPtr++; /* 滚欺俊辑 单捞磐甫 佬绰促 */
if (pbuf->RingBufTxOutPtr == &pbuf->RingBufTx[COMM_TX_BUF_SIZE]) { /* 器牢磐 版拌 贸府 */
pbuf->RingBufTxOutPtr = &pbuf->RingBufTx[0];
}
OSSemPost(pbuf->RingBufTxSem); /* 滚欺俊 茄俺狼 历厘康开捞 积板澜阑 舅赴促 */
*err = COMM_NO_ERR;
return (c); /* 沥惑利栏肺 单捞磐甫 佬菌澜 */
} else {
*err = COMM_TX_EMPTY;
return (NUL); /* 滚欺啊 厚菌澜 */
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* 烹脚葛碘 檬扁拳
*
*
* 汲疙 : 览侩橇肺弊伐篮 烹脚葛碘阑 檬扁拳 窍扁 困秦 捞 窃荐甫 龋免茄促.
* 烹脚葛碘狼 促弗 窃荐甫 龋免窍扁 傈俊 馆靛矫 捞 窃荐甫 刚历 龋免秦具 茄促.
* 傈崔牢磊 : 绝澜
*********************************************************************************************************
*/
void CommInit (void)
{
INT8U val;
pbuf = &ComBuf; /* COMM1俊 措茄 傅 滚欺 檬扁拳 */
pbuf->RingBufRxCtr = 0;
pbuf->RingBufRxInPtr = &pbuf->RingBufRx[0];
pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
pbuf->RingBufRxSem = OSSemCreate(0);
pbuf->RingBufTxCtr = 0;
pbuf->RingBufTxInPtr = &pbuf->RingBufTx[0];
pbuf->RingBufTxOutPtr = &pbuf->RingBufTx[0];
pbuf->RingBufTxSem = OSSemCreate(COMM_TX_BUF_SIZE);
/* Prevent other bits of ioc1 from being altered */
wsr = 15;
val = ioc1;
wsr = 0;
val |= 0x20;
sp_con = 0x09; /* mode1 & recieve enable */
ioc1 = val; /* select TxD */
/* Baud rate must be written in the order of LSB first at the same address */
baud_rate = ((unsigned char) BAUD_REG);
baud_rate = ((unsigned char) (BAUD_REG >> 8));
}
/*$PAGE*/
/*
*********************************************************************************************************
* 荐脚 滚欺啊 厚菌绰瘤 犬牢
*
*
* 汲疙 : 览侩橇肺弊伐篮 烹脚 盲澄俊 单捞磐啊 蜡瓤茄瘤 犬牢窍扁 困秦 捞 窃荐甫 龋免茄促.
* 茄 官捞飘 捞惑狼 单捞磐啊 蜡瓤窍搁 FALSE甫 府畔窍绊 弊犯瘤 臼篮 版快 TRUE甫 府畔茄促.
*
* 傈崔牢磊 : 'ch' COMM 器飘 盲澄 锅龋. 促澜苞 鞍篮 蔼阑 爱绰促:
* COMM1
* COMM2
* 府畔蔼 : TRUE 滚欺啊 后 版快
* FALSE 滚欺啊 厚瘤 臼绰 版快 肚绰 公瓤 盲澄阑 瘤沥茄 版快
*********************************************************************************************************
*/
BOOLEAN CommIsEmpty (void)
{
BOOLEAN empty;
OS_ENTER_CRITICAL();
if (pbuf->RingBufRxCtr > 0) { /* 滚欺俊 单捞磐啊 乐绰啊? */
empty = FALSE; /* 滚欺啊 厚瘤 臼澜 */
} else {
empty = TRUE; /* 滚欺啊 厚菌澜 */
}
OS_EXIT_CRITICAL();
return (empty);
}
/*$PAGE*/
/*
*********************************************************************************************************
* 价脚滚欺啊 肯傈洒 谩绰瘤 犬牢
*
*
* 汲疙 : 览侩橇肺弊伐篮 价脚滚欺俊 单捞磐甫 歹 历厘且 荐 乐绰瘤 犬牢窍扁 困秦 捞 窃荐甫 龋免茄促.
* 溜, 捞 窃荐绰 价脚滚欺啊 肯傈洒 谩绰瘤 犬牢茄促.
* 滚欺啊 蛮 版快 窃荐绰 TRUE甫 府畔窍绊 弊犯瘤 臼篮 版快绰 FALSE甫 府畔茄促.
* 傈崔牢磊 : 'ch' COMM 器飘 盲澄 锅龋. 促澜苞 鞍篮 蔼阑 爱绰促:
* COMM1
* COMM2
* 府畔蔼 : TRUE 滚欺啊 肯傈洒 谩澜.
* FALSE 滚欺啊 瞒瘤 臼疽芭唱 公瓤盲澄阑 瘤沥茄 版快.
*********************************************************************************************************
*/
BOOLEAN CommIsFull (void)
{
BOOLEAN full;
OS_ENTER_CRITICAL();
if (pbuf->RingBufTxCtr < COMM_TX_BUF_SIZE) { /* 滚欺啊 谩绰瘤 犬牢 */
full = FALSE; /* 滚欺啊 瞒瘤 臼澜 */
} else {
full = TRUE; /* 滚欺啊 肯傈洒 谩澜 */
}
OS_EXIT_CRITICAL();
return (full);
}
/*$PAGE*/
/*
*********************************************************************************************************
* 单捞磐 免仿
*
*
* 汲疙 : 捞 窃荐绰 烹脚盲澄肺 单捞磐甫 焊郴扁 困秦 龋免等促. 滚欺啊 肯傈洒 蛮 版快绰 滚欺啊 呼
* 锭鳖瘤 扁促赴促. 瘤沥茄 鸥烙酒眶捞 父丰瞪 锭鳖瘤 滚欺啊 厚瘤 臼栏搁 龋免窃荐肺 府畔茄促.
* 鸥烙酒眶阑 0栏肺 瘤沥窍搁 滚欺啊 呼 锭鳖瘤 康盔洒 扁促赴促.
* 啊厘 刚历 滚欺俊 历厘登绰 单捞磐啊 价脚 ISR俊 狼秦 傈价等促.
* 滚欺啊 肯傈洒 后 惑怕俊辑 霉 锅掳 单捞磐啊 滚欺俊 历厘瞪 锭 价脚 ISR捞 劝己拳 等促.
*
*
* 傈崔牢磊 : 'ch' COMM 器飘 盲澄 锅龋. 促澜苞 鞍篮 蔼阑 爱绰促:
* COMM1
* COMM2
* 'c' 滚欺俊 历厘窍绊磊 窍绰 单捞磐.
* 'to' 滚欺啊 蛮 版快 呼 锭鳖瘤 扁促府档废 瘤沥窍绰 努钒 平 窜困狼 鸥烙酒眶 蔼.
* 鸥烙酒眶栏肺 0阑 瘤沥窍搁 滚欺啊 呼 锭鳖瘤 康盔洒 扁促赴促.
* 府畔蔼 : COMM_NO_ERR 单捞磐啊 沥惑利栏肺 滚欺俊 历厘等 版快
* COMM_TX_TIMEOUT 瘤沥等 鸥烙酒眶捞 父丰瞪 锭 鳖瘤 滚欺啊 厚瘤 臼篮 版快
* COMM_BAD_CH 公瓤茄 盲澄 锅龋甫 瘤沥茄 版快
*********************************************************************************************************
*/
INT8U CommPutChar (INT8U c, INT16U to)
{
INT8U oserr;
OSSemPend(pbuf->RingBufTxSem, to, &oserr); /* 价脚滚欺俊 后 傍埃捞 积扁辨 扁促赴促 */
if (oserr == OS_TIMEOUT) {
return (COMM_TX_TIMEOUT); /* 鸥烙酒眶 父丰凳, 俊矾内靛 府畔 */
}
OS_ENTER_CRITICAL();
pbuf->RingBufTxCtr++; /* 单捞磐 墨款磐甫 刘啊矫挪促 */
*pbuf->RingBufTxInPtr++ = c; /* 滚欺俊 单捞磐甫 历厘茄促 */
if (pbuf->RingBufTxInPtr == &pbuf->RingBufTx[COMM_TX_BUF_SIZE]) { /* 器牢磐 版拌 贸府 */
pbuf->RingBufTxInPtr = &pbuf->RingBufTx[0];
}
if (pbuf->RingBufTxCtr == 1) { /* 霉 锅掳 单捞磐牢啊? */
ipend1 |= 0x01; /* 抗, 价脚 牢磐反飘 劝己拳 */
}
OS_EXIT_CRITICAL();
return (COMM_NO_ERR);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -