社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 8598|回复: 0

[资料分享] MSP430单片机学习小记--基础定时器

[复制链接]

3485

TA的帖子

19

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-3-11 17:53:19 | 显示全部楼层 |阅读模式
基于MSP430单片机,TI公司采用的是模块化的内部结构,每个模块,在各个不同型号的单片机内都是相同的,相同的寻址,相同的操作方式,模块有限,于是一个一个开始进行整理。

本文引用地址:http://www.eepw.com.cn/article/201608/295905.htm

第一个模块:基础定时器

参考资料:数据手册 ,使用手册 ,示例程序,以及那份特别特别有用的头文件。

Exampli Code:

进入中断示例程序

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

1;时钟源为ACLK,为单片机提供1/4S定时中断,LCD提供512HZ刷新频率

BTCTL=BT_ADLY_250+BT_fLCD_512; //250MS延时加512HZ刷新频率。

备注:MSP430上电复位后,BT的寄存器值并不会恢复成一个默认值

而是保持不变,因此,每次上电的时,均要进行配置,而且最好直接采用赋值

语句。一条语句足矣

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

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

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

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

Void main(void)

{

WDTCTL=WDTPW+WDTHOLD; //close the wdtdog

FLL_CTL0&= ~XTS_FLL; //可省略,默认选择低频晶振

FLL_CTL0|=XCAP18PF; //配置内部晶振

P1DIR|=BIT0; //OUTPUT

BTCTL=BT_ADLY_250+BT_fLCD_512; //250MS延时加512HZ刷新频率。

IE2|=BTIE; //打开中断

__EINT();

While(1)

{;}

}

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

#pragma vector=BASICTIMER_VECTOR

__interrupt void basic_timer_ISR(void)

{

P1OUT ^= 0x01; // Toggle P1.0

}

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

参考的头文件:

* BASIC TIMER 基础定时器的功能概述

BASIC TIMER 能在无需CPU干扰的情况下产生2的N次方个定时周期

如果我们采用32768KHZ =1/2^15次方,所以,最长的定时时间可以达到

2S钟

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

#define __MSP430_HAS_BT__ /* Definition to show that Module is available */

#define BTCTL_ (0x0040u) /* Basic Timer Control * /SFR

DEFC( BTCTL , BTCTL_)

/* 位定义The bit names have been prefixed with "BT" */

#define BTIP0 (0x01)

#define BTIP1 (0x02)

#define BTIP2 (0x04)

#define BTFRFQ0 (0x08)

#define BTFRFQ1 (0x10)

#define BTDIV (0x20) /* fCLK2 = ACLK:256 */

#define BTHOLD (0x40) /* BT1 is held if this bit is set *,如果这个位置1,则暂停/

利用 BTCTL|=BTHOLD; //可以使其暂停。

#define BTSSEL (0x80) /* fBT = fMCLK (main clock) 位定义*/

备注:BTSSEL ,与BTDIV 确定是否对信号源进行分频。分频后它的最长延时如果使用32768KHZ的话,可以达到2S

注:为LCD提供的刷新频率没有使用分频。

快捷定义:

#define BTCNT1_ (0x0046u) /* Basic Timer Count 1 */

DEFC( BTCNT1 , BTCNT1_)

#define BTCNT2_ (0x0047u) /* Basic Timer Count 2 */

DEFC( BTCNT2 , BTCNT2_)

/* Frequency of the BTCNT2 coded with Bit 5 and 7 in BTCTL */

#define BT_fCLK2_ACLK (0x00)

#define BT_fCLK2_ACLK_DIV256 (BTDIV)

#define BT_fCLK2_MCLK (BTSSEL)

/* Interrupt interval time fINT coded with Bits 0-2 in BTCTL */

#define BT_fCLK2_DIV2 (0x00) /* fINT = fCLK2:2 (default) */

#define BT_fCLK2_DIV4 (BTIP0) /* fINT = fCLK2:4 */

#define BT_fCLK2_DIV8 (BTIP1) /* fINT = fCLK2:8 */

#define BT_fCLK2_DIV16 (BTIP1+BTIP0) /* fINT = fCLK2:16 */

#define BT_fCLK2_DIV32 (BTIP2) /* fINT = fCLK2:32 */

#define BT_fCLK2_DIV64 (BTIP2+BTIP0) /* fINT = fCLK2:64 */

#define BT_fCLK2_DIV128 (BTIP2+BTIP1) /* fINT = fCLK2:128 */

#define BT_fCLK2_DIV256 (BTIP2+BTIP1+BTIP0) /* fINT = fCLK2:256 */

/* Frequency of LCD coded with Bits 3-4 */

#define BT_fLCD_DIV32 (0x00) /* fLCD = fACLK:32 (default) */

#define BT_fLCD_DIV64 (BTFRFQ0) /* fLCD = fACLK:64 */

#define BT_fLCD_DIV128 (BTFRFQ1) /* fLCD = fACLK:128 */

#define BT_fLCD_DIV256 (BTFRFQ1+BTFRFQ0) /* fLCD = fACLK:256 */

/* LCD frequency values with fBT=fACLK */

#define BT_fLCD_1K (0x00) /* fACLK:32 (default) */

#define BT_fLCD_512 (BTFRFQ0) /* fACLK:64 */

#define BT_fLCD_256 (BTFRFQ1) /* fACLK:128 */

#define BT_fLCD_128 (BTFRFQ1+BTFRFQ0) /* fACLK:256 */

//ACLK提供时钟源,来提供LCD的刷新频率。

/* LCD frequency values with fBT=fMCLK */

#define BT_fLCD_31K (BTSSEL) /* fMCLK:32 */

#define BT_fLCD_15_5K (BTSSEL+BTFRFQ0) /* fMCLK:64 */

#define BT_fLCD_7_8K (BTSSEL+BTFRFQ1+BTFRFQ0) /* fMCLK:256 */

////MCLK提供时钟源,来提供LCD的刷新频率。

/* with assumed vlues of fACLK=32KHz, fMCLK=1MHz */

/* fBT=fACLK is thought for longer interval times */

#define BT_ADLY_0_064 (0x00) /* 0.064ms interval (default) */

#define BT_ADLY_0_125 (BTIP0) /* 0.125ms " */

#define BT_ADLY_0_25 (BTIP1) /* 0.25ms " */

#define BT_ADLY_0_5 (BTIP1+BTIP0) /* 0.5ms " */

#define BT_ADLY_1 (BTIP2) /* 1ms " */

#define BT_ADLY_2 (BTIP2+BTIP0) /* 2ms " */

#define BT_ADLY_4 (BTIP2+BTIP1) /* 4ms " */

#define BT_ADLY_8 (BTIP2+BTIP1+BTIP0) /* 8ms " */

#define BT_ADLY_16 (BTDIV) /* 16ms " */

#define BT_ADLY_32 (BTDIV+BTIP0) /* 32ms " */

#define BT_ADLY_64 (BTDIV+BTIP1) /* 64ms " */

#define BT_ADLY_125 (BTDIV+BTIP1+BTIP0) /* 125ms " */

#define BT_ADLY_250 (BTDIV+BTIP2) /* 250ms " */

#define BT_ADLY_500 (BTDIV+BTIP2+BTIP0) /* 500ms " */

#define BT_ADLY_1000 (BTDIV+BTIP2+BTIP1) /* 1000ms " */

#define BT_ADLY_2000 (BTDIV+BTIP2+BTIP1+BTIP0) /* 2000ms " */

//注:ACLK提供定时频率,利用宏定义进行设置延时。

/* fCLK2=fMCLK (1MHz) is thought for short interval times */

/* the timing for short intervals is more precise than ACLK */

/* NOTE */

/* Be sure that the SCFQCTL-Register is set to 01Fh so that fMCLK=1MHz */

/* Too low interval time results in interrupts too frequent for the processor to handle! */

#define BT_MDLY_0_002 (BTSSEL) /* 0.002ms interval *** interval times */

#define BT_MDLY_0_004 (BTSSEL+BTIP0) /* 0.004ms " *** too short for */

#define BT_MDLY_0_008 (BTSSEL+BTIP1) /* 0.008ms " *** interrupt */

#define BT_MDLY_0_016 (BTSSEL+BTIP1+BTIP0) /* 0.016ms " *** handling */

#define BT_MDLY_0_032 (BTSSEL+BTIP2) /* 0.032ms " */

#define BT_MDLY_0_064 (BTSSEL+BTIP2+BTIP0) /* 0.064ms " */

#define BT_MDLY_0_125 (BTSSEL+BTIP2+BTIP1) /* 0.125ms " */

#define BT_MDLY_0_25 (BTSSEL+BTIP2+BTIP1+BTIP0)/* 0.25ms " */

//选择fCLK2=fMCLK (1MHz)来提供时钟源而产生的时钟延时。适合比较短的延时。但是单片机就不能进入LPM3状态了。

/* Reset/Hold coded with Bits 6-7 in BT(1)CTL */

/* this is for BT */

//#define BTRESET_CNT1 (BTRESET) /* BTCNT1 is reset while BTRESET is set */

//#define BTRESET_CNT1_2 (BTRESET+BTDIV) /* BTCNT1 .AND. BTCNT2 are reset while ~ is set */

/* this is for BT1 */

#define BTHOLD_CNT1 (BTHOLD) /* BTCNT1 is held while BTHOLD is set */

#define BTHOLD_CNT1_2 (BTHOLD+BTDIV) /* BT1CNT1 .AND. BT1CNT2 are held while ~ is set */

/* INTERRUPT CONTROL BITS */

/* #define BTIE 0x80 */ 位于IE2中断控制位

/* #define BTIFG 0x80 */

此帖出自MSP430论坛


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-6-23 06:48 , Processed in 0.087430 second(s), 15 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表