CH32V208WBU6基于CH32V20xEVT\EVT\EXAM\BLE\Peripheral_ETH項目增加RTC每秒定時器后無法正確運行?tmos_start_task

你好,CH32V208WBU6基于CH32V20xEVT\EVT\EXAM\BLE\Peripheral_ETH項目增加RTC每秒定時器后,接著調(diào)用

tmos_start_task(eth_TaskID, ETH_SENG_DATA_EVENT, 160); 但是無法在uint16_t eth_ProcessEvent(uint8_t task_id, uint16_t events)里收到ETH_SENG_DATA_EVENT這個event.


RTC功能添加方法如下:

1.?ch32v20x_it.c里添加

void RTC_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void RTC_IRQHandler(void)? --- 此函數(shù)是從CH32V20xEVT\EVT\EXAM\RTC\User\ch32v20x_it.c里拷貝的。

{

if (RTC_GetITStatus(RTC_IT_SEC) != RESET)? ?/* Seconds interrupt */

{

? ? RTC_Get();

? }

if(RTC_GetITStatus(RTC_IT_ALR)!= RESET)? ? ?/* Alarm clock interrupt */

{

RTC_ClearITPendingBit(RTC_IT_ALR);

? ? RTC_Get();

? }

RTC_ClearITPendingBit(RTC_IT_SEC|RTC_IT_OW);

RTC_WaitForLastTask();

}


2. eth.c里在函數(shù)eth_init()里添加

RTC_Init();


3. 在eth的phy link上時調(diào)用tmos_start_task(eth_TaskID, ETH_SENG_DATA_EVENT, 160);

? ? if (intstat & GINT_STAT_PHY_CHANGE)? ? ? ? ? ? ? ? ? ? ? ? ? ?//PHY status change

? ? {

? ? ? ? i = WCHNET_GetPHYStatus();

? ? ? ? if (i & PHY_Linked_Status)

? ? ? ? {

? ? ? ? ? ? printf("PHY Link Success\r\n");

? ? ? ? }

? ? ? ? tmos_start_task(eth_TaskID, ETH_SENG_DATA_EVENT, 160);

printf("PHY Link Success, send ETH_SENG_DATA_EVENT\r\n");

? ? }




您好,TMOS系統(tǒng)在初始化后,就一直基于RTC在運行,不支持運行期間對RTC進行重新寫入,可以讀出;

?eth.c里在函數(shù)eth_init()里添加RTC_Init();”是在TMOS系統(tǒng)初始化之后嗎,如果是的話,會導(dǎo)致TMOS時鐘異常。

您是想要做每秒一次的定時器這樣的功能嗎,可以直接利用TMOS系統(tǒng)的延時啟用時間的功能,每秒鐘循環(huán)執(zhí)行一次時間;如果覺得精度不夠或者其他原因,也可以使用TIMER定時器,中斷服務(wù)函數(shù)中置標(biāo)志后快進快出,在主循環(huán)中查詢標(biāo)志以安排事件,不會影響B(tài)LE的運行。


我是需要使用TMOS的同時,啟用RTC的

? ? RTC_ITConfig(RTC_IT_SEC, ENABLE);

每秒中斷一次的功能,能每秒鐘獲取RTC的年月日,時分秒,請問如何才能實現(xiàn)?是否可以在TMOS啟動時,同時把RTC的每秒中斷一次的功能打開?


您留個郵箱,給您發(fā)參考代碼。


個人信息保護,已隱藏

請基于CH32V20xEVT\EVT\EXAM\BLE\Peripheral_ETH幫忙加一下RTC啟用RTC_ITConfig(RTC_IT_SEC, ENABLE);每秒發(fā)起一次中斷的示例代碼,謝謝!


另外第一次啟動tmos后如果通過網(wǎng)絡(luò)獲得的實時的時分秒時間,獲得的時間和芯片當(dāng)前運行的時間時分秒差距較大時,此時是否可以通過RTC_set來修改芯片時間?

由于我們使用外置電池給VBAT供電,所以希望斷電后,再上電RTC保持上次斷電前的時間繼續(xù)運行。


參考代碼已發(fā)送至郵箱。

默認TMOS系統(tǒng)是基于RTC運行的,不可以直接RTC_set,會導(dǎo)致TMOS時鐘紊亂;需要保存下校準(zhǔn)時,目標(biāo)時間和當(dāng)前RTC的差值到ram里,應(yīng)用層獲取RTC時間時疊加上差值。

斷電之后,VBAT可以給RTC寄存器供電,但是ram是不保持的,會丟失當(dāng)前記錄的時間。

您可以考慮使用CH58x系列MCU,有更精確的RTC寄存器,可以實現(xiàn)低功耗情況下的萬年歷。

image.png


請問CH32V208WBU6的內(nèi)置RTC在DC斷電后,VBAT有電池供電的情況下,RTC是否確定不能記錄當(dāng)前時分秒嗎?如果在VBAT供電的情況下但DC斷電了,想要讓CH32V208WBU6的RTC記錄當(dāng)前時分秒,希望DC再供電時能時分秒繼續(xù)正確,請問可以做到嗎?再CH32V208WBU6芯片上是否有什么方案?謝謝!


請問CH32V208WBU6的內(nèi)置RTC在DC斷電后,VBAT有電池供電的情況下,RTC是否確定不能記錄當(dāng)前時分秒嗎?如果在VBAT供電的情況下但DC斷電了,想要讓CH32V208WBU6的RTC記錄當(dāng)前時分秒,希望DC再供電時能時分秒繼續(xù)正確,請問可以做到嗎?再CH32V208WBU6芯片上是否有什么方案?謝謝!


VBAT是可以提供給RTC供電,如果說直接基于TMOS系統(tǒng)初始化時的時間無校準(zhǔn)那沒問題可以跑;一旦需要外部信號校準(zhǔn),校準(zhǔn)的差值是保存在RAM里的,斷電就會丟失;利用斷電瞬間的低電壓中斷去保存關(guān)鍵ram數(shù)據(jù)到flash中,理論上也可以實現(xiàn),電源電路上可以加個電容蓄電來保證由足夠的時間操作。

您添加一下郵件中的手機號聯(lián)系,溝通更多信息。


你好,可以把技術(shù)人員發(fā)你的參考代碼,發(fā)我一份嗎?郵箱:個人信息保護,已隱藏


已發(fā)送至郵箱,請查收。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频