色另类_婷婷激情四月_亚洲精品无码不卡在线播放he_欧美第七页_精品国产综合区久久久久99_青娱乐极品盛宴在线

產品分類

當前位置: 首頁 > 工業電氣產品 > 端子與連接器 > 線路板連接器 > FFC連接器

類型分類:
科普知識
數據分類:
FFC連接器

基于C2000的軟件串口(SCI)實現方法

發布日期:2022-04-28 點擊率:81

Other Parts Discussed in Post: CONTROLSUITE, TMS320F28069M, LAUNCHXL-F28069M

作者: TI 北方區工程師 Young Hu 和 Jingyuan Zhao 

相關代碼下載鏈接: Example_2806xLEDBlink.c

 

引言:

         C2000 Piccolo系列MCU芯片內部一般都集成了1-2個硬件SCI (UART) 。有時出于成本或者Layout面積的考慮,只能選擇小封裝或資源較少的型號,那么就會出現硬件SCI不夠用的情況。這時便可使用GPIO軟件模擬成SCI接口。

         本文給出了使用外部中斷和CPU定時器將GPIO模擬成SCI接口的方法和例程。

一、測試相關環境

       測試相關的軟硬件環境如下表所示:

CCS Version

6.2.0.00050

Compiler Version

TI v15.12.3.LTS

ControlSUITE

V3.4.9

 

測試芯片型號

TMS320F28069M

硬件環境

LAUNCHXL-F28069M

GPIO引腳使用

TX: GPIO33 RX: GPIO0

硬件資源使用

CPU_Timer0, XINT3

 

         您可以選擇任意示例工程,這里選擇的工程為timed_led_blink,它的工程文件的目錄為:

         C: icontrolSUITEdevice_supportf2806xv151F2806x_examples_ccsv5 imed_led_blink

       在CCS中import該工程后,將Example_2806xLEDBlink.c替換為本文提供的源碼即可。

二、 功能描述

         SCI (Serial Communications Interface, 串行通信接口) 是一種雙線異步串行接口,通常也被稱為UART。SCI提供了與一些常用外設的通信接口。SCI的數據幀格式,如圖1所示,通常由以下部分組成:

  • 1 bit 起始位:一位邏輯0,表示傳輸開始。

  • 1-8 bit 數據位:小端傳輸,先傳輸低位再傳輸高位。

  • 1 bit奇偶校驗位(可選):加上這一位后使數據位1的個數為奇數或者偶數。

  • 1或2 bit停止位:一位或兩位邏輯1,表示傳輸結束。

圖1 SCI數據幀格式

1. 發送程序框圖和發送狀態機

發送使能后,CPU定時器打開,每隔8.67us(115200 bps)產生一次中斷,在定時器中斷發生時改變引腳的輸出電平實現數據發送。第一個定時器中斷時,發送引腳電平置低,標志數據發送開始。之后以小端模式從低位到高位依次發送數據位、校驗位。采用奇校驗時,數據按位異或的結果和校驗位的異或結果應為1;采用偶校驗時,數據按位異或的結果和校驗位的異或結果應為0。傳輸結束后,發送引腳輸出一位高電平,標志發送結束。

圖2發送程序框圖和發送狀態機

2. 接收程序框圖和接收狀態機

接收使能后,開啟外部中斷。SCI接收引腳在空閑狀態下處于高電平,接收數據的起始位為低電平。由于數據到來時間的不確定,故采用外部中斷下降沿觸發的方式檢測數據傳輸的起始位。外部中斷檢測到下降沿后,標志數據傳輸開始。此時先延時4us,等待信號電平穩定,然后關閉外部中斷,打開定時器。與發送相同,定時器每8.67us產生一次中斷。每次中斷產生時,對接收引腳的電平進行采樣,依次接收數據位、校驗位和停止位。當所有數據接收完成后,關閉定時器,等待接收下次使能。

圖3接收程序框圖和接收狀態機

3. 功能描述

         波特率: 115200 bps (可調), 停止位:1 bit,數據位:1-8 bit,校驗位:無校驗、奇校驗或偶校驗。可根據實際需求在宏定義中修改recvBuffLen確定接收緩沖區大小:

  1. #define recvBuffLen 800  

以接收緩沖區大小為800 Bytes為例,每當程序從GPIO0接收滿800 Bytes數據后,就會把全部接收到的數據通過GPIO32發出。

三、API

1. 宏定義

  1. #define parity 1         // 0: no parity, 1: odd, 2: even  

  2. #define dataLength 8     // data bit length 1 - 8  

  3. #define recvBuffLen 25   // receive buffer size  

       parity:校驗位。可設置為0:無校驗,1:奇校驗,2:偶校驗。

       dataLength:數據位長度,可配置為1-8比特。

       recvBuffLen:接收緩沖區大小,通常可設置為數據包長度。

 

2. 全局變量

  1. // software sci mode  

  2. // 0: rx 1: tx  

  3. Uint16 swSciMode = 0;  

  4. // rx data & state  

  5. Uint16 rxData = 0;  

  6. Uint16 rxState = 0;  

  7. Uint16 rxError = 0;  

  8. // tx data & state 

  9. Uint16 txData = 0; 

  10. Uint16 txState = 0;  

       swSciMode:定義軟件串口模式。為節省硬件資源,采用半雙工模式。0為接收模式,1為發送模式。

       rxData:從GPIO接收到的單字節數據。

       rxState:接收程序狀態機狀態,0-3為有效狀態,詳見圖3。

       rxError:接收錯誤指示標志,在調用接收相關API后值會相應改變,需手動清零。具體定義如下:

0x00

0x01

0x02

0x03

接收正常

校驗錯誤

未檢測到停止位

停止位+校驗位錯誤

       txData:從GPIO發送到的單字節數據。

       txState:發送程序狀態機狀態,0-5為有效狀態,詳見圖2。

 

3. 函數

  1. // Software SCI related functions  

  2. Uint16 sw_sci_recv_byte(void);  

  3. void sw_sci_recv_bytes(Uint16* dataBuff, Uint16 len);  

  4. void sw_sci_send_byte(Uint16 data);  

  5. void sw_sci_send_bytes(Uint16* dataBuff, Uint16 len);  

  6. void sw_sci_send_string(char* txString);  

函數名稱

功能描述

Uint16 sw_sci_recv_byte(void)

返回GPIO0接收到的單字節數據。

void sw_sci_recv_bytes(Uint16*dataBuff, Uint16 len)

從GPIO0接收len個字節數據存入緩沖區dataBuff中。

void sw_sci_send_byte(Uint16 data);

使用GPIO33發送單字節數據。

void sw_sci_send_bytes(Uint16* dataBuff, Uint16 len)

使用GPIO33發送dataBuff中len個連續字節數據。

void sw_sci_send_string(char* txString);

使用GPIO33發送字符串txString。txString必須以?結尾,方便用戶調試使用。

 

四、測試

1. 波特率及CPU負載測試

       為測試軟件SCI的性能,本例程額外使用了GPIO32作為測試引腳用于指示程序狀態。當程序進入軟件SCI定時器中斷時,GPIO32輸出高電平;其余時間GPIO32輸出低電平。圖4為8位數據位、1位奇校驗、1位停止位、115200波特率下,發送0x55時TX引腳(藍線)和測試引腳(黃線)的波形。從圖中可以看出,實際發送波特率為116280bps,誤差0.9%。測試引腳的高電平持續時間和,即為軟件SCI發送單字節數據占用CPU的時間。經過測量,測試引腳高電平共持續10.32us,單字節理論發送時間為95.49us,故發送時CPU負載為10.8%。

圖4軟件串口例程發送測試

         圖5為8位數據位、1位奇校驗、1位停止位、115200波特率下,接收0x55時RX引腳(藍線)和測試引腳(黃線)的波形。經過測量,測試引腳高電平共持續7.2us,單字節理論接收時間為95.49us,故接收時CPU負載為7.5%。

圖5軟件串口例程接收測試

       在沒有示波器的情況下也可使用C2000 MCU內部的eCAP測量實際發送波特率和CPU負載。

2. 數據收發測試

       軟件串口例程配置為115200波特率、8bit數據位、1停止位、奇校驗,PC端串口助手采用相同配置時,數據可以正常收發:

圖6正常數據收發

       將串口助手軟件改為偶校驗,例程提示校驗位錯誤:

 

圖7校驗位檢錯

       軟件串口例程配置為無校驗位,串口助手采用奇校驗時,例程實際在接收結束位時接收到的是校驗位,此時例程提示結束位錯誤:

圖8停止位檢錯

         例程和串口助手采用相同配置時,以5Hz頻率發送800 Bytes數據包,收發正常:

圖9連續收發測試

五、注意事項

1. 改變通信波特率可通過調整CPU定時器的分頻系數實現。

       理論分頻系數 =  

       以LAUNCHXL-F28069M 為例,LAUNCHXL-F28069M主頻為90 MHz。理論分頻系數應為:

         

實際使用時由于系統時鐘會有誤差,推薦使用示波器測量實際輸出波特率對分頻系數進行調整。

2. TX引腳可根據需求更改至任意引腳。RX引腳需要通過外部中斷下降沿判斷數據起始位,所以只能在GPIO0-GPIO31中進行選擇。

3. 為節省硬件資源,接收和發送程序使用同一CPU定時器,所以僅能進行半雙工通信。若想實現全雙工通信可再多使用一個定時器將發送和接收分開。

六、待辦事項

1. 增加使用eCAP測量波特率和CPU負載功能。

2. 增加波特率自動校正功能。

Reference

[1] TMS320x2806x Piccolo Technical Reference Manual (spruh18g).

[2] ControlSUITE中cpu_timer和external_interrupt例程。

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

上一篇: 德州儀器:攝像監控系

推薦產品

更多
主站蜘蛛池模板: 超碰在线国产 | 久热久操 | 97超级碰碰 | 欧美成年视频 | 日韩福利片 | 国产a视频| 91射射射 | 国产三级网站在线观看 | 国产精品自在线拍国产 | 中文字幕免费在线观看 | 免费国产视频在线观看 | 成人资源在线观看 | 狠狠干香蕉 | 一区二区三区国模大胆 | 欧美簧片 | 欧美高清正版在线 | 欧美一区二区免费电影 | 99午夜高清在线视频在观看 | av2014天堂网| 国产精品久久久一区二区三区 | 色婷婷精品国产一区二区三区 | 成人爱爱电影 | 国产一区网址 | 一区二区三区免费在线 | 两性免费视频 | 性欧美一区 | 日本伦理网站 | 国产在线第一区 | 国产精品福利片免费看 | 91青青青国产在观免费影视 | 亚洲欧美国产日产综合不卡 | 久久九九综合 | 久久久久久久久久久久久久av | 成人国产在线观看 | 日本黄色片免费看 | 国产伦精品一区二区三区四区视频 | 国产免费福利网站 | 国产精品国产三级国产播12软件 | 国产成人高清视频免费播放 | 国产精品视频99 | 精品国产一区二区三区久久 |