娇小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 學習經驗總結

推薦閱讀

2018年2月8日,致力于亞太地區市場的領先半導體元器件分銷商---大聯大控股宣布,其旗下世平推出基于TI產品的物聯網功率解決方案,其中包括從高整合度的控制器和能夠將電路板尺寸最小化的UCC28880和UCC28910FET解決方案,到能夠兼顧尺寸、效能和成本的UCC28704、UCC28740、UCC28722等高效能返馳式控制器。隨著物聯網帶著通訊等功能進入到傳統家居生活當中,...
導語:智能化是汽車四化之一,是汽車未來發展的方向,不管是新能源汽車,還是傳統汽車,智能化才能帶來更多的競爭優勢。相比合資品牌,自主品牌在智能化方面走在了行業前端,而車載智能語音控制系統作為汽車智能化的表現之一,自主品牌會有怎樣的出色表現?長安in-Call近年來長安一直致力于推進汽車智能化,在車載智能語音控制系統方面也取得了不小的成就...
stm8s008空間大小是8K 使用的時候會出現空間不夠用的情況,這個時候要對軟件進行一些設置,從而優化程序大小。1,修改優化等級,如下圖所示,這樣會優化掉無關的函數,將代碼優化到最大程度2,如果代碼有多個數組,而ram實際空間不夠使用的時候,修改下面的參數,最大修改為0xfff。3,當二維數組定義完報錯,無法容納的時候,在數組前面加上NEAR可解決報...
特斯拉在提交給美國證券交易委員會(SEC)的一份文件中表示,它已經購買了價值15億美元的比特幣。特斯拉在文件中表示,購買比特幣是為了“增強靈活性,更加多樣化,并使我們的現金回報最大化”。此外,特斯拉還表示,除了購買比特幣,該公司還將開始接受比特幣支付,以換取其產品。這也代表著特斯拉將成為第一家接受比特幣支付的大型汽車制造商。特斯拉此舉...

史海拾趣

問答坊 | AI 解惑

07電子設計大賽論文

本帖最后由 paulhyde 于 2014-9-15 08:56 編輯 07電子設計大賽論文.rar [ 本帖最后由 open82977352 于 2009-8-12 08:39 編輯 ]  …

查看全部問答∨

單片機的USB ISP下載線制作

replyreload += \',\' + 222269;單片機的USB ISP下載線制作 Timson,如果您要查看本帖隱藏內容請回復…

查看全部問答∨

為什么8051的P0口可驅動8個LS型TTL負載,而P1口只可驅動4個?

    為什么8051的P0口可驅動8個LS型TTL負載,而P1口只可驅動4個?這個驅動數量是指低電平時P0口OD門能承受8個LS型TTL負載的電流還是指高電平時8個LS型TTL負載不會把電平拉低?…

查看全部問答∨

怎樣讀出視圖列表里文件的名,用OnClickList么?

程序大概這樣的,一個視圖列表里顯示了CF卡中所有的文件,鼠標焦點可以放在文件上,但現在想做一個選取功能,就是,當鼠標單擊了一個文件就能直接或按另一個按鈕讀出他的名字,這樣好去CF卡中查找這個文件并對這個文件操作。問題是,怎么讀出文件的 ...…

查看全部問答∨

求助:程序運行時間與其所在的ROM地址有關!?

偶剛剛接觸STM32,發現了兩個令人費解的問題,請香主及各位幫忙(使用Keil uVision3 V3.55A):1、中斷子程序的起始地址影響中斷正常運行:   我將I2C2設成主機,并使用中斷方式與I2C1通信,起初一切正常,這時I2C2中 ...…

查看全部問答∨

STM8開發環境

STM8是ST推出的新一帶8bit MCU,采用三級流水線,最大運行頻率20MIPS@24MHz。具體資料請到STM8S的官方網頁下載:http://www.st.com/mcu/modules.php?name=mcu&amp;file=familiesdocs&FAM=113 這里就不羅嗦了。 工作的原因很早就有接觸STM ...…

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 合肥市| 来宾市| 桦甸市| 平阴县| 开平市| 邵武市| 南投县| 和林格尔县| 全南县| 屏东市| 彭泽县| 阳山县| 五莲县| 兴安盟| 云阳县| 洞头县| 米易县| 玉龙| 潢川县| 广宗县| 石门县| 星座| 绍兴县| 内江市| 宣武区| 诏安县| 新津县| 宣威市| 双江| 灌云县| 老河口市| 韩城市| 深水埗区| 杭州市| 固始县| 沂源县| 湖北省| 彰化县| 山阳县| 墨江| 曲水县|