Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

可是的

 

現在,我在 CYT2B98CAS 中使用事件產生器,並評估COOLDIM_PRG_BOARD 的CYTVII-B-E-176-SO 。

事件生成器操作正常運行。 每當事件生成器觸發 20 毫秒的中斷時,它會啟用輸出 gpio 脈衝。 (沒問題)

但是,奇怪的是,如果我將 T32 調試器連接到此 EVB 並引起軟件 FW,例如運行時間調試,

事件生成器的間隔中斷時間更加延長,就像它每 50 毫秒觸發事件生成器中斷一樣。

 

你能告訴我為什麼發生在它裡面?

 

軟體環境如下。

使用的 SDL 版本:SDL 7.9.0

參考代碼:T2G _ 樣本 _ 驅動程式庫 _7.9.0\ tviibe2m\ src\ 範例\ evtgen\ dpslp _ 喚醒

主時鐘:IMO

深入睡眠事件產生器間隔:20 毫秒

 
測試代碼如下。
 
//--------------------------------------------------------------------------------------------------------
空白 IRQEVTGEN_睡眠(空白)
{
/*
等待計數器準備好,然後設置新的比較值。
從喚醒後,此等待最多可能需要 1 個 clk_lf 循環。
*/
同時 CY_EVTGEN_取得對應狀態(EVTGEN0)== CY_EVTGEN_計數 _狀態 _無效);

CY_EVTGEN _ 清除結構中斷深度睡眠(EVTGEN0,0);
}
 
//--------------------------------------------------------------------------------------------------------
主要功能
 
 
/*******************************************/
/* 取消初始化周邊設備 */
/*******************************************/
CY_EVTGEN _ 取消初始化組成 (EVTGEN0 , 0);
Cy_ 埃夫根 _ 取消初始化 (EVTGEN0);
NVIC _ 清除關係數 (CPUINTIDx3_IRQN);

/*******************************************/
/* 事件生成器的中斷設置 */
/*******************************************/
愛爾克 _ 參考。 系統管理系統 = EVTGEN_0 _ 中斷 _DPSLP _ IRQN;
愛爾克 _ 參考。 即時 X = 處理器數 IDX3 _ IRQ N;
愛爾克 _ 參考。 已啟用 = 真實
基因系統初始程式 (& irq_cfg);
CY_ 系統 _ 集系統 IRQ 向量(EVTGEN_0 _ 中斷 _DPSLP _ IRQN,IRQEVTGEN _ 睡眠);
NVIC _ 清除關係數 (CPUINTIDx3_IRQN);
NVIC _ 啟用 IRQ(處理器數 IDx3_IRQN);

循環喚醒事件產生器 _init ();
/* 設置下一個事件產生器喚醒時間 */
EVTGEN 結構配置。 值數值睡眠比較器 = 週期 _ 喚醒期間;
/* 將系統放入深度睡眠狀態 */
時 (1)
{
//深度睡眠:100 毫秒
cy_GPIO _ 寫入(用戶端口,用戶 _ PIN ,0) ;
/* 更新下一個事件的當前計數器值 */
當前計數值 = ( uint64_t) cy_ EVTGEN _ 獲取對數值(EVTGEN0);
/* 計算事件生成器的下一個比較值 */
儲存數值 = (uint32_t) (目前計數 值 + ( uint64_t ) EVT GEN結構配置。 值數值睡眠比較器);
/* 設置事件生成器的下一個比較值 */
CY_EVTGEN _ 設定值組合 (EVTGEN0、0、儲存數值);

cy_Syspm _ 深度睡眠 ((cy_en_syspm _ 等待 _t) CY_SYSPM _ 等待 _ 中斷);

//活動時間:10 毫秒
cy_GPIO _ 寫入(用戶端口,用戶 _ PIN ,1) ;
基 _ 系統 _ 德拉伊努斯(10000);
}
}
空白循環喚 醒 _ 事件產生器 _ 初始(無效)
{
CY_EVTGEN _ 取消初始化組成 (EVTGEN0 , 0);
Cy_ 埃夫根 _ 取消初始化 (EVTGEN0);

/*******************************************/
/* 初始化事件生成器 0 */
/*******************************************/
EVTGEN 配置。頻率參考 = 800 0000//clk _ 參考 = 克 _ hf1 = CLK _ 路徑 2(IMO)-> 8,000,000 對於矽
EVTGEN 配置。 頻率 F = 32768;//3 2000 ;//clk _ lf = 32 萬,對於矽

EVTGEN 配置。 頻率桿 = 1000000;//設置事件產 生器 時鐘的 1,000,000 赫茲(clk_ref_div)
EVTGEN 配置。 比率控制 模式 = CY_EVTGEN _ 比率 _ 控制 _ SW;
EVTGEN 配置。 比率動態模式 = CY_EVTGEN _ 比率 _ 動態 _ 模式 0;
CY_EVTGEN _ 初始化(EVTGEN0,& EVTGEN配置 );

/*******************************************/
/* 初始化比較器結構 0 */
/*******************************************/
EVTGEN 結構配置。 功能 選擇 = CY_EVTGEN_深睡 _ 功能;
EVTGEN 結構配置。 觸發邊緣 = CY_EVTGEN _ 邊緣敏感;

EVTGEN 結構配置。 值數值睡眠比較器 = 20000; //100000;
//在活動功能中,此值用於製作中斷/觸發器的週期
//10 萬/一百萬(clk _ 參數)= 0.1 [s]
 
EVTGEN 結構配置。 值活動比較器 = 0;
//在活動功能中,此值用於製作中斷/觸發器的週期
//一百萬/一百萬(clk _ 參數)= 1 [s]
 
CY_EVTGEN _ 初始化組成(EVTGEN0,0,& EVTGEN 結構配置,& EVTGEN結構 0 上下文) ;
}
 
//--------------------------------------------------------------------------------------------------------
 

最好的問候,

凱文漢

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/TRAVEO-T2G/CYT2B98-About-Event-generator-period-with-amp-without-JTAG-Debugger/td-p/673968

1 解決方案
Translation_Bot
Community Manager
Community Manager
Community Manager

@WonjinHan

對於延遲的回應,抱歉,

我檢查了您的代碼,EVTGEN 的配置並且它的中斷已經正確。

DeepSleep 計數器功能在活動模式和 DeepSleep POWER_DRILL2GO模式下均可使用,但是,兩種POWER_DRILL2GO模式之間 DeepSleep 計數器的遞增方式存在差異。使用中和深入睡眠計數器之間的區別如「架構 TRM」第 28.2.4 子節深入睡眠計數器更新中所述。

在活動POWER_DRILL2GO模式下,活動計數器起作用,並且計數器將在每個 clk_ref_div 週期中遞增。在每個 clk_lf 週期中,深度睡眠計數器將值複製為作用中計數器,確保計數器是同步的。

然而,在 DeepSleep POWER_DRILL2GO模式下,活動計數器不會遞增,而 DeepSleep POWER_DRILL2GO模式將在「RATIO」暫存器值上遞增TLE9243QK_BASE_BOARD 。在您的代碼中,您正在通過軟件(CY_EVTGEN_RATIO_CONTROL_SW)配置 RATIO 值。 通過 SDL,RATIO 將在 Cy_Evtgen_ 初始化中計算,為(頻率 Ref/(頻率參數/頻率標記)/頻率 YLF),其中值是用戶定義的。

在作用中模式和深度睡眠模式中斷間隔的差異可能是由計算的比率和真實比率 (clk_div_rev/ clk_lf) 的差異引起的。 處於作用中模式時,DeepSleep 計數器將按真實比例增加(因為它複製作用中計數器),而在 DeepSleep 模式下,DeepSleep 計數器將按計算的 RATIO 增加。 請檢查以下內容:

1.請嘗試將比率控制模式設置為 CY_EVTGEN_比率控制 _HW。 這將通過測量比率重新校準 RATIO 值。 更多詳細信息可以在登錄 TRM 中的 EVTGEN0_RATIO_CTL 描述中找到。

二.請檢查您的時鐘預分隔器配置(CLK_ROOT_SELECT [x] .ROOT_DIV),並查看時鐘是否實際是預先分割的。 如果是這樣,請配置時鐘預分隔器或更改頻率 Ref。

當您調試韌體時,嘗試進入 DeepSleep 模式將轉到睡眠POWER_DRILL2GO模式,如架構 TRM 所述。EVTGEN 在睡眠POWER_DRILL2GO模式下的行為與在活動模式下的行為相同,這就是在調試以及將 Cy_SysPm_DeepSleep 替換為 Cy_SysPm_Sleep 時觀察到該問題的原因。

我希望這有幫助。

最好的問候。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/TRAVEO-T2G/CYT2B98-About-Event-generator-period-with-amp-without-JTAG-Debugger/m-p/677779

在原始文章中檢視解決方案

0
5 回應
Translation_Bot
Community Manager
Community Manager
Community Manager

你好

我嘗試在沒有 JTAG 調試器的情況下執行以下修改代碼,結果與事件生成器的條件相同,例如事件生成器時間從 20ms 延伸到近 50ms。

//cy_syspm_ 深度睡眠 ((cy_en_syspm _ 等待 _t) CY_SYSPM _ 等待 _ 中斷);
cy_SYSPM _ 睡眠 ((cy_en_syspm _ 等待 _t) CY_SYSPM _ 等待 _ 中 斷);
 
請告訴我你的意見。
 
最好的問候,
凱文漢

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/TRAVEO-T2G/CYT2B98-About-Event-generator-period-with-amp-without-JTAG-Debugger/m-p/674440

0
Translation_Bot
Community Manager
Community Manager
Community Manager

@WonjinHan

我們也將在最後測試這一點,我們將盡快更新此線程。
謝謝你

最好的問候。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/TRAVEO-T2G/CYT2B98-About-Event-generator-period-with-amp-without-JTAG-Debugger/m-p/674792

0
Translation_Bot
Community Manager
Community Manager
Community Manager

你好麗莎 _A。
感謝您的回答。

如果您有任何更新,我希望您隨時通知我們。

最好的問候,
凱文漢。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/TRAVEO-T2G/CYT2B98-About-Event-generator-period-with-amp-without-JTAG-Debugger/m-p/676202

0
Translation_Bot
Community Manager
Community Manager
Community Manager

@WonjinHan

對於延遲的回應,抱歉,

我檢查了您的代碼,EVTGEN 的配置並且它的中斷已經正確。

DeepSleep 計數器功能在活動模式和 DeepSleep POWER_DRILL2GO模式下均可使用,但是,兩種POWER_DRILL2GO模式之間 DeepSleep 計數器的遞增方式存在差異。使用中和深入睡眠計數器之間的區別如「架構 TRM」第 28.2.4 子節深入睡眠計數器更新中所述。

在活動POWER_DRILL2GO模式下,活動計數器起作用,並且計數器將在每個 clk_ref_div 週期中遞增。在每個 clk_lf 週期中,深度睡眠計數器將值複製為作用中計數器,確保計數器是同步的。

然而,在 DeepSleep POWER_DRILL2GO模式下,活動計數器不會遞增,而 DeepSleep POWER_DRILL2GO模式將在「RATIO」暫存器值上遞增TLE9243QK_BASE_BOARD 。在您的代碼中,您正在通過軟件(CY_EVTGEN_RATIO_CONTROL_SW)配置 RATIO 值。 通過 SDL,RATIO 將在 Cy_Evtgen_ 初始化中計算,為(頻率 Ref/(頻率參數/頻率標記)/頻率 YLF),其中值是用戶定義的。

在作用中模式和深度睡眠模式中斷間隔的差異可能是由計算的比率和真實比率 (clk_div_rev/ clk_lf) 的差異引起的。 處於作用中模式時,DeepSleep 計數器將按真實比例增加(因為它複製作用中計數器),而在 DeepSleep 模式下,DeepSleep 計數器將按計算的 RATIO 增加。 請檢查以下內容:

1.請嘗試將比率控制模式設置為 CY_EVTGEN_比率控制 _HW。 這將通過測量比率重新校準 RATIO 值。 更多詳細信息可以在登錄 TRM 中的 EVTGEN0_RATIO_CTL 描述中找到。

二.請檢查您的時鐘預分隔器配置(CLK_ROOT_SELECT [x] .ROOT_DIV),並查看時鐘是否實際是預先分割的。 如果是這樣,請配置時鐘預分隔器或更改頻率 Ref。

當您調試韌體時,嘗試進入 DeepSleep 模式將轉到睡眠POWER_DRILL2GO模式,如架構 TRM 所述。EVTGEN 在睡眠POWER_DRILL2GO模式下的行為與在活動模式下的行為相同,這就是在調試以及將 Cy_SysPm_DeepSleep 替換為 Cy_SysPm_Sleep 時觀察到該問題的原因。

我希望這有幫助。

最好的問候。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/TRAVEO-T2G/CYT2B98-About-Event-generator-period-with-amp-without-JTAG-Debugger/m-p/677779

0
Translation_Bot
Community Manager
Community Manager
Community Manager

你好麗莎 _A。


我非常感謝您的反饋。

多虧了您的描述,我可以將其更正,如下所示

<1>
/* 選擇 clk_hf1 的來源 *//
*** 設置 HF1 來源,分隔符,啟用 ***/ SRSS-> 解鎖 _ 根 _ 選擇 [1/* clk_hf1*/] .stcField.u4根 _MUX
= CY_SYSCLK _ HFCLK _ 在 _CLK 路徑 1 中; SRSS-> 解開 _ 根 _ 選擇 [1] .stcField.u2Root_DIV
= 0u; /* 除以 1 */
SRSS-> 取消點擊 _ 根 _ 選擇 [1] .stcField.u1 啟用 = 1u; /* 1 = 啟用 */

<2>
在 LPWakeUp 中,我使用 IMO 在 160 兆赫中啟用 PLL。

在結果中,操作正常運作。

謝謝和最好的問候,
凱文漢。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/TRAVEO-T2G/CYT2B98-About-Event-generator-period-with-amp-without-JTAG-Debugger/m-p/678168

0