2013-06-26 32 views
2

我正在編程C2000 F28069 Experimenters Kit。我每隔12.5微秒連續5次切換GPIO輸出。我決定我不想使用中斷(雖然我會如果我絕對必須)。我想按照時鐘週期等待這麼多次。嵌入式編程,等待12.5 us

我的時鐘在80MHz運行,所以12.5 us應該是1000個時鐘週期。當我使用循環:

for(i=0;i<1000;i++) 

我得到的結果太長了(不是12.5 us)。我可以使用哪些其他技術?

sleep(n);東西,我可以在微控制器上使用?如果是這樣,我需要下載哪個頭文件,我可以在哪裏找到它?此外,現在我想到了,sleep(n);需要一個整數輸入,所以這不會工作...任何其他想法?

+3

一個while循環產生一個運行超過1000個時鐘週期的循環,因爲它增加了,分支等等......循環內的每個事物都需要多於一條指令。除此之外,在各種微控制器上,一些指令需要超過一個時鐘週期。 –

+0

更不用說,很高興知道哪個操作系統,如果有的話,還有什麼其他任務,等等。 – 2013-06-26 18:08:30

+0

@VladLazarenko它是在微控制器上通常沒有操作系統時期,例如,TinyOS並不僅僅是一些樣板代碼。 –

回答

7

摘要:使用PWM或定時器外設來產生輸出脈衝。

首先,CPU的時鐘速度必須實際代碼的執行速度一種複雜的關係,並且在許多CPU存在參與執行的不同階段多於一個的時鐘速率。例如,chip you reference有幾個內部時鐘源。此外,每個單獨的指令可能需要不同數量的時鐘來執行,並且一些內核可以同時執行部分(或全部)幾條指令。

要嚴格創建一個循環,需要12.5微秒,而無需使用一個定時中斷或其他硬件設備將需要在彙編語言小心手編碼與每個指令的執行時間小心會計一起執行。

但是你用C編寫而不是彙編程序。

所以你要問的第一個問題是你的循環實際生成了哪些機器代碼。第二個問題是你是否啓用了優化器,以及到了什麼級別。

正如書面所說,一個體面的優化器將確定循環for (i=0; i<1000; i++) ;沒有可見的副作用,因此只是寫入;的緩慢方式,並且可以完全刪除。

如果是編譯循環,它可以被使用天真地可能多達5條指令,或儘可能少的一個或兩個寫入。我並不熟悉這種特定的TI CPU架構,所以我不會試圖猜測最佳的實現方式。所有這些都說明,瞭解CPU架構及其效率對於構建可靠高效的嵌入式系統非常重要。但是鑑於該芯片內置了可爲PWM(脈衝寬度調製)輸出提供硬件支持的外圍設備以及通用硬件定時器/計數器,您將更好地學習如何使用硬件爲您生成波形。

我會通過收集CPU核心及其外設,特別是應用筆記和示例代碼中每一個文檔開始。

C編譯器將有一個選項來發出和保存彙編語言源文件。我將以此作爲指導,研究爲關鍵循環和其他瓶頸生成的代碼結構,以及編譯器各種優化級別的影響。

工具套件應該有一個分析運行代碼的機制。在採取追求優化的英雄措施之前,首先要用它來確定實際的瓶頸。即使它缺乏體面的分析,您也可能擁有備用的GPIO引腳,可以切換代碼的​​關鍵部分,並使用邏輯分析儀或示波器進行測量。

+0

非常感謝。一個快速的後續,現在我不能使用for循環是有道理的。但我仍然遇到時鐘速度的困難。我正在使用CPU定時器0設置在80MHz週期160000週期,這應該給我一個2毫秒的時間段。但是,當我在範圍上看時,我得到了10倍以上。另外,有沒有辦法直接設置中斷的計時器的值?或者我必須在不同的時間段(12.5 us)使用PWM,並在定時器復位時設置中斷?你提到了定時器外設,但我不確定我的選項不是PWM。 – user2525288

+0

該芯片的時鐘配置豐富的選項。如果SYSCLKOUT確實運行在80MHz,那麼在TIMER0中同時具有預分頻器和週期寄存器,這些寄存器一起需要被160000分頻以實現2ms週期。注意細節,加載的值通常在期望的時間段內偏離一個。請仔細閱讀以上鍊接中的技術參考手冊,尤其是TIMER0/1/2中除PWM以外的定時器外設。 – RBerteig

1

如果您使用@RBerteig建議的具有PWM輸出能力的定時器外設,那麼您可以生成一個零軟件開銷的精確定時信號。如果您需要與時鐘同步執行其他工作,那麼您也可以使用定時器中斷來觸發。但是,如果以12.5us的間隔處理中斷,則可能會發現處理器花費大量時間上下文切換,而不是執行有用的工作。

如果你只是想要一個準確的延遲,那麼你仍然應該使用硬件定時器並輪詢其重新加載標誌,而不是處理它的中斷。這允許獨立於編譯器代碼生成或處理器速度的一致時序,並允許您在循環內添加其他代碼,而不會延長總循環時間。你可以在一個循環中輪詢它,在這個循環中你也可以做其他的工作。時序抖動和確定性取決於你在循環中做了哪些其他工作,但是對於空循環,對定時器的反應甚至可能比中斷處理器上的等待時間更快。

2

您提到的芯片具有PWM(脈衝寬度調製)硬件,被宣佈爲主要獲勝功能之一。你應該依靠這個。請參閱相應的應用指南。一般來說,你不能保證應用程序層的12.5uS週期(並且不應該這樣做)。即使您直接從應用程序層設法這樣做,這也不是個好主意。你的固件代碼的任何變化都可以打破這一點。