以CW32L083為例,其定時(shí)器分為6種:
基本定時(shí)器:CW32L083 內(nèi)部集成 3 個(gè)基本定時(shí)器 (BTIM),每個(gè) BTIM 完全獨(dú)立且功能完全相同,各包含一個(gè) 16bit 自動(dòng)重裝 載計(jì)數(shù)器并由一個(gè)可編程預(yù)分頻器驅(qū)動(dòng)。BTIM 支持定時(shí)器模式、計(jì)數(shù)器模式、觸發(fā)啟動(dòng)模式和門控模式 4 種工作模式,支持溢出事件觸發(fā)中斷請(qǐng)求和 DMA 請(qǐng)求。得益于對(duì)觸發(fā)信號(hào)的精細(xì)處理設(shè)計(jì),使得 BTIM 可以由硬件自 動(dòng)執(zhí)行觸發(fā)信號(hào)的濾波操作,還能令觸發(fā)事件產(chǎn)生中斷和 DMA 請(qǐng)求。
低功耗定時(shí)器:CW32L083 內(nèi)部集成 1 個(gè) 16 位低功耗定時(shí)器(LPTIM),可以以很低的功耗實(shí)現(xiàn)定時(shí)或?qū)ν獠棵}沖計(jì)數(shù)的功能。通過(guò)選擇合適的時(shí)鐘源和觸發(fā)信號(hào),可以實(shí)現(xiàn)系統(tǒng)低功耗休眠時(shí)將MCU喚醒的功能。LPTIM 內(nèi)部具有一個(gè)比較寄存器,可實(shí)現(xiàn)比較輸出和 PWM 輸出,并可以控制輸出波形的極性。此外,LPTIM 還可以與正交編碼器連接,自動(dòng) 實(shí)現(xiàn)遞增計(jì)數(shù)和遞減計(jì)數(shù)。
通用定時(shí)器:CW32L083 內(nèi)部集成 4 個(gè)通用定時(shí)器(GTIM),每個(gè) GTIM 完全獨(dú)立且功能完全相同,各包含一個(gè)16bit 自動(dòng)重 裝載計(jì)數(shù)器并由一個(gè)可編程預(yù)分頻器驅(qū)動(dòng)。GTIM 支持定時(shí)器模式、計(jì)數(shù)器模式、觸發(fā)啟動(dòng)模式和門控模式 4 種基本工作模式,每組帶4 路獨(dú)立的捕獲 / 比較通道,可以測(cè)量輸入信號(hào)的脈沖寬度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和 PWM)。
高級(jí)定時(shí)器:高級(jí)定時(shí)器 (ATIM) 由一個(gè) 16 位的自動(dòng)重載計(jì)數(shù)器和 7 個(gè)比較單元組成,并由一個(gè)可編程的預(yù)分頻器驅(qū)動(dòng)。ATIM 支持 6 個(gè)獨(dú)立的捕獲 / 比較通道,可實(shí)現(xiàn) 6 路獨(dú)立 PWM 輸出或 3 對(duì)互補(bǔ) PWM 輸出或?qū)?6 路輸入進(jìn)行捕獲。可 用于基本的定時(shí) / 計(jì)數(shù)、測(cè)量輸入信號(hào)的脈沖寬度和周期、產(chǎn)生輸出波形(PWM、單脈沖、插入死區(qū)時(shí)間的互補(bǔ) PWM 等)。
獨(dú)立看門狗定時(shí)器 (IWDT):CW32L083 內(nèi)部集成獨(dú)立看門狗定時(shí)器 (IWDT),使用專門的內(nèi)部 RC 時(shí)鐘源 RC10K,可避免運(yùn)行時(shí)受到外部因素 影響。一旦啟動(dòng) IWDT,用戶需要在規(guī)定時(shí)間間隔內(nèi)對(duì) IWDT 的計(jì)數(shù)器進(jìn)行重載,否則計(jì)數(shù)器溢出會(huì)觸發(fā)復(fù)位或 產(chǎn)生中斷信號(hào)。IWDT 啟動(dòng)后,可停止計(jì)數(shù)。可選擇在深度休眠模式下 IWDT 保持運(yùn)行或暫停計(jì)數(shù)。專門設(shè)置的鍵值寄存器,可以鎖定 IWDT 的關(guān)鍵寄存器,防止寄存器被意外修改。
窗口看門狗定時(shí)器 (WWDT):CW32L083 內(nèi)部集成窗口看門狗定時(shí)器 (WWDT),用戶需要在設(shè)定的時(shí)間窗口內(nèi)進(jìn)行刷新,否則將觸發(fā)系統(tǒng)復(fù)位。WWDT 通常被用來(lái)監(jiān)測(cè)有嚴(yán)格時(shí)間要求的程序執(zhí)行流程,防止由外部干擾或未知條件造成應(yīng)用程序的執(zhí)行異常, 導(dǎo)致發(fā)生系統(tǒng)故障。
01
CW32定時(shí)器中斷
定時(shí)器中斷是由CW32中的定時(shí)器引起的中斷,所謂中斷就是程序正常順序執(zhí)行的時(shí)候,出現(xiàn)了突發(fā)事件,CPU停止當(dāng)前的程序的執(zhí)行,轉(zhuǎn)去處理突發(fā)事件,處理完畢后又返回原程序被中斷的位置繼續(xù)執(zhí)行。
02
CW32定時(shí)器中斷源
定時(shí)器主要中斷源包括如下:
基本定時(shí)器(BTIM): 計(jì)數(shù)器(ARR/TOP)溢出中斷、計(jì)數(shù)器觸發(fā)中斷。
低功耗定時(shí)器(LPTIM): 計(jì)數(shù)方向反向中斷、ARR更新完成中斷、比較寄存器更新完成中斷、計(jì)數(shù)器觸發(fā)中斷、ARR自動(dòng)重載匹配中斷、比較匹配中斷。
通用定時(shí)器(GTIM): 編碼器計(jì)數(shù)方向變化中斷、CHx捕獲比較中斷、計(jì)數(shù)器下溢中斷、計(jì)數(shù)器觸發(fā)中斷、計(jì)數(shù)器ARR溢出中斷。
高級(jí)定時(shí)器(ATIM): CHxA/B捕獲比較中斷、CHxA/B捕獲數(shù)據(jù)丟失中斷、計(jì)數(shù)器上溢中斷、計(jì)數(shù)器下溢中斷、剎車中斷、CH4比較匹配中斷、事件更新中斷。
更新事件, 觸發(fā)事件。
獨(dú)立看門狗定時(shí)器(IWDT): 計(jì)數(shù)器溢出中斷。
窗口看門狗定時(shí)器(WWDT):計(jì)數(shù)器溢出中斷。
各中斷源的含義詳細(xì)描述參見(jiàn)對(duì)應(yīng)產(chǎn)品的用戶手冊(cè)內(nèi)容。
03
實(shí)際操作
以CW32L083為例,控制基本定時(shí)器BTIM1以固定的時(shí)間間隔產(chǎn)生中斷,并在ARR溢出中斷中控制口線電平翻轉(zhuǎn)。
1. RCC時(shí)鐘初始化
void RCC_Configuration(void)
{
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
//系統(tǒng)時(shí)鐘設(shè)置為HSI時(shí)鐘6分頻,8MHz, PCLK、HCLK不分頻,PCLK=HCLK=SysClk=8MHz
__RCC_BTIM_CLK_ENABLE();
__RCC_GPIOB_CLK_ENABLE();
}
2.初始化GPIO口
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.IT = GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pins = GPIO_PIN_8;
GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
}
3.配置嵌套矢量中斷控制器
void NVIC_Configuration(void)
{
__disable_irq();
NVIC_EnableIRQ(BTIM1_IRQn);
__enable_irq();
}
4.主函數(shù)
int32_t main(void)
{
BTIM_TimeBaseInitTypeDef BTIM_TimeBaseInitStruct = {0};
/* System Clocks Configuration */
RCC_Configuration();
/* NVIC Configuration */
NVIC_Configuration();
/* GPIO Configuration */
GPIO_Configuration();
BTIM_TimeBaseInitStruct.BTIM_Mode = BTIM_Mode_TIMER;
/* 工作模式,00:定時(shí)器模式01:計(jì)數(shù)器模式10:觸發(fā)計(jì)數(shù)模式11:門控計(jì)數(shù)模式 */
BTIM_TimeBaseInitStruct.BTIM_Period = 49999;
/* 計(jì)數(shù)重載周期,取值范圍0x0000 到 0xFFFF. */
BTIM_TimeBaseInitStruct.BTIM_Prescaler = 7; // 8分頻
/*8分頻, 預(yù)分配系數(shù),取值范圍2的n次冪,n=0,1,2…15 */
BTIM_TimeBaseInit(CW_BTIM1, &BTIM_TimeBaseInitStruct);
//BTIM基本定時(shí)器初始化
BTIM_ITConfig(CW_BTIM1, BTIM_IT_OV, ENABLE); // 使能BTIMx的溢出中斷
BTIM_Cmd(CW_BTIM1, ENABLE);
/*BTIM1以1MHz時(shí)鐘進(jìn)行計(jì)數(shù),設(shè)置ARR寄存器為49999,則BTIM1將每50ms溢出一次,并觸發(fā)中斷服務(wù)程序。*/
while (1)
{
/* 中斷服務(wù)程序中 PB8輸出翻轉(zhuǎn) */
}
}
5.中斷函數(shù):PB08輸出翻轉(zhuǎn)
void BTIM1_IRQHandler(void)
{
/* USER CODE BEGIN */
if (BTIM_GetITStatus(CW_BTIM1, BTIM_IT_OV))
// 檢查BTIM的狀態(tài)寄存器的各狀態(tài)位是否置位
{
BTIM_ClearITPendingBit(CW_BTIM1, BTIM_IT_OV);
// 清除BTIM的狀態(tài)寄存器的各狀態(tài)位
PB08_TOG();
//PB08口信號(hào)翻轉(zhuǎn)
}
/* USER CODE END */
}
6.實(shí)驗(yàn)驗(yàn)證
示波器檢測(cè)PB08口的信號(hào)輸出,示波器波形圖呈周期性翻轉(zhuǎn)。
-
微控制器
+關(guān)注
關(guān)注
48文章
7906瀏覽量
153703 -
單片機(jī)
+關(guān)注
關(guān)注
6063文章
44921瀏覽量
646965 -
mcu
+關(guān)注
關(guān)注
146文章
17837瀏覽量
360437 -
國(guó)產(chǎn)替代
+關(guān)注
關(guān)注
0文章
215瀏覽量
2130
發(fā)布評(píng)論請(qǐng)先 登錄
第十二章 SysTick——系統(tǒng)定時(shí)器

武漢芯源半導(dǎo)體CW32L010在兩輪車儀表的應(yīng)用介紹
MCU定時(shí)器/計(jì)數(shù)器
STM32G474HRTIM使用HRTIM配置了主定時(shí)器中斷,為啥調(diào)試的跳轉(zhuǎn)到硬件中斷,進(jìn)不去定時(shí)器中斷,為什么?
代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開(kāi)發(fā)實(shí)戰(zhàn)正式出版

代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開(kāi)發(fā)實(shí)戰(zhàn)正式出版
武漢芯源半導(dǎo)體CW32芯片重慶地區(qū)線下技術(shù)交流會(huì)成功舉辦
定時(shí)器的基本組成和工作模式
定時(shí)器的工作方式介紹
與定時(shí)器相關(guān)的寄存器有哪些類型
鴻蒙開(kāi)發(fā)系統(tǒng)基礎(chǔ)能力:Timer定時(shí)器

評(píng)論