久久精品人妻一区二区蜜桃-欧美精品人妻一区二区免费视频-久久精品免费一区二区喷潮-久久精品中文闷骚内射-精品bbw-精品久久无码中文字幕-小小水蜜桃3视频高清在线观看-日韩免费一级aaa片毛太久-欧美激情肉欲高潮无码鲁大师-欧美影片一区二区三区-亚洲精品无码av无码专区一本,波多野吉衣一区二区三区在线观看,囯精品人妻无码一区二区三区99,包哟哟在线观看免费观看

產(chǎn)品分類(lèi)

當(dāng)前位置: 首頁(yè) > 工業(yè)電氣產(chǎn)品 > 端子與連接器 > 線路板連接器 > FFC連接器

類(lèi)型分類(lèi):
科普知識(shí)
數(shù)據(jù)分類(lèi):
FFC連接器

CC2652LP驅(qū)動(dòng)Δ∑ADC - ADS1261

發(fā)布日期:2022-04-28 點(diǎn)擊率:67

Other Parts Discussed in Post: ADS1261, CC2652R, ADS1261EVM, TMP116

作者:TI工程師 Yue Tang

 

 

官網(wǎng)的ADS1261驅(qū)動(dòng)采用的是相對(duì)久遠(yuǎn)的TIVA驅(qū)動(dòng)代碼架構(gòu),并且沒(méi)有提供完整工程,還存在一些小的bug,本文將闡述如何使用最新的Simplelink? Platform MCU,并基于最新的TI-RTOS架構(gòu)來(lái)驅(qū)動(dòng)ADS1261。本文的最后會(huì)給出完整的工程示例【下載】,示例稍作修改也可用于驅(qū)動(dòng)TI其它支持SPI接口的Δ∑ADC。

 

ADS126x 系列ADC是包含可編程增益放大器 (PGA) 的精密 40kSPS ΔΣ 模數(shù)轉(zhuǎn)換器 ,它包含精密的電壓基準(zhǔn),內(nèi)部故障監(jiān)控器和用于橋式傳感器的交流激勵(lì)。可以為要求最嚴(yán)苛的測(cè)量(包括稱(chēng)重秤和電阻式溫度檢測(cè)器 (RTD))提供高精度單芯片解決方案。

                                                        Figure 1.      ADS1261 內(nèi)部框圖

 

 

CC2652R 是 Simplelink? 微控制器 (MCU) 平臺(tái)的一部分,該平臺(tái)包括 Wi-Fi?、低功耗 Bluetooth?、低于 1GHz、Thread、Zigbee?、802.15.4 和主機(jī) MCU,它們共用一個(gè)易于使用的通用開(kāi)發(fā)環(huán)境,其中包含單核軟件開(kāi)發(fā)套件 (SDK) 和豐富的工具集。借助一次性集成的 Simplelink 平臺(tái),可以將產(chǎn)品組合中的任何器件組合添加至您的設(shè)計(jì)中,從而在設(shè)計(jì)要求變更時(shí)實(shí)現(xiàn) 100% 代碼重用。

 

CC2652 Launchpad 是CC2652R對(duì)應(yīng)的開(kāi)發(fā)板,包含仿真器,如您是第一次接觸,請(qǐng)參考如下步驟,來(lái)了解它的使用。

第 1 步:購(gòu)買(mǎi) CC26X2R1 LaunchPad
第 2 步:下載 Simplelink CC13x2 和 CC26x2 SDK
第 3 步:開(kāi)始使用 Simplelink Academy

 

本文采用IAR進(jìn)行開(kāi)發(fā),相關(guān)版本信息可在對(duì)應(yīng)的SDK的release_notesxx.html中了解到,如下圖:

IAR Embedded Workbench: EWARM-8.32.2

SDK版本:simplelink_cc13x2_26x2_sdk_3_20_00_68【請(qǐng)先下載安裝后,再打開(kāi)工程】

 

 

另外,使用的ADS1261EVM 也可從TI-STORE購(gòu)買(mǎi)到。

 

ADS1261EVM

CC2652LP

說(shuō)明

/CS

DIO_30

SPI – CS 片選

SCLK

DIO_29

SPI – CLK時(shí)鐘

DIN

DIO_28

SPI – 主出從入[ 主:CC2652R, 從:ADS1261 ]

DOUT

DIO_27

SPI – 主入從出[ 主:CC2652R, 從:ADS1261 ]

/DRDY

DIO_26

ADS1261 輸出 – 數(shù)據(jù)準(zhǔn)備好指示,低有效

/RST

DIO_25

ADS1261 輸入 – 復(fù)位,低有效

STR

DIO_21

ADS1261輸入 – 啟動(dòng)轉(zhuǎn)換,高有效

/PWDN

DIO_15

ADS1261輸入 – 控制進(jìn)入低功耗模式,低有效

 

如下圖,使用杜邦線,對(duì)照上表,將ADS1261EVM(左)和CC2652LP(右)連接起來(lái)。另外,在ADS1261EVM的JP1增加一個(gè)跳線帽【黃色框】,以旁路EVM上的TM4C129。

 

                                                        Figure 2.      連線示意圖

 

基于TI-RTOS的SPI接口驅(qū)動(dòng)及單獨(dú)控制CS引腳

 

  1. 【CC26X2R1_LAUNCHXL.c】 如下結(jié)構(gòu)體中增加紅色部分代碼

GPIO_PinConfig gpioPinConfigs[] = {

……

  

   GPIOCC26XX_DIO_30 | GPIO_DO_NOT_CONFIG,

   GPIOCC26XX_DIO_15 | GPIO_DO_NOT_CONFIG,

   GPIOCC26XX_DIO_21 | GPIO_DO_NOT_CONFIG,

   GPIOCC26XX_DIO_25 | GPIO_DO_NOT_CONFIG,

   GPIOCC26XX_DIO_26 | GPIO_DO_NOT_CONFIG,

};

 

  1. 【CC26X2R1_LAUNCHXL.c】使用SPI1,并且其中的CS引腳單獨(dú)控制

const *** ***[CC26X2R1_LAUNCHXL_SPICOUNT] = {

   {

……

   },

   {

       .baseAddr           = SSI1_base,

       .intNum             = INT_SSI1_COMB,

       .intPriority       = ~0,

       .swiPriority       = 0,

       .powerMngrId       = PowerCC26XX_PERIPH_SSI1,

       .defaultTxBufValue = 0xFF,

       .rxChannelBitMask   = 1<<UDMA_CHAN_SSI1_RX,

       .txChannelBitMask   = 1<<UDMA_CHAN_SSI1_TX,

       .mosiPin           = CC26X2R1_LAUNCHXL_SPI1_MOSI,

       .misoPin           = CC26X2R1_LAUNCHXL_SPI1_MISO,

       .clkPin             = CC26X2R1_LAUNCHXL_SPI1_CLK,

       .csnPin             = PIN_UNASSIGNED, //單獨(dú)控制 E2E link

       .minDmaTransferSize = 10

   }

};

 

  1. 【CC26X2R1_LAUNCHXL.h】新增如下定義

#define CC26X2R1_LAUNCHXL_SPI1_MISO             IOID_27

#define CC26X2R1_LAUNCHXL_SPI1_MOSI             IOID_28

#define CC26X2R1_LAUNCHXL_SPI1_CLK             IOID_29

#define CC26X2R1_LAUNCHXL_SPI1_CSN             IOID_30

#define CC26X2R1_LAUNCHXL_ADS1261_PWDN         IOID_15      

#define CC26X2R1_LAUNCHXL_ADS1261_STR           IOID_21      

#define CC26X2R1_LAUNCHXL_ADS1261_RST           IOID_25      

#define CC26X2R1_LAUNCHXL_ADS1261_DRDY         IOID_26      

        

新增如下紅色項(xiàng)

typedef enum CC26X2R1_LAUNCHXL_GPIoname {

   CC26X2R1_LAUNCHXL_GPIO_S1 = 0,

   CC26X2R1_LAUNCHXL_GPIO_S2,

   CC26X2R1_LAUNCHXL_GPIO_LED_GREEN,

   CC26X2R1_LAUNCHXL_GPIO_LED_RED,

   CC26X2R1_LAUNCHXL_GPIO_TMP116_EN,

   CC26X2R1_LAUNCHXL_GPIO_SPI_FLASH_CS,

   CC26X2R1_LAUNCHXL_SDSPI_CS,

   CC26X2R1_LAUNCHXL_GPIO_LCD_CS,

   CC26X2R1_LAUNCHXL_GPIO_LCD_POWER,

   CC26X2R1_LAUNCHXL_GPIO_LCD_ENABLE,

   CC26X2R1_LAUNCHXL_GPIO_ADS1261_CS,      

   CC26X2R1_LAUNCHXL_GPIO_ADS1261_PWDN,

   CC26X2R1_LAUNCHXL_GPIO_ADS1261_STR,      

   CC26X2R1_LAUNCHXL_GPIO_ADS1261_RST,    

   CC26X2R1_LAUNCHXL_GPIO_ADS1261_DRDY,

   CC26X2R1_LAUNCHXL_GPIOCOUNT

} CC26X2R1_LAUNCHXL_GPIOName;

 

 

 

  1. 【spimaster.c】SPI初始化,基于EVM的實(shí)際情況

 

GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_CS, GPIO_CFG_OUT_OD_NOPULL|GPIO_CFG_OUT_HIGH);      GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_PWDN, GPIO_CFG_OUT_OD_NOPULL|GPIO_CFG_OUT_HIGH);

GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_STR, GPIO_CFG_OUT_OD_NOPULL);

GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_RST, GPIO_CFG_OUT_OD_NOPULL|GPIO_CFG_OUT_HIGH);

GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_DRDY, GPIO_CFG_IN_PU);

 

  

   SPI_Params_init(&spiParams);

   spiParams.frameFormat = SPI_POL0_PHA1;

   spiParams.bitRate = 4000000;

   masterSpi = SPI_open(CC26X2R1_LAUNCHXL_SPI1, &spiParams);

   if (masterSpi == NULL) {

       Display_printf(display, 0, 0, "Error initializing master SPI ");

       while (1);

   }

   else {

       Display_printf(display, 0, 0, "Master SPI initialized ");

}

 

其它改動(dòng)這里不進(jìn)一步贅述,請(qǐng)通過(guò)link獲得代碼工程,自行編譯測(cè)試。

運(yùn)行代碼,參見(jiàn)如下串口打印信息:

 

測(cè)試代碼會(huì)循環(huán)讀寫(xiě)ADS1261內(nèi)部寄存器,并會(huì)在最后讀取ADS1261內(nèi)u,其中“T:”表示CC2652 SPI口發(fā)送的數(shù)據(jù),“R:”表示CC2652 SPI口接收到的數(shù)據(jù),均為十六進(jìn)。

 

Starting the SPI master example

Master SPI initialized

 

T:4100

R:FF41

T:4224

R:FF42

T:4301

R:FF43

T:4400

R:FF44

T:4520

R:FF45

T:4605E900

R:FF4605E9

T:4700E700

R:FF4700E7

T:48002400

R:FF480024

T:49003100

R:FF490031

T:4A000E00

R:FF4A000E

T:4B001B00

R:FF4B001B

T:4C40B700

R:FF4C40B7

T:4DFF9600

R:FF4DFF96

T:4E005A00

R:FF4E005A

T:4F004F00

R:FF4F004F

T:5000DB00

R:FF5000DB

T:51FF3D00

R:FF51FF3D

T:5200F100

R:FF5200F1

T:21006C000000

R:FF21006C00F3

T:220053000000

R:FF220053240F

T:230046000000

R:FF23004601F4

T:24002D000000

R:FF24002D00F3

T:250038000000

R:FF2500382013

T:260007000000

R:FF26000705E8

T:270012000000

R:FF27001200F3

T:2800D1000000

R:FF2800D100F3

T:2900C4000000

R:FF2900C400F3

T:2A00FB000000

R:FF2A00FB00F3

T:2B00EE000000

R:FF2B00EE00F3

T:2C0085000000

R:FF2C00854034

T:2D0090000000

R:FF2D0090FF00

T:2E00AF000000

R:FF2E00AF00F3

T:2F00BA000000

R:FF2F00BA00F3

T:30002E000000

R:FF30002E00F3

T:31003B000000

R:FF31003BFF00

T:320004000000

R:FF32000400F3

T:46108200

R:FF461082

T:5200F100

R:FF5200F1

T:5000DB00

R:FF5000DB

T:51BBE600

R:FF51BBE6

T:08007F00

R:FF08007F

T:0A005500

R:FF0A0055

T:1200AA0000000000

R:FF1200AA0654B219

Tmp:27.9743

最后,關(guān)于源TIVA驅(qū)動(dòng)中的一處Bug,說(shuō)明如下:

 

void writeMultipleRegisters(uint8_t addr, uint8_t count, const uint8_t data[])

{

assert( (addr + count) <= NUM_REGISTERS );


uint8_t i;

for (i = addr; i < (addr + count); i++)

{

   writeSingleRegister(addr + i, data[i]); // 第一個(gè)值將是addr+addr

}

}

 

修改為:

 

void writeMultipleRegisters(uint8_t addr, uint8_t count, const uint8_t data[])

{

assert( (addr + count) <= NUM_REGISTERS );

 

uint8_t i;

for (i = addr; i < (addr + count); i++)

{

   writeSingleRegister(i, data[i]);

}

}

 

 

下一篇: PLC、DCS、FCS三大控

上一篇: 簡(jiǎn)化您的以太網(wǎng)設(shè)計(jì),

推薦產(chǎn)品

更多