| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- /*******************************************************************************
- Copyright (c) 2006-2009 Tensilica Inc.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- --------------------------------------------------------------------------------
- xtbsp.h Xtensa Board Support Package API
- This API defines a minimal set of board-support functions that every supported
- Xtensa board is expected to provide in the board-support-package (BSP) library
- associated with the board-specific LSP. Only basic board functions are provided
- in this board-independent API. API functions not applicable to a board must be
- stubbed in its BSP library. More complex operations must use a board-specific
- interface. Functions are grouped by type of peripheral device.
- *******************************************************************************/
- #ifndef _XTBSP_H_
- #define _XTBSP_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- /*******************************************************************************
- BOARD INITIALIZATION.
- The board with all its devices is initialized by xtbsp_board_init().
- Individual devices represented by this API can be reinitialized at any
- time by calling their inidividual device init functions (grouped with
- other device functions). This might be useful to (say) change the baud
- rate of the UART.
- */
- /*
- Initialize the board. Must call before any other API function.
- Iniitializes BSP, board in general, and all devices on the board.
- */
- extern void xtbsp_board_init(void);
- /*******************************************************************************
- BOARD CHARACTERISTICS and CONVENIENCE FUNCTIONS.
- Board support functions not associated with a particular peripheral device.
- */
- /*
- Return a short string representing the type of board.
- If the board has a display, the string must fit on a single line.
- */
- extern const char * xtbsp_board_name(void);
- /*
- Hardware reset the entire board (if possible). Does not return if successful.
- If this function returns, it is stubbed out or not possible with this board.
- */
- extern void xtbsp_board_reset(void);
- /*
- Return the clock frequency in Hertz. May be constant or computed.
- */
- extern unsigned xtbsp_clock_freq_hz(void);
- /*
- Return the clock period in picoseconds. May be constant or computed.
- */
- extern unsigned xtbsp_clock_period_ps(void);
- /*
- Spin (at least) a number of cycles per the processor's CCOUNT register.
- Unlike a s/w delay loop, the duration is not affected by compiler
- optimization or interrupts completed within the delay period.
- If the processor doesn't have CCOUNT, a s/w delay loop is used to obtain
- a rough approximation of the cycle count.
- */
- extern void xtbsp_delay_cycles(unsigned cycles);
- /*
- Spin at least a number of nanoseconds (approximate and err in the high side).
- BSP implementation should do this efficiently, avoiding integer overflow or
- excessive loss of precision, run-time division or floating point.
- Function implementation (vs. macro) allows BSP to optimize for the clock
- frequency by pre-computing (or using constant) scale factors.
- */
- extern void xtbsp_delay_ns(unsigned ns);
- /*******************************************************************************
- C LIBRARY SUPPORT.
- These functions are called by the C library libgloss interface.
- Their names are predetermined apart from this BSP API.
- */
- /*
- Initialize the board. Called by C library initialization code.
- Usually simply calls xtbsp_board_init().
- */
- extern void board_init(void);
- /*
- (Wait for and) Input a single byte from the default character I/O
- device. Return -1 if there is no input device.
- This device is usually a UART and this function calls xtbsp_uart_getchar().
- On some boards (eg.) it might be a directly connected keyboard.
- */
- extern int inbyte(void);
- /*
- Output a single char to the default character I/O device (and wait
- until it's been taken).
- This device is usually a UART and this function calls xtbsp_uart_putchar().
- On some boards (eg.) it might be a directly connected bit-mapped screen.
- */
- extern void outbyte(int c);
- /*******************************************************************************
- UART (SERIAL I/O).
- Supports a single UART in a simple polling mode and provides control of
- receiver and transmitter data interrupts (client must provide handler).
- Provides a mapping to processor interrupt number which can be used with
- the HAL to control processor interrupt enable (INTENABLE) etc.
- */
- /* Bitmasks to identify UART interrupts. */
- typedef enum xtbsp_uart_int {
- xtbsp_uart_int_rx = 1<<0,
- xtbsp_uart_int_tx = 1<<1,
- /* mask of all valid interrupt bits */
- xtbsp_uart_int_all = (1<<2)-1
- } xtbsp_uart_int;
- /*
- Return non-zero if the board has a UART.
- */
- extern int xtbsp_uart_exists(void);
- /*
- Initialize the UART:
- parity = 0 (none), 1 (odd), or 2 (even).
- nstop = 1 or 2 (stop bits).
- ndata = 7 or 8 (data bits).
- Disables all UART interrupts.
- Returns non-zero if failed (perhaps due to unsupported parameter values).
- Must call before any of the following functions.
- */
- extern int xtbsp_uart_init(unsigned baud, unsigned ndata,
- unsigned parity, unsigned nstop);
- #define xtbsp_uart_init_default() xtbsp_uart_init(38400, 8, 0, 1)
- /*
- (Wait for and) Input a single char from the UART.
- Any pending xtbsp_uart_int_rx interrupt is cleared.
- */
- extern char xtbsp_uart_getchar(void);
- /*
- (Wait for transmitter ready and) Output a single char to the UART.
- Any pending xtbsp_uart_int_tx interrupt is cleared.
- */
- extern void xtbsp_uart_putchar(const char c);
- /*
- Return true (non-zero) if a character has been received and is ready
- to be input by xtbsp_uart_getchar() without waiting, else return 0.
- */
- extern int xtbsp_uart_get_isready(void);
- /*
- Return non-zero if a character may be output by xtbsp_uart_putchar()
- without waiting, else return 0.
- Any pending xtbsp_uart_int_tx interrupt is cleared.
- */
- extern int xtbsp_uart_put_isready(void);
- /*
- Return the enable status of all UART interrupts represented by this API,
- that is those with bits defined in type xtbsp_uart_int (1 bit = enabled).
- This is the enable status at the device, not the processor's INTENABLE.
- */
- extern xtbsp_uart_int xtbsp_uart_int_enable_status(void);
- /*
- Enable selected UART interrupts at the device.
- */
- extern void xtbsp_uart_int_enable(const xtbsp_uart_int mask);
- /*
- Disable selected UART interrupts at the device.
- */
- extern void xtbsp_uart_int_disable(const xtbsp_uart_int mask);
- /*
- Return the interrupt number (0..31) to which the selected UART interrupt
- is connected. May be used with the link-time HAL to obtain more information,
- eg. Xthal_intlevel_mask[xtbsp_uart_int_number(xtbsp_uart_int_rx)]
- This information can be used to control the processor's INTENABLE, etc.
- Result is -1 if not connected, undefined if mask has more than 1 bit set.
- */
- extern int xtbsp_uart_int_number(const xtbsp_uart_int mask);
- /*******************************************************************************
- DISPLAY.
- Supports a single display that can render a series of ASCII characters.
- Functions are provided to perform generic display tasks such as display
- a string, display character by character, or blank the display.
- Chars are 7-bit printable ASCII. Strings are C style NUL \0 terminated.
- These functions busy-wait for any required timing delays so the caller does
- not have to deal with timing. Some displays require long delays which in
- some client applications warrant a board and RTOS specific approach to
- driving the display, however that is beyond the scope of this API.
- */
- /*
- Return non-zero if board has a display.
- */
- extern int xtbsp_display_exists(void);
- /*
- Initialize the display. Must call before any of the following functions.
- */
- extern void xtbsp_display_init(void);
- /*
- Display a single char at position pos (0 is leftmost). Other positions are
- left untouched. Positions beyond the width of the display are ignored.
- */
- extern void xtbsp_display_char(unsigned pos, const char c);
- /*
- Display a string. Blank-pad to or truncate at the end of the display
- (overwrites any previous string so don't need to blank display first).
- */
- extern void xtbsp_display_string(const char *s);
- /*
- Blank (clear) the entire display.
- */
- extern void xtbsp_display_blank(void);
- #ifdef __cplusplus
- }
- #endif
- #endif /* _XTBSP_H_ */
|