SAMA5D4 Xplained Ultra Board BSP
guowenxue
2019-08-27 03ada50f4e3993fc9e3d4c17e952f12bb67d7d98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*********************************************************************************
 *      Copyright:  (C) 2019 LingYun IoT System Studio
 *                  All rights reserved.
 *
 *       Filename:  spidev.h
 *    Description:  This file is spidev user space API.
 *                 
 *        Version:  1.0.0(2019年08月19日)
 *         Author:  Guo Wenxue <guowenxue@gmail.com>
 *      ChangeLog:  1, Release initial version on "2019年08月19日 23时18分54秒"
 *                 
 ********************************************************************************/
#ifndef  _SPIDEV_H_
#define  _SPIDEV_H_
 
#include <stdint.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/ioctl.h>
#include <sys/stat.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
 
#define DEVNAME_LEN           64
 
#define DEF_SPI_BPW           8   /* bits per word */
#define DEF_SPI_SPEED         500 /* unit kHZ */
#define DEF_SPI_MODE          SPI_CPHA
 
//#define SPI_DEBUG
#ifdef  SPI_DEBUG
#define spi_dbg(format,args...) printf(format, ##args)
#else
#define spi_dbg(format,args...) do{} while(0);
#endif
 
typedef struct spidev_s 
{
    char             devname[DEVNAME_LEN];
    int              fd;
    uint8_t          bits;     /* bits per word */
    uint32_t         speed;   /* max speed in HZ */
    uint32_t         delay;   /* delay usecs */
 
   /* mode:   SPI_CPHA,SPI_CPOL => <SPI_MODE_0,SPI_MODE_1,SPI_MODE_2,SPI_MODE_3>
    *         SPI_CS_HIGH | SPI_LSB_FIRST | SPI_3WIRE | SPI_LOOP | SPI_NO_CS 
    *       | SPI_READY | SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD */
    uint32_t         mode;    
} spidev_t;  
 
 
/* initialise and open spidev context 
 * NOTE: $speed unit is KHz
 */
extern int spi_init(spidev_t *spi, char *spidev, uint8_t bpw, uint32_t speed, uint32_t delay, uint32_t mode);
 
 
/* read size bytes from SPI slave  */
extern int spi_read(spidev_t *spi, char *buf, int size);
 
 
/* write nbytes to SPI slave  */
extern int spi_write(spidev_t *spi, char *data, int nbytes);
 
 
/* write nbytes and read nbytes to/from SPI slave */
extern int spi_rdwr(spidev_t *spi, char *data,  char *rbuf, int nbytes);
 
 
/* terminate and close spidev context  */
extern int spi_term(spidev_t *spi);
 
 
#endif   /* ----- #ifndef _SPIDEV_H_  ----- */