⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi_soft.c

📁 脱机ISP编程器
💻 C
字号:
/*  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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -