You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CubeSatSim/libs/libmf/include/libmfuart0.h

143 lines
7.0 KiB

#ifndef LIBMFUART0_H
#define LIBMFUART0_H
#include "libmftypes.h"
/*
* UART 0
*/
#if defined SDCC
#define UART0_DEFINE_RXBUFFER(sz) \
static void uart0_define_rxbuffer(void) __naked \
{ \
__asm \
.area XSEG (XDATA) \
.globl _uart0_rxbuffer \
_uart0_rxbuffer: \
.ds sz \
\
.area HOME (CODE) \
.area UART0S0 (CODE) \
.area UART0S1 (CODE) \
.area UART0S2 (CODE) \
.area UART0S3 (CODE) \
.area UART0S4 (CODE) \
.area UART0S5 (CODE) \
\
.area UART0S2 (CODE) \
.db 256-sz \
.db 257-sz \
\
.area UART0S5 (CODE) \
.db sz \
\
.area CSEG (CODE) \
__endasm; \
}
#define UART0_DEFINE_TXBUFFER(sz) \
static void uart0_define_txbuffer(void) __naked \
{ \
__asm \
.area XSEG (XDATA) \
.globl _uart0_txbuffer \
_uart0_txbuffer: \
.ds sz \
\
.area HOME (CODE) \
.area UART0S0 (CODE) \
.area UART0S1 (CODE) \
.area UART0S2 (CODE) \
.area UART0S3 (CODE) \
.area UART0S4 (CODE) \
.area UART0S5 (CODE) \
\
.area UART0S1 (CODE) \
.db 256-sz \
.db 257-sz \
\
.area UART0S4 (CODE) \
.db sz \
\
.area CSEG (CODE) \
__endasm; \
}
#elif defined __CX51__ || defined __C51__
#define UART0_DEFINE_RXBUFFER(sz) \
uint8_t __xdata uart0_rxbuffer[sz]; \
const uint8_t __code uart0_rxbuffer_size[] = { sz, 256-(sz), 257-(sz) };
#define UART0_DEFINE_TXBUFFER(sz) \
uint8_t __xdata uart0_txbuffer[sz]; \
const uint8_t __code uart0_txbuffer_size[] = { sz, 256-(sz), 257-(sz) };
#else
#define UART0_DEFINE_RXBUFFER(sz) \
uint8_t __xdata uart0_rxbuffer[sz]; \
const uint8_t __code uart0_rxbuffer_size[] = { sz };
#define UART0_DEFINE_TXBUFFER(sz) \
uint8_t __xdata uart0_txbuffer[sz]; \
const uint8_t __code uart0_txbuffer_size[] = { sz };
#endif
#if defined SDCC
#pragma callee_saves uart0_txbufptr,uart0_txfreelinear,uart0_rxbufptr,uart0_rxcountlinear
#pragma callee_saves uart0_txfree,uart0_rxcount,uart0_wait_txfree,uart0_wait_rxcount
#pragma callee_saves uart0_txbuffersize,uart0_rxbuffersize,uart0_rxpeek,uart0_txpoke,uart0_txpokehex
#pragma callee_saves uart0_init,uart0_poll,uart0_wait_txfree,uart0_wait_rxcount,uart0_rx,uart0_tx
extern __reentrantb void uart0_irq(void) __interrupt(11) __naked;
#elif defined __CX51__ || defined __C51__
#elif defined __ICC8051__
#else
#error "Compiler unsupported"
#endif
extern __reentrantb uint8_t uart0_poll(void) __reentrant __naked;
extern __reentrantb uint8_t __xdata *uart0_txbufptr(uint8_t idx) __reentrant __naked;
extern __reentrantb uint8_t uart0_txfreelinear(void) __reentrant __naked;
extern __reentrantb uint8_t uart0_txidle(void) __reentrant __naked;
extern __reentrantb uint8_t uart0_txfree(void) __reentrant __naked;
extern __reentrantb const uint8_t __xdata *uart0_rxbufptr(uint8_t idx) __reentrant __naked;
extern __reentrantb uint8_t uart0_rxcountlinear(void) __reentrant __naked;
extern __reentrantb uint8_t uart0_rxcount(void) __reentrant __naked;
extern __reentrantb uint8_t uart0_txbuffersize(void) __reentrant __naked;
extern __reentrantb uint8_t uart0_rxbuffersize(void) __reentrant __naked;
extern __reentrantb uint8_t uart0_rxpeek(uint8_t idx) __reentrant __naked;
extern __reentrantb void uart0_txpoke(uint8_t idx, uint8_t ch) __reentrant __naked;
extern __reentrantb void uart0_txpokehex(uint8_t idx, uint8_t ch) __reentrant __naked;
extern __reentrantb void uart0_rxadvance(uint8_t idx) __reentrant __naked;
extern __reentrantb void uart0_txadvance(uint8_t idx) __reentrant __naked;
extern void uart0_init(uint8_t timernr, uint8_t wl, uint8_t stop);
extern void uart0_stop(void);
extern __reentrantb void uart0_wait_txdone(void) __reentrant;
extern __reentrantb void uart0_wait_txfree(uint8_t v) __reentrant;
extern __reentrantb void uart0_wait_rxcount(uint8_t v) __reentrant;
extern __reentrantb uint8_t uart0_rx(void) __reentrant;
extern __reentrantb void uart0_tx(uint8_t v) __reentrant;
extern __reentrantb void uart0_writestr(const char __generic *ch) __reentrant;
extern __reentrantb uint8_t uart0_writenum16(uint16_t val, uint8_t nrdig, uint8_t flags) __reentrant;
extern __reentrantb uint8_t uart0_writehex16(uint16_t val, uint8_t nrdig, uint8_t flags) __reentrant;
#if defined(SDCC)
extern __reentrantb uint8_t uart0_writenum32(uint32_t val, uint8_t nrdig, uint8_t flags) __reentrant;
extern __reentrantb uint8_t uart0_writehex32(uint32_t val, uint8_t nrdig, uint8_t flags) __reentrant;
#else
extern uint8_t uart0_writenum32(uint32_t val, uint8_t nrdig, uint8_t flags);
extern uint8_t uart0_writehex32(uint32_t val, uint8_t nrdig, uint8_t flags);
#endif
/* legacy */
extern __reentrantb void uart0_writehexu16(uint16_t val, uint8_t nrdig) __reentrant;
extern void uart0_writehexu32(uint32_t val, uint8_t nrdig);
extern __reentrantb void uart0_writeu16(uint16_t val, uint8_t nrdig) __reentrant;
extern void uart0_writeu32(uint32_t val, uint8_t nrdig);
#endif /* LIBMFUART0_H */

Powered by TurnKey Linux.