chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Liteos-a內(nèi)核工作隊(duì)列的實(shí)現(xiàn)原理分析及經(jīng)驗(yàn)總結(jié)——芯??萍糚PG芯片CS1262接入OpenHarmony實(shí)戰(zhàn)

芯??萍迹ㄉ钲冢┕煞萦邢薰?/a> ? 2022-04-26 09:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

摘要

OpenHarmony系統(tǒng)中使用了liteos-m、liteos-a、linux三種內(nèi)核,工作隊(duì)列是linux內(nèi)核引入的一種異步處理機(jī)制。本文對(duì)liteos-a內(nèi)核下工作隊(duì)列的實(shí)現(xiàn)原理進(jìn)行分析,并對(duì)芯??萍?/u>的PPG芯片CS1262接入OpenHarmony過程中對(duì)工作隊(duì)列的使用方法進(jìn)行總結(jié)分享。

工作隊(duì)列工作隊(duì)列(Workqueue)是linux內(nèi)核引入的一種異步進(jìn)程調(diào)用的機(jī)制,允許內(nèi)核代碼請(qǐng)求在將來某個(gè)時(shí)間調(diào)用一個(gè)函數(shù)。在內(nèi)核源碼的documentation中也有對(duì)workqueue的說明,路徑為Documentation/core-api/workqueue.rst。網(wǎng)絡(luò)上也有很多對(duì)工作隊(duì)列機(jī)制的總結(jié)文章可以學(xué)習(xí),《Linux workqueue工作原理》講解的就比較詳細(xì)。簡(jiǎn)單理解就是先創(chuàng)建一個(gè)隊(duì)列用于存放work,并創(chuàng)建一個(gè)處理線程叫worker;用戶進(jìn)程通過調(diào)用接口往隊(duì)列里面添加work驅(qū)動(dòng)著worker來處理,如下:


fa12291e-c4bc-11ec-8521-dac502259ad0.png

而OpenHarmony系統(tǒng)根據(jù)不同的使用場(chǎng)景使用了liteos-m/liteos-a/linux三種內(nèi)核。

這里通過CS1262驅(qū)動(dòng)的實(shí)現(xiàn),對(duì)liteos-a內(nèi)核中工作隊(duì)列的使用及實(shí)現(xiàn)做一下分析。


工作隊(duì)列的使用方法

Sensor設(shè)備作為外接設(shè)備重要組成模塊,Sensor驅(qū)動(dòng)模型為上層Sensor服務(wù)系統(tǒng)提供穩(wěn)定的Sensor基礎(chǔ)能力接口,包括Sensor列表查詢、Sensor啟停、Sensor訂閱及去訂閱,Sensor參數(shù)配置等功能。傳感器驅(qū)動(dòng)模型總體框架如圖1所示。

OpenHarmony系統(tǒng)對(duì)workqueue提供了幾個(gè)接口,以方便用戶的使用。

1. 調(diào)用HdfWorkQueueInit,傳入queue名稱,創(chuàng)建并初始化一個(gè)workqueue

2. 調(diào)用HdfWorkInit,可以理解為初始化一個(gè)work的模板,主要記錄處理這個(gè)queue里面work的回調(diào)函數(shù)func以及參數(shù)para信息,類似于linux的work_struct

3. 通過調(diào)用HdfAddWork往workqueue中添加work,觸發(fā)調(diào)用與此queue關(guān)聯(lián)的回調(diào)函數(shù)func


步驟1~2可以在CS1262驅(qū)動(dòng)HdfDriverEntry對(duì)象的Init接口中看到

int32_t InitPpgDriver(struct HdfDeviceObject *device)
{
    CHECK_NULL_PTR_RETURN_VALUE(device, HDF_ERR_INVALID_PARAM);
    struct PpgDrvData *drvData = (struct PpgDrvData *)device->service;
    CHECK_NULL_PTR_RETURN_VALUE(drvData, HDF_ERR_INVALID_PARAM);

    if (HdfWorkQueueInit(&drvData->ppgWorkQueue, HDF_PPG_WORK_QUEUE) != HDF_SUCCESS) {
        HDF_LOGE("%s: Ppg init work queue failed", __func__);
        return HDF_FAILURE;
    }

    if (HdfWorkInit(&drvData->ppgWork, PpgDataWorkEntry, drvData) != HDF_SUCCESS) {
        HDF_LOGE("%s: Ppg create thread failed", __func__);
        return HDF_FAILURE;
    }

    drvData->initStatus = true;
    drvData->enable = false;
    drvData->detectFlag = false;

    HDF_LOGI("%s: init Ppg driver success", __func__);
    return HDF_SUCCESS;
}

步驟3在CS1262的中斷處理函數(shù)中,有數(shù)據(jù)需要上報(bào)時(shí)會(huì)產(chǎn)生一個(gè)中斷,中斷處理中添加一個(gè)work通過工作隊(duì)列機(jī)制來實(shí)現(xiàn)數(shù)據(jù)的上報(bào)。

static int32_t PpgReadInt(uint16_t gpio, void *data)
{
    struct PpgDrvData *drvData = PpgGetDrvData();
    CHECK_PPG_INIT_RETURN_VALUE(drvData, HDF_ERR_NOT_SUPPORT);

    if (!drvData->enable) {
        HDF_LOGE("%s: ppg not enabled", __func__);
        return HDF_SUCCESS;
    }

    if (!HdfAddWork(&drvData->ppgWorkQueue, &drvData->ppgWork)) {
        HDF_LOGE("%s: Ppg add work queue failed", __func__);
        return HDF_FAILURE;
    }

    return HDF_SUCCESS;
}

CS1262工作對(duì)列中work的回調(diào)接口實(shí)現(xiàn),兩個(gè)主要功能:獲取數(shù)據(jù),數(shù)據(jù)上報(bào)。

static void PpgDataWorkEntry(void *arg)
{
    int32_t ret;
    struct PpgDrvData *drvData = (struct PpgDrvData *)arg;
    uint16_t readLen = 0;

    CHECK_NULL_PTR_RETURN(drvData);
    CHECK_NULL_PTR_RETURN(drvData->chipData.opsCall.ReadData);

    ret = drvData->chipData.opsCall.ReadData(g_fifoBuf, sizeof(g_fifoBuf), &readLen);
    if ((ret != HDF_SUCCESS) || (readLen > sizeof(g_fifoBuf))) {
        HDF_LOGE("%s: Ppg read data failed", __func__);
        return;
    }

    if (PpgReportInt(g_fifoBuf, readLen) != HDF_SUCCESS) {
        HDF_LOGE("%s: Cs1262ReportInt fail", __func__);
    }
}

說明:當(dāng)前CS1262驅(qū)動(dòng)已提交PR,還未正式上庫


Liteos-a內(nèi)核中工作隊(duì)列的實(shí)現(xiàn)

1.HdfWorkQueueInit接口

(1)在liteos-a系統(tǒng)源碼中搜索,接口定義如下:

源文件:drivers/adapter/khdf/liteos/osal/src/osal_workqueue.c
代碼如下:
int32_t HdfWorkQueueInit(HdfWorkQueue *queue, char *name)
{
......

    queue->realWorkQueue = create_singlethread_workqueue(name);

......

    return HDF_SUCCESS;
}

(2)create_singlethread_workqueue接口實(shí)現(xiàn)如下

源文件:kernel/liteos_a/bsd/compat/linuxkpi/include/linux/workqueue.h

宏定義:
#define create_singlethread_workqueue(name) \
    linux_create_singlethread_workqueue(name)


源文件:kernel/liteos_a/bsd/compat/linuxkpi/src/linux_workqueue.c
代碼如下:
struct workqueue_struct *linux_create_singlethread_workqueue(char *name)
{
    return __create_workqueue_key(name, 1, 0, 0, NULL, NULL);
}

(3)__create_workqueue_key中初始化化了一個(gè)event后面會(huì)用;創(chuàng)建一個(gè)workqueueThread線程用來處理這個(gè)workqueue里的所有work

源文件:kernel/liteos_a/bsd/compat/linuxkpi/src/linux_workqueue.c
代碼如下:
struct workqueue_struct *__create_workqueue_key(char *name,
                                                int singleThread,
                                                int freezeable,
                                                int rt,
                                                struct lock_class_key *key,
                                                const char *lockName)
{
......

    (VOID)LOS_EventInit(&wq->wq_event);

    if (singleThread) {
        cwq = InitCpuWorkqueue(wq, singleThread);
        ret = CreateWorkqueueThread(cwq, singleThread);
    } else {
        LOS_MemFree(m_aucSysMem0, wq->cpu_wq);
        LOS_MemFree(m_aucSysMem0, wq);
        return NULL;
    }

    if (ret) {
        destroy_workqueue(wq);
        wq = NULL;
    }

    return wq;
}

(4)LOS_EventInit就是liteos系統(tǒng)的task之間通信的事件機(jī)制實(shí)現(xiàn)

(5)CreateWorkqueueThread就是調(diào)用的liteos的LOS_TaskCreate來創(chuàng)建一個(gè)Task(也即thread),處理函數(shù)為WorkerThread,如下

源文件:kernel/liteos_a/bsd/compat/linuxkpi/src/linux_workqueue.c
代碼如下:
STATIC UINT32 CreateWorkqueueThread(cpu_workqueue_struct *cwq, INT32 cpu)
{
    ......

    taskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)WorkerThread;

    ......

    ret = LOS_TaskCreate(&cwq->wq->wq_id, &taskInitParam);

    ......

    return LOS_OK;
}

STATIC VOID WorkerThread(cpu_workqueue_struct *cwqParam)
{
    cpu_workqueue_struct *cwq = cwqParam;

    for (;;) {
        if (WorkqueueIsEmpty(cwq)) {
(VOID)LOS_EventRead(&(cwq->wq->wq_event),0x01,LOS_WAITMODE_OR|LOS_WAITMODE_CLR,LOS_WAIT_FOREVER);
        }
        RunWorkqueue(cwq);
    }
}

線程處理函數(shù)里面就是一個(gè)死循環(huán),當(dāng)workqueue中為空時(shí),代碼會(huì)阻塞在LOS_EventRead處,讀一個(gè)還未發(fā)生的事件時(shí),代碼就會(huì)在此處一直阻塞,直到事件發(fā)生;

(6)在事件發(fā)生(有work可以處理)時(shí),就會(huì)調(diào)用真正的處理接口RunWorkqueue,對(duì)work調(diào)用回調(diào)函數(shù)(例如上面CS1262中的PpgDataWorkEntry)

源文件:kernel/liteos_a/bsd/compat/linuxkpi/src/linux_workqueue.c
代碼如下:
STATIC VOID RunWorkqueue(cpu_workqueue_struct *cwq)
{
    ......
    if (!WorkqueueIsEmpty(cwq)) {
        ......
        func = work->func;
        func(work);
        ......
    }
    LOS_SpinUnlockRestore(&g_workqueueSpin, intSave);
}

2.HdfWorkInit接口

(1)接口實(shí)現(xiàn)如下

源文件:drivers/adapter/khdf/liteos/osal/src/osal_workqueue.c
代碼如下:
int32_t HdfWorkInit(HdfWork *work, HdfWorkFunc func, void *para)
{
    ......

    wrapper = (struct WorkWrapper *)OsalMemCalloc(sizeof(*wrapper));
    if (wrapper == NULL) {
        HDF_LOGE("%s malloc fail", __func__);
        return HDF_ERR_MALLOC_FAIL;
    }
    realWork = &(wrapper->work.work);
    wrapper->workFunc = func;
    wrapper->para = para;

    INIT_WORK(realWork, WorkEntry);
    work->realWork = wrapper;

    return HDF_SUCCESS;
}

(2)從這里看這個(gè)處理函數(shù)func賦值給了wrapper->workFunc,而在INIT_WORK中將WorkEntry接口賦值給了work的func

源文件:drivers/adapter/khdf/liteos/osal/src/osal_workqueue.c
代碼如下:
#ifdef WORKQUEUE_SUPPORT_PRIORITY
#define INIT_WORK(work, callbackFunc)  do {      \
    INIT_LIST_HEAD(&((work)->entry));            \
    (work)->func = (callbackFunc);               \
    (work)->data = (atomic_long_t)(0);           \
    (work)->work_status = 0;                     \
    (work)->work_pri = OS_WORK_PRIORITY_DEFAULT; \
} while (0)
#else
#define INIT_WORK(work, callbackFunc)  do { \
    INIT_LIST_HEAD(&((work)->entry));       \
    (work)->func = (callbackFunc);          \
    (work)->data = (atomic_long_t)(0);      \
    (work)->work_status = 0;                \
} while (0)
#endif

(3)從前面分析,有work需要處理時(shí)調(diào)用的就是這個(gè)(work)->func;而這里看這個(gè)接口的值是WorkEntry,怎么跟驅(qū)動(dòng)側(cè)輸入的處理接口聯(lián)系的呢?就是這個(gè)WorkEntry實(shí)現(xiàn)的

源文件:drivers/adapter/khdf/liteos/osal/src/osal_workqueue.c
代碼如下:
static void WorkEntry(struct work_struct *work)
{
    struct WorkWrapper *wrapper = NULL;
    if (work != NULL) {
        wrapper = (struct WorkWrapper *)work;
        if (wrapper->workFunc != NULL) {
            wrapper->workFunc(wrapper->para);
        } else {
            HDF_LOGE("%s routine null", __func__);
        }
    } else {
        HDF_LOGE("%s work null", __func__);
    }
}

從這里看就是調(diào)用的wrapper->workFunc,也即HdfWorkInit接口傳入的回調(diào)函數(shù)。

3.HdfAddWork接口

(1)接口定義如下

源文件:drivers/adapter/khdf/liteos/osal/src/osal_workqueue.c
代碼如下:
bool HdfAddWork(HdfWorkQueue *queue, HdfWork *work)
{
    ......

    return queue_work(queue->realWorkQueue, &((struct WorkWrapper *)work->realWork)->work.work);
}

(2)queue_work接口是一個(gè)宏,定義如下

源文件:drivers/adapter/khdf/liteos/osal/src/osal_workqueue.c
代碼如下:
#define queue_work(wq, work) \
    linux_queue_work(wq, work)

源文件:kernel/liteos_a/bsd/compat/linuxkpi/src/linux_workqueue.c

linux_queue_work最終調(diào)用的接口是InsertWork,中間的調(diào)用如下

linux_queue_work()
   |--> QueueWorkOn()
           |--> QueueWork()
                  |-->InsertWork()

接口實(shí)現(xiàn):
STATIC VOID InsertWork(cpu_workqueue_struct *cwq, struct work_struct *work, 
struct list_head *head, UINT32 *intSave)
{
#ifdef WORKQUEUE_SUPPORT_PRIORITY
    WorkListAdd(&work->entry, head, work->work_pri);
#else
    WorkListAddTail(&work->entry, head);
#endif
    LOS_SpinUnlockRestore(&g_workqueueSpin, *intSave);
    (VOID)LOS_EventWrite(&(cwq->wq->wq_event), 0x01);
    LOS_SpinLockSave(&g_workqueueSpin, intSave);
}

從實(shí)現(xiàn)上看這里就是寫了一個(gè)Event,還記得前面在init里面一個(gè)阻塞在讀Event的嗎?這里的LOS_EventWrite就代表了事件發(fā)生,然后就可以正常處理work了


總結(jié)

OpenHarmony的liteos-a內(nèi)核中工作隊(duì)列的實(shí)現(xiàn)就是參照linux內(nèi)核的實(shí)現(xiàn),只是底層使用的是嵌入式系統(tǒng)中事件處理機(jī)制。

OpenHarmony在內(nèi)核上層做了一層封裝(OSAL),在使用linux和liteos-a內(nèi)核時(shí)工作隊(duì)列的使用方式統(tǒng)一,驅(qū)動(dòng)開發(fā)時(shí)無感知。

芯??萍甲鳛镺penHarmony項(xiàng)目群B類捐贈(zèng)人,已加入DriverFramework SIG和DevBoard SIG。在DriverFramework SIG中負(fù)責(zé)心率傳感器PPG驅(qū)動(dòng)模型和HDI的實(shí)現(xiàn)。CS1262是芯海科技最新推出的一款用于光電血管容積圖(PPG)信號(hào)采集的高端模擬前端(AFE),通過SPI總線與主控通信。關(guān)鍵性能指標(biāo)達(dá)到業(yè)界一流水平:

高精度測(cè)量:最高PPG SNR高達(dá)110dB

◆ 超強(qiáng)抗干擾:PSRR ≥ 90dB(0.5Hz~10MHz 范圍內(nèi)的Boost噪聲)

◆ 低功耗:83uA@100Hz@4Ch@2階環(huán)境光

◆ 全膚色支持:?jiǎn)温稬ED Driver最大電流可達(dá)125mA,兩路合并后支持250mA

◆ 高可靠:支持過溫保護(hù)/關(guān)鍵寄存器保護(hù)/LED過流保護(hù)/SPI通訊可靠性check

◆ 易用性:支持1/2階環(huán)境光消減/硬件佩戴檢測(cè)/自動(dòng)調(diào)光/動(dòng)態(tài)配置刷新


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    459

    文章

    52485

    瀏覽量

    440628
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3851

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RDMA簡(jiǎn)介5之RoCE V2隊(duì)列分析

    在RoCE v2協(xié)議中,RoCE v2隊(duì)列是數(shù)據(jù)傳輸?shù)淖畹讓涌刂茩C(jī)制,其由工作隊(duì)列(WQ)和完成隊(duì)列(CQ)共同組成。其中工作隊(duì)列采用雙向通道設(shè)計(jì),包含用于存儲(chǔ)即將發(fā)送數(shù)據(jù)的發(fā)送
    發(fā)表于 06-05 17:28

    GaN E-HEMTs的PCB布局經(jīng)驗(yàn)總結(jié)

    GaN E-HEMTs的PCB布局經(jīng)驗(yàn)總結(jié)
    的頭像 發(fā)表于 03-13 15:52 ?556次閱讀
    GaN E-HEMTs的PCB布局<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>

    問題:CS32L010F8U6的MCU如何導(dǎo)出固件?

    請(qǐng)問大神CS32L010F8U6的MCU能否從芯片里導(dǎo)出已燒錄的固件到計(jì)算機(jī)呢?如果行,如何操作呢?謝謝
    發(fā)表于 02-22 18:14

    CS1262封裝

    誰有CS1262的封裝庫或者 DEMO 開發(fā)板的資料
    發(fā)表于 02-14 14:59

    CS1262

    CS1262有它的封裝庫嗎或者demopcb文件
    發(fā)表于 02-14 14:41

    求一份科技CS8M188案例教程和demo

    科技CS8M188案例教程和demo,郵箱1319360357@qq.com 不要匯編,只需要C語言。
    發(fā)表于 01-17 10:23

    科技CS8M321/326系列經(jīng)濟(jì)型MCU全新上市

    近期,科技(股票代碼:688595)全新推出了CS8M321(簡(jiǎn)稱M321)、CS8M326(簡(jiǎn)稱M326)系列ADC模塊經(jīng)濟(jì)型MCU。該系列MCU集成了12位單端ADC、低溫漂基
    的頭像 發(fā)表于 01-10 18:05 ?508次閱讀
    <b class='flag-5'>芯</b><b class='flag-5'>海</b>科技<b class='flag-5'>CS</b>8M321/326系列經(jīng)濟(jì)型MCU全新上市

    科技CS1262:高精度全場(chǎng)景PPG AFE

    科技CS1262作為一款高精度全場(chǎng)景PPG AFE芯片,以其卓越的性能指標(biāo)、全面的功能特性和低功耗特性,為用戶提供了高效、可靠的生命體征
    的頭像 發(fā)表于 12-17 17:32 ?1172次閱讀
    <b class='flag-5'>芯</b><b class='flag-5'>海</b>科技<b class='flag-5'>CS1262</b>:高精度全場(chǎng)景<b class='flag-5'>PPG</b> AFE

    科技可穿戴設(shè)備PPG方案:結(jié)構(gòu)、工藝與高精度設(shè)計(jì)探索

    CS1262芯片以其卓越的性能指標(biāo),如高配置、高精度測(cè)量、超強(qiáng)抗干擾、低功耗、全膚色支持、高可靠性和易用性等,贏得了業(yè)界的廣泛認(rèn)可。未來,隨著科技在健康測(cè)量領(lǐng)域的持續(xù)投入和創(chuàng)新,
    的頭像 發(fā)表于 12-17 17:27 ?891次閱讀
    <b class='flag-5'>芯</b><b class='flag-5'>海</b>科技可穿戴設(shè)備<b class='flag-5'>PPG</b>方案:結(jié)構(gòu)、工藝與高精度設(shè)計(jì)探索

    科技系列OpenHarmony3.1芯片支持智慧生態(tài)構(gòu)建

    隨著OpenHarmony3.1的正式發(fā)布,科技作為OpenHarmony生態(tài)的重要參與者,及時(shí)推出了兩款與系統(tǒng)適配的新品:健康測(cè)量CS1262
    的頭像 發(fā)表于 12-17 17:25 ?536次閱讀
    <b class='flag-5'>芯</b><b class='flag-5'>海</b>科技系列<b class='flag-5'>OpenHarmony</b>3.1<b class='flag-5'>芯片</b>支持智慧生態(tài)構(gòu)建

    科技深化穿戴健康測(cè)量產(chǎn)品布局,CS1262CS1253芯片引領(lǐng)創(chuàng)新

    隨著全球健康意識(shí)的提升,健康測(cè)量設(shè)備需求激增,特別是智能手表和手環(huán)等腕帶設(shè)備,年均復(fù)合增長(zhǎng)率超過15%。科技自2007年起便布局健康測(cè)量領(lǐng)域,從基礎(chǔ)的體重秤、體脂秤到復(fù)雜的PPG、BIA等智能
    的頭像 發(fā)表于 12-17 17:23 ?825次閱讀
    <b class='flag-5'>芯</b><b class='flag-5'>海</b>科技深化穿戴健康測(cè)量產(chǎn)品布局,<b class='flag-5'>CS1262</b>與<b class='flag-5'>CS</b>1253<b class='flag-5'>芯片</b>引領(lǐng)創(chuàng)新

    科技CS32A01X系列芯片閃耀第七屆集創(chuàng)賽,助力半導(dǎo)體人才培育

    科技的SmartAnalog芯片CS32A01X系列產(chǎn)品,憑借其卓越的綜合性能,被“曾益慧創(chuàng)杯”選定為數(shù)?;旌闲盘?hào)賽題的測(cè)試芯片,為
    的頭像 發(fā)表于 11-28 09:15 ?732次閱讀
    <b class='flag-5'>芯</b><b class='flag-5'>海</b>科技<b class='flag-5'>CS32A</b>01X系列<b class='flag-5'>芯片</b>閃耀第七屆集創(chuàng)賽,助力半導(dǎo)體人才培育

    科技車規(guī)級(jí)SAR ADC新品CS1795X榮獲“中國(guó)

    11月7日,2024中國(guó)微電子產(chǎn)業(yè)促進(jìn)大會(huì)暨第十九屆“中國(guó)”優(yōu)秀產(chǎn)品征集結(jié)果發(fā)布儀式在珠海橫琴粵澳深度合作區(qū)隆重舉行。科技旗下集成高精度基準(zhǔn)的低功耗汽車級(jí)SARADC芯片
    的頭像 發(fā)表于 11-09 01:06 ?649次閱讀
    <b class='flag-5'>芯</b><b class='flag-5'>海</b>科技車規(guī)級(jí)SAR ADC新品<b class='flag-5'>CS</b>1795X榮獲“中國(guó)<b class='flag-5'>芯</b>”

    CS1262資料

    求一波CS1262芯片的例程代碼、寄存器配置、完整數(shù)據(jù)手冊(cè)等,郵箱24181214463@stu.xidian.edu.cn。謝謝大家啦
    發(fā)表于 10-22 11:22

    ADC 芯片 CS1237 為例,簡(jiǎn)述國(guó)產(chǎn) ADC 芯片的優(yōu)勢(shì)

    科技的 ADC 芯片 CS1237 便是國(guó)產(chǎn) ADC 芯片中的佼佼者,通過對(duì)其的分析,我們可以一窺國(guó)產(chǎn) ADC
    的頭像 發(fā)表于 07-23 15:25 ?2267次閱讀