日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

15、PIC32系列-输入捕捉ICAP

發(fā)布時間:2023/12/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 15、PIC32系列-输入捕捉ICAP 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

PIC32系列-輸入捕捉ICAP

1、PIC32參考資源

2、輸入捕捉簡介

3、狀態(tài)和寄存器

4、使用Harmony工具生成輸入捕捉代碼

5、實際代碼分析

6、實驗驗證


1、PIC32參考資源

PIC32系列參考手冊 中文版? 鏈接地址:PIC32系列參考手冊 第15章 輸入捕獲模塊

2、輸入捕捉簡介

輸入捕捉模塊用于在輸入引腳上發(fā)生事件時,捕捉來自兩個可選時基之一的定時器值。輸入捕捉功能在需要進行頻率(時間周期)和脈沖測量的應(yīng)用中很有用。

輸入捕捉模塊有多種工作模式,可通過 ICxCON 寄存器進行選擇。

? 在 ICx 引腳輸入信號的每個下降沿捕捉定時器值

? 在 ICx 引腳輸入信號的每個上升沿捕捉定時器值

? 在 ICx 引腳輸入信號的每 4 個上升沿捕捉一次定時器值

? 在 ICx 引腳輸入信號的每 16 個上升沿捕捉一次定時器值

? 在 ICx 引腳輸入信號的每個上升沿和下降沿捕捉定時器值

? 先在指定邊沿,之后在每個邊沿捕捉定時器值

?輸入捕捉模塊都具有以下特殊功能寄存器

? ICxCON:輸入捕捉控制寄存器

? ICxBUF:輸入捕捉緩沖寄存器

還具有以下用于中斷控制的相關(guān)位

? 中斷允許控制位 (ICxIE)

? 中斷標志狀態(tài)位 (ICxIF)

? 中斷優(yōu)先級控制位 (ICxIP)

? 中斷子優(yōu)先級控制位 (ICxIS)

3、狀態(tài)和寄存器

寄存器匯總

?ICXCON:輸入捕捉X控制寄存器

?bit 15 ON:輸入捕捉模塊使能位

1 = 使能模塊

0 = 禁止并復(fù)位模塊、禁止時鐘、禁止中斷產(chǎn)生并允許進行 SFR 修改

bit 14 FRZ:調(diào)試模式凍結(jié)控制位

1 = 處于 Debug (調(diào)試)模式時模塊停止工作

0 = 處于 Debug (調(diào)試)模式時模塊不停止工作

注: FRZ 僅在調(diào)試異常模式下可寫,在正常模式下強制為 0。

bit 13 SIDL:空閑模式停止控制位

1 = 在 CPU Idle (空閑)模式下暫停工作

0 = 在 CPU Idle (空閑)模式下繼續(xù)工作

bit 12-10 未實現(xiàn):讀為 0

bit 9 ICFEDGE :先捕捉邊沿選擇位 (僅在模式 6 下,即 ICM<2:0>= 110 時使用)

1 = 先捕捉上升沿

0 = 先捕捉下降沿

bit 8 ICC32:32 位捕捉選擇位

1 = 32 位定時器資源捕捉

0 = 16 位定時器資源捕捉

bit 7 ICTMR :定時器選擇位 (當 ICxC32 (ICxCON<8>)為 1 時,不會影響定時器選擇)

0 = Timer3 作為捕捉的計數(shù)器源

1 = Timer2 作為捕捉的計數(shù)器源

bit 6-5 ICI<1:0>: :中斷控制位

11 = 每 4 個捕捉事件中斷一次

10 = 每 3 個捕捉事件中斷一次

01 = 每 2 個捕捉事件中斷一次

00 = 每 1 個捕捉事件中斷一次

bit 4 ICOV:輸入捕捉溢出狀態(tài)標志位 (只讀)

1 = 發(fā)生了輸入捕捉溢出

0 = 未發(fā)生輸入捕捉溢出

bit 3 ICBNE: 輸入捕捉緩沖區(qū)非空狀態(tài)位 (只讀)

1 = 輸入捕捉緩沖區(qū)非空;至少可以再讀一個捕捉值

0 = 輸入捕捉緩沖區(qū)為空

bit 2-0 ICM<2:0>:輸入捕捉模式選擇位

111 = 僅中斷模式 (僅在處于 Sleep (休眠)或 Idle (空閑)模式時支持)

110 = 簡單捕捉事件模式——每個邊沿,先捕捉指定邊沿,之后捕捉每個邊沿

101 = 預(yù)分頻捕捉事件模式——每 16 個上升沿

100 = 預(yù)分頻捕捉事件模式——每 4 個上升沿

011 = 簡單捕捉事件模式——每個上升沿

010 = 簡單捕捉事件模式——每個下降沿

001 = 邊沿檢測模式——每個邊沿 (上升沿和下降沿)

000 = 捕捉禁止模式

ICXBUF:輸入捕捉 X 緩沖寄存器

?bit 31-0 ICxBUF<31:0>: 緩沖寄存器位

當前捕捉的輸入定時器計數(shù)的值。

定時器選擇

每個模塊可以選擇兩個 16 位定時器中的一個或一個 32 位定時器作為時基, 32 位定時器是由兩個 16 位定時器組合構(gòu)成的。

16 位捕捉模式: ICTMR設(shè)置為 0 時選擇 Timer3 進行捕捉, ICTMR設(shè)置為1時選擇 Timer2 進行捕捉,

32 位捕捉模式: ICC32位1,Timer2 提供低 16 位, Timer3 提供高 16 位

輸入捕捉使能

將 ON 位(ICxCON<15>)置 1 可以使能輸入捕捉模塊。當該位清零時,模塊會復(fù)位。將模塊復(fù)位具有以下影響:

? 清零溢出條件標志

? 將 FIFO 復(fù)位為空狀態(tài)

? 復(fù)位事件計數(shù) (用于中斷產(chǎn)生)

? 復(fù)位預(yù)分頻器計數(shù)

無論 ON 位 (ICxCON<15>)狀態(tài)如何,都允許讀寫寄存器。

輸入捕捉事件模式 ICM<2:0>

? 簡單捕捉事件模式:

- 在 ICx 引腳輸入信號的每個下降沿捕捉定時器值

- 在 ICx 引腳輸入信號的每個上升沿捕捉定時器值

- 在 ICx 引腳輸入信號的每個上升沿和下降沿捕捉定時器值,從指定邊沿開始捕捉

? 預(yù)分頻捕捉事件模式:

- 在 ICx 引腳輸入信號的每 4 個上升沿捕捉一次定時器值

- 在 ICx 引腳輸入信號的每 16 個上升沿捕捉一次定時器值

? 邊沿檢測模式

? 僅中斷模式

節(jié)能模式下的操作

休眠模式下的輸入捕捉操作

當器件進入 Sleep (休眠)模式時,外設(shè)時鐘被禁止。在 Sleep (休眠)模式下,輸入捕捉模塊只能用作外部中斷源。該模式可以通過設(shè)置 ICM<2:0> 控制位(ICxCON<2:0>)= 111 進行使能(對于僅中斷模式)。在該模式下,捕捉引腳的上升沿將使器件從休眠狀態(tài)喚醒。如果允許了相應(yīng)的模塊中斷位,并且模塊優(yōu)先級達到要求,將產(chǎn)生中斷。

如果輸入捕捉模塊被配置為除 ICM<2:0> = 111 以外的模式,并且器件進入 Sleep(休眠)模式,則外部引腳的任何上升沿或下降沿都不會產(chǎn)生從休眠模式喚醒條件。

空閑模式下的輸入捕捉操作

當器件進入 Idle (空閑)模式時,外設(shè)時鐘源保持工作,但 CPU 停止執(zhí)行代碼。空閑模式停止控制位 SIDL (ICxCON<13>)決定模塊在 Idle (空閑)模式下是停止還是繼續(xù)工作。

器件從休眠或空閑模式喚醒

在使用僅中斷模式時,當器件處于 Sleep (休眠)或 Idle (空閑)模式時,輸入捕捉事件可將器件喚醒或產(chǎn)生中斷 (如果允許)。

4、使用Harmony工具生成輸入捕捉代碼

1、在Available Components中將ICAP1組件添加到右側(cè)的Project Graph中;

2、ICAP1組件初始化配置如下

3、添加定時器模塊

4、ICAP1模塊配置

5、定時器模塊配置

6、生成的代碼與原始代碼存在差異,需進行確認;

7、代碼生成后需要的操作;

????????1、系統(tǒng)初始化完成后添加ICAP以及定時器啟動函數(shù);

????????2、添加應(yīng)用層函數(shù);

8、編譯運行將代碼燒錄到開發(fā)板中;點擊編譯按鈕,編譯提示BUILD SUCCESSFUL,點擊燒錄,提示Programming/Verify complete,通過串口觀察捕捉數(shù)據(jù)。

ICAP配置說明

?Select Input Capture Mode:輸入捕捉模式選擇,可選為如下模式

?Input Capture module is disabled 捕捉禁止模式

Edge Detect mode every edge(rising and falling)邊沿檢測模式,每個邊沿

Simple Capture Event mode every falling edge簡單捕捉模式,每個下降沿

Simple Capture Event mode every rising edge簡單捕捉模式,每個上升沿

Prescaled Capture Event mode every fourth rising edge預(yù)分頻捕捉事件模式,每4個上升沿;

Prescaled Capture Event mode every sixteenth rising edge預(yù)分頻捕捉事件模式,每16個上升沿;

Simple Capture Event mode every edge, specified edge first and every edge thereafter簡單捕捉事件模式,先捕捉指定邊沿,之后捕捉每個邊沿

Interrupt-Only mode(only supported while in Sleep mode or Idle mode)僅中斷模式,僅在處于Sleep或Idle模式時支持

Select Timer Source:定時器選擇,可選為TMR2或TMR3

Select Timer Width:定時器寬度選擇,可選為16位或32位定時器

Stop in IDLE:為空閑狀態(tài)停止

Enable Capture Interrupt:使能捕獲中斷

Enable Error Interrupt:使能錯誤中斷

5、實際代碼分析

plib_icap1.c

//輸入捕捉初始化 void ICAP1_Initialize (void) {/*Setup IC1CON *//*ICM = 1 */ //輸入捕捉模式選擇 001邊沿檢測模式,每個邊沿/*ICI = 0 */ //中斷控制位 00每個捕捉事件中斷一次/*ICTMR = 1 */ //定時器選擇 1定時器2/*C32 = 0 */ //32位捕捉選擇位 0 16位定時器資源捕捉/*FEDGE = 0 */ //先捕捉邊沿選擇位(僅在模式6下)/*SIDL = false */ //空閑模式停止控制位 0不停止工作IC1CON = 0x81; }//模塊使能 void ICAP1_Enable (void) {IC1CONSET = _IC1CON_ON_MASK; //輸入捕捉模塊使能 }//模塊禁止 void ICAP1_Disable (void) {IC1CONCLR = _IC1CON_ON_MASK; //禁止并復(fù)位模塊 }//讀取當前捕捉的輸入定時器計數(shù)值 uint16_t ICAP1_CaptureBufferRead (void) {return (uint16_t)IC1BUF; //輸入捕捉緩沖寄存器 }//輸入捕捉緩沖區(qū)非空狀態(tài)位讀取 bool ICAP1_CaptureStatusGet (void) {bool status = false;status = ((IC1CON >> ICAP_STATUS_BUFNOTEMPTY) & 0x1); //輸入捕捉緩沖區(qū)非空狀態(tài)位return status; }//讀取錯誤狀態(tài) bool ICAP1_ErrorStatusGet (void) {bool status = false;status = ((IC1CON >> ICAP_STATUS_OVERFLOW) & 0x1); //輸入捕捉溢出狀態(tài)標志位return status; }

定時器代碼參考前面章節(jié),不贅述。

6、實驗驗證

編譯運行將代碼燒錄到開發(fā)板中;點擊編譯按鈕,編譯提示BUILD SUCCESSFUL,點擊燒錄,提示Programming/Verify complete,通過串口觀察發(fā)送輸入捕捉數(shù)據(jù)。

時間:2021.08.20

總結(jié)

以上是生活随笔為你收集整理的15、PIC32系列-输入捕捉ICAP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。