久久午夜影院,91精品国产调教在线观看,日韩午夜免费,伊人久久大香线蕉av不卡

你的位置:首頁(yè) > 互連技術(shù) > 正文

根據(jù) SCI 輸入信號(hào)自動(dòng)校準(zhǔn)波特率

發(fā)布時(shí)間:2021-08-10 來(lái)源:Terry Deng 責(zé)任編輯:wenwei

【導(dǎo)讀】本文檔概述了一種基于 SCI/UART 輸入信號(hào),可以自動(dòng)校準(zhǔn)本設(shè)備SCI/UART波特率的方法,該方法適用與所有第三代C2000芯片,比如F2807x/37x,F(xiàn)28004x,F(xiàn)28002x等等。
 
一 原理說(shuō)明
 
假設(shè)有2塊電路板通過(guò)SCI進(jìn)行通信。“Transmitter”向“Receiver”發(fā)送未知波特率的數(shù)據(jù),“ Receiver”則使用 eCAP 測(cè)量未知的波特率,然后修改其自身的波特率和“Transmitter”匹配。
 
下面款圖是一種情況,其中“Transmitter” 的波特率設(shè)置為 9889,而“Receiver”的初始波特率設(shè)置為 9601 ,相比之下“Receiver”的波特率為 -3% 偏差。 經(jīng)過(guò)算法的自動(dòng)校準(zhǔn)以后,“Receiver”將會(huì)把自身波特率校正為與“Transmitter”相同的9889。
 
根據(jù) SCI 輸入信號(hào)自動(dòng)校準(zhǔn)波特率
 
下面框圖則是另一種情況,假如“Receiver”和“Transmitter”的初始波特率都是9889,但“Receiver”的內(nèi)部晶振INTOSC有-3%的偏差。使用上述完全相同的方法原理和步驟,“Receiver”波特率設(shè)置將會(huì)從9889校準(zhǔn)成9601,這樣“Receiver”的波特率設(shè)置被自動(dòng)校準(zhǔn)抵消內(nèi)部晶振的偏差。在測(cè)量實(shí)際信號(hào)時(shí),“Receiver”輸出到“Transmitter”的信號(hào)會(huì)是正確的 9889 波特率。
 
根據(jù) SCI 輸入信號(hào)自動(dòng)校準(zhǔn)波特率
 
二 Receiver 的校準(zhǔn)代碼
 
1. 初始化
 
需要配置以下模塊來(lái)校準(zhǔn)波特率:
 
●    時(shí)鐘:使用 INTOSC2 并選擇 100MHz 的 LSPCLK
 
#define DEVICE_SETCLOCK_CFG      (SYSCTL_OSCSRC_OSC2 | SYSCTL_IMULT(20) | 
                                     SYSCTL_FMULT_NONE | SYSCTL_SYSDIV(2) |   
                                     SYSCTL_PLL_ENABLE)
    //
    // Set up PLL control and clock dividers
    //
    SysCtl_setClock(DEVICE_SETCLOCK_CFG);
    //
    // Make sure the LSPCLK divider is set to the default (divide by 4)
    //
    SysCtl_setLowSpeedClock(SYSCTL_LSPCLK_PRESCALE_1);
 
●    SCI 模塊:通訊數(shù)據(jù)使用,發(fā)出校準(zhǔn)以后的波形
 
    // Initialize SCIA and its FIFO.
    //
    SCI_performSoftwareReset(SCIA_BASE);
    //
    // Configure SCIA for communications.
    //
    SCI_setConfig(SCIA_BASE, DEVICE_LSPCLK_FREQ, TARGETBAUD, (SCI_CONFIG_WLEN_8 |
                                                        SCI_CONFIG_STOP_ONE |
                                                        SCI_CONFIG_PAR_NONE));
    SCI_resetChannels(SCIA_BASE);
    SCI_resetRxFIFO(SCIA_BASE);
    SCI_resetTxFIFO(SCIA_BASE);
    SCI_clearInterruptStatus(SCIA_BASE, SCI_INT_TXFF | SCI_INT_RXFF);
    SCI_enableFIFO(SCIA_BASE);
    SCI_enableModule(SCIA_BASE);
SCI_performSoftwareReset(SCIA_BASE);
 
●    Xbar 輸入:將 GPIO28/SCI 內(nèi)部連接到 INPUTXBAR7 與 ECAP1 配合使用
 
//
    // Configure GPIO 28 as eCAP input
    //
    XBAR_setInputPin(XBAR_INPUT7, 28);
 
●    ECAP 模塊:監(jiān)控接收到的 SCI 通信脈沖寬度
    
//
    // Disable ,clear all capture flags and interrupts
    //
    ECAP_disableInterrupt(ECAP1_BASE,
                          (ECAP_ISR_SOURCE_CAPTURE_EVENT_1  |
                           ECAP_ISR_SOURCE_CAPTURE_EVENT_2  |
                           ECAP_ISR_SOURCE_CAPTURE_EVENT_3  |
                           ECAP_ISR_SOURCE_CAPTURE_EVENT_4  |
                           ECAP_ISR_SOURCE_COUNTER_OVERFLOW |
                           ECAP_ISR_SOURCE_COUNTER_PERIOD   |
                           ECAP_ISR_SOURCE_COUNTER_COMPARE));
    ECAP_clearInterrupt(ECAP1_BASE,
                        (ECAP_ISR_SOURCE_CAPTURE_EVENT_1  |
                         ECAP_ISR_SOURCE_CAPTURE_EVENT_2  |
                         ECAP_ISR_SOURCE_CAPTURE_EVENT_3  |
                         ECAP_ISR_SOURCE_CAPTURE_EVENT_4  |
                         ECAP_ISR_SOURCE_COUNTER_OVERFLOW |
                         ECAP_ISR_SOURCE_COUNTER_PERIOD   |
                         ECAP_ISR_SOURCE_COUNTER_COMPARE));
 
    //
    // Disable CAP1-CAP4 register loads
    //
    ECAP_disableTimeStampCapture(ECAP1_BASE);
 
    //
    // Configure eCAP
    //    Enable capture mode.
    //    One shot mode, stop capture at event 4.
    //    Set polarity of the events to rising, falling, rising, falling edge.
    //    Set capture in time difference mode.
    //    Select input from XBAR7.
    //    Enable eCAP module.
    //    Enable interrupt.
    //
    ECAP_stopCounter(ECAP1_BASE);
    ECAP_enableCaptureMode(ECAP1_BASE);
    ECAP_setCaptureMode(ECAP1_BASE, ECAP_ONE_SHOT_CAPTURE_MODE, ECAP_EVENT_4);
 
    ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_1, ECAP_EVNT_FALLING_EDGE);
    ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_2, ECAP_EVNT_RISING_EDGE);
    ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_3, ECAP_EVNT_FALLING_EDGE);
    ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_4, ECAP_EVNT_RISING_EDGE);
 
    ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_1);
    ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_2);
    ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_3);
    ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_4);
 
    ECAP_selectECAPInput(ECAP1_BASE, ECAP_INPUT_INPUTXBAR7);
 
    ECAP_enableLoadCounter(ECAP1_BASE);
    ECAP_setSyncOutMode(ECAP1_BASE, ECAP_SYNC_OUT_DISABLED);
    ECAP_startCounter(ECAP1_BASE);
    ECAP_enableTimeStampCapture(ECAP1_BASE);
    ECAP_reArm(ECAP1_BASE);
 
    ECAP_enableInterrupt(ECAP1_BASE, ECAP_ISR_SOURCE_CAPTURE_EVENT_4);
 
2. 中斷
 
捕獲傳入 SCI 通信的脈沖寬度,每捕獲 4 次就中斷一次。 將這 4 個(gè)捕獲添加到陣列中。
 
__interrupt void ecap1ISR(void)
{
    if(stopCaptures==0)
    {
        //
        // Get the capture counts, interrupt every 4. Can be 1-bit or more wide.
        // add one to account for partial eCAP counts at higher baud rates
        // (e.g. count = 40, but if had higher resolution, this would be 40.5)
        //
        capCountArr[0] = 1+ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_1);
        capCountArr[1] = 1+ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_2);
        capCountArr[2] = 1+ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_3);
        capCountArr[3] = 1+ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_4);
 
        //
        // Add samples to a buffer. Get average baud and tune INTOSC if buffer filled.
        //
        capCountIter = 0;
        for (capCountIter=0; capCountIter<4; capCountIter++)
        {
            //
            // if we still have samples left to capture, add it to the samples array
            //
            if(samplesArrIter<NUMSAMPLES)
            {
                samplesArr[samplesArrIter] = capCountArr[capCountIter];
                samplesArrIter++;
            }
 
            //
            // else, all samples were received, break to begin tuning
            //
            else
            {
                stopCaptures=1;
                break;
            }
        }
    }
 
    //
    // Clear interrupt flags for more interrupts.
    //
    ECAP_clearInterrupt(ECAP1_BASE,ECAP_ISR_SOURCE_CAPTURE_EVENT_4);
    ECAP_clearGlobalInterrupt(ECAP1_BASE);
 
    //
    // Start eCAP
    //
    ECAP_reArm(ECAP1_BASE);
 
    //
    // Acknowledge the group interrupt for more interrupts.
    //
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP4);
}
 
3. 主循環(huán)
 
捕獲陣列滿后,計(jì)算陣列的平均脈沖寬度 (也就是波特率),并更新SCI波特率寄存器,使其盡可能接近計(jì)算的平均值。
 
//
    // Loop forever. Suspend or place breakpoints to observe the buffers.
    //
    for(;;)
    {
        //
        // Array is filled, begin tuning
        //
        if(stopCaptures==1)
        {
            //
            // Get an average baud rate from the array of samples
            //
            uint32_t avgBaud = getAverageBaud(samplesArr,NUMSAMPLES,TARGETBAUD);
 
            //
            // if the baud function returns the error code ''''''''0'''''''', then flag an error
            //
            if(avgBaud==0)
            {
                ESTOP0;
            }
 
            //
            // Update the device''''''''s baud rate to match the measured baud rate
            //
            SCI_setBaud(SCIA_BASE, DEVICE_LSPCLK_FREQ, avgBaud);
 
            //
            // (OPTIONAL) Continuously send data to SCITX once tuning
            // is complete for external observation (by logic analyzer or scope)
            //
            //unsigned char *msg;
            //while(1)
            //{
            //    msg = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?";
            //    SCI_writeCharArray(SCIA_BASE, (uint16_t*)msg, 91);
            //}
 
            //
            // Wait for user to view the results in "Expressions" window
            //
            ESTOP0;
 
            //
            // If continuing, reset the array iterator and unlock the ISR for new captures
            //
            samplesArrIter=0;
            stopCaptures=0;
        }
}
 
4. 平均脈沖寬度
 
對(duì)于許多應(yīng)用的SCI 通信,傳輸?shù)臄?shù)據(jù) (例如 0xA5)是變化不固定的,因此SCI的高低電平脈沖寬度就是變化的。所以必須對(duì)樣本陣列進(jìn)行如下的預(yù)處理,然后才能計(jì)算平均脈沖寬度。
 
a) 丟棄大于 10 位寬的脈沖寬度 (丟棄空閑時(shí)間)
 
b) 將 n 位值除以 n
 
c) 對(duì)修改后的樣本數(shù)組進(jìn)行平均化
 
uint32_t getAverageBaud(volatile float arr[], int size, float targetBaudRate)
{
    //
    // clean up variable width array to single-bit-width array
    //
    uint16_t pass = arrTo1PulseWidth(arr, size, (float)DEVICE_SYSCLK_FREQ/targetBaudRate);
 
    //
    // pass only if enough good samples provided
    //
    if(pass == 0)
    {
        return 0;
    }
 
    //
    // convert 2-bit width, 3-bit width, etc. to 1-bit width values by dividing, and average these values.
    // skip unrelated values
    //
    float averageBitWidth = computeAvgWidth(arr, size);
 
    //
    // get the rounded baud rate from the average number of clocks and the sysclk frequency
    //
    return (uint32_t)(((float)DEVICE_SYSCLK_FREQ/(float)averageBitWidth)+0.5);
}
 
以下是平均脈寬計(jì)算的原理和代碼流程圖
 
根據(jù) SCI 輸入信號(hào)自動(dòng)校準(zhǔn)波特率
根據(jù) SCI 輸入信號(hào)自動(dòng)校準(zhǔn)波特率
 
三 結(jié)果
 
按照以下設(shè)置進(jìn)行測(cè)試,結(jié)果詳見(jiàn)表格,校準(zhǔn)以后的誤差從3% 改善為0.1%左右甚至更小。
 
1. “Transmitter”設(shè)置為正確的波特率 (我們嘗試匹配的波特率)
2. “Receiver”設(shè)置為錯(cuò)誤波特率 (-3% 或 +3%)
3. “Receiver”運(yùn)行校準(zhǔn)程序以匹配“Transmitter”
 
根據(jù) SCI 輸入信號(hào)自動(dòng)校準(zhǔn)波特率
 
 
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理。
 
推薦閱讀:
 
助力高速光模塊市場(chǎng),提供高集成度,更小封裝電源的解決方案
二極管仿真模式在同步BUCK里面的應(yīng)用
基于UCC25800-Q1開(kāi)環(huán)LLC驅(qū)動(dòng)器的隔離電源方案設(shè)計(jì)
充電芯片BQ25601應(yīng)用中的若干問(wèn)題
AI視覺(jué)芯片研發(fā)及基礎(chǔ)算力平臺(tái)公司愛(ài)芯科技完成A+輪融資
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書(shū)下載更多>>
熱門(mén)搜索

關(guān)閉

?

關(guān)閉

久久午夜影院,91精品国产调教在线观看,日韩午夜免费,伊人久久大香线蕉av不卡
97精品国产福利一区二区三区| 中文字幕一区二区三区四区久久 | 久久久精品区| 欧美a一区二区| 精品网站999| 国产麻豆久久| 亚洲免费成人| 日韩中文字幕一区二区三区| 蜜臀精品一区二区三区在线观看| 三级一区在线视频先锋| 中文在线日韩| 国产探花一区| 国产一区二区三区黄网站| 日本黄色精品| 免费精品国产| 麻豆精品网站| 91福利精品在线观看| 欧美日韩精品一区二区三区视频 | 亚洲欧美日韩国产一区| 爽好久久久欧美精品| 日韩黄色在线观看| 久久国产乱子精品免费女| 国产日产精品_国产精品毛片 | 精品在线网站观看| 神马午夜在线视频| av一区二区高清| 亚洲资源在线| 麻豆久久一区| 国产99久久| 亚洲欧美日韩国产一区二区| 亚洲精品福利| 亚洲a一区二区三区| 久久大逼视频| 综合激情视频| 日本在线一区二区三区| 欧美亚洲三级| 欧美日一区二区在线观看| 日本欧美韩国一区三区| 日韩精品1区2区3区| 国产农村妇女精品一区二区| 日本麻豆一区二区三区视频| 国产va免费精品观看精品视频| 黄毛片在线观看| 自拍日韩欧美| 奇米狠狠一区二区三区| 超碰超碰人人人人精品| 男女男精品视频网| 精品欧美视频| 石原莉奈在线亚洲二区| 麻豆精品在线| 日韩午夜在线| 久久久国产精品入口麻豆| 女同性一区二区三区人了人一| 视频一区二区三区在线| 久久精品国产福利| 国产精品呻吟| 精品精品99| 亚洲一区二区日韩| 色婷婷综合网| 在线观看亚洲精品福利片| 福利一区二区三区视频在线观看| 日韩福利视频导航| 精品一区二区三区四区五区| 久久久精品久久久久久96 | 精品国产亚洲日本| 99久久精品国产亚洲精品| 韩国精品主播一区二区在线观看| 好吊一区二区三区| 国产日韩欧美高清免费| 蜜桃视频第一区免费观看| 日韩欧美2区| 亚洲永久精品唐人导航网址| 99视频精品| 国产中文一区| 久久久久蜜桃| 欧美freesex黑人又粗又大| 美腿丝袜亚洲三区| 国产精久久一区二区| 日韩高清不卡一区| 亚洲aⅴ网站| 中文视频一区| 99pao成人国产永久免费视频| 日韩精品久久久久久久电影99爱| 国产一区二区三区不卡视频网站| 国产精品免费精品自在线观看| 日韩1区2区3区| 亚洲日产国产精品| 色综合视频一区二区三区日韩 | 欧美日韩一区二区国产| 欧美精品自拍| 久久夜夜操妹子| 国产精品成人国产| 亚洲精品影视| 夜夜嗨av一区二区三区网站四季av| a国产在线视频| 精品在线网站观看| 国产精品午夜一区二区三区| 色婷婷成人网| 免费精品视频在线| 亚洲激情社区| 亚洲特色特黄| 欧美色图一区| 久久久久国产精品一区三寸| 久久精品72免费观看| 老鸭窝毛片一区二区三区| 国产在线不卡| 快播电影网址老女人久久| 成人在线免费观看网站| 国产极品嫩模在线观看91精品| 日本久久一区| 日欧美一区二区| 日韩在线观看中文字幕| 亚洲精品韩国| 日韩精品免费视频一区二区三区 | 国产精品蜜月aⅴ在线| 国产91在线精品| 日韩三级视频| 日韩在线麻豆| 日韩黄色免费网站| 97精品久久| 欧美啪啪一区| 国产高清亚洲| 精品免费在线| 精品视频高潮| 国产一区二区三区四区二区| 精品淫伦v久久水蜜桃| 久久99国产精品视频| 精品国产精品久久一区免费式 | 欧美日韩一区二区高清| 久久精品伊人| av高清一区| 丝袜美腿成人在线| 国产丝袜一区| 亚洲成人av观看| 鲁大师成人一区二区三区| 久久国产人妖系列| 91亚洲一区| 亚洲欧美视频一区二区三区| 国产亚洲观看| 亚洲精品**中文毛片| 久久久影院免费| 日本大胆欧美人术艺术动态| 国产欧美一区二区精品久久久 | 婷婷精品在线观看| 精品一区二区三区四区五区| 亚洲午夜视频| 欧美综合精品| 国产99久久| 少妇高潮一区二区三区99| 精品网站999| 在线看片不卡| 麻豆精品在线| 久久亚洲电影| 国产一区二区三区黄网站| 免播放器亚洲| 成人国产精品一区二区免费麻豆| 亚洲一区国产一区| 久久久国产精品网站| 1024精品久久久久久久久| 国产欧美自拍| 婷婷综合网站| 久久精品欧洲| 亚洲图片久久| 日韩在线观看不卡| 国产亚洲精品精品国产亚洲综合 | 午夜久久久久| 久久99高清| 亚洲精品看片| 婷婷成人在线| 欧美激情麻豆| 免费不卡在线观看| 日韩不卡在线| 国产精品免费99久久久| 91九色精品国产一区二区| 国产精品亚洲欧美一级在线| 欧美日韩国产综合网| 国产一区二区色噜噜| 亚洲丝袜美腿一区| 久久蜜桃av| 欧美激情91| 综合亚洲自拍| 91久久久精品国产| 91亚洲国产| 国产精品黄色片| 亚洲不卡视频| 狠狠干综合网| 蜜桃精品在线| 麻豆高清免费国产一区| 亚洲日本欧美| 亚洲欧美日韩高清在线| 成人影视亚洲图片在线| 久久精品99国产精品| 久久99伊人| 欧美精选一区二区三区| 水蜜桃精品av一区二区| 国产人成精品一区二区三| 蜜桃视频在线观看一区| 亚洲国产日韩欧美在线| 日韩高清欧美| 国产一区二区三区亚洲综合|