mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 00:51: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_ */
							 |