Infineon Logo AIROC BTSDK v4.9 - Documentation
 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups
PeripheralUart

Data Structures

struct  HCI_CMD_TAG
 HCI command header. Internal. NOTE: PUART does not support HCI commands. More...
 
struct  P_UART_TRANSPORT_PACKET_TAG
 PUART transport packet type defines. More...
 

Macros

#define P_UART_INT_STATUS_ADDR   sr_ptu_status_adr5
 Defines a Peripheral UART driver. More...
 
#define P_UART_INT_ENABLE_ADDR   sr_ptu_en_adr5
 
#define P_UART_RX_FIFO_ADDR   dp_uart2_data_adr
 
#define P_UART_TX_FIFO_ADDR   dp_uart2_data_adr
 
#define P_UART_WATER_MARK_RX_ADDR   dc_ptu_uart2_rfl_adr
 
#define P_UART_WATER_MARK_TX_ADDR   dc_ptu_uart2_tfl_adr
 
#define P_UART_FLOW_CONTROL_WATER_MARK_ADDR   dc_ptu_uart2_rfc_adr
 
#define P_UART_LINE_CONTROL_ADDR   dc_ptu_uart2_lcr_adr
 
#define P_UART_LINE_STATUS_ADDR   dc_ptu_uart2_lsr_adr
 
#define P_UART_MODEM_CONTROL_ADDR   dc_ptu_uart2_mcr_adr
 
#define P_UART_HIGH_BAUDRATE_DIV_ADDR   dc_ptu_uart2_dhbr_adr
 
#define P_UART_LOW_BAUDRATE_DIV_ADDR   dc_ptu_uart2_dlbr_adr
 
#define P_UART_FIFO_CONTROL_ADDR   dc_ptu_uart2_fcr_adr
 
#define P_UART_MSR_LINE_ADDR   dc_ptu_uart2_msr_adr
 
#define P_UART_PTU_HC_SEL_ADDR   dc_ptu_hc_sel_adr
 
#define P_UART_ESC_ADDR   dc_ptu_uart2_esc_adr
 
#define P_UART_IN_BUFFER_LEN   16
 PUART RX buffer depth. This is fixed to 16 bytes and cannot be changed.
 
#define P_UART_RX_FIFO_SIZE   P_UART_IN_BUFFER_LEN
 PUART HW RX FIFO depth. This is fixed to 16 bytes and cannot be changed.
 
#define P_UART_OUT_BUFFER_LEN   16
 PUART TX buffer depth. This is fixed to 16 bytes and cannot be changed.
 
#define P_UART_TX_FIFO_SIZE   P_UART_OUT_BUFFER_LEN
 PUART HW TX FIFO depth. This is fixed to 16 bytes and cannot be changed.
 
#define P_UART_WATER_MARK_RX_LEVEL_HIGHEST   (P_UART_RX_FIFO_SIZE - 1)
 Highest RX watermark is FIFO - 1.
 
#define P_UART_WATER_MARK_TX_LEVEL_HIGHEST   (P_UART_TX_FIFO_SIZE - 1)
 Highest TX watermark is FIFO - 1.
 
#define P_UART_WATER_MARK_RX_LEVEL_ONE_BYTE   1
 Lowest RX watermark is 1 byte.
 
#define P_UART_INT_ENABLE   UART_REG(P_UART_INT_ENABLE_ADDR)
 Helper macros.
 
#define P_UART_INT_STATUS   UART_REG(P_UART_INT_STATUS_ADDR)
 
#define P_UART_INT_CLEAR(x)   UART_REG(P_UART_INT_STATUS_ADDR) = x
 
#define P_UART_INT_DISABLE   UART_REG(P_UART_INT_DISABLE_ADDR)
 
#define P_UART_RX_FIFO()   UART_REG(P_UART_RX_FIFO_ADDR)
 
#define P_UART_TX_FIFO(x)   UART_REG(P_UART_TX_FIFO_ADDR) = x
 
#define P_UART_LINE_CONTROL(x)   UART_REG(P_UART_LINE_CONTROL_ADDR) = x
 
#define P_UART_LINE_CONTROL_GET()   UART_REG(P_UART_LINE_CONTROL_ADDR)
 
#define P_UART_MODEM_CONTROL(x)   UART_REG(P_UART_MODEM_CONTROL_ADDR) = x
 
#define P_UART_MODEM_CONTROL_GET()   UART_REG(P_UART_MODEM_CONTROL_ADDR)
 
#define P_UART_FIFO_CONTROL(x)   UART_REG(P_UART_FIFO_CONTROL_ADDR) = x
 
#define P_UART_MSR_STATUS()   UART_REG(P_UART_MSR_LINE_ADDR)
 
#define P_UART_HIGH_BAUDRATE_DIV(x)   UART_REG(P_UART_HIGH_BAUDRATE_DIV_ADDR) = x
 
#define P_UART_LOW_BAUDRATE_DIV(x)   UART_REG(P_UART_LOW_BAUDRATE_DIV_ADDR) = x
 
#define P_UART_WATER_MARK_RX_LEVEL(x)   UART_REG(P_UART_WATER_MARK_RX_ADDR) = x
 
#define P_UART_WATER_MARK_TX_LEVEL(x)   UART_REG(P_UART_WATER_MARK_TX_ADDR) = x
 
#define P_UART_FLOW_CONTROL_WATER_MARK_LEVEL(x)   UART_REG(P_UART_FLOW_CONTROL_WATER_MARK_ADDR) = x
 
#define P_UART_ESC_CHAR   UART_REG(P_UART_ESC_ADDR)
 
#define P_UART_RX_FIFO_NOT_EMPTY()   puart_rxFifoNotEmpty()
 Helper macro to check if the RX HW FIFO is not empty.
 
#define P_UART_TX_FIFO_IS_EMPTY()   ( ( REG32(P_UART_LINE_STATUS_ADDR) & ( P_UART_LSR_TX_FIFO_NOT_EMPTY | P_UART_LSR_TX_IDLE ) ) == P_UART_LSR_TX_IDLE )
 Helper macro to check if the TX HW FIFO is empty.
 

Typedefs

typedef enum P_UART_RX_STATE_TAG P_UART_RX_STATE
 PUART driver RX states. Internal.
 
typedef enum P_UART_TX_STATE_TAG P_UART_TX_STATE
 PUART driver TX states. Internal.
 
typedef struct HCI_CMD_TAG P_UART_HCI_CMD
 HCI command header. Internal. NOTE: PUART does not support HCI commands.
 
typedef enum P_UART_FUNCTION_TAG P_UART_FUNCTION
 PUART function control. Internal.
 
typedef UINT8 P_UART_TRANSPORT_PACKET_TYPE
 
typedef struct
P_UART_TRANSPORT_PACKET_TAG 
P_UART_TRANSPORT_PACKET
 PUART transport packet type defines.
 

Enumerations

enum  {
  P_UART_ISR_TX_FF_MASK = 0x01, P_UART_ISR_TX_FAE_MASK = 0x02, P_UART_ISR_RX_AFF_MASK = 0x04, P_UART_ISR_RX_FE_MASK = 0x08,
  P_UART_ISR_RX_RES_MASK = 0x10, P_UART_ISR_RX_PE_MASK = 0x20, P_UART_ISR_RX_BRK_MASK = 0x40, P_UART_ISR_RX_CTS_MASK = 0x80
}
 PUART interrupt control bits. Internal.
 
enum  {
  P_UART_LCR_STB_MASK = 0x0001, P_UART_LCR_PEN_MASK = 0x0002, P_UART_LCR_EPS_MASK = 0x0004, P_UART_LCR_RXEN_MASK = 0x0008,
  P_UART_LCR_LBC_MASK = 0x0010, P_UART_LCR_TXOEN_MASK = 0x0020, P_UART_LCR_RTSOEN_MASK = 0x0040, P_UART_LCR_SLIP_MASK = 0x0080,
  P_UART_LCR_SLIP_CRC_RX_ENABLE_MASK = 0x0100, P_UART_LCR_SLIP_CRC_INVERT_MASK = 0x0200, P_UART_LCR_SLIP_CRC_LSB_1ST_MASK = 0x0400, P_UART_LCR_SLIP_CRC_TX_ENABLE_MASK = 0x0800
}
 PUART line control bits. Internal. More...
 
enum  { P_UART_LSR_TX_FIFO_NOT_EMPTY = 0x0004, P_UART_LSR_TX_IDLE = 0x0008, P_UART_LSR_END_DELIMETER_NOT_DONE_MASK = 0x0010 }
 PUART status bits. Internal.
 
enum  {
  P_UART_MCR_TXEN_MASK = 0x0001, P_UART_MCR_RTS_MASK = 0x0002, P_UART_MCR_XON_XOFF_MASK = 0x0004, P_UART_MCR_HIGH_RATE_MASK = 0x0008,
  P_UART_MCR_LOOPBACK_MASK = 0x0010, P_UART_MCR_AUTORTS_MASK = 0x0020, P_UART_MCR_AUTOCTS_MASK = 0x0040, P_UART_MCR_BAUD_ADJ_MASK = 0x0080,
  P_UART_MCR_PKT_FLOW_RX_MASK = 0x0100, P_UART_MCR_SEND_XON_NOW = 0x0200
}
 PUART modem control bits. Internal. More...
 
enum  { P_UART_MSR_CTS_MASK = 0x0001, P_UART_MSR_RX_MASK = 0x0004 }
 PUART modem status bits. Internal.
 
enum  { P_UART_FCR_RX_FIFO_RESET_MASK = 0x001, P_UART_FCR_TX_FIFO_RESET_MASK = 0x002, P_UART_FCR_SLIP_RX_RESYNC_MASK = 0x004, P_UART_FCR_SLIP_START_END_FRAME_MASK = 0x008 }
 PUART flow control bits. Internal.
 
enum  {
  P_UART_CLK = 24000000, P_UART_SAMPLE_CLOCK = 16, DEFAULT_P_UART_BAUDRATE = 115200, DEFAULT_P_UART_HWFLOWCONTROLWATERMARK = 13,
  DEFAULT_P_UART_MIN_PKT_LENGTH = 1
}
 Some useful default constants used by teh driver.
 
enum  P_UART_RX_STATE_TAG {
  P_UART_RX_IDLE, P_UART_RX_TYPE, P_UART_RX_PAYLOAD, P_UART_RX_READ_DONE,
  P_UART_RX_RESYNC, P_UART_DROP_PACKET
}
 PUART driver RX states. Internal.
 
enum  P_UART_TX_STATE_TAG {
  P_UART_TX_IDLE, P_UART_TX_BUSY, P_UART_TX_WAIT_FIFO_EMPTY, P_UART_TX_DONE,
  P_UART_TX_WRONG_STATE
}
 PUART driver TX states. Internal.
 
enum  P_UART_FUNCTION_TAG { P_UART_HCI, P_UART_HID, P_UART_SENSOR }
 PUART function control. Internal.
 

Functions

void puart_init (void)
 PUART initialization function. More...
 
void puart_interruptHandler (void)
 ISR context interrupt handler. More...
 
void puart_calculateBaudrate (UINT8 *dhbr, UINT8 *dlbr, UINT32 baudrate, UINT32 clk)
 Calculates the baud rate. Internal, not for app use.
 
void puart_enableInterrupt (void)
 Enables CM3 interrupt from PUART HW block.
 
void puart_flowOn (void)
 Turn on flow control.
 
void puart_flowOff (void)
 Turn off flow control.
 
void puart_disableTx (void)
 Disable the HW TX FIFO.
 
void puart_enableTx (void)
 Enable the HW TXFIFO.
 
void puart_setBaudrate (UINT8 dhbr, UINT8 dlbr, UINT32 baudrate)
 Set baud rate. More...
 
void puart_synchronousRead (UINT8 *buffer, UINT32 length)
 Performs a blocking read from the RX FIFO. More...
 
void puart_synchronousWrite (UINT8 *buffer, UINT32 length)
 Performs a blocking write to the TX FIFO. More...
 
BOOL32 puart_rxFifoNotEmpty (void)
 Check if the RX FIFO is not empty. More...
 
int puart_rxHandler (void *unused)
 Thread context RX interrupt dispatch function. Internal.
 
int puart_txHandler (void *unused)
 Thread context TX interrupt dispatch function. Internal.
 
void puart_print (char *string)
 Prints a string to PUART. More...
 
void puart_write (UINT8 byte)
 Write a single byte to PUART. More...
 
BOOL32 puart_read (UINT8 *readbyte)
 Read a single byte from PUART. More...
 
BOOL32 puart_selectUartPads (UINT8 rxdPortPin, UINT8 txdPortPin, UINT8 ctsPortPin, UINT8 rtsPortPin)
 Allows the application to configure GPIOs for PUART. More...
 
BOOL32 puart_checkRxdPortPin (UINT8 rxdPortPin)
 Check if the given RXd port-pin combination is valid for the SoC. More...
 
BOOL32 puart_checkTxdPortPin (UINT8 txdPortPin)
 Check if the given TXd port-pin combination is valid for the SoC. More...
 
BOOL32 puart_checkCtsPortPin (UINT8 ctsPortPin)
 Check if the given CTS port-pin combination is valid for the SoC. More...
 
BOOL32 puart_checkRtsPortPin (UINT8 rtsPortPin)
 Check if the given RTS port-pin combination is valid for the SoC. More...
 

Detailed Description

Macro Definition Documentation

#define P_UART_INT_STATUS_ADDR   sr_ptu_status_adr5

Defines a Peripheral UART driver.

PUART control registers. Internal.

Enumeration Type Documentation

anonymous enum

PUART line control bits. Internal.

Enumerator
P_UART_LCR_STB_MASK 

Stop bits mask. 0 = 1 stop bit (default); 1 = 2 stop bits.

P_UART_LCR_PEN_MASK 

Parity enable mask. 0 = disable parity (default); 1 = enable parity.

P_UART_LCR_EPS_MASK 

Even parity mask. 0 = odd parity (default); 1 = even parity.

P_UART_LCR_SLIP_MASK 

SLIP - unsupported.

anonymous enum

PUART modem control bits. Internal.

Enumerator
P_UART_MCR_LOOPBACK_MASK 

Loopback mode.

0 = no loopback (default); 1 = enable loopback. When enabled, the UART_CTS_N pin is reflected back as UART_RTS_N, and UART_RXD is reflected back as UART_TXD. This is useful for verifying board connectivity.

Function Documentation

BOOL32 puart_checkCtsPortPin ( UINT8  ctsPortPin)

Check if the given CTS port-pin combination is valid for the SoC.

Parameters
ctsPortPinThe GPIO PORT and pin combination for CTS. When P#, ctsPortPin = ((# / 16) << 5) | (# % 16).
Returns
TRUE if valid; else FALSE.
BOOL32 puart_checkRtsPortPin ( UINT8  rtsPortPin)

Check if the given RTS port-pin combination is valid for the SoC.

Parameters
rtsPortPinThe GPIO PORT and pin combination for RTS. When P#, rtsPortPin = ((# / 16) << 5) | (# % 16).
Returns
TRUE if valid; else FALSE.
BOOL32 puart_checkRxdPortPin ( UINT8  rxdPortPin)

Check if the given RXd port-pin combination is valid for the SoC.

Parameters
rxdPortPinThe GPIO PORT and pin combination for RXd. When P#, rxdPortPin = ((# / 16) << 5) | (# % 16).
Returns
TRUE if valid; else FALSE.
BOOL32 puart_checkTxdPortPin ( UINT8  txdPortPin)

Check if the given TXd port-pin combination is valid for the SoC.

Parameters
txdPortPinThe GPIO PORT and pin combination for TXd. When P#, txdPortPin = ((# / 16) << 5) | (# % 16).
Returns
TRUE if valid; else FALSE.
void puart_init ( void  )

PUART initialization function.

This is to be invoked only once. If the application uses a non-NULL BLE_PROFILE_PUART_CFG when invoking bleapp_set_cfg, then this will be invoked by the framwork.

void puart_interruptHandler ( void  )

ISR context interrupt handler.

Internal. The application never needs to handle PUART interrupts in the ISR context. Interrupts are always serialized to application thread.

void puart_print ( char *  string)

Prints a string to PUART.

Parameters
stringNULL terminated string to write to PUART.
BOOL32 puart_read ( UINT8 *  readbyte)

Read a single byte from PUART.

Parameters
readbytePointer to allocated byte into which to read.
Returns
TRUE if successfully read; else FALSE.
BOOL32 puart_rxFifoNotEmpty ( void  )

Check if the RX FIFO is not empty.

Returns
TRUE if RX FIFO is not empty; else FALSE.
BOOL32 puart_selectUartPads ( UINT8  rxdPortPin,
UINT8  txdPortPin,
UINT8  ctsPortPin,
UINT8  rtsPortPin 
)

Allows the application to configure GPIOs for PUART.

See datasheet for valid options.

Parameters
rxdPortPinThe GPIO PORT and pin combination for RXd. When P#, rxdPortPin = ((# / 16) << 5) | (# % 16).
txdPortPinThe GPIO PORT and pin combination for TXd. When P#, txdPortPin = ((# / 16) << 5) | (# % 16).
ctsPortPinThe GPIO PORT and pin combination for CTS. When P#, ctsPortPin = ((# / 16) << 5) | (# % 16).
rtsPortPinThe GPIO PORT and pin combination for RTS. When P#, rtsPortPin = ((# / 16) << 5) | (# % 16).
Returns
TRUE when successful; else FALSE.
void puart_setBaudrate ( UINT8  dhbr,
UINT8  dlbr,
UINT32  baudrate 
)

Set baud rate.

Parameters
dhbrInternal. Should be 0x00.
dlbrInternal. Should be 0x00.
baudrateThe desired baudrate.
void puart_synchronousRead ( UINT8 *  buffer,
UINT32  length 
)

Performs a blocking read from the RX FIFO.

Parameters
bufferPointer to allocated memory into which data from the RX FIFO is read into. If NULL, length bytes of data from the RX FIFO will be discarded.
lengthThe number of bytes to read from the RX FIFO.
void puart_synchronousWrite ( UINT8 *  buffer,
UINT32  length 
)

Performs a blocking write to the TX FIFO.

Parameters
bufferPointer to the buffer that has the data to be written to the TX FIFO. Cannot be NULL.
lengthThe number of bytes to write. Cannot be larger than 16.
void puart_write ( UINT8  byte)

Write a single byte to PUART.

Parameters
byteThe byte to write.