国产芯片
声明:本文旨在帮助自己记录芯片的常用配置过程。同时希望分享出自己的使用经验,让更多的人加入国产芯片的开发中。
新的技术往往都来自于模仿。从模仿到超越。芯片国产化的过程需要模仿已经比较成熟的产品,让使用者好入手,增加自己的用户量。
介绍
- 独立的频率可以设定的看门狗时钟振荡器
- 看门狗定时器可触发中断或复位
- 支持低功耗模式
时钟源
可以选择内部低速时钟或者内部高速时钟。
看门狗 时钟振荡 控制寄存器 WDTOSCCTRL 0x024
void wdt_clock_set(uint8_t clksrc, uint8_t div)
{
SYSCON->WDTOSCCTRL.bit.WDTCLKSRC = clksrc; //0 低速时钟, 1 内部时钟40MHz
SYSCON->WDTOSCCTRL.bit.DIVSEL = div; //看门狗时钟分频 40/10/4=1MHz 4是看门狗固定分频
SYSCON->WDTOSCCTRL.bit.CTRIM = 0;
SYSCON->WDTOSCCTRL.bit.RTRIM = 0;
}
看门狗寄存器
MOD
//hhd_wdt.h
#define WDT_Enable_Timer (WDT->MOD.bit.WDEN=1)
#define WDT_Disable_Timer (WDT->MOD.bit.WDEN=0)
#define WDT_Enable_RESET (WDT->MOD.bit.WDRESET = 1) //enable wdt reset
#define WDT_Disable_RESET (WDT->MOD.bit.WDRESET = 0) //disable wdt reset
//hhd_wdt.c库函数
//设置常数寄存器TC
void WDT_SetIntervalinTick(uint32_t ticks)
{
WDT->TC.bit.WDTC=ticks;
return;
}
//喂狗
void WDT_Feed (void)
{
WDT->FEED.bit.WDFEED = 0xAA;
WDT->FEED.bit.WDFEED = 0x55;
return;
}
软件调用
void wdt_init(void)
{
/* ----------- Initialize WatchDog-------------------------- ------------ */
//WDT_Init();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
wdt_clock_set(1, 10); //wtdclk = 40/10/4 = 1MHz 4是看门狗固定分频
/* ------------------- Set WachDog time out interval ---------------------*/
WDT_SetIntervalinTick(2000000); //Reset Interval time = 2000000/1MHz = 2s。
WDT_Enable_RESET;
WDT_Enable_Timer;
WDT_Feed();
}