234 lines
5.4 KiB
C
234 lines
5.4 KiB
C
|
#include "uart.h"
|
|||
|
#include "gpio.h"
|
|||
|
|
|||
|
static UART_CTRL_TYPE * UART_0_CTRL = ((UART_CTRL_TYPE *) UART_0_CTRL_BASE);
|
|||
|
static UART_CTRL_TYPE * UART_1_CTRL = ((UART_CTRL_TYPE *) UART_1_CTRL_BASE);
|
|||
|
|
|||
|
void uartRx_callback(void);
|
|||
|
|
|||
|
//-------------------------------------------------------------------------------------------------
|
|||
|
void uart_0_init(void)
|
|||
|
{
|
|||
|
PIN_CONFIG->PIN_15_SEL = PIN_SEL_UART_RXD0;
|
|||
|
PIN_CONFIG->PIN_16_SEL = PIN_SEL_UART_TXD0;
|
|||
|
|
|||
|
|
|||
|
PIN_CONFIG->PAD_21_INPUT_PULL_UP = 0;
|
|||
|
PIN_CONFIG->PAD_22_INPUT_PULL_UP = 0;
|
|||
|
|
|||
|
UART_0_CTRL->CLK_SEL = 0; /* 1=32M, 0=16M */
|
|||
|
|
|||
|
UART_0_CTRL->BAUDSEL = UART_BAUD_115200;
|
|||
|
UART_0_CTRL->FLOW_EN = UART_RTS_CTS_DISABLE;
|
|||
|
|
|||
|
UART_0_CTRL->RX_INT_MASK = 1; /* 1=MASK */
|
|||
|
UART_0_CTRL->TX_INT_MASK = 1; /* 1=MASK */
|
|||
|
|
|||
|
UART_0_CTRL->PAR_FAIL_INT_MASK = 1; /* 1=MASK */
|
|||
|
UART_0_CTRL->par_rx_even = 0; /* 1=Even, 0=Odd */
|
|||
|
UART_0_CTRL->par_rx_en = 0; /* 1=Rx Parity check enable */
|
|||
|
|
|||
|
UART_0_CTRL->par_tx_even = 0; /* 1=Even, 0=Odd */
|
|||
|
UART_0_CTRL->par_tx_en = 0; /* 1=Tx Parity check enable */
|
|||
|
|
|||
|
//clr Int Flag
|
|||
|
UART_0_CTRL->RI = 0;
|
|||
|
UART_0_CTRL->TI = 0;
|
|||
|
UART_0_CTRL->PAR_FAIL = 1;
|
|||
|
|
|||
|
UART_0_CTRL->RX_FLUSH = 1; /* clr rx fifo and set RX_FIFO_EMPTY */
|
|||
|
|
|||
|
NVIC_EnableIRQ(UART0_IRQn);
|
|||
|
|
|||
|
UART_0_CTRL->UART_EN = 1;
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
UART0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint8_t data Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ע<EFBFBD><EFBFBD>:
|
|||
|
ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>Tx<EFBFBD>ж<EFBFBD>
|
|||
|
*****************************************************************************/
|
|||
|
void uart_0_write(uint8_t data)
|
|||
|
{
|
|||
|
UART_0_CTRL->TX_DATA = data;
|
|||
|
while(UART_0_CTRL->TI == 0);
|
|||
|
UART_0_CTRL->TI = 0;
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
UART0<EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>Rx FIFO<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
pcnt - <EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
pbuf - ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>ŵ<EFBFBD>buf
|
|||
|
ע<EFBFBD><EFBFBD>: FIFO<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>buf<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD>ֽ<EFBFBD>
|
|||
|
****************************************************************************/
|
|||
|
void uart_0_read(uint8_t *pcnt, uint8_t *pbuf)
|
|||
|
{
|
|||
|
uint8_t i = 0;
|
|||
|
volatile uint8_t dly = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>64Mʱ<4D>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>delay
|
|||
|
|
|||
|
while(!UART_0_CTRL->RX_FIFO_EMPTY)
|
|||
|
{
|
|||
|
*(pbuf+i) = UART_0_CTRL->RX_DATA;
|
|||
|
i++;
|
|||
|
|
|||
|
//<2F><>ʱ400ns<6E><73><EFBFBD><EFBFBD>
|
|||
|
dly++;
|
|||
|
dly++;
|
|||
|
dly++;
|
|||
|
}
|
|||
|
|
|||
|
*pcnt = i;
|
|||
|
}
|
|||
|
|
|||
|
void uart_0_close(void)
|
|||
|
{
|
|||
|
UART_0_CTRL->UART_EN = 0;
|
|||
|
NVIC_DisableIRQ(UART0_IRQn);
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
UART0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ע<EFBFBD><EFBFBD>:
|
|||
|
RX_FLUSHֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λRX_FIFO_EMPTY,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RI
|
|||
|
*****************************************************************************/
|
|||
|
void UART0_IRQHandler(void)
|
|||
|
{
|
|||
|
if ((UART_0_CTRL->RI) == 1)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>buf[]<5D><>
|
|||
|
uint8_t len, buf[4];
|
|||
|
UART_0_CTRL->RI = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uart_0_read(&len, buf);
|
|||
|
}
|
|||
|
|
|||
|
#if 1
|
|||
|
if ((UART_0_CTRL->TI) == 1)
|
|||
|
{
|
|||
|
UART_0_CTRL->TI = 0;
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
if((UART_0_CTRL->PAR_FAIL) == 1)
|
|||
|
{
|
|||
|
UART_0_CTRL->PAR_FAIL = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//-------------------------------------------------------------------------------------------------
|
|||
|
void uart_1_init(void)
|
|||
|
{
|
|||
|
// PIN_CONFIG->PIN_0_SEL = PIN_SEL_UART_RXD1;
|
|||
|
// PIN_CONFIG->PIN_1_SEL = PIN_SEL_UART_TXD1;
|
|||
|
|
|||
|
PIN_CONFIG->PIN_12_SEL = PIN_SEL_UART_RXD1;
|
|||
|
PIN_CONFIG->PIN_13_SEL = PIN_SEL_UART_TXD1;
|
|||
|
|
|||
|
PIN_CONFIG->PAD_12_INPUT_PULL_UP = 0;
|
|||
|
PIN_CONFIG->PAD_13_INPUT_PULL_UP = 0;
|
|||
|
|
|||
|
UART_1_CTRL->CLK_SEL = 0; /* 1=32M, 0=16M */
|
|||
|
|
|||
|
UART_1_CTRL->BAUDSEL = UART_BAUD_2400;
|
|||
|
UART_1_CTRL->FLOW_EN = UART_RTS_CTS_DISABLE;
|
|||
|
|
|||
|
UART_1_CTRL->RX_INT_MASK = 0; /* 1=MASK */
|
|||
|
UART_1_CTRL->TX_INT_MASK = 1; /* 1=MASK */
|
|||
|
|
|||
|
UART_1_CTRL->PAR_FAIL_INT_MASK = 1; /* 1=MASK */
|
|||
|
UART_1_CTRL->par_rx_even = 0; /* 1=Even, 0=Odd */
|
|||
|
UART_1_CTRL->par_rx_en = 0; /* 1=Rx Parity check enable */
|
|||
|
|
|||
|
UART_1_CTRL->par_tx_even = 0; /* 1=Even, 0=Odd */
|
|||
|
UART_1_CTRL->par_tx_en = 0; /* 1=Tx Parity check enable */
|
|||
|
|
|||
|
//clr Int Flag
|
|||
|
UART_1_CTRL->RI = 0;
|
|||
|
UART_1_CTRL->TI = 0;
|
|||
|
UART_1_CTRL->PAR_FAIL = 1;
|
|||
|
|
|||
|
UART_1_CTRL->RX_FLUSH = 1; /* clr rx fifo and set RX_FIFO_EMPTY */
|
|||
|
|
|||
|
NVIC_EnableIRQ(UART1_IRQn);
|
|||
|
|
|||
|
UART_1_CTRL->UART_EN = 1;
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
UART1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: uint8_t data Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ע<EFBFBD><EFBFBD>:
|
|||
|
ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>Tx<EFBFBD>ж<EFBFBD>
|
|||
|
****************************************************************************/
|
|||
|
void uart_1_write(uint8_t data)
|
|||
|
{
|
|||
|
UART_1_CTRL->TX_DATA = data;
|
|||
|
while(UART_1_CTRL->TI == 0);
|
|||
|
UART_1_CTRL->TI = 0;
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
UART1<EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>Rx FIFO<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
pcnt - <EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
pbuf - ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>ŵ<EFBFBD>buf
|
|||
|
ע<EFBFBD><EFBFBD>: FIFO<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>buf<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD>ֽ<EFBFBD>
|
|||
|
****************************************************************************/
|
|||
|
void uart_1_read(uint8_t *pcnt, uint8_t *pbuf)
|
|||
|
{
|
|||
|
uint8_t i = 0;
|
|||
|
volatile uint8_t dly = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>64Mʱ<4D>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>delay<61><79>ʱ400ns<6E><73><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
while(!UART_1_CTRL->RX_FIFO_EMPTY)
|
|||
|
{
|
|||
|
*(pbuf+i) = UART_1_CTRL->RX_DATA;
|
|||
|
i++;
|
|||
|
//
|
|||
|
dly++;
|
|||
|
dly++;
|
|||
|
dly++;
|
|||
|
}
|
|||
|
|
|||
|
*pcnt = i;
|
|||
|
}
|
|||
|
void uart_1_close(void)
|
|||
|
{
|
|||
|
UART_1_CTRL->UART_EN = 0;
|
|||
|
NVIC_DisableIRQ(UART1_IRQn);
|
|||
|
}
|
|||
|
|
|||
|
void uartRx_callback(void)
|
|||
|
{
|
|||
|
uint8_t cnt,temp[4];
|
|||
|
uart_1_read(&cnt,temp);
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
UART1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ע<EFBFBD><EFBFBD>:
|
|||
|
RX_FLUSHֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λRX_FIFO_EMPTY,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RI
|
|||
|
*****************************************************************************/
|
|||
|
void UART1_IRQHandler(void)
|
|||
|
{
|
|||
|
if ((UART_1_CTRL->RI) == 1)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>buf[]<5D><>
|
|||
|
|
|||
|
UART_1_CTRL->RI = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
uartRx_callback();
|
|||
|
}
|
|||
|
|
|||
|
#if 0
|
|||
|
if ((UART_1_CTRL->TI) == 1)
|
|||
|
{
|
|||
|
UART_1_CTRL->TI = 0;
|
|||
|
}
|
|||
|
#endif
|
|||
|
if((UART_1_CTRL->PAR_FAIL) == 1)
|
|||
|
{
|
|||
|
UART_1_CTRL->PAR_FAIL = 1;
|
|||
|
}
|
|||
|
}
|