spi_soft.c

来自「脱机ISP编程器」· C语言 代码 · 共 93 行

C
93
字号
/*  spi.c - part of USBasp  Autor..........: Thomas Fischl <tfischl@gmx.de>  Description....: Provides functions for communication/programming                   over SPI interface  Licence........: GNU GPL v2 (see Readme.txt)  Creation Date..: 2005-02-23  Last change....: 2007-07-23  *///---------------------------------------------------/*--------------------------------------  Modify.........: avenbbs(8785116@qq.com)  Last change....: 2008-9-28------------------------------------------*/#include <avr/io.h>#include "spi_soft.h"//#include "clock.h"//#include <util/delay.h>#define	SPI_SW_OUT   PORTD#define SPI_SW_IN    PIND#define SPI_SW_DDR   DDRD#define SPI_SW_SS    PD2#define SPI_SW_MOSI  PD3#define SPI_SW_MISO  PD4#define SPI_SW_SCK   PD5void spiSW_init(void){	SPI_SW_OUT|=(1<<SPI_SW_SS);	SPI_SW_DDR|=(1<<SPI_SW_MOSI)|(1<<SPI_SW_SCK)|(1<<SPI_SW_SS);
	SPI_SW_DDR&=~(1<<SPI_SW_MISO);}/*void spiDelay(){	uint8_t starttime = TIMERVALUE;	while ((uint8_t)(TIMERVALUE - starttime) < 12) { }}*/unsigned char spiSWTransmit(unsigned char send_byte){	unsigned char rec_byte = 0;	unsigned char i;		for (i = 0; i < 8; i++)	{			/* set MSB to MOSI-pin */		if ((send_byte & 0x80) != 0)		{			SPI_SW_OUT |= (1 << SPI_SW_MOSI);  /* MOSI high */		}				else		{			SPI_SW_OUT &= ~(1 << SPI_SW_MOSI); /* MOSI low */		}				/* shift to next bit */		send_byte  = send_byte << 1;				/* receive data */		rec_byte = rec_byte << 1;				if ((SPI_SW_IN & (1 << SPI_SW_MISO)) != 0)		{			rec_byte++;		}				/* pulse SCK */		SPI_SW_OUT |= (1 << SPI_SW_SCK);     /* SCK high */				//spiDelay();		//_delay_us(64);		SPI_SW_OUT &= ~(1 << SPI_SW_SCK);    /* SCK low */				//spiDelay();		//_delay_us(64);	}		return rec_byte;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?