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

📄 spi.h

📁 mcp2510的spi驱动
💻 H
字号:
#ifndef __ASM_ARCH_SPI_H
#define __ASM_ARCH_SPI_H

#include <asm/arch/hardware.h>
#include <asm/irq.h>

#define GPIO_TC_SPIMISO		(GPIO_MODE_ALT0 | GPIO_PULLUP_DIS | GPIO_E11)
#define GPIO_TC_SPIMOSI		(GPIO_MODE_ALT0 | GPIO_PULLUP_DIS | GPIO_E12)
#define GPIO_TC_SPICLK		(GPIO_MODE_ALT0 | GPIO_PULLUP_DIS | GPIO_E13)

inline static void SPISend ( unsigned char val, int channel )
{
	int flags;

	local_irq_save(flags);

	if ( channel == 0 ){
		SPTDAT0 = val;
		while (!(SPSTA0 & 1));
	}else if ( channel == 1 ){
		SPTDAT1 = val;
		while (!(SPSTA1 & 1));
	}
	
	local_irq_restore(flags);
}

inline static char SPIRecv ( int channel )
{
	if (channel == 0){
		return SPRDAT0;
	}else if (channel == 1) {
		return SPRDAT1;
	}else
		return -1;
}

inline static void Set_SIO_mode(int channel, int nSPCON, int nSPPRE, int SPPIN,
		int *poldnSPCON, int *poldnSPPRE, int *poldSPPIN)
{	
	if(channel==0){
		if(poldnSPCON){
			*poldnSPCON=SPCON0;
		}
		SPCON0=nSPCON;

		if(poldnSPPRE){
			*poldnSPPRE=SPPRE0;
		}
		SPPRE0=nSPPRE;

		if(poldSPPIN){
			*poldSPPIN=SPPIN0;
		}
		SPPIN0=SPPIN;
	}else if(channel == 1){
		if(poldnSPCON){
			*poldnSPCON=SPCON1;
		}
		SPCON1=nSPCON;

		if(poldnSPPRE){
			*poldnSPPRE=SPPRE1;
		}
		SPPRE1=nSPPRE;

		if(poldSPPIN){
			*poldSPPIN=SPPIN1;
		}
		SPPIN1=SPPIN;
	}else 
		return;

	udelay(1);
}

inline static void SPI_initIO(int channel)
{

	if (channel == 0){
		set_gpio_ctrl (GPIO_TC_SPIMISO);
		set_gpio_ctrl (GPIO_TC_SPIMOSI);
		set_gpio_ctrl (GPIO_TC_SPICLK);
	}else if (channel == 1) {

	}
}

#endif

⌨️ 快捷键说明

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