mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-27 12:11:41 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			270 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*******************************************************************************
 | |
| 
 | |
|   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_ */
 |