国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

mmWave SDK demo中集成I2C接口驅動所需的步驟及操作

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2022-01-14 10:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者: TI 工程師 Wesley He

在一些特殊的使用場合,有需要使用AWR1642對PMIC的輸出電壓進行調節,或是讀取PMIC 內部的工作狀態,此時需要I2C接口對PMIC進行讀寫操作,本文介紹了在現有的mmWave SDK demo中集成I2C接口驅動所需的步驟及操作。

本文的測試環境如下:

測試軟件版本:mmWave SDK 2.0.0.4

測試硬件:AWR1642BOOST EVM

1. 在mmWave SDK demo中增加I2C驅動代碼

第一步是添加代碼以包含和初始化I2C驅動程序。從I2C接口發送和接收均需要此驅動程序的支持,以下是在mss_main.c中添加的初始化I2C驅動程序的C代碼。此測試代碼可以復制到現有工程中。I2C驅動操作步驟為:GPIO初始化,I2C驅動初始化,配置I2C改寫PMIC(LP87524B)寄存器以實現PMIC輸出電壓調節。

注意LP87524B寄存器信息來源于其datasheet:LP87524B/J-Q1具有集成開關的具有集成開關的 4-A + 2.5-A +兩個 1.5-A降壓穩壓器數據表 (Rev. A),I2C驅動參考代碼如下:

#include

static int32_t I2C_GPIOInit(void)

{

#if (defined(SOC_XWR14XX))

/* Setup the PINMUX to bring out the XWR14xx I2C pins */

Pinmux_Set_OverrideCtrl(SOC_XWR14XX_PINR3_PADAH, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR14XX_PINR3_PADAH, SOC_XWR14XX_PINR3_PADAH_I2C_SDA);

Pinmux_Set_OverrideCtrl(SOC_XWR14XX_PINP4_PADAI, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR14XX_PINP4_PADAI, SOC_XWR14XX_PINP4_PADAI_I2C_SCL);

#else

/* Setup the PINMUX to bring out the XWR16xx I2C pins */

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINF13_PADAH, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PINF13_PADAH, SOC_XWR16XX_PINF13_PADAH_I2C_SDA);

Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PING14_PADAI, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);

Pinmux_Set_FuncSel(SOC_XWR16XX_PING14_PADAI, SOC_XWR16XX_PING14_PADAI_I2C_SCL);

#endif

return 0;

}

static int32_t I2C_Communication_Test()

{

bool retVal = false;

int32_t errCode = 0;

uint32_t arg;

uint8_t rxData[16];

uint8_t txData[16];

I2C_Transaction i2cTransaction;

I2C_Handle i2cHandle;

I2C_Params i2cParams;

/* Reset the transmit and receive buffer */

memset(&rxData, 0, sizeof (rxData));

/* Initializa the I2C driver */

I2C_init();

/* Initialize the I2C driver default parameters */

I2C_Params_init(&i2cParams);

i2cParams.transferMode = I2C_MODE_BLOCKING;

i2cParams.bitRate = I2C_100kHz;

/* Open the I2C driver */

i2cHandle = I2C_open(0, &i2cParams);

if (i2cHandle == NULL)

{

System_printf ("Error: I2C Driver Open failed\n");

return -1;

}

/* Configure the I2C device in I2C_CMD_ADDR_MODE mode */

arg = 0;//arg set to 0, and the I2C addr mode is 7-bit.

errCode = I2C_control (i2cHandle, I2C_CMD_ADDR_MODE, (void* )&arg);

if (errCode < 0)

{

System_printf ("Error: I2C control Set I2C_CMD_ADDR_MODE failed [Error code %d]\n", errCode);

return -1;

}

//read the LP87524B buck3 output voltage register

txData[0] = 0x10;

i2cTransaction.slaveAddress = 0x60;//LP87524B/J-Q1 Device Address = 0x60

i2cTransaction.writeBuf = txData;

i2cTransaction.writeCount = 1;

i2cTransaction.readBuf = rxData;

i2cTransaction.readCount = 1;

retVal = I2C_transfer(i2cHandle, &i2cTransaction);

if (retVal == false)

{

System_printf ("Error: I2C Transfer failed\n");

return -1;

}

System_printf("I2C_READ: addr=0x%x, Val=0x%x\n",txData[0],rxData[0]);

//write the LP87524B buck3 output voltage = 2.0V

txData[0] = 0x10;

txData[1] = 0xbb;//default=0xca,2.3V,0xb1=1.8V, 0xbb=2.0V

i2cTransaction.slaveAddress = 0x60;//LP87524B/J-Q1 Device Address = 0x60

i2cTransaction.writeBuf = txData;

i2cTransaction.writeCount = 2;

i2cTransaction.readBuf = rxData;

i2cTransaction.readCount = 0;

retVal = I2C_transfer(i2cHandle, &i2cTransaction);

if (retVal == false)

{

System_printf ("Error: I2C Transfer failed\n");

return -1;

}

System_printf("I2C_Write: LP87524B buck3 = 2.0V Done\n");

//read the LP87524B buck3 output voltage register

txData[0] = 0x10;

i2cTransaction.slaveAddress = 0x60;//LP87524B/J-Q1 Device Address = 0x60

i2cTransaction.writeBuf = txData;

i2cTransaction.writeCount = 1;

i2cTransaction.readBuf = rxData;

i2cTransaction.readCount = 1;

retVal = I2C_transfer(i2cHandle, &i2cTransaction);

if (retVal == false)

{

System_printf ("Error: I2C Transfer failed\n");

return -1;

}

System_printf("I2C_READ: addr=0x%x, Val=0x%x\r\n",txData[0],rxData[0]);

//write the LP87524B buck2 output voltage = 1.5V

txData[0] = 0x0e;

txData[1] = 0Xa2;//default=0xb1,1.8V, 0x4d=1V 0xa2=1.5V

i2cTransaction.slaveAddress = 0x60;//LP87524B/J-Q1 Device Address = 0x60

i2cTransaction.writeBuf = txData;

i2cTransaction.writeCount = 2;

i2cTransaction.readBuf = rxData;

i2cTransaction.readCount = 0;

retVal = I2C_transfer(i2cHandle, &i2cTransaction);

if (retVal == false)

{

System_printf ("Error: I2C Transfer failed\n");

return -1;

}

System_printf("I2C_Write: LP87524B buck2 = 1.5V Done\n");

if (retVal == false)

{

System_printf ("Error: I2C combined Transfer to Slave failed\n");

return -1;

}

/* Close I2C driver */

I2C_close(i2cHandle);

return 0;

}

//Call these function in void MmwDemo_mssInitTask(UArg arg0, UArg arg1)

errCode = I2C_GPIOInit();

if (errCode == -1)

System_printf("I2C_GPIOInit Error\r\n");

errCode = I2C_Communication_Test();

if (errCode == -1)

System_printf("I2C_Communication_Test Error\n");

else

System_printf("I2C_Communication_Test Done\n");

2. 將工程鏈接到I2C驅動庫

最后一步是通過鏈接I2C驅動程序來構建可執行文件。 如果使用CCS項目,可以將I2C驅動程序添加到項目的鏈接器屬性中,如圖1所示。

pYYBAGGKVg2ALnqyAADCaMnHFx0296.png

圖1. CCS Project Linker Properties

如果使用makefile編譯工程,執行相同的程序。

###################################################################################

# Additional libraries which are required to build the DEMO:

###################################################################################

MSS_MMW_DEMO_STD_LIBS = $(R4F_COMMON_STD_LIB) \

-llibpinmux_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibdma_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibcrc_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibuart_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibgpio_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibmailbox_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibmmwavelink_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibmmwave_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibcli_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT) \

-llibi2c_$(MMWAVE_SDK_DEVICE_TYPE).$(R4F_LIB_EXT)

MSS_MMW_DEMO_LOC_LIBS = $(R4F_COMMON_LOC_LIB) \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/pinmux/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/uart/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/dma/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/crc/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/gpio/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/drivers/mailbox/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/control/mmwavelink/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/control/mmwave/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/utils/cli/lib \

-i$(MMWAVE_SDK_INSTALL_PATH)/ti/utils/i2c/lib

3. 運行測試例程

運行測試程序后,CCS控制臺輸出打印信息如下,使用萬用表測量LP87524輸出電壓即為設置的電壓,I2C驅動添加成功。

**********************************************

Debug: Launching the Millimeter Wave Demo

**********************************************

I2C_READ: addr=0x10, Val=0xca

I2C_Write: LP87524B buck3 = 2.0V Done

I2C_READ: addr=0x10, Val=0xbb

I2C_Write: LP87524B buck2 = 1.5V Done

I2C_Communication_Test Done

審核編輯:何安

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1956

    瀏覽量

    88538
  • 嵌入式處理
    +關注

    關注

    0

    文章

    341

    瀏覽量

    10514
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    探索MAX7306:多功能I2C/SMBus接口GPIO與LED驅動

    探索MAX7306/MAX7307:多功能I2C/SMBus接口GPIO與LED驅動器 在電子設計領域,對于高效、靈活的GPIO擴展和LED驅動方案的需求從未停止。今天,我們將深入探討
    的頭像 發表于 02-02 15:55 ?142次閱讀

    MAX7304:集成ESD保護的I2C接口16端口GPIO與LED驅動

    MAX7304:集成ESD保護的I2C接口16端口GPIO與LED驅動器 在電子設備的設計中,GPIO擴展器和LED驅動器是常見的組件,它們
    的頭像 發表于 02-02 15:50 ?134次閱讀

    I2C 為什么只要兩根線就能搞定通信?

    到目前為止,我們已經討論了SPI通信和UART通信的基礎知識,現在讓我們討論本系列的最后一個協議,即集成電路間協議(I2C)。如果您曾經構建過使用OLED顯示器、氣壓傳感器或陀螺儀/加速度計模塊
    的頭像 發表于 01-04 09:14 ?1639次閱讀
    <b class='flag-5'>I2C</b> 為什么只要兩根線就能搞定通信?

    基于FPGA的I2C控制模塊設計

    I2C_WRITE_WDATA.v模塊實現I2C寫時序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的頭像 發表于 12-26 09:48 ?4950次閱讀
    基于FPGA的<b class='flag-5'>I2C</b>控制模塊設計

    AS32X601的I2C模塊操作EEPROM詳解

    國科安芯推出的AS32X601系列MCU芯片內置的I2C模塊提供了符合工業標準的兩線串行制接口,可用于MCU和外部I2C設備的通訊。I2C總線使用兩條串行線:串行數據線SDA和串行時鐘
    的頭像 發表于 12-21 21:39 ?983次閱讀
    AS32X601的<b class='flag-5'>I2C</b>模塊<b class='flag-5'>操作</b>EEPROM詳解

    原廠 FZH1631 標準I2C接口通訊LCD控制/驅動芯片

    1、概 述 型號:FZH1631 廠商:深圳市方中禾科技有限公司(Premier Chip Limited) FZH1631是一款標準I2C接口通訊LCD控制/驅動芯片。該芯片提供1/4占空比和1
    發表于 11-04 09:22

    深入剖析I2C協議

    I2C也是一種可以多主設備,多從設備的總線協議,通過地址索引,I2C可以使能所需從設備,I2C的出現主要是用來實現不同集成電路組件之間的控
    的頭像 發表于 08-21 15:10 ?3669次閱讀
    深入剖析<b class='flag-5'>I2C</b>協議

    高效率、6通道、白光LED驅動器,帶I2C接口 skyworksinc

    電子發燒友網為你提供()高效率、6通道、白光LED驅動器,帶I2C接口相關產品參數、數據手冊,更有高效率、6通道、白光LED驅動器,帶I2C
    發表于 07-30 18:31
    高效率、6通道、白光LED<b class='flag-5'>驅動</b>器,帶<b class='flag-5'>I2C</b><b class='flag-5'>接口</b> skyworksinc

    簡單了解I2C接口

    在電子電路的復雜世界里,各種電路模塊設備需要相互通信才能協同工作 ,I2C接口就像是電路模塊設備間的溝通橋梁,今天就帶大家深入了解它。
    的頭像 發表于 05-08 14:15 ?2533次閱讀
    簡單了解<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之Linux下的I2C驅動簡介

    總線驅動I2C總線驅動是在操作系統層面上實現對I2C總線的控制和管理的軟件模塊。它負責與硬件層面的I2
    發表于 04-15 10:39

    飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之Linux下的I2C驅動簡介

    總線驅動I2C總線驅動是在操作系統層面上實現對I2C總線的控制和管理的軟件模塊。它負責與硬件層面的I2
    發表于 04-15 10:19

    嵌入式教育科普|I2C接口全面解析

    1、基本概念I2C的全稱是Inter-IntegratedCircuit,譯為集成電路總線,是一種同步、雙向、半雙工的兩線式串行接口總線。連接到I2C總線上的設備既可以用作主設備,也可
    的頭像 發表于 04-11 09:44 ?3249次閱讀
    嵌入式教育科普|<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>全面解析

    MCUX SDK FreeRTOS I2C驅動程序中沒有超時選項是怎么回事?

    在將項目從不可用MK22FN1M0移植到 LPC55S69時,我正在嘗試更多地使用 MCUX SDK 功能,我遇到的一個問題是提供的 FreeRTOS 感知 I2C 驅動
    發表于 04-11 08:05

    求助,關于CMSIS I2C驅動程序問題求解?

    在嘗試修改 ENET PHY/MAC 驅動程序以使用 I2C 時,我在嘗試讓接口運行速度超過400kHz 時遇到了問題。 我在 RT1160 evk 板上測試
    發表于 03-20 07:48

    I2C總線復用

    帝晶智慧屏I2C總線復用
    的頭像 發表于 03-11 17:20 ?2086次閱讀