mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-28 04:31:42 +01:00 
			
		
		
		
	
		
			
	
	
		
			270 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			270 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*******************************************************************************
 | ||
|  | 
 | ||
|  |   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_ */
 |