Strict Standards: Declaration of action_plugin_importoldchangelog::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/aqq20189/public_html/embedders.org/kurt/wiki/lib/plugins/importoldchangelog/action.php on line 8

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parserutils.php on line 202

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parserutils.php on line 205

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parserutils.php on line 314

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parserutils.php on line 454

Strict Standards: Declaration of cache_instructions::retrieveCache() should be compatible with cache::retrieveCache($clean = true) in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/cache.php on line 291

Deprecated: Function split() is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/auth.php on line 146

Warning: Cannot modify header information - headers already sent by (output started at /home/aqq20189/public_html/embedders.org/kurt/wiki/lib/plugins/importoldchangelog/action.php:8) in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/auth.php on line 236

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/auth.php on line 390

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/auth.php on line 390

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/auth.php on line 387

Strict Standards: Only variables should be passed by reference in /home/aqq20189/public_html/embedders.org/kurt/wiki/doku.php on line 69

Warning: Cannot modify header information - headers already sent by (output started at /home/aqq20189/public_html/embedders.org/kurt/wiki/lib/plugins/importoldchangelog/action.php:8) in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/actions.php on line 128
sources:uart1 [embedders WiKi ]
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/template.php on line 222
 

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/parser.php on line 66

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/lexer.php on line 292

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/handler.php on line 22

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/handler.php on line 44

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/handler.php on line 208

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/handler.php on line 236

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/handler.php on line 290

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/handler.php on line 323

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/handler.php on line 560

Deprecated: Function split() is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/pageutils.php on line 334

Deprecated: Function split() is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/metadata.php on line 276

Deprecated: Function split() is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/pageutils.php on line 334

Deprecated: Function split() is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/metadata.php on line 276

Deprecated: Assigning the return value of new by reference is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/parser/xhtml.php on line 980

Deprecated: Function split() is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/pageutils.php on line 334

Deprecated: Function split() is deprecated in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/pageutils.php on line 334

Аппаратный UART

c-file

/**
* @file	uart1.c
* @brief	UART1 module
*
* @author      Rustem Kalimullin
* @par E-mail:
*              hellos@mail.ru
*/
 
#include "common.h"
#include "circ_buf.h"
 
#ifndef UART1_BUFFER_SIZE
#define UART1_BUFFER_SIZE 0x10
#endif
 
#if (UART1_BUFFER_SIZE & (UART1_BUFFER_SIZE-1))
#error UART1_BUFFER_SIZE must be power of 2
#endif
 
DECLARE_CIRC_BUFFER( RxBuf1, UART1_BUFFER_SIZE );
DECLARE_CIRC_BUFFER( TxBuf1, UART1_BUFFER_SIZE );
 
 
//---------------------------------------------------------
void uart1_purge(int mask)
{
	istate_t int_state = __get_interrupt_state();
	__disable_interrupt();
 
	if( mask & PURGE_RXCLEAR ) circ_Init(&RxBuf1.b);
	if( mask & PURGE_TXCLEAR ) circ_Init(&TxBuf1.b);
 
	if( mask & PURGE_ABORT ) {
		U1CTL |= SWRST;
		__no_operation();
		U1CTL &= ~SWRST;
		U1IE |= (URXIE1 | UTXIE1);
	}
 
	__set_interrupt_state(int_state);
}
 
 
//---------------------------------------------------------
void uart1_enable_parity(void)
{
	istate_t int_state = __get_interrupt_state();
	U1CTL  = PENA | PEV | SWRST;  // 7e1, Software Reset
	U1CTL &= ~SWRST;
	U1IE |= (URXIE1 | UTXIE1);
	__set_interrupt_state(int_state);
}
 
//---------------------------------------------------------
void uart1_init(long baud)
{
	istate_t int_state = __get_interrupt_state();
	unsigned int uart_div = (long)xtal_freq / (long)baud;
 
	__disable_interrupt();
 
	U1CTL  = CHAR | SWRST;      // 8n1, Software Reset
	U1TCTL = SSEL1;             // UCLK = SMCLK
	U1MCTL = 0x00;              // no modulation
 
	U1BR0 = (unsigned char) (uart_div & 0xFF);
	U1BR1 = (unsigned char) (uart_div >> 8);
 
	uart1_purge( PURGE_ABORT | PURGE_RXCLEAR | PURGE_TXCLEAR );
 
	P3SEL |= (1<<6)|(1<<7);       // P3.6,7 = USART1 option select
	P3DIR |= (1<<6);              // P3.6 = output direction
 
	U1ME |= (URXE1 | UTXE1);
	U1CTL &= ~SWRST;
	U1IE |= (URXIE1 | UTXIE1);
 
	__set_interrupt_state(int_state);
}
 
 
//---------------------------------------------------------
unsigned char uart1_getchar(void)
{
	int t;
	do {
		t = circ_Get( &RxBuf1.b );
	} while( t == -1 );
	return t;
}
 
//---------------------------------------------------------
int uart1_getchar_timeout( unsigned int tot )
{
	int t;
	do {
		t = circ_Get( &RxBuf1.b );
		if( t != -1 ) break;
	} while( --tot );
	return t;
}
 
//---------------------------------------------------------
void uart1_putchar( unsigned char ch )
{
	while( circ_Put( &TxBuf1.b, ch ) == -1 ) continue;
	if ((U1TCTL & TXEPT)) SET_BITS(U1IFG,UTXIFG1);
}
 
//---------------------------------------------------------
void uart1_puts(const char *s)
{
	while(*s) uart1_putchar(*s++);
}
 
//---------------------------------------------------------
int uart1_is_rxdata(void)
{
	return ( circ_HasData( &RxBuf1.b ) );
}
 
//---------------------------------------------------------
int uart1_is_txdata(void)
{
	if ( circ_HasData( &TxBuf1.b ) ) {
		return 1;
	} else {
		return (U1IFG & UTXIFG1);
	}
}
 
//---------------------------------------------------------
#pragma vector=USART1RX_VECTOR
__interrupt void uart1_rx_handler(void)
{
	circ_Put( &RxBuf1.b, U1RXBUF );
}
 
//---------------------------------------------------------
#pragma vector=USART1TX_VECTOR
__interrupt void uart1_tx_handler(void)
{
	int t = circ_Get( &TxBuf1.b );
	if( t != -1 ) {
		U1TXBUF = t;
	} else {
		U1TCTL |= TXEPT;
	}
}

h-file

#ifndef KR_UART1_INCLUDED
#define KR_UART1_INCLUDED
 
enum { PURGE_ABORT=1, PURGE_TXCLEAR=2, PURGE_RXCLEAR=4 };
 
void uart1_init( long baud );
 
void uart1_purge( int mask );
 
unsigned char uart1_getchar( void );
int uart1_getchar_timeout( unsigned int tot );
 
void uart1_putchar( unsigned char ch );
void uart1_puts( const char *s );
 
int uart1_is_rxdata( void );
int uart1_is_txdata( void );
 
void uart1_enable_parity( void );
 
#endif
 

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/aqq20189/public_html/embedders.org/kurt/wiki/inc/template.php on line 738
sources/uart1.txt · Последние изменения: 2021/10/09 14:22 kurt
 

Strict Standards: Only variables should be passed by reference in /home/aqq20189/public_html/embedders.org/kurt/wiki/doku.php on line 77