📄 spi_soft.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 + -