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

📄 spi.c

📁 AVR USB 下载线, 全套的开发资料,想做板子的可以参考下/
💻 C
字号:
/**	\file 
	<b>SPI</b><br>
	Autor: Matthias Wei遝r<br>
	Copyright 2004: Matthias Wei遝r<br>
	License: QPL (see license.txt)
	<hr>
*/
#include <avr/io.h>
#include <avr/eeprom.h>

#include "spi.h"
#include "tools.h"
#include "extern_vars.h"

void spi_enable(void)
{
	unsigned char i;
	
	R_RES_ON;
	wait_ms(2);
	PORTB&=BIT3_NEG&BIT5_NEG;	//MOSI und SCK low
	DDRB|=BIT3_POS|BIT5_POS;	//MOSI und SCK als Ausgang
	SPCR=0x51;					//SPI Master /16
	R_RES_OFF;
	for(i=0;i<200;i++) asm("nop");
	R_RES_ON;
	wait_ms(2);
	
	spi_set_speed(eeprom_read_byte(&eeprom_sck_period));
}

void spi_disable(void)
{
	SPCR=0x00;					//SPI aus
	DDRB&=BIT3_NEG&BIT5_NEG;	//MOSI und SCK als Eingang (hochohmig)
	R_RES_OFF;
}

void spi_reset(void)
{
	R_RES_OFF;
	wait_ms(2);
	R_RES_ON;	
}

/**
	Stellt die Geschwindigkeit des SPI-Busses ein (bei f=8MHz)
	0:	/2		4MHz	--SPI2X
	1	/4		2MHz
	2:	/8		1MHz	--SPI2X
	3	/16		500kHz
	4:	/32		250kHz	--SPI2X
	5	/64		125kHz
	6:	/128	62,5kHz
	
	weitere Geschwindigkeiten geplant
	-> dann per Software-SPI	
*/
void spi_set_speed(unsigned char s)
{
	if((s==0)||(s==2)||(s==4)) SPSR|=1; else SPSR&=0xFE;
	
	switch(s)
	{
		case 0:
		case 1:
			SPCR&=0xFC;
			break;
		case 2:
		case 3:
			SPCR&=0xFC;
			SPCR|=0x01;
			break;
		case 4:
		case 5:
			SPCR&=0xFC;
			SPCR|=0x02;
			break;
		case 6:
			SPCR|=0x03;
			break;
		default:		//Wenn Wert ung黮tig ganz langsam
			SPCR|=0x03;
			break;
	}
		
}

void spi_clock_pulse(void)
{
	
	SPCR&=BIT6_NEG;		//SPI kurz aus
	PORTB|=BIT5_POS;	//Taktimpuls
	wait_ms(2);
	PORTB&=BIT5_NEG;
	SPCR|=BIT6_POS;		//SPI wieder an
}

unsigned char spi_transfer_8(unsigned char d)
{
	SPDR=d;
	while(!(SPSR&0x80));
		
	return SPDR;	
}

unsigned char spi_transfer_16(unsigned int d)
{	
	spi_transfer_8((d>>8)&0xFF);
	return spi_transfer_8(d&0xFF);	
}

unsigned char spi_transfer_32(unsigned long d)
{
	spi_transfer_8((d>>24)&0xFF);
	spi_transfer_8((d>>16)&0xFF);
	spi_transfer_8((d>>8)&0xFF);
	return spi_transfer_8(d&0xFF);
}

⌨️ 快捷键说明

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