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