日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zigbee 协议栈的时钟和定时器分频

發布時間:2024/4/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zigbee 协议栈的时钟和定时器分频 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
系統時鐘和定時器節拍時鐘 設置寄存器


tickspd用于產生timer1 ,3,4的基本節拍,最大可以是32MHZ
此時定時器加1的所需事件最短,為1/32 us?
定時器除了tickspd的分頻,還可以在tickspd的基礎上分頻,比如timer3




clkspd用于產生cpu執行指令的基本節拍,最大可以使32MHZ,
此時執行asm("NOP")所用時間是 < 0.1 us(如下測試輸出方波周期是0.375*2)
while(1)
{
asm("NOP");
P1_0=!P1_0;
}


協議棧中默認tickspd為0,即ticker=32MHZ
但是如果使用了HalTimerInit函數,就不是了

void HalTimerInit (void) {T1CCTL0 = 0; /* Make sure interrupts are disabled */T1CCTL1 = 0; /* Make sure interrupts are disabled */T1CCTL2 = 0; /* Make sure interrupts are disabled */T3CCTL0 = 0; /* Make sure interrupts are disabled */T3CCTL1 = 0; /* Make sure interrupts are disabled */T4CCTL0 = 0; /* Make sure interrupts are disabled */T4CCTL1 = 0; /* Make sure interrupts are disabled *//* Setup prescale & clock for timer0 */halTimerRecord[HW_TIMER_1].prescale = HAL_TIMER1_16_PRESCALE;halTimerRecord[HW_TIMER_1].clock = HAL_TIMER_32MHZ;halTimerRecord[HW_TIMER_1].prescaleVal = HAL_TIMER1_16_PRESCALE_VAL;/* Setup prescale & clock for timer2 */halTimerRecord[HW_TIMER_3].prescale = HAL_TIMER3_8_PRESCALE;halTimerRecord[HW_TIMER_3].clock = HAL_TIMER_32MHZ;halTimerRecord[HW_TIMER_3].prescaleVal = HAL_TIMER3_8_PRESCALE_VAL;/* Setup prescale & clock for timer3 */halTimerRecord[HW_TIMER_4].prescale = HAL_TIMER4_8_PRESCALE;halTimerRecord[HW_TIMER_4].clock = HAL_TIMER_32MHZ;halTimerRecord[HW_TIMER_4].prescaleVal = HAL_TIMER4_8_PRESCALE_VAL;/* Setup Timer1 Channel structure */halTimerChannel[HW_TIMER_1].TxCCTL = TCHN_T1CCTL;halTimerChannel[HW_TIMER_1].TxCCL = TCHN_T1CCL;halTimerChannel[HW_TIMER_1].TxCCH = TCHN_T1CCH;halTimerChannel[HW_TIMER_1].TxOVF = TCNH_T1OVF;halTimerChannel[HW_TIMER_1].ovfbit = TCHN_T1OVFBIT;halTimerChannel[HW_TIMER_1].intbit = TCHN_T1INTBIT;/* Setup Timer3 Channel structure */halTimerChannel[HW_TIMER_3].TxCCTL = TCHN_T3CCTL;halTimerChannel[HW_TIMER_3].TxCCL = TCHN_T3CCL;halTimerChannel[HW_TIMER_3].TxCCH = TCHN_T3CCH;halTimerChannel[HW_TIMER_3].TxOVF = TCNH_T3OVF;halTimerChannel[HW_TIMER_3].ovfbit = TCHN_T3OVFBIT;halTimerChannel[HW_TIMER_3].intbit = TCHN_T3INTBIT;/* Setup Timer4 Channel structure */halTimerChannel[HW_TIMER_4].TxCCTL = TCHN_T4CCTL;halTimerChannel[HW_TIMER_4].TxCCL = TCHN_T4CCL;halTimerChannel[HW_TIMER_4].TxCCH = TCHN_T4CCH;halTimerChannel[HW_TIMER_4].TxOVF = TCNH_T4OVF;halTimerChannel[HW_TIMER_4].ovfbit = TCHN_T4OVFBIT;halTimerChannel[HW_TIMER_4].intbit = TCHN_T4INTBIT; }
比如
// 使用硬件定時器4HalTimerInit ( );HalTimerConfig (HAL_TIMER_2, // 8bit timer2HAL_TIMER_MODE_NORMAL, // Clear Timer on CompareHAL_TIMER_CHANNEL_A, // Channel 1 - defaultHAL_TIMER_CH_MODE_OVERFLOW, // 溢出模式TRUE, // Use interruptIR38KHZTimerCallBack); // Channel ModeHalTimerStart(HAL_TIMER_2,1);//halTimerSetCounthalTimerSetPrescale(HAL_TIMER_2,0xa0);//0x00-20-40-60-80-a0-c0-e0----> /1---/128 extern uint8 halTimerSetPrescale (uint8 hwtimerid, uint8 prescale); extern uint8 halTimerSetCount (uint8 hwtimerid, uint32 timePerTick); void IR38KHZTimerCallBack ( uint8 timerId, uint8 channel, uint8 channelMode); void IR38KHZTimerCallBack ( uint8 timerId, uint8 channel, uint8 channelMode) {if ((timerId == HAL_TIMER_2) && (channelMode == HAL_TIMER_CH_MODE_OUTPUT_COMPARE)){//osal_update_timers();} }


轉載于:https://www.cnblogs.com/-song/archive/2013/02/16/3331827.html

總結

以上是生活随笔為你收集整理的zigbee 协议栈的时钟和定时器分频的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。