1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2020-09-15     thread-liu   first version
9  */
10 
11 #include "board.h"
12 
13 #if defined(BSP_USING_SPI5)
14 #include <drv_spi.h>
15 
16 #define SPI_NAME     "spi50"
17 static struct rt_spi_device *spi_dev = RT_NULL;
18 
19 /* attach spi5 device */
rt_spi_device_init(void)20 static int rt_spi_device_init(void)
21 {
22     struct rt_spi_configuration cfg;
23 
24     rt_hw_spi_device_attach("spi5", "spi50", PIN_NONE);
25 
26     cfg.data_width = 8;
27     cfg.mode   = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB | RT_SPI_NO_CS;
28     cfg.max_hz = 1 *1000 *1000;
29 
30     spi_dev = (struct rt_spi_device *)rt_device_find(SPI_NAME);
31 
32     if (RT_NULL == spi_dev)
33     {
34         rt_kprintf("spi sample run failed! can't find %s device!\n", SPI_NAME);
35         return -RT_ERROR;
36     }
37 
38     rt_spi_configure(spi_dev, &cfg);
39 
40     return RT_EOK;
41 }
42 INIT_APP_EXPORT(rt_spi_device_init);
43 
44 /* spi5 loopback mode test case */
spi_sample(int argc,char ** argv)45 static int spi_sample(int argc, char **argv)
46 {
47     rt_uint8_t t_buf[8], r_buf[8];
48     int i = 0;
49     static struct rt_spi_message msg1;
50 
51     if (argc != 9)
52     {
53         rt_kprintf("Usage:\n");
54         rt_kprintf("spi_sample 1 2 3 4 5 6 7 8\n");
55         return -RT_ERROR;
56     }
57 
58     for (i = 0; i < 8; i++)
59     {
60         t_buf[i] = atoi(argv[i+1]);
61     }
62 
63     msg1.send_buf   = &t_buf;
64     msg1.recv_buf   = &r_buf;
65     msg1.length     = sizeof(t_buf);
66     msg1.cs_take    = 1;
67     msg1.cs_release = 0;
68     msg1.next       = RT_NULL;
69 
70     rt_spi_transfer_message(spi_dev, &msg1);
71 
72     rt_kprintf("spi rbuf : ");
73     for (i = 0; i < sizeof(t_buf); i++)
74     {
75         rt_kprintf("%x ", r_buf[i]);
76     }
77 
78     rt_kprintf("\nspi loopback mode test over!\n");
79 
80     return RT_EOK;
81 }
82 MSH_CMD_EXPORT(spi_sample, spi loopback test);
83 
84 #endif /* BSP_USING_SPI5 */
85