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

📄 s3c2410_spi.h

📁 三星ARM9 2410 SPI接口驱动源代码 for linux 2.4 内核
💻 H
字号:

#ifndef _SPI_DRV_H_
#define _SPI_DEV_H_


#include <asm/arch/irqs.h>

// Define SPI driver name
#define SPI_DRV_NAME			"spi_drv"
#define ACCESS_OK	0			
#define NewBoard        1      



#define RESET           GPIO_F7
#define IO4             GPIO_G5
#define nSS             GPIO_F2

#define SPPRE           SPPRE0
#define SPCON           SPCON0
#define SPPIN           SPPIN0
#define SPSTA           SPSTA0
#define SPTDAT          SPTDAT0
#define SPRDAT          SPRDAT0
#define IRQ_SPI         IRQ_SPI0
#define DisInt_SPI      DisInt_SPI0
#define EnInt_SPI       EnInt_SPI0
#define IRQ_PWR         IRQ_EINT0

/*
#define RESET           GPIO_F2
#define IO4             GPIO_F0
#define nSS             GPIO_F3

#define SPPRE           SPPRE1
#define SPCON           SPCON1
#define SPPIN           SPPIN1
#define SPSTA           SPSTA1
#define SPTDAT          SPTDAT1
#define SPRDAT          SPRDAT1
#define IRQ_SPI         IRQ_SPI1
#define DisInt_SPI      DisInt_SPI1
#define EnInt_SPI       EnInt_SPI1
*/


#define inb(p)          (volatile unsigned char )p
#define inw(p)          (volatile unsigned short int )p
#define inl(p)          (volatile unsigned int )p

#define outb(v,p)       p=(unsigned char )v
#define outw(v,p)       p=(unsigned short int )v
#define outl(v,p)       p=(unsigned int )v

#define	ClearPending(x)	{ SRCPND = (1 << (x)); INTPND = (1 << (x)); }

#define DisInt_SPI0     INTMSK|=INT_SPI0
#define EnInt_SPI0      INTMSK&=~INT_SPI0   
#define DisInt_SPI1     INTMSK|=INT_SPI1
#define EnInt_SPI1      INTMSK&=~INT_SPI1   

#define SPI_DEFAULT_BUAD 1200000
#define SPI_DELAY_BEFORE_SCK 16
#define PCLK  50700000

// define buffer size for send and recive buffer
#define BUF_SIZE        60000

struct spi_buffer
{
	unsigned char buffer[BUF_SIZE];		        // send/recv buffer define
	int  head;				// buffer head index
	int  tail;				// buffer tail index
	int  size;				// data size in buffer
	struct semaphore sem;				// semaphore defined for mutex access
};

struct spi_dev
{
	struct spi_buffer  send_buf;
	struct spi_buffer  recv_buf;
};

// ioctl definitions

// use 'k' as magic number
#define SPI_IOC_MAGIC     'k'
#define SPI_ADSL_RESERVE  0
#define SPI_ADSL_PSD      1 
#define SPI_ADSL_RMS      2 
#define SPI_ADSL_ATT      3
#define SPI_ADSL_BALANCE  4
#define SPI_ADSL_FEXT     5
#define SPI_ADSL_NEXT     6
#define SPI_ADSL_VOL      7
#define SPI_ADSL_RES      8
#define SPI_ADSL_STOPTEST 9


#define SPI_CHECK_DATA    10 
#define SPI_SEND_BOOTDATA 11
#define SPI_SET_BOOTLEN   12
#define SPI_GET_DATA      13
#define SPI_POWER_OFF     14
#define SPI_POWER_ON      15
#define SPI_MODEM_RESET   16
#define SPI_BLIGHT_ON     17
#define SPI_BLIGHT_OFF    18
#define SPI_VALUE_UP      19
#define SPI_VALUE_DOWN    20
#define SPI_SEND          21
#define SPI_SEND_END      22
#define SPI_MODEM_STARTUP 23
#define SPI_MODEM_RESET_FLAG  24
#define SPI_MODEM_FLAG_CLEAR  25
#define SPI_PWRCTL_ENABLE     26
#define SPI_IOC_MAXNR         27


#define RxSta_head55     0
#define RxSta_headAA     1
#define RxSta_len0       2
#define RxSta_len1       3
#define RxSta_comtype    4
#define RxSta_testtype   5
#define RxSta_data       6

volatile unsigned char RxSta=0,ByteIn;
volatile unsigned char CurTestType=0;
volatile unsigned int  RxCounters[1024];
volatile unsigned int  RxCounter=0;
volatile unsigned int  RxPacketNum=0,RxPacketHead=0,RxPacketTail=0;
volatile unsigned int  RxData=0;
volatile unsigned long  BootDataLen;
volatile unsigned int  i;


#define Status_Send_Packet    1
#define Status_Receive_Packet 2
#define YES 1
#define NO  0
volatile unsigned int SPI_Status=Status_Send_Packet;
volatile unsigned int HaveSendPacket=NO;


struct Packet_Type{
  unsigned short int HeadFlag;
  unsigned short int Length;
  unsigned char CmdType;
  unsigned char TestType;
  unsigned char *Data;
  unsigned int CRC32;
}ADSL_Packet;


#define TestDataReady    1
#define TestDataNotReady 0
#define TestDataTimeOut  -1


#define NormalModeTest 0
#define MasterModeTest 1
#define SlaveModeTest  2
#define StopTest       3
#define DataPacket     4
#define CalibrateMode  5

////////////////////////////////////////////////////////////////////////////////////

// 设置 SPI 通信的波特率,以后需要细化,主要加入参数出错处理代码
static int spi_baudrate_set(unsigned int spi_channel_num, unsigned baud_rate);

// 配置 SPI 的工作参数
static int spi_config(unsigned char SelectSM);

// 配置 SPI 引脚的工作参数
static int spi_pin_config(unsigned int spi_channel_num);

// SPI 的中断处理函数
static void spi_intr(int irq, void *private, struct pt_regs *regs);

// POWER 的中断处理函数
static void powerOff(int irq, void *private, struct pt_regs *regs);

// spi 的 close 操作
static int spi_close(struct inode *inode, struct file *p_file);

// spi 的 open 操作函数
static int spi_open(struct inode *inode, struct file *p_file);

static int spi_ioctl(struct inode *inode,struct  file *p_file,unsigned int cmd,unsigned long arg);

static void send_packet(struct spi_dev *pdev);

static inline void BackReverse(struct spi_dev *,unsigned int);

static inline void Delay10ms(int num);
#endif 

⌨️ 快捷键说明

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