summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
authorarmink <[email protected]>2019-01-02 16:49:57 +0800
committerarmink <[email protected]>2019-01-02 16:49:57 +0800
commit1805aadbbbb60854164508f25728c91d71785f27 (patch)
treec9c2470af61ddd9f761a8b8741295abad11386b1 /components/drivers/include
parentebc14b09d5c1ccf61a7bf2e70d410dbadb087322 (diff)
[component] Sync to latest version.
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/adc.h42
-rw-r--r--components/drivers/include/drivers/serial.h2
-rw-r--r--components/drivers/include/drivers/spi.h108
-rw-r--r--components/drivers/include/ipc/ringblk_buf.h2
-rw-r--r--components/drivers/include/rtdevice.h4
5 files changed, 157 insertions, 1 deletions
diff --git a/components/drivers/include/drivers/adc.h b/components/drivers/include/drivers/adc.h
new file mode 100644
index 0000000000..8e3498e791
--- /dev/null
+++ b/components/drivers/include/drivers/adc.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2006-2018, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2018-05-07 aozima the first version
+ * 2018-11-16 Ernest Chen add finsh command and update adc function
+ */
+
+#ifndef __ADC_H__
+#define __ADC_H__
+#include <rtthread.h>
+
+struct rt_adc_device;
+struct rt_adc_ops
+{
+ rt_err_t (*enabled)(struct rt_adc_device *device, rt_uint32_t channel, rt_bool_t enabled);
+ rt_err_t (*convert)(struct rt_adc_device *device, rt_uint32_t channel, rt_uint32_t *value);
+};
+
+struct rt_adc_device
+{
+ struct rt_device parent;
+ const struct rt_adc_ops *ops;
+};
+typedef struct rt_adc_device *rt_adc_device_t;
+
+typedef enum
+{
+ RT_ADC_CMD_ENABLE,
+ RT_ADC_CMD_DISABLE,
+} rt_adc_cmd_t;
+
+rt_err_t rt_hw_adc_register(rt_adc_device_t adc,const char *name, const struct rt_adc_ops *ops, const void *user_data);
+
+rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel);
+rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel);
+rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_uint32_t channel);
+
+#endif /* __ADC_H__ */
diff --git a/components/drivers/include/drivers/serial.h b/components/drivers/include/drivers/serial.h
index af5d626251..45095af63f 100644
--- a/components/drivers/include/drivers/serial.h
+++ b/components/drivers/include/drivers/serial.h
@@ -100,7 +100,7 @@ struct serial_configure
rt_uint32_t bit_order :1;
rt_uint32_t invert :1;
rt_uint32_t bufsz :16;
- rt_uint32_t reserved :4;
+ rt_uint32_t reserved :6;
};
/*
diff --git a/components/drivers/include/drivers/spi.h b/components/drivers/include/drivers/spi.h
index 84b589ace0..04a65421a5 100644
--- a/components/drivers/include/drivers/spi.h
+++ b/components/drivers/include/drivers/spi.h
@@ -45,6 +45,9 @@ extern "C"{
#define RT_SPI_MODE_MASK (RT_SPI_CPHA | RT_SPI_CPOL | RT_SPI_MSB)
+#define RT_SPI_BUS_MODE_SPI (1<<0)
+#define RT_SPI_BUS_MODE_QSPI (1<<1)
+
#define RT_SPI_CS_HIGH (1<<4) /* Chipselect active high */
#define RT_SPI_NO_CS (1<<5) /* No chipselect */
#define RT_SPI_3WIRE (1<<6) /* SI/SO pin shared */
@@ -80,6 +83,7 @@ struct rt_spi_ops;
struct rt_spi_bus
{
struct rt_device parent;
+ rt_uint8_t mode;
const struct rt_spi_ops *ops;
struct rt_mutex lock;
@@ -106,6 +110,55 @@ struct rt_spi_device
struct rt_spi_configuration config;
void *user_data;
};
+
+struct rt_qspi_message
+{
+ struct rt_spi_message parent;
+
+ /* instruction stage */
+ struct
+ {
+ rt_uint8_t content;
+ rt_uint8_t qspi_lines;
+ } instruction;
+
+ /* address and alternate_bytes stage */
+ struct
+ {
+ rt_uint32_t content;
+ rt_uint8_t size;
+ rt_uint8_t qspi_lines;
+ } address, alternate_bytes;
+
+ /* dummy_cycles stage */
+ rt_uint32_t dummy_cycles;
+
+ /* number of lines in qspi data stage, the other configuration items are in parent */
+ rt_uint8_t qspi_data_lines;
+};
+
+struct rt_qspi_configuration
+{
+ struct rt_spi_configuration parent;
+ /* The size of medium */
+ rt_uint32_t medium_size;
+ /* double data rate mode */
+ rt_uint8_t ddr_mode;
+ /* the data lines max width which QSPI bus supported, such as 1, 2, 4 */
+ rt_uint8_t qspi_dl_width ;
+};
+
+struct rt_qspi_device
+{
+ struct rt_spi_device parent;
+
+ struct rt_qspi_configuration config;
+
+ void (*enter_qspi_mode)(struct rt_qspi_device *device);
+
+ void (*exit_qspi_mode)(struct rt_qspi_device *device);
+};
+
#define SPI_DEVICE(dev) ((struct rt_spi_device *)(dev))
/* register a SPI bus */
@@ -255,6 +308,61 @@ rt_inline void rt_spi_message_append(struct rt_spi_message *list,
message->next = RT_NULL;
}
+/**
+ * This function can set configuration on QSPI device.
+ *
+ * @param device the QSPI device attached to QSPI bus.
+ * @param cfg the configuration pointer.
+ *
+ * @return the actual length of transmitted.
+ */
+rt_err_t rt_qspi_configure(struct rt_qspi_device *device, struct rt_qspi_configuration *cfg);
+
+/**
+ * This function can register a SPI bus for QSPI mode.
+ *
+ * @param bus the SPI bus for QSPI mode.
+ * @param name The name of the spi bus.
+ * @param ops the SPI bus instance to be registered.
+ *
+ * @return the actual length of transmitted.
+ */
+rt_err_t rt_qspi_bus_register(struct rt_spi_bus *bus, const char *name, const struct rt_spi_ops *ops);
+
+/**
+ * This function transmits data to QSPI device.
+ *
+ * @param device the QSPI device attached to QSPI bus.
+ * @param message the message pointer.
+ *
+ * @return the actual length of transmitted.
+ */
+rt_size_t rt_qspi_transfer_message(struct rt_qspi_device *device, struct rt_qspi_message *message);
+
+/**
+ * This function can send data then receive data from QSPI device
+ *
+ * @param device the QSPI device attached to QSPI bus.
+ * @param send_buf the buffer to be transmitted to QSPI device.
+ * @param send_length the number of data to be transmitted.
+ * @param recv_buf the buffer to be recivied from QSPI device.
+ * @param recv_length the data to be recivied.
+ *
+ * @return the status of transmit.
+ */
+rt_err_t rt_qspi_send_then_recv(struct rt_qspi_device *device, const void *send_buf, rt_size_t send_length,void *recv_buf, rt_size_t recv_length);
+
+/**
+ * This function can send data to QSPI device
+ *
+ * @param device the QSPI device attached to QSPI bus.
+ * @param send_buf the buffer to be transmitted to QSPI device.
+ * @param send_length the number of data to be transmitted.
+ *
+ * @return the status of transmit.
+ */
+rt_err_t rt_qspi_send(struct rt_qspi_device *device, const void *send_buf, rt_size_t length);
+
#ifdef __cplusplus
}
#endif
diff --git a/components/drivers/include/ipc/ringblk_buf.h b/components/drivers/include/ipc/ringblk_buf.h
index 653fa2a60b..94fc2cfff3 100644
--- a/components/drivers/include/ipc/ringblk_buf.h
+++ b/components/drivers/include/ipc/ringblk_buf.h
@@ -84,6 +84,8 @@ rt_size_t rt_rbb_get_buf_size(rt_rbb_t rbb);
rt_rbb_blk_t rt_rbb_blk_alloc(rt_rbb_t rbb, rt_size_t blk_size);
void rt_rbb_blk_put(rt_rbb_blk_t block);
rt_rbb_blk_t rt_rbb_blk_get(rt_rbb_t rbb);
+rt_size_t rt_rbb_blk_size(rt_rbb_blk_t block);
+rt_uint8_t *rt_rbb_blk_buf(rt_rbb_blk_t block);
void rt_rbb_blk_free(rt_rbb_t rbb, rt_rbb_blk_t block);
/* rbb block queue API */
diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h
index 1843432768..d59b40cc47 100644
--- a/components/drivers/include/rtdevice.h
+++ b/components/drivers/include/rtdevice.h
@@ -99,6 +99,10 @@ extern "C" {
#include "drivers/cputime.h"
#endif
+#ifdef RT_USING_ADC
+#include "drivers/adc.h"
+#endif
+
#ifdef RT_USING_PWM
#include "drivers/rt_drv_pwm.h"
#endif