0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

干貨:PSoC SWDT在Standalone下的應(yīng)用

電子設(shè)計 ? 來源:電子設(shè)計 ? 作者:電子設(shè)計 ? 2020-10-30 10:13 ? 次閱讀

01、Author

Hank Fu (付漢杰) Staff FAE embedded, Xilinx, Inc. hankf@xilinx.com

02、問題

工程師反映,根據(jù) MPSoC SWDT 在 Standalone 下的例子 xwdtps_polled_example.c,不能實現(xiàn) MPSoC 的 PS 復(fù)位。SWDT 例子來自于目錄 /Xilinx/SDK/2018.3/data/embeddedsw/XilinxProcessorIPLib/drivers/wdtps_v3_1/examples/。SWDT 例子 xwdtps_polled_example.c 只檢查了超時狀態(tài),沒有實現(xiàn)復(fù)位。工程師把其中的“XWdtPs_DisableOutput(&Watchdog, XWDTPS_RESET_SIGNAL)”改為“XWdtPs_EnableOutput(&Watchdog, XWDTPS_RESET_SIGNAL)”,仍然不能復(fù)位。


工程師根據(jù) FSBL 的 main.c 中的 InitWatchDog( ),添加代碼后,依然不能使 MPSoC 的 PS 復(fù)位。

03、分析

3.1. FSBL 的 main.c

main.c 是 Zynq-7000 的 FSBL 的代碼??蛻羰褂?SOurce Insight 分析代碼時,使用了錯誤的文件。

3.2. MPSoC 的 FSBL
MPSoC 的 FSBL 的主文件是 xfsbl_main.c,wdt 的代碼在 xfsbl_misc_drivers.c 和 xfsbl_misc_drivers.h 中,初始化 WDT 的函數(shù)是 u32 XFsbl_InitWdt(void),宏定義 XFSBL_WDT_EXPIRE_TIME 定義了 FSBL 中 wdt 的超時時間。

在 XFsbl_InitWdt(void)中,初始化并啟動 WDT(XWdtPs_RestartWdt( ))后,直接使用 sleep(20),睡眠 20 秒。睡眠過程中,因為 WDT 超時,MPSoC 的 PS 會被復(fù)位。這說明 FSBL 關(guān)于 WDT 代碼是正確的。

3.3. Standalone 下的 WDT
對比 MPSoC FSBL 初始化 WDT 的函數(shù) XFsbl_InitWdt( ),發(fā)現(xiàn)它設(shè)置了 PMU 的 ERROR_SRST_EN_1 Register 和 ERROR_EN_1 Register。把相關(guān)代碼復(fù)制到 Standalone 下的代碼,在初始化 WDT 之前運(yùn)行。重新編譯后,WDT 超時會復(fù)位 MPSoC 的 PS。

3.4. 再次運(yùn)行時,設(shè)置 PMU 的 ERROR_SRST_EN_1 后,PS 馬上復(fù)位。

WDT 超時后,再次使用 Debugger 運(yùn)行時,設(shè)置 PMU 的 ERROR_SRST_EN_1 后,WDT 還沒有被初始化時,PS 馬上被復(fù)位。檢查 PMU ERROR_STATUS_1 Register,發(fā)現(xiàn) WDT 的超時狀態(tài)為 1。于是把讀取到的 ERROR_STATUS_1 的值,再寫回 ERROR_STATUS_1 Register,清除 WDT 的超時狀態(tài)。

這樣在 WDT 超時后,設(shè)置 PMU 的 ERROR_SRST_EN_1 后,PS 不會馬上被復(fù)位。

3.5. FPD_SWDT 和 LPD_SWDT

工程師發(fā)現(xiàn)使用 LPD_SWDT,能復(fù)位 PS;換成 FPD_SWDT,不能復(fù)位 PS。


在設(shè)置 PMU 的 ERROR_SRST_EN_1 Register 和 ERROR_EN_1 Register 時,LPD_SWDT 和 FPD_SWDT 有各自的使能位。增加設(shè)置 FPD_SWDT 的使能位后,換成 FPD_SWDT,也能復(fù)位 PS。

#define PMU_GLOBAL_ERROR_SRST_EN_1 ( ( PMU_GLOBAL_BASEADDR ) + 0X0000056CU )
#define PMU_GLOBAL_ERROR_SRST_EN_1_LPD_SWDT_MASK 0X00001000U
#define PMU_GLOBAL_ERROR_SRST_EN_1_FPD_SWDT_MASK 0X00002000U


04、Vivado 設(shè)置

使用 WDT,要在 Vivado 里的 PCW 里,使能對應(yīng)的 WDT。


05、相關(guān)代碼

5.1. 檢查和清除 PMU 寄存器

xil_printf("/r/n" );
u32_reg = Xil_In32(0xFFD80530);
xil_printf("Old PMU ERROR_STATUS_1 (PMU_GLOBAL) Register: %x./r/n", u32_reg );
Xil_Out32(0xFFD80530, u32_reg); // Clear PMU ERROR_STATUS_1 (PMU_GLOBAL) Register

u32_reg = Xil_In32(0xFFD80540);
xil_printf("Old PMU ERROR_STATUS_2 (PMU_GLOBAL) Register: %x./r/n", u32_reg );
Xil_Out32(0xFFD80540, u32_reg); // Clear PMU ERROR_STATUS_2 (PMU_GLOBAL) Register

u32_reg = Xil_In32(0xFFD80530);
xil_printf("New PMU ERROR_STATUS_1 (PMU_GLOBAL) Register: %x./r/n", u32_reg );

u32_reg = Xil_In32(0xFFD80540);
xil_printf("New PMU ERROR_STATUS_2 (PMU_GLOBAL) Register: %x./r/n", u32_reg );


5.2. 檢查 SWDT 寄存器狀態(tài)

void CheckWDTRegisterValue( u32 EffectiveAddress )
{
u32 u32_reg;

u32_reg = XWdtPs_ReadReg(EffectiveAddress, XWDTPS_ZMR_OFFSET);
xil_printf("WDT Zero Mode Register: %x./r/n", u32_reg );
u32_reg = XWdtPs_ReadReg(EffectiveAddress, XWDTPS_CCR_OFFSET);
xil_printf("WDT Counter Control Register: %x./r/n", u32_reg );
u32_reg = XWdtPs_ReadReg(EffectiveAddress, XWDTPS_RESTART_OFFSET);
xil_printf("WDT Restart Register: %x./r/n", u32_reg );
u32_reg = XWdtPs_ReadReg(EffectiveAddress, XWDTPS_SR_OFFSET);
xil_printf("WDT Status Register: %x./r/n", u32_reg );
}

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • PSoC
    +關(guān)注

    關(guān)注

    12

    文章

    170

    瀏覽量

    91579
收藏 人收藏

    評論

    相關(guān)推薦

    使用PSoC5LP的過程中,遇到PSoC5LPEFT干擾時復(fù)位的問題怎么解決?

    我使用 PSoC5LP 的過程中(>8 年),我曾多次驗證測試中遇到 PSoC5LP EFT 干擾時復(fù)位的問題。 大多數(shù)情況
    發(fā)表于 07-05 07:26

    使用PSOC UART與Nextion HMI進(jìn)行通信,PSOC UART發(fā)送字符串不起作用的原因?

    PSOC creator 3.3 使用 PSOC(型號 CY8C5888LTI)、 我正在嘗試使用 PSOC UART 與我的 Ne
    發(fā)表于 05-30 07:19

    STM32CubeF4 1.24.0的DFU_Standalone工程不能識別設(shè)備是什么原因?qū)е碌模?/a>

    STM32F413H Discovery 板子上運(yùn)行 STM32CubeF4 1.24.0 里面的 DFU_Standalone 工程, 發(fā)現(xiàn)用 Keil MDK 編譯燒到板子上運(yùn)行連到PC后設(shè)
    發(fā)表于 04-18 06:27

    什么是可編程片上系統(tǒng)?PSOC和FPGA的區(qū)別

    可編程片上系統(tǒng)(PSoC)是一種高度集成化和靈活性的嵌入式系統(tǒng)解決方案。它將數(shù)字邏輯、模擬電路和可配置模塊等功能融合在一起,形成一個單一的集成電路。PSoC的核心理念在于其可編程性,用戶可以通過軟件
    的頭像 發(fā)表于 03-28 14:59 ?964次閱讀

    玩轉(zhuǎn)PSoC 6 RTT積木式開發(fā)套件,實現(xiàn)毫米波雷達(dá)等實用功能

    本期英飛凌手工課,將由來自英飛凌的工程師Jenson給大家?guī)?b class='flag-5'>PSoC62withCAPSENSEevaluationkit(PSoC6RTT開發(fā)板)和其積木式開發(fā)套件的全面介紹。讓我們跟著
    的頭像 發(fā)表于 03-20 08:35 ?704次閱讀
    玩轉(zhuǎn)<b class='flag-5'>PSoC</b> 6 RTT積木式開發(fā)套件,實現(xiàn)毫米波雷達(dá)等實用功能

    如何使用CLIJTAG鏈上選擇要寫入的PSoC6?

    MiniProg4 和CYPRESS?編程器, 有一個單選按鈕可以選擇要寫入的 PSoC6。 但是,當(dāng)嘗試通過 CLI 寫入時,只能識別一個 PSoC6。 如何使用 CLI JTAG 鏈上選擇要寫入的
    發(fā)表于 03-04 07:26

    PSoC6的WDTHibernate模式是否可以工作?

    大家好!我在這個帖子PSoC 6 Watchdog 看到介紹WDTHibernate模式是可以工作的,但是這里卻,卻沒提到 我把CE220607的deep sleep 模式改為
    發(fā)表于 02-21 06:47

    Linux環(huán)境能使用PSoC Creator 4.3嗎?

    最近碰到一個Linux系統(tǒng)編譯的要求,PSoC Creator能夠Linux環(huán)境使用嗎?
    發(fā)表于 02-18 07:22

    請問PSoC MiniProgPSoC Designer5.4上可作為ICE仿真器使用嗎?

    大家好! 請問一PSoC MiniProgPSoC Designer5.4上可作為ICE仿真器使用嗎?
    發(fā)表于 01-31 06:51

    PSoC Creator會支持PSoC 4000T嗎?

    PSoC Creator 會支持 PSoC 4000T 嗎? 同一 SDK/IDE 中使用預(yù)先加載的示例和主板支持包來完全支持所有 PSoC 4000 器件會很有幫助。 如果
    發(fā)表于 01-31 06:21

    干貨分享】6種延時電路原理講解

    干貨分享】6種延時電路原理講解
    的頭像 發(fā)表于 12-15 09:24 ?1380次閱讀
    【<b class='flag-5'>干貨</b>分享】6種延時電路原理講解

    干貨分享】MLCC電容嘯叫的4個對策

    干貨分享】MLCC電容嘯叫的4個對策
    的頭像 發(fā)表于 12-06 17:26 ?647次閱讀
    【<b class='flag-5'>干貨</b>分享】MLCC電容嘯叫的4個對策

    基于PSoC的紅外線通信測控系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《基于PSoC的紅外線通信測控系統(tǒng).pdf》資料免費(fèi)下載
    發(fā)表于 10-20 10:57 ?0次下載
    基于<b class='flag-5'>PSoC</b>的紅外線通信測控系統(tǒng)

    干貨!電源設(shè)計器件布局和布線要點(diǎn)

    干貨!電源設(shè)計器件布局和布線要點(diǎn)
    的頭像 發(fā)表于 10-18 17:03 ?558次閱讀
    <b class='flag-5'>干貨</b>!電源設(shè)計器件布局和布線要點(diǎn)

    干貨分享 | 32種EMC標(biāo)準(zhǔn)電路分享

    干貨分享 | 32種EMC標(biāo)準(zhǔn)電路分享
    的頭像 發(fā)表于 10-17 12:05 ?715次閱讀
    <b class='flag-5'>干貨</b>分享 | 32種EMC標(biāo)準(zhǔn)電路分享