色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>類型>參考設計>ADPD188BI無操作系統驅動程序

ADPD188BI無操作系統驅動程序

2021-03-23 | pdf | 117.81KB | 次下載 | 10積分

資料介紹

This version (28 Jul 2020 08:32) was approved by Andrei Drimbarean.

ADPD188 - No-OS Driver

Supported Devices

Overview

The ADPD188BI is a complete photometric system for smoke detection using optical dual wavelength technology. The module integrates a highly efficient photometric front end, two light emitting diodes (LEDs), and two photodiodes (PDs). These items are housed in a custom package that prevents light from going directly from the LED to the photodiode without first entering the smoke detection chamber. The front end of the application specific integrated circuit (ASIC) consists of a control block, a 14-bit analog-to-digital converter (ADC) with a 20-bit burst accumulator, and three flexible, independently configurable LED drivers. The control circuitry includes flexible LED signaling and synchronous detection. The analog front end (AFE) features best-in-class rejection of signal offset and corruption due to modulated interference commonly caused by ambient light. The data output and functional configuration occur over a 1.8 V I2C interface or serial peripheral interface (SPI) port.

Applications:

  • Smoke detection

Driver Description

The driver contains two parts:

  • The driver for the ADPD188BI part, which may be used, without modifications, with any microcontroller.
  • The Communication Drivers, where the specific communication functions for the desired type of processor and communication protocol have to be implemented. This driver implements the communication with the device and hides the actual details of the communication protocol to the ADI driver.

The Communication Driver has a standard interface, so the ADPD188BI driver can be used exactly as it is provided.

the Communication Drivers must include two things: I2C or SPI transmission methods and GPIO control methods. For the I2C method, the ADPD188BI driver calls four functions:

  • i2c_init() – initializes the I2C communication peripheral.
  • i2c_remove() – frees memory allocated by the I2C communication driver.
  • i2c_write() – writes data to the device.
  • i2c_read() – reads data from the device.

For the SPI method, the ADPD188BI driver calls three functions:

  • spi_init() - initializes the SPI communication peripheral.
  • spi_remove() – frees memory allocated by the SPI communication driver.
  • spi_write_and_read() – conduct information transfer with the device.

For the GPIO control methods, the ADPD188BI driver calls three functions:

  • gpio_get() - initialize GPIO peripheral and allocate memory for one GPIO control.
  • gpio_remove() - frees memory allocated by the GPIO control driver.
  • gpio_direction_input() - set GPIO as input.

Functions Declarations

Function Description
int32_t adpd188_init(struct adpd188_dev **device, struct adpd188_init_param *init_param);
Initialize the ADPD188 driver.
int32_t adpd188_remove(struct adpd188_dev *dev);
Free resources allocated by adpd188_init().
int32_t adpd188_reg_read(struct adpd188_dev *dev, uint8_t reg_addr, uint16_t *reg_val);
Read one 16 bit register of the ADPD188.
int32_t adpd188_reg_write(struct adpd188_dev *dev, uint8_t reg_addr, uint16_t reg_val);
Write one 16 bit register of the ADPD188.
int32_t adpd188_mode_get(struct adpd188_dev *dev, enum adpd188_mode *mode);
Get the mode of operation of the ADPD188.
int32_t adpd188_mode_set(struct adpd188_dev *dev, enum adpd188_mode new_mode);
Set the mode of operation of the ADPD188.
int32_t adpd188_fifo_status_get(struct adpd188_dev *dev, uint8_t *bytes_no);
Get the number of bytes currently present in FIFO.
int32_t adpd188_fifo_clear(struct adpd188_dev *dev);
Empty the FIFO.
int32_t adpd188_fifo_thresh_set(struct adpd188_dev *dev, uint8_t word_no);
Set the number of 16 bit words that need to be in the FIFO to trigger an interrupt.
int32_t adpd188_interrupt_get(struct adpd188_dev *dev, uint8_t *flags);
Get the slot and FIFO interrupt flags.
int32_t adpd188_interrupt_clear(struct adpd188_dev *dev, uint8_t flags);
Clear the slot and FIFO interrupt flags.
int32_t adpd188_interrupt_en(struct adpd188_dev *dev, uint8_t flags);
Enable the slot and FIFO interrupt flags.
int32_t adpd188_gpio_setup(struct adpd188_dev *dev, struct adpd188_gpio_config config);
Setup drive and polarity of the GPIOs.
int32_t adpd188_gpio_alt_setup(struct adpd188_dev *dev, uint8_t gpio_id, enum adpd188_gpio_alt_config config);
Setup the GPIO source.
int32_t adpd188_sw_reset(struct adpd188_dev *dev);
Do software reset of the device.
int32_t adpd188_clk32mhz_cal(struct adpd188_dev *dev);
Do internal 32MHz clock calibration.
int32_t adpd188_slot_setup(struct adpd188_dev *dev, struct adpd188_slot_config config);
Enable slot and setup its FIFO interaction.
int32_t adpd188_adc_fsample_set(struct adpd188_dev *dev, float freq_hz);
Set sample frequency of the ADC.
int32_t adpd188_adc_fsample_get(struct adpd188_dev *dev, float *freq_hz);
Get sample frequency of the ADC.
int32_t adpd188_smoke_detect_setup(struct adpd188_dev *dev);
Do initial configuration of the device to use as a smoke detector.

Types Declarations

/**
 * @union adpd188_phy_init
 * @brief Communication physical protocol initialization structure. Can be I2C
 *        or SPI.
 */
union adpd188_phy_init {
	/** I2C initialization structure. */
	struct i2c_init_param i2c_phy;
	/** SPI initialization structure. */
	struct spi_init_param spi_phy;
};
?
/**
 * @enum adpd188_phy_opt
 * @brief Types of physical communication protocol.
 */
enum adpd188_phy_opt {
	/** SPI communication. */
	ADPD188_SPI,
	/** I2C communication. */
	ADPD188_I2C
};
?
/**
 * @enum adpd188_mode
 * @brief ADPD188 operation modes.
 */
enum adpd188_mode {
	/** Standby mode. */
	ADPD188_STANDBY,
	/** Program mode. */
	ADPD188_PROGRAM,
	/** Normal mode. */
	ADPD188_NORMAL
};
?
/**
 * @enum adpd188_interrupt
 * @brief Interrupt flags of the ADPD188.
 */
enum adpd188_interrupt {
	/** Slot A conversion interrupt flag. */
	ADPD188_SLOTA_INT = 0x1,
	/** Slot B conversion interrupt flag. */
	ADPD188_SLOTB_INT = 0x2,
	/** FIFO threshold reached interrupt flag. */
	ADPD188_FIFO_INT = 0x4
};
?
/**
 * @struct adpd188_gpio_config
 * @brief GPIO level configuration.
 */
struct adpd188_gpio_config {
	/** GPIO ID (0 or 1) */
	uint8_t gpio_id;
	/** GPIO polarity */
	uint8_t gpio_pol;
	/** Status of the GPIO driver (driven or open-drain) */
	uint8_t gpio_drv;
	/** GPIO enable (only for GPIO0) */
	uint8_t gpio_en;
};
?
/**
 * @enum adpd188_gpio_alt_config
 * @brief GPIO source configuration.
 */
enum adpd188_gpio_alt_config {
	/** GPIO backwards compatible with the ADPD103 INT functionality. */
	ADPD188_ADPD103 = 0x00,
	/** Interrupt function provided on GPIO. */
	ADPD188_INT_FUNC = 0x01,
	/**
	 * Asserts at the start of the first time slot and deasserts at end of last
	 * time slot.
	 */
	ADPD188_ACTIVE_PULSE = 0x02,
	/** Time Slot A pulse output. */
	ADPD188_SLOTA_PULSE = 0x05,
	/** Time Slot B pulse output. */
	ADPD188_SLOTB_PULSE = 0x06,
	/** Pulse output of both time slots. */
	ADPD188_ANYSLOT_PULSE = 0x07,
	/** Output data cycle occurred for Time Slot A. */
	ADPD188_SLOTA_OUT = 0x0C,
	/** Output data cycle occurred for Time Slot B. */
	ADPD188_SLOTB_OUT = 0x0D,
	/** Output data cycle occurred. */
	ADPD188_ANYSLOT_OUT = 0x0E,
	/**
	 * Toggles on every sample, which provides a signal at half the sampling
	 * rate.
	 */
	ADPD188_HALF_SAMPLING = 0x0F,
	/** Output = 0. */
	ADPD188_OUT_LOW = 0x10,
	/** Output = 1. */
	ADPD188_OUT_HIGH = 0x11,
	/** 32 kHz oscillator output. */
	ADPD188_32KHZ_OSC = 0x13
};
?
/**
 * @enum adpd188_slots
 * @brief ADPD188 time slots.
 */
enum adpd188_slots {
	/** First slot. */
	ADPD188_SLOTA,
	/** Second slot. */
	ADPD188_SLOTB
};
?
/**
 * @enum adpd188_slot_fifo_mode
 * @brief The way a time slot stores data in the FIFO.
 */
enum adpd188_slot_fifo_mode {
	/** No data to FIFO. */
	ADPD188_NO_FIFO,
	/** 16-bit sum of all four channels. */
	ADPD188_16BIT_SUM,
	/** 32-bit sum of all four channels. */
	ADPD188_32BIT_SUM,
	/** Four channels of 16-bit sample data for the time slot. */
	ADPD188_16BIT_4CHAN = 0x4,
	/** Four channels of 32-bit sample data for the time slot. */
	ADPD188_32BIT_4CHAN = 0x6
};
?
/**
 * @struct adpd188_slot_config
 * @brief Slot configuration initialization structure.
 */
struct adpd188_slot_config {
	/** Time slot ID. */
	enum adpd188_slots slot_id;
	/** Enable time slot. */
	bool slot_en;
	/** Time slot FIFO mode. */
	enum adpd188_slot_fifo_mode sot_fifo_mode;
};
?
/**
 * @struct adpd188_dev
 * @brief Driver descriptor structure.
 */
struct adpd188_dev {
	/** Communication physical type. */
	enum adpd188_phy_opt phy_opt;
	/** Communication physical descriptor. */
	void *phy_desc;
	/** GPIO 0 descriptor. */
	struct gpio_desc *gpio0;
	/** GPIO 1 descriptor. */
	struct gpio_desc *gpio1;
};
?
/**
 * @struct adpd188_init_param
 * @brief Driver initialization structure.
 */
struct adpd188_init_param {
	/** Communication physical type. */
	enum adpd188_phy_opt phy_opt;
	/** Communication physical initialization structure. */
	union adpd188_phy_init phy_init;
	/** GPIO 0 initialization structure. */
	struct gpio_init_param gpio0_init;
	/** GPIO 0 initialization structure. */
	struct gpio_init_param gpio1_init;
};

Initialization example

This is an initialization example. After doing this the user must put the device in GO mode and read data as described in the datasheet.

#include 
#include 
#include "adpd188.h"
?
void main()
{
    struct adpd188_dev *adpd_desc;
    struct adpd188_init_param adpd_init;
    int32_t ret;
    uint16_t reg_data;
?
    adpd_init.phy_opt = ADPD188_SPI;
    /* SPI initialization is generally dependent on the platform used */
    adpd_init.phy_init.spi_phy.extra = NULL; /* Platform dependent; this is a dummy value */
    adpd_init.phy_init.spi_phy.chip_select = 0; /* Platform dependent; this is a dummy value */
    adpd_init.phy_init.spi_phy.max_speed_hz = 6000000; /* Platform dependent; this is usually a good value */
    adpd_init.phy_init.spi_phy.mode = SPI_MODE_3; /* This should always be the mode */
    /* GPIO initialization is generally dependent on the platform used */
    adpd_init.gpio0_init.number = 1; /* Platform dependent; this is a dummy value */
    adpd_init.gpio0_init.extra = NULL; /* Platform dependent; this is a dummy value */
    adpd_init.gpio1_init.number = 2; /* Platform dependent; this is a dummy value */
    adpd_init.gpio1_init.extra = NULL; /* Platform dependent; this is a dummy value */
?
    ret = adpd188_init(&adpd_desc, &adpd_init);
    if (ret != 0)
        return -1;
?
    /* Read device ID. For ADPD188BI it must be 0x16. */
    ret = adpd188_reg_read(adpd_desc, ADPD188_REG_DEVID, &reg_data);
    if (ret != 0)
        return -1;
    if ((reg_data & ADPD188_DEVID_DEV_ID_MASK) != 0x16)
        return -1;
?
    /** Enable 32kHz clock */
    ret = adpd188_reg_read(adpd_desc, ADPD188_REG_SAMPLE_CLK, &reg_data);
    if (ret != 0)
        return -1;
    reg_data |= ADPD188_SAMPLE_CLK_CLK32K_EN_MASK;
    ret = adpd188_reg_write(adpd_desc, ADPD188_REG_SAMPLE_CLK, reg_data);
    if (ret != 0)
        return -1;
?
    /* Activate program mode */
    ret = adpd188_mode_set(adpd_desc, ADPD188_PROGRAM);
    if (ret != 0)
        return -1;
?
    /* Initialize device in the datasheet smoke detection configuration */
    ret = adpd188_smoke_detect_setup(adpd_desc);
    if (ret != 0)
        return -1;
}

Downloads

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費下載
  2. 0.00 MB  |  1491次下載  |  免費
  3. 2單片機典型實例介紹
  4. 18.19 MB  |  95次下載  |  1 積分
  5. 3S7-200PLC編程實例詳細資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識別和講解說明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開關電源原理及各功能電路詳解
  10. 0.38 MB  |  11次下載  |  免費
  11. 6100W短波放大電路圖
  12. 0.05 MB  |  4次下載  |  3 積分
  13. 7基于單片機和 SG3525的程控開關電源設計
  14. 0.23 MB  |  4次下載  |  免費
  15. 8基于AT89C2051/4051單片機編程器的實驗
  16. 0.11 MB  |  4次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費
  7. 4LabView 8.0 專業版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費
  9. 5555集成電路應用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費
  11. 6接口電路圖大全
  12. 未知  |  30320次下載  |  免費
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費
  15. 8開關電源設計實例指南
  16. 未知  |  21539次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537793次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191183次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138039次下載  |  免費
主站蜘蛛池模板: 忘忧草在线影院WWW日本动漫 | 高龄熟女50P| 久草草在线视视频 | 三级黄色网 | 中文字幕无码乱人伦蜜桃 | 黄色精品视频 | 国产精品视频免费视频 | 99热热在线精品久久 | 国产一区二区青青精品久久 | 麻豆出品国产AV在线观看 | 成人1000部免费观看视频 | 色噜噜狠狠色综合中文字幕 | 午夜精品国产自在现线拍 | 欧美国产一区二区三区激情无套 | 99国产精品白浆在线观看免费 | 婷婷综合亚洲爱久久 | 国产在线观看香蕉视频 | 日韩欧美中文字幕在线 | 宝贝你骚死哥了好爽 | 精品含羞草免费视频观看 | 国语92电影网午夜福利 | 亚洲国产女人aaa毛片在线 | 国产精品18久久久久久欧美网址 | 我半夜摸妺妺的奶C了她 | 暖暖在线观看播放视频 | 把腿张开JI巴CAO死你H教室 | 久久91精品国产91 | 中文字幕乱偷无码AV蜜桃 | 欧美精品AV一区二区无码 | 国产美熟女乱又伦AV | 99久久久久国产精品免费 | 四虎永久在线精品国产免费 | 巨污全肉np一女多男 | 99青草青草久热精品视频 | chinesevideoshd性舞 | 色婷婷狠狠97成为人免费 | 国产成人在线免费观看 | 99久久精品一区二区三区 | 国模孕妇模特季玥之粉红 | 人妻免费视频公开上传 | 免费国产久久啪在线 |