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

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

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

3天內不再提示

根據SCI輸入信號自動校準波特率

星星科技指導員 ? 來源:TI ? 作者:Terry Deng ? 2023-03-17 10:34 ? 次閱讀

本文檔概述了一種基于 SCI/UART 輸入信號,可以自動校準本設備SCI/UART波特率的方法,該方法適用與所有第三代C2000芯片,比如F2807x/37x,F28004x,F28002x等等。

一 原理說明

假設有2塊電路板通過SCI進行通信。“Transmitter”向“Receiver”發送未知波特率的數據,“ Receiver”則使用 eCAP 測量未知的波特率,然后修改其自身的波特率和“Transmitter”匹配。

下面款圖是一種情況,其中“Transmitter” 的波特率設置為 9889,而“Receiver”的初始波特率設置為 9601 ,相比之下“Receiver”的波特率為 -3% 偏差。 經過算法的自動校準以后,“Receiver”將會把自身波特率校正為與“Transmitter”相同的9889。

pYYBAGQT0amARgUfAABA1BlJA4c667.png

下面框圖則是另一種情況,假如“Receiver”和“Transmitter”的初始波特率都是9889,但“Receiver”的內部晶振INTOSC有-3%的偏差。使用上述完全相同的方法原理和步驟,“Receiver”波特率設置將會從9889校準成9601,這樣“Receiver”的波特率設置被自動校準抵消內部晶振的偏差。在測量實際信號時,“Receiver”輸出到“Transmitter”的信號會是正確的 9889 波特率。

pYYBAGQT0aqAEj78AABV32CtimM689.png

二 Receiver 的校準代碼

1. 初始化

需要配置以下模塊來校準波特率:

時鐘:使用 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 模塊:通訊數據使用,發出校準以后的波形

// 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 內部連接到 INPUTXBAR7 與 ECAP1 配合使用

//

// Configure GPIO 28 as eCAP input

//

XBAR_setInputPin(XBAR_INPUT7, 28);

ECAP 模塊:監控接收到的 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));

//

2. 中斷

捕獲傳入 SCI 通信的脈沖寬度,每捕獲 4 次就中斷一次。 將這 4 個捕獲添加到陣列中。

__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++)

{

//

3. 主循環

捕獲陣列滿后,計算陣列的平均脈沖寬度 (也就是波特率),并更新SCI波特率寄存器,使其盡可能接近計算的平均值。

//

// 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;

4. 平均脈沖寬度

對于許多應用的SCI 通信,傳輸的數據 (例如 0xA5)是變化不固定的,因此SCI的高低電平脈沖寬度就是變化的。所以必須對樣本陣列進行如下的預處理,然后才能計算平均脈沖寬度。

a) 丟棄大于 10 位寬的脈沖寬度 (丟棄空閑時間)

b) 將 n 位值除以 n

c) 對修改后的樣本數組進行平均化

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);

以下是平均脈寬計算的原理和代碼流程圖

pYYBAGQT0aqAAUOBAABId9BaVcc503.png

poYBAGQT0ayAPcWQAAA6HkSAzxQ287.png

三 結果

按照以下設置進行測試,結果詳見表格,校準以后的誤差從3% 改善為0.1%左右甚至更小。

“Transmitter”設置為正確的波特率 (我們嘗試匹配的波特率)

“Receiver”設置為錯誤波特率 (-3% 或 +3%)

“Receiver”運行校準程序以匹配“Transmitter”

100K 波特率 9601波特率
-3% +3% -3% +3%
Transmitter
(我們正在嘗試匹配的內容)
理想波特率
(僅供參考)
103306 96899 9889 9314.
實際波特率
(必須與此匹配)
104174. 96906 9890 9315.
Receiver
(初始錯誤波特率)
波特率
(校準前)
100154. 100157. 9622. 9622.
出錯百分比
(校準前)
-3.859% 3.355% -2.706% 3.296%
Receiver
(校準后波特率)
波特率
(校準后)
104336. 97047. 9888 9314.
出錯百分比
(校準后)
0.156% 0.146% -0.016% -0.012%

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

    關注

    31

    文章

    5355

    瀏覽量

    120516
  • 電路板
    +關注

    關注

    140

    文章

    4963

    瀏覽量

    98017
  • uart
    +關注

    關注

    22

    文章

    1237

    瀏覽量

    101446
收藏 人收藏

    評論

    相關推薦

    can波特率計算

    can波特率其實并不難計算,這里給出了can波特率的簡單計算,并給出了實例STM32的CAN波特率計算。講解CAN波特率計算原理。
    發表于 12-14 17:02 ?1.3w次閱讀
    can<b class='flag-5'>波特率</b>計算

    什么是串口波特率?串口波特率的分類及應用詳解

    直接影響到通信的質量和效率。本文將介紹串口波特率的分類、選擇以及應用。串口波特率的分類根據不同的應用需求,串口波特率包括以下幾種:標準波特率
    的頭像 發表于 08-08 10:09 ?6004次閱讀
    什么是串口<b class='flag-5'>波特率</b>?串口<b class='flag-5'>波特率</b>的分類及應用詳解

    基于SCI/UART輸入信號自動校準波特率

    本文檔概述了一種基于 SCI/UART 輸入信號,可以自動校準本設備SCI/UART
    發表于 11-04 07:16

    C Core芯片SCI串口波特率容限優化

    發現了C*Core國芯芯片中SCI發送與接受方波特率誤差導致數據不匹配問題,分析了發送與接受方數據傳輸丟幀、誤幀現象出現的根本原因,總結了SCI容限值與芯片主頻及標準波特率之間規
    發表于 03-05 17:45 ?17次下載
    C Core芯片<b class='flag-5'>SCI</b>串口<b class='flag-5'>波特率</b>容限優化

    串行通信的實現條件和波特率自動整定問題

    串行通信在波特率誤差超過一定范圍時,會產生錯誤。本節介紹的內容在51單片機上僅用軟件就實現了波特率自動整定,最大程度地減小了波特率誤差,因而可使串行通信的可靠性得到提高。
    發表于 03-23 14:52 ?3935次閱讀
    串行通信的實現條件和<b class='flag-5'>波特率</b><b class='flag-5'>自動</b>整定問題

    在dsPIC30F器件上實現自動波特率檢測的詳細中文資料概述

    目前所有 dsPIC30F 器件都擁有一個具備自動波特率檢測能力的 UART 外設。UART 接收引腳(RX 引腳)上的信號能在內部傳送至一個輸入捕捉模塊以獲得輸入
    發表于 06-29 10:25 ?6次下載
    在dsPIC30F器件上實現<b class='flag-5'>自動波特率</b>檢測的詳細中文資料概述

    在dsPIC30F器件上實現自動波特率檢測

    目前所有 dsPIC30F 器件都擁有一個具備自動波特率檢測能力的 UART 外設。UART 接收引腳(RX 引腳)上的信號能在內部傳送至一個輸入捕捉模塊以獲得輸入
    發表于 05-11 10:34 ?10次下載

    根據SCI輸入信號自動校準波特率

    作者:Terry Deng 本文檔概述了一種基于 SCI/UART 輸入信號,可以自動校準本設備S
    的頭像 發表于 01-12 13:56 ?2665次閱讀
    <b class='flag-5'>根據</b><b class='flag-5'>SCI</b><b class='flag-5'>輸入</b><b class='flag-5'>信號</b><b class='flag-5'>自動</b><b class='flag-5'>校準</b><b class='flag-5'>波特率</b>

    SCI串口自動波特率介紹

    自中科昊芯推出專題講解SCI串口通信以來,第一期主要講解SCI串口FIFO通信原理,本期主要講解SCI串口自動波特率,FIFO中斷通信邏輯將在下期內容中講解。
    的頭像 發表于 04-26 09:26 ?3260次閱讀
    <b class='flag-5'>SCI</b>串口<b class='flag-5'>自動波特率</b>介紹

    根據 SCI 輸入信號自動校準波特率

    根據 SCI 輸入信號自動校準波特率
    發表于 10-28 12:00 ?0次下載
    <b class='flag-5'>根據</b> <b class='flag-5'>SCI</b> <b class='flag-5'>輸入</b><b class='flag-5'>信號</b><b class='flag-5'>自動</b><b class='flag-5'>校準</b><b class='flag-5'>波特率</b>

    STM32的USART自動波特率檢測

    當在兩個設備之間建立通信鏈路時,自動波特率檢測十分有用,因為從設備能夠檢測到主控制器的波特率并進行相應的自我調整。這需要使用一種自動機制來確定波特率
    的頭像 發表于 11-28 11:15 ?8713次閱讀

    芯教程丨平頭哥助力中科昊芯HX2000系列芯片專題SCI串口通信(二)AutoBaud自動波特率

    自中科昊芯推出專題講解SCI串口通信以來,第一期主要講解SCI串口FIFO通信原理,本期主要講解SCI串口自動波特率,FIFO中斷通信邏輯將在下期內容中講解。HX2000系列
    的頭像 發表于 04-27 14:48 ?862次閱讀
    芯教程丨平頭哥助力中科昊芯HX2000系列芯片專題<b class='flag-5'>SCI</b>串口通信(二)AutoBaud<b class='flag-5'>自動波特率</b>

    什么是波特率?為什么要設置波特率

    歡迎來到東用知識小課堂!一、什么是波特率波特率(BaudRate)單位bps是用于衡量串口通信速度的單位,它表示每秒鐘發送的比特數。如果一個串口的波特率為9600,就表示該串口在一秒鐘內可以發送
    的頭像 發表于 04-08 00:00 ?6976次閱讀
    什么是<b class='flag-5'>波特率</b>?為什么要設置<b class='flag-5'>波特率</b>?

    什么是波特率波特率是如何影響CAN總線長度的?

    信息在通信通道中傳輸的速率被稱為波特率。通俗地說,波特率是數據在網絡上傳輸的速度/速率。這是以比特/秒表示的。因此,一秒鐘內在通信網絡上傳輸的比特數就是波特率
    的頭像 發表于 08-14 15:23 ?6471次閱讀
    什么是<b class='flag-5'>波特率</b>?<b class='flag-5'>波特率</b>是如何影響CAN總線長度的?

    波特率的定義和計算方法 波特率與數據傳輸速度的關系

    波特率的定義 波特率(Baud Rate),又稱調制速率或傳符號,是指每秒傳輸的符號數目,單位為波特(Bd)。它是一個數字信號通信中重要的
    的頭像 發表于 11-22 09:49 ?2041次閱讀
    主站蜘蛛池模板: 国产强奷伦奷片| 欧美日韩精品一区二区三区四区 | 国产成人自产拍免费视频| 第一次破女初国产美女| 毛茸茸womansex| 我要色色网| 产传媒61国产免费| 任你躁国语自产二区在线播放| 亚洲国产av| 99视频这里只有精品| 伦理79电影网在线观看| 战狼4在线观看完免费完整版| 精品无码久久久久久国产百度| 日本丝袜护士| 成人网视频在线观看免费| 强姧伦久久久久久久久| xxxx美国老师1819| 久久永久视频| 中国欧美日韩一区二区三区| 久久综合色视频| 91欧美秘密入口| 欧美九十老太另类| 精品国产麻豆免费人成网站| jiz中国zz| 视频成人永久免费下载| 欧美高清videos 360p| 性生大片免费看| 国产这里有精品| 亚洲综合中文字幕无线码| 久久免费看少妇级毛片蜜臀 | 国产精品永久在线| 日韩吃奶摸下AA片免费观看| 大中国免费视频大全在线观看| 乳色吐息未增删樱花ED在线观看| 99精品免费久久久久久久久日本| 欧美97色伦综合网| 国产成人免费在线| 亚洲中文日韩日本在线视频| 国产69精品久久久久麻豆| 无码爽死成人777在线观看网站| 国内自拍 在线 亚洲 欧美|