娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月09日(星期日)

正在發生

2020年02月09日 | MSP430定時器介紹

發布者:森綠企鵝 來源: eefocus關鍵字:MSP430  定時器  TIMER0 手機看文章 掃描二維碼
隨時隨地手機看文章

MSP430定時器筆記


1.定時器參數

1.1 基本定時器

typedef enum

{

  TIMER_A0              ,

  TIMER_A1              ,

  TIMER_A2              ,

  TIMER_B0              ,

  TIMER_NUM             ,

}TIMERn;             //定時器模塊


1.2 定時器通道引腳、時鐘選擇

const GPIO_PIN TIMER_CHANEL_PIN[TIMER_NUM][TIMER_CH_NUM]=

{// CH0    CH1    CH2    CH3    CH4    CH5    CH6

  {{P1,1},{P1,2},{P1,3},{P1,4},{P1,5}},                  //TIMER_A0

  {{P1,7},{P2,0},{P2,1}},                                //TIMER_A1

  {{P2,3},{P2,4},{P2,5}},                                //TIMER_A2

  {{P5,6},{P5,7},{P7,4},{P7,5},{P7,6},{P3,5},{P3,6}}     //TIMER_B0

};//通道引腳

const GPIO_PIN TIMER_CLK_PIN[TIMER_NUM] =

{

  {P1,0},//TIMER_A0----ACLK----

  {P1,6},//TIMER_A1----ACLK----

  {P2,2},//TIMER_A2----SMCLK----

  {P7,7} //TIMER_B0----MCLK----

};//外部時鐘輸入引腳


2.定時器功能

2.1 實現基本定時

extern STATUS   TIMER_Interval_Us   (TIMERn, uint32_t us);  //初始化一個us級的定時中斷

#define         TIMER_Interval_Ms(timer,ms)  TIMER_Interval_Us(timer,(uint32_t)ms*1000)


2.1.1 中斷向量設置傳參

/*******************************************************************************

*  函數名稱:Set_Vector_Handler(VECTORn vector,__interrupt void pfunc_handler(void))

*  功能說明:設置中斷向量地址

*  參數說明:

            VECTORn vector  :中斷向量(枚舉變量,見.h文件)

            __interrupt void pfunc_handler(void)  : 中斷服務函數

*  函數返回:無

*  使用示例:Set_Vector_Handler(VECTOR_PORT1,GPIO_IRQ_Handler);    //設置PPORT1中斷服務函數為GPIO_IRQ_Handler,需要先定義中斷服務函數,另外最好先設置中斷向量,再開啟中斷

********************************************************************************/

void Set_Vector_Handler(VECTORn vector, __interrupt void pfunc_handler(void))

{

  if(SYSX->RIVECT == DISABLE)        //如果沒有設置中斷向量表到RAM,則設置

  {

    Set_VectorTable_To_RAM();                       //設置中斷向量表到RAM

  }

  //此處若有警告可忽略

  __VECTOR_RAM[vector] = (ISR_TYPE)pfunc_handler;     //設置該中斷向量地址

}


2.1.2 定時中斷

/*******************************************************************************

*  函數名稱:TIMER_Interval_Us(TIMERn timer,uint32_t us)

*  功能說明:定時器定時初始化(單位:us)

*  參數說明:TIMERn timer       :定時器模塊

             uint32_t us          : 定時時間

*  函數返回:不成功則返回ERROR,成功則返回SUCCESS

*  使用例程:TIMER_Interval_Us(TIMER_B0,2500);  //TB定時間隔2.5ms中斷

********************************************************************************/

STATUS  TIMER_Interval_Us(TIMERn timer,uint32_t us)

{

#ifdef DELAY_TIMER

  ASSERT((timer != DELAY_TIMER),

         "TIMER_Interval_Us",

         "定時器已經設置為默認延時功能,不能再作為其他功能使用");       //不允許這種情況下還宏定義該定時器作為延時所用的定時器,請在system.h里修改DELAY_TIMER宏定義

#endif

  TIMERX[timer]->CLR = BIT_SET;//置位

  TIMERX[timer]->SSEL = TIMER_SSEL_SMCLK;

  TIMERX[timer]->ID = 0u;//分頻系數清零

  //計數值

  uint32_t Counter_Value = (uint32_t)(us * g_sClock.SMCLK.fMHZ);

  while(Counter_Value > 65536)

  {

     TIMERX[timer]->ID ++;

     Counter_Value >>= 1;  

     if((TIMERX[timer]->ID == 3u) && (Counter_Value > 65536))   //這個時候意味得選擇更低頻率的時鐘了

     {

      if(TIMERX[timer]->SSEL == TIMER_SSEL_ACLK) //如果時鐘已經是最低的ACLK了,那么意味著設置的頻率太低了,失敗返回ERROR

      {

        return ERROR;

      }

      //更換為更低的ACLK,從新配置

      TIMERX[timer]->SSEL = TIMER_SSEL_ACLK;

      TIMERX[timer]->ID = 0u;  

      Counter_Value = (uint32_t)(us * g_sClock.ACLK.fMHZ);

      continue;  

     }

  }

  if(Counter_Value <= 1)//出現這種情況,說明頻率不合適

  {

    return ERROR;

  }


  TIMERX[timer]->CCR[0] = (uint16_t)(Counter_Value - 1u);//為什么要減一??因為TAR/TBR計數器從CCR0變化到0還有一個計數周期

  TIMERX[timer]->CCTL[0].CAPMODE = RESET;//比較模式

  TIMERX[timer]->IE = RESET;             //關閉溢出中斷

  TIMERX[timer]->CCTL[0].IE = RESET;     //關閉通道中斷

  TIMERX[timer]->MC = TIMER_MC_UP;      //增計數模式


  return SUCCESS;

}


2.1.3 初始化實例

DisableInterrupts();          //禁止總中斷 


 Set_Vector_Handler(VECTOR_TIMER0_A0,TIMER_TA0_IRQ_Handler);    //設置中斷向量,最好先設置中斷向量,在開啟中斷

  TIMER_Interval_Ms(TIMER_A0,200);//初始化一個200ms的定時中斷

  //TIMER_Interval_Us(TIMER_A0,1000000);                    //初始化一個1000ms的定時中斷,不要寫為1000*1000,否則會提示超出范圍

  TIMER_ITConfig (TIMER_A0,TIMER_CCR0_IRQn,ENABLE);


EnableInterrupts();


__interrupt void TIMER_TA0_IRQ_Handler()

{

  LED_Turn(LED2); //黃燈

  //FLAG_10MS=1;

}


2.2 PWM輸出

2.2.1 PWM計數模式

#define TIMER_MC_STOP         (0)  /* Timer A mode control: 0 - Stop */

#define TIMER_MC_UP           (1)  /* Timer A mode control: 1 - Up to CCR0 */

#define TIMER_MC_CONTINUOUS   (2)  /* Timer A mode control: 2 - Continuous up */

#define TIMER_MC_CONTINOUS    (2)  /* Legacy define */

#define TIMER_MC_UPDOWN       (3)  /* Timer A mode control: 3 - Up/Down */


2.2.2 PWM輸出模式

typedef enum

{

  TIMER_PWM_OUTMOD0     ,

  TIMER_PWM_OUTMOD1     ,

  TIMER_PWM_OUTMOD2     ,

  TIMER_PWM_OUTMOD3     ,

  TIMER_PWM_OUTMOD4     ,

  TIMER_PWM_OUTMOD5     ,

  TIMER_PWM_OUTMOD6     ,

  TIMER_PWM_OUTMOD7     ,

}TIMER_PWM_OUTMODn;       //PWM波輸出波形


各種計數情況下pwm輸出模式 

1

2.3 pwm輸出

2.3.1 pwm初始化

/*******************************************************************************

*  函數名稱:TIMER_PWM_MultiChannel_Init(TIMERn timer, uint32_t fre, uint8_t ChannelNum,...)

*  功能說明:定時器PWM輸出初始化(可以多個通道同時初始化)

*  參數說明:TIMERn timer       :定時器模塊

             uint32_t fre         :頻率

             uint8_t ChannelNum   :要初始化的通道數

             ...                :初始化的通道

*  函數返回:不成功則返回ERROR,成功則返回SUCCESS

********************************************************************************/

STATUS TIMER_PWM_MultiChannel_Init(TIMERn timer, uint32_t fre, uint8_t ChannelNum,...)

{

#ifdef DELAY_TIMER

  ASSERT((timer != DELAY_TIMER),

         "TIMER_PWM_MultiChannel_Init",

         "定時器已經設置為默認延時功能,不能再作為其他功能使用");       //不允許這種情況下還宏定義該定時器作為延時所用的定時器,請在system.h里修改DELAY_TIMER宏定義

#endif

  ASSERT((timer==TIMER_A0&&ChannelNum<=TIMER_CH4)

       ||(timer==TIMER_A1&&ChannelNum<=TIMER_CH2)

       ||(timer==TIMER_A2&&ChannelNum<=TIMER_CH2)

       ||(timer==TIMER_B0&&ChannelNum<=TIMER_CH6),

       "TIMER_PWM_MultiChannel_Init",

       "定時器通道參數超出范圍!"); //斷言檢測輸入參數*/


  va_list ap;

  va_start(ap,ChanelNum);

  for(int i=0;i < ChannelNum;i++)           //根據初始化的通道數,逐一初始化通道

  {

    TIMER_CHn ch = va_arg(ap, TIMER_CHn);  //讀取要初始化的通道

    if((ch == TIMER_CH0) || (ch >= TIMER_CH_NUM))   //判斷通道值是否合理

    {

      return ERROR;                                 //不合理返回ERROR

    }

    //初始化端口

    GPIO_Init(TIMER_CHANEL_PIN[timer][ch].Port,TIMER_CHANEL_PIN[timer][ch].Pin,GPO|SEL);

    //初始化占空比及輸出波形

    TIMERX[timer]->CCR[ch] = 0u;

    TIMERX[timer]->CCTL[ch].IE = RESET;               //關閉通道中斷

    TIMERX[timer]->CCTL[ch].OUTMOD = DEFAULT_PWM_OUTMOD;      //輸出波形設置

    TIMERX[timer]->CCTL[ch].CAPMODE = RESET;          //比較模式

  }

  va_end(ap);


  return TIMER_PWM_SetFrequency(timer,fre);

}


設置頻率函數


/*******************************************************************************

*  函數名稱:TIMER_PWM_SetFrequency(TIMERn timer,uint32_t fre)

*  功能說明:定時器PWM頻率設置(注意這里沒有更改各個通道的占空比,所以修改頻率后占空比變了,需要從新設置占空比)

*  參數說明:TIMERn timer       :定時器模塊

             uint32_t fre         :頻率

*  函數返回:不成功則返回ERROR,成功則返回SUCCESS

*  使用例程:TIMER_PWM_SetFrequency(TIMER_B0,1000);       //將定時器B輸出頻率修改為1000Hz

********************************************************************************/

STATUS  TIMER_PWM_SetFrequency(TIMERn timer,uint32_t fre)

{

  if(fre == 0u)

  {

    TIMERX[timer]->MC = TIMER_MC_STOP;              //暫停輸出PWM波

    return SUCCESS;

  }


  TIMERX[timer]->CLR = BIT_SET;

  TIMERX[timer]->SSEL = TIMER_SSEL_SMCLK;           //先選擇時鐘源為SMCLK

[1] [2]
關鍵字:MSP430  定時器  TIMER0 引用地址:MSP430定時器介紹

上一篇:MSP430學習筆記3----定時器學習
下一篇:msp430 學習經驗總結

推薦閱讀

  據外國網站報道,生物學家正在測試一種新的方法來有效地篩選大量的基因組數據,這一新方法便是激光芯片。下面就隨嵌入式小編一起來了解一下相關內容吧。? ? 隨著摩爾定律的崩潰,一般處理器的計算能力已經到達極限。一家名為Optalysys的英國初創公司認為,光學計算技術多年來一直未能實現真正開發利用。而現在光學計算可以被用來研究基因組的大數...
自2013年美國著名CowboyVenture投資人AileenLee,將市場上成立時間較短(成立不超過10年)、由投資人或者估值機構估值超過10億美元(約63億人民幣)的創業公司,統稱為“獨角獸”之后,這一名詞即成為了極具潛力創業公司的代言詞。中國成獨角獸孕育沃土作為孕育獨角獸的主力軍國家之一,從2013年至2018年3月,CBInsight數據統計顯示全球237家獨角獸企業中...
一、串行通訊技術概述串行通訊的通俗定義:一位發送一位(相對與并行,)當然通過 位同步 幀同步串行通訊的分類同步串行通訊時鐘線、數據線、通過時鐘保持數據同步SPI,IIC 屬于同步串口通訊異步串口通信只有一根數據線,通過波特率保證數據同步(顧名思義沒有時鐘線只有數據線)UART無線通信一般均為異步串行通信(相對于無形之中只能有一根天線)波特率...
得益于半導體行業開發與生產分離的垂直分工模式,IC設計與代工企業能夠集中資源與技術,提高各自在全球范圍的競爭優勢。不過隨著車用芯片缺貨影響持續,這種分工模式或許將迎來轉折點。據日經中文網報道,很多美國和歐洲半導體企業一直通過將重點放在研發上的高效經營來提高競爭力,但對特定代工企業的依存度提高,緊急情況下的產品穩定供應出現隱憂。從美...

史海拾趣

問答坊 | AI 解惑

收集的一些C語言資料

C陷阱與缺陷.pdf C語言深度解剖.pdf C語言試題集.pdf C語言運算符優先級口訣.txt C語言中的指針.pdf itat比賽題目 …

查看全部問答∨

這個波形怎么產生(續)?

首先感謝zhangkai0215對我上一個問題的幫助,小弟再次謝過。今天我又遇見難題了,見下: d_in是一個50KHz,占空比為30%的方波(周期20us),在每一個d_in的上升沿產生一個14us的高電平,即上圖中d_out信號,還是和上次一樣,假如還存在一個8MHz的時 ...…

查看全部問答∨

基于PDA的電子地圖的研究.pdf

基于PDA的電子地圖的研究.pdf…

查看全部問答∨

wince下的DM9000驅動問題

     正在調試DM9000的驅動,不過以前沒有涉及過wince下的驅動,顯得很費力。移植應該是成功了,開機可以加載成功,環路ping,包括ping自己的IP地址和127.0.0.1都是可以的,這說明驅動加載應該沒有問題了。但是,我沒有辦法pin ...…

查看全部問答∨

mini2440 eboot

我的問題 1:我發現我用Nboot把eboot啟起來后我的DNW就不能用了。。似乎不能識別USB,DNW上面USB:X,同樣我也通過DNW按照手冊上說的把NBOOT,eboot,NK全部燒入,DNW也不能用但是我的activesync能用,這是DNW出了問題嗎?我需要修改源碼嗎? 2:我現 ...…

查看全部問答∨

哦,又一個操作系統,且慢這樣說

都江堰操作系統(簡稱djyos)是一個操作系統,但不是“又一個操作系統”,它是一個全新思路的操作系統。有興趣的,去www.djyos.com逛逛,所有含詳盡注釋的代碼和文檔,全部在那里共享,你一定會有收獲的。     djyos操作系統是以事件為 ...…

查看全部問答∨

多分了FAT分區,可SD卡卻不能用了

本來我的nandflash有一個binfs分區,兩個fat分區,今天我就多加了個fat分區,結果是sd卡的那個圖標不見了。。。。希望高手指教…

查看全部問答∨

吐血共享:STM8SCH封裝庫。99SE格式

文件里面是STM8多個SCH封裝的庫 stm8sch.rar (3.94 KB) 下載次數:853 2009-11-13 17:07 …

查看全部問答∨

如何實現GPRS遠程水文觀測系統?

水文觀測,我們一般觀測兩點: 1、水位; 2、水面圖像; 水位的測量,一般通過投入式壓力傳感器進行測量,數據通過GSM信息采集控制器來計算和傳輸; 水面圖像的采集一般通過iTC668來進行采集和傳輸; 數據采集好后,主要有兩種傳輸方式: 1、 ...…

查看全部問答∨

git常用命令總結

第一章 Git的基本操作方法 一.初始化倉庫 git init 此時會在當前目錄*假如為($WORK)生成一個.git的目錄文件.這個.git目錄就是Git倉庫.其中存放的是我們所提交的文檔索引內 容,Git 可基于文檔索引內容對其所管理的文檔進行內容追蹤, ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 溧水县| 兴仁县| 靖西县| 洛浦县| 庆城县| 龙海市| 固阳县| 高雄县| 内黄县| 富平县| 桦川县| 都安| 莱芜市| 定结县| 双鸭山市| 灌阳县| 吴忠市| 阜城县| 闽清县| 三门峡市| 商南县| 斗六市| 托里县| 鸡泽县| 长岭县| 奉贤区| 陈巴尔虎旗| 峨边| 海原县| 三原县| 美姑县| 延安市| 嘉禾县| 沙坪坝区| 叙永县| 思南县| 奉新县| 潢川县| 莱阳市| 温州市| 敖汉旗|