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: 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 359
sources:spi0
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
/**
* @file	spi.c
* @brief	SPI functions
*
* Implement SPI inteface communications
*
* @author      Rustem Kalimullin
* @par E-mail:
*              hellos@mail.ru
* @par Copyright:
*              (c) Kurt, 2005
*/
 
 
#include "common.h"
 
#define SPI_PORT_WR  (P3OUT)  //!< Output port
#define SPI_PORT_RD  (P3IN)   //!< Input port
#define SPI_PORT_DIR (P3DIR)
#define SPI_PORT_SEL (P3SEL)  //!< Port options
#define SPI_DO (1<<1)         //!< Output pin mask
#define SPI_DI (1<<2)         //!< Input pin mask
#define SPI_CK (1<<3)         //!< Clock pin mask
 
//---------------------------------------------------------
//! Send @a data to serial line. Word length in @a bits
unsigned int spi_write_bits( unsigned int data, unsigned int bits )
{
	if( (bits > 16) || (bits == 0) ) return 0xFFFF;
 
	for( unsigned int i=16-bits; i > 0; i-- ) data <<= 1;  // Align data word to left
 
	unsigned int read = 0;
	do {
 
		if( data & 0x8000 ) {
			SPI_PORT_WR |= SPI_DO;
		} else {
			SPI_PORT_WR &= ~SPI_DO;
		}
 
		SPI_PORT_WR |= SPI_CK;
		for( unsigned int i=3; i; --i ) continue;
		SPI_PORT_WR &= ~SPI_CK;
 
		data <<= 1;
		read <<= 1;
		if( SPI_PORT_RD & SPI_DI ) read |= 1;
 
	} while( --bits );
 
	return read;
}
 
//---------------------------------------------------------
//! Enable hardware SPI
void spi_enable(void)
{
	U0CTL  |= SWRST;
	SPI_PORT_SEL |= (SPI_DO | SPI_DI | SPI_CK );  // enable SPI option
	SPI_PORT_DIR |= (SPI_DO | SPI_CK);            // output pins
	SPI_PORT_DIR &= ~(SPI_DI);                    // input pins
	U0ME   |= USPIE0;                             // Enable USART0 SPI mode
	U0CTL  &= ~SWRST;
}
 
//---------------------------------------------------------
//! Disable hardware SPI
void spi_disable(void)
{
	U0CTL  |= SWRST;
	SPI_PORT_SEL &= ~(SPI_DO | SPI_DI | SPI_CK ); // disable SPI option
	SPI_PORT_DIR |= (SPI_DO | SPI_CK);            // output pins
	SPI_PORT_DIR &= ~(SPI_DI);                    // input pins
	U0ME   &= ~USPIE0;                            // Disable USART0 SPI mode
	U0CTL  &= ~SWRST;
}
 
 
//---------------------------------------------------------
//! Init hardware SPI
void spi_init( void )
{
	U0CTL   = CHAR | SYNC | MM | SWRST;        // 8-bit SPI Master
#ifdef KR_SPI_FULLSPEED	
	U0TCTL  = CKPL+SSEL0+SSEL1+STC;            // ACLK, 3-pin mode
	U0BR0   = 0x02;                            // UCLK = SMCLK
#else
	U0TCTL  = CKPL+SSEL1+SSEL0+STC;            // SMCLK, 3-pin mode
	U0BR0   = 0x04;                            // UCLK/4
#endif	
	U0BR1   = 0x00;
	U0MCTL  = 0x00;                            // no modulation
	spi_enable();
}
 
//---------------------------------------------------------
//! Send @a data byte to serial line.
unsigned char spi_write( unsigned char data )
{
	unsigned int tot;
	tot = 0xFFF;
	do {
		if( 0 == --tot ) return 0xFF;
	} while( !(U0IFG & UTXIFG0) );  // USART0 TX buffer ready?
 
	U0TXBUF = data;
	tot = 0xFFF;
	do {
		if ( 0 == --tot ) return 0xFF;
	} while( !(U0TCTL & TXEPT) );   // USART0 Transmit complete?
	return U0RXBUF;
}
 
//---------------------------------------------------------
//! Receive byte from serial line.
unsigned char spi_read( void )
{
	return spi_write(0x00);
}