📄 comm_usart.c
字号:
COMM_SB_USART_CONFIG_RCV_DIS_FLAG = 0;
RCSTAbits.CREN = 1;
comm_state = COMM_STATE_GEN_NEXT;
break;
//====================================================
case COMM_TAG_USART_DATA_ARCV_DISABLE:
//-----------------------------
//--- CHECK MODE
//-----------------------------
if(not COMM_MODE_USART_A)
{
COMM_SB_BAD_CMND_FLAG = 1;
break;
}
COMM_SB_USART_CONFIG_RCV_DIS_FLAG = 1;
RCSTAbits.CREN = 0;
comm_state = COMM_STATE_GEN_NEXT;
break;
//====================================================
case COMM_TAG_USART_BREAK_XMT:
case COMM_TAG_USART_BREAK_DATA_XMT:
//-----------------------------
//--- CHECK MODE
//-----------------------------
if(not COMM_MODE_USART_SM)
{
COMM_SB_BAD_CMND_FLAG = 1;
break;
}
//--- SETUP XMIT
if(not COMM_0_FLAG)
{
TXSTAbits.TXEN = 1;
TXSTAbits.SENDB = 1;
TXREG = 0;
COMM_0_FLAG = 1;
COMM_PROC_LOOP_FLAG = 1;
}
//--- WAIT for TXREG MT, LOAD W/ DATA IF APPLICABLE
else if(not COMM_1_FLAG)
{
if(PIR1bits.TXIF)
{
if(comm_state == COMM_TAG_USART_BREAK_DATA_XMT)
{
if(comm_data_get())
{
TXREG = comm_data;
COMM_1_FLAG = 1;
}
}
else
{
COMM_1_FLAG = 1;
}
comm_led_busy_data();
COMM_PROC_LOOP_FLAG = 1;
}
}
else
{
if(PIR1bits.TXIF)
{
if(not TXSTAbits.SENDB)
{
if(TXSTAbits.TRMT)
{
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
}
comm_led_busy_data();
}
}
}
break;
//====================================================
case COMM_TAG_USART_BAUD:
if(not COMM_0_FLAG)
{
if(comm_data_get())
{
SPBRG = comm_data;
COMM_SB_USART_BRG_LO_REG = SPBRG;
COMM_0_FLAG = 1;
COMM_PROC_LOOP_FLAG = 1;
}
}
else
{
if(comm_data_get())
{
SPBRGH = comm_data;
COMM_SB_USART_BRG_HI_REG = SPBRGH;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
}
}
break;
//====================================================
case COMM_TAG_USART_CKP_SET:
//-----------------------------
//--- CHECK MODE
//-----------------------------
if(not COMM_MODE_USART_SM)
{
COMM_SB_BAD_CMND_FLAG = 1;
break;
}
BAUDCONbits.SCKP = 1;
COMM_SB_USART_CONFIG_CKP_FLAG = 1;
comm_state = COMM_STATE_GEN_NEXT;
break;
//====================================================
case COMM_TAG_USART_CKP_RST:
//-----------------------------
//--- CHECK MODE
//-----------------------------
if(not COMM_MODE_USART_SM)
{
COMM_SB_BAD_CMND_FLAG = 1;
break;
}
BAUDCONbits.SCKP = 0;
COMM_SB_USART_CONFIG_CKP_FLAG = 0;
comm_state = COMM_STATE_GEN_NEXT;
break;
//====================================================
case COMM_TAG_USART_AUX1_RST:
USART_AUX1_PORT = 0;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
break;
//====================================================
case COMM_TAG_USART_AUX1_SET:
USART_AUX1_PORT = 1;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
break;
//====================================================
case COMM_TAG_USART_AUX1_OUT:
USART_AUX1_TRIS = 0;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
break;
//====================================================
case COMM_TAG_USART_AUX1_IN:
USART_AUX1_TRIS = 1;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
break;
//====================================================
case COMM_TAG_USART_AUX1_WAIT_0:
if(not USART_AUX1_PORT)
{
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
}
break;
//====================================================
case COMM_TAG_USART_AUX1_WAIT_1:
if(USART_AUX1_PORT)
{
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
}
break;
//====================================================
case COMM_TAG_USART_AUX2_RST:
USART_AUX2_PORT = 0;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
break;
//====================================================
case COMM_TAG_USART_AUX2_SET:
USART_AUX2_PORT = 1;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
break;
//====================================================
case COMM_TAG_USART_AUX2_OUT:
USART_AUX2_TRIS = 0;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
break;
//====================================================
case COMM_TAG_USART_AUX2_IN:
USART_AUX2_TRIS = 1;
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
break;
//====================================================
case COMM_TAG_USART_AUX2_WAIT_0:
if(not USART_AUX2_PORT)
{
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
}
break;
//====================================================
case COMM_TAG_USART_AUX2_WAIT_1:
if(USART_AUX2_PORT)
{
comm_state = COMM_STATE_GEN_NEXT;
COMM_PROC_LOOP_FLAG = 1;
}
break;
//====================================================
default:
COMM_SB_BAD_CMND_FLAG = 1;
break;
} // end SWITCH
//-----------------------------------
//--- CHECK RCV BUFFER
//-----------------------------------
// comm_usart_rcv();
}
//==========================================================
//--- comm_usart_rcv()
// receive USART data (ASYNC mode)
//==========================================================
void comm_usart_rcv_isr(void)
{
//-------------------------------------------------------
//--- RECEIVE ENABLE ?
//-------------------------------------------------------
if(COMM_MODE_USART_A)
{
if(PIR1bits.RCIF)
{
comm_data = RCREG;
comm_post_data();
if(COMM_CB_USART_EVENT_BYTE_RX_FLAG)
comm_post_event_1b(COMM_TAG_USART_EVENT_BYTE_RX, comm_data);
COMM_USART_RCV_FLAG = 1;
}
}
}
//==========================================================
//--- comm_usart_postproc()
// post processing
//
// look for status error(s)
// set appropriate STATUS_BLOCK flags
// set composite status bit
//==========================================================
void comm_usart_postproc(void)
{
//-----------------------------------
//--- CHECK RCV
//-----------------------------------
if(COMM_USART_RCV_FLAG)
{
COMM_USART_RCV_FLAG = 0;
comm_led_busy_data();
}
// comm_usart_rcv();
//-----------------------------------
//--- AUX PIN STATUS
//-----------------------------------
COMM_SB_USART_AUX1_TRIS_FLAG = 0;
if(USART_AUX1_TRIS)
COMM_SB_USART_AUX1_TRIS_FLAG = 1;
COMM_SB_USART_AUX2_TRIS_FLAG = 0;
if(USART_AUX2_TRIS)
COMM_SB_USART_AUX2_TRIS_FLAG = 1;
COMM_SB_USART_AUX1_PORT_FLAG = 0;
if(USART_AUX1_PORT)
COMM_SB_USART_AUX1_PORT_FLAG = 1;
COMM_SB_USART_AUX2_PORT_FLAG = 0;
if(USART_AUX2_PORT)
COMM_SB_USART_AUX2_PORT_FLAG = 1;
//-----------------------------------
//--- transaction error
//-----------------------------------
COMM_4_FLAG = 0;
if(RCSTAbits.FERR)
{
COMM_4_FLAG = 1;
RCSTAbits.FERR = 0;
COMM_SB_USART_STATUS_FERR_FLAG = 1;
}
if(RCSTAbits.OERR)
{
COMM_4_FLAG = 1;
RCSTAbits.OERR = 0;
COMM_SB_USART_STATUS_OERR_FLAG = 1;
}
if(COMM_4_FLAG)
{
if(COMM_CB_USART_EVENT_STATUS_ERR_FLAG)
{
comm_post_event_1b(COMM_TAG_USART_EVENT_STATUS_ERR, COMM_SB_USART_ERR_REG);
}
}
//-----------------------------------
//--- composite error
//-----------------------------------
if(COMM_SB_USART_ERR_REG & COMM_SB_USART_ERR_REG_MASK)
{
COMM_SB_GEN_ERR_FLAG = 1;
COMM_SB_USART_ERR_FLAG = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -