MSP430F5529库函数定时器B
admin
2024-01-20 21:19:34
0

需提前学习:MSP430F5529库函数学习——串口;MSP430F5529库函数定时器A——捕获实验;MSP430F5529库函数定时器A——硬件PWM;MSP430F5529库函数定时器A——定时中断

目录

定时器B与定时器A的不同

定时器B中断

代码

定时器基地址

中断向量

结构体设置

定时器B硬件PWM

代码

结构体参数

定时器基地址

捕获实验

代码

结构体参数

中断向量

 Switch部分


定时器B比定时器A强大,但是对于绝大多数人都只要使用定时器中断,硬件PWM,输入捕获。对于这三个部分,和定时器A使用起来是一样的。所以我就直接给例程了

定时器B与定时器A的不同

① Timer_B计数长度为8位、10位、12位和16位可编程,而Timer_A的计数长度固定为16位。
② Timer_B没有实现Timer_A中的SCCI寄存器位的功能。
③ Timer_B在比较模式下的捕获/比较寄存器功能与Timer_A的不同,增加了比较锁存器。
④ 有些型号芯片中的Timer_B输出实现了高阻抗输出。
⑤ 比较模式的原理有所不同。在Timer_A中,CCRx寄存器中保存与TAR相比较的数据,而在Timer_B中,CCRx寄存器中保存的是要比较的数据,但并不直接与定时计数器TBR相比较,而是将CCRx送到与之相对应的锁存器之后,由锁存器与定时计数器TBR相比较。从捕获/比较寄存器向比较锁存器传输数据的时机也是可以编程的,可以是在写入捕获/比较寄存器后立即传输,也可以由一个定时事件来触发。
⑥ Timer_B支持多种、同步的定时功能,多重的捕获/比较功能和多重的波形输出功能。而且通过对比较数据的两级缓冲,可以实现多个PWM信号周期的同步更新。

说实话,上面这些我看的也云里雾里,所以就不多啰嗦了。反正我们的原则就是能用就行。代码我全部测试过了,没毛病。

定时器B中断

代码

一般我们使用定时器中断,都是使用的增计数模式。 所以我这里以增计模式为例,使用的是CCR0中断,创立一个周期为1S,占空比为50%的PWM。不明白的可以看MSP430F5529库函数定时器A——定时中断

#include "driverlib.h"void Timer_B_Init(void)
{Timer_B_initUpModeParam htim = {0};htim.clockSource = TIMER_B_CLOCKSOURCE_SMCLK;   //时钟源选为SMCLK = 1048576 HZhtim.clockSourceDivider = TIMER_B_CLOCKSOURCE_DIVIDER_32;    //32分频    32768htim.timerPeriod = 16384 - 1;                                   //计数值设为16375(32768/2=16375),定时0.5shtim.timerInterruptEnable_TBIE = TIMER_B_TBIE_INTERRUPT_DISABLE; //失能TALE中断htim.captureCompareInterruptEnable_CCR0_CCIE = TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE;  //失能CCR0中断htim.timerClear = TIMER_A_DO_CLEAR; //把定时器的定时计数器,分频计数器的计数值清零htim.startTimer = true; //初始化后立即启动定时器Timer_B_initUpMode(TIMER_B0_BASE, &htim);                //定时器B的定时器0连续计数模式
}void main (void)
{//Stop WDTWDT_A_hold(WDT_A_BASE);//P4.1为输出GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN1);Timer_B_Init();//interrupts enabled__bis_SR_register(GIE);while(1){}
}#pragma vector=TIMER0_B0_VECTOR
__interrupt
void TIMER0_A0_ISR (void)
{GPIO_toggleOutputOnPin(GPIO_PORT_P4, GPIO_PIN1);
}

定时器基地址

TIMER_B0_BASE   //好像只有这一个

中断向量

这里需要注意,定时器A的定时器0的CCR0中断是TIMER0_A0_VECTOR,而定时器B的定时器0的CCR0中断向量是TIMER0_B0_VECTOR。

TIMER0_B0_VECTOR    //定时器B好像只有定时器0

结构体设置

定时器B的结构体与定时器A的结构体也不同,定时器B的增计模式结构体如下

typedef struct Timer_B_initUpModeParam {clockSource:选择时钟源,一般都是选择ACLK或者SMCLK作为时钟源TIMER_B_CLOCKSOURCE_EXTERNAL_TXCLK [Default]TIMER_B_CLOCKSOURCE_ACLKTIMER_B_CLOCKSOURCE_SMCLKTIMER_B_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLKclockSourceDivider:设置分频次数TIMER_B_CLOCKSOURCE_DIVIDER_1 [Default]TIMER_B_CLOCKSOURCE_DIVIDER_2TIMER_B_CLOCKSOURCE_DIVIDER_3TIMER_B_CLOCKSOURCE_DIVIDER_4TIMER_B_CLOCKSOURCE_DIVIDER_5TIMER_B_CLOCKSOURCE_DIVIDER_6TIMER_B_CLOCKSOURCE_DIVIDER_7TIMER_B_CLOCKSOURCE_DIVIDER_8TIMER_B_CLOCKSOURCE_DIVIDER_10TIMER_B_CLOCKSOURCE_DIVIDER_12TIMER_B_CLOCKSOURCE_DIVIDER_14TIMER_B_CLOCKSOURCE_DIVIDER_16TIMER_B_CLOCKSOURCE_DIVIDER_20TIMER_B_CLOCKSOURCE_DIVIDER_24TIMER_B_CLOCKSOURCE_DIVIDER_28TIMER_B_CLOCKSOURCE_DIVIDER_32TIMER_B_CLOCKSOURCE_DIVIDER_40TIMER_B_CLOCKSOURCE_DIVIDER_48TIMER_B_CLOCKSOURCE_DIVIDER_56TIMER_B_CLOCKSOURCE_DIVIDER_64timerPeriod:设置CCR0中断周期,数值必须是在0-65535,因为是16个bittimerInterruptEnable_TBIE:设置定时器B的TBIE中断,TBIE中断和定时器TAIE中断一致,换了一个名字而已TIMER_B_TBIE_INTERRUPT_ENABLE               //开启TBIE中断TIMER_B_TBIE_INTERRUPT_DISABLE [Default]    //关闭TBIE中断captureCompareInterruptEnable_CCR0_CCIE:设置定时器B的CCR0中断,使用与定时器A的CCR0中断一致TIMER_B_CCIE_CCR0_INTERRUPT_ENABLE             //开启CCR0中断TIMER_B_CCIE_CCR0_INTERRUPT_DISABLE [Default]  //关闭CCR0中断timerClear:把定时器的定时计数器,分频计数器的计数值清零TIMER_B_DO_CLEAR                //清零TIMER_B_SKIP_CLEAR [Default]    //不清零startTimer:初始化后是否立即启动定时器ture   //初始化后立即启动定时器false  //初始化后不立即启动定时器
} Timer_B_initUpModeParam;

定时器B硬件PWM

代码

不明白的可以看MSP430F5529库函数定时器A——硬件PWM 

#include "driverlib.h"#define TIMER_PERIOD 8192
void Timer_B0_PWM_Init(void)
{Timer_B_outputPWMParam htim = {0};//P7.4复用输出GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P7, GPIO_PIN4);//时钟源选为SMCLK =  1048576 HZhtim.clockSource = TIMER_B_CLOCKSOURCE_SMCLK;//分频系数设为32  32768HZhtim.clockSourceDivider = TIMER_B_CLOCKSOURCE_DIVIDER_32;//装载值设为8192 - 1  ,周期为0.25shtim.timerPeriod = TIMER_PERIOD - 1;//P7.4 对应 TB0.2 故设为TIMER_B_CAPTURECOMPARE_REGISTER_2   定时器为0htim.compareRegister = TIMER_B_CAPTURECOMPARE_REGISTER_2;//选择复位置位模式htim.compareOutputMode = TIMER_B_OUTPUTMODE_RESET_SET;//设置占空比,为5%htim.dutyCycle = TIMER_PERIOD / 20 ;//P7.4 对应 TB0.2 为TIMER_B0_BASETimer_B_outputPWM(TIMER_B0_BASE, &htim);
}int main(void)
{WDT_A_hold(WDT_A_BASE);Timer_B0_PWM_Init();//interrupts enabled__bis_SR_register(GIE);//Timer_A_setCompareValue (TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,Timer_A_getCaptureCompareCount(TIMER_A0_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_1) - TIMER_PERIOD / 10);while(1){}
}

结构体参数

typedef struct Timer_B_outputPWMParam {
clockSource:选择时钟源,一般都是选择ACLK或者SMCLK作为时钟源TIMER_B_CLOCKSOURCE_EXTERNAL_TXCLK [Default]TIMER_B_CLOCKSOURCE_ACLKTIMER_B_CLOCKSOURCE_SMCLKTIMER_B_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLKclockSourceDivider:设置分频次数TIMER_B_CLOCKSOURCE_DIVIDER_1 [Default]TIMER_B_CLOCKSOURCE_DIVIDER_2TIMER_B_CLOCKSOURCE_DIVIDER_3TIMER_B_CLOCKSOURCE_DIVIDER_4TIMER_B_CLOCKSOURCE_DIVIDER_5TIMER_B_CLOCKSOURCE_DIVIDER_6TIMER_B_CLOCKSOURCE_DIVIDER_7TIMER_B_CLOCKSOURCE_DIVIDER_8TIMER_B_CLOCKSOURCE_DIVIDER_10TIMER_B_CLOCKSOURCE_DIVIDER_12TIMER_B_CLOCKSOURCE_DIVIDER_14TIMER_B_CLOCKSOURCE_DIVIDER_16TIMER_B_CLOCKSOURCE_DIVIDER_20TIMER_B_CLOCKSOURCE_DIVIDER_24TIMER_B_CLOCKSOURCE_DIVIDER_28TIMER_B_CLOCKSOURCE_DIVIDER_32TIMER_B_CLOCKSOURCE_DIVIDER_40TIMER_B_CLOCKSOURCE_DIVIDER_48TIMER_B_CLOCKSOURCE_DIVIDER_56TIMER_B_CLOCKSOURCE_DIVIDER_64timerPeriod:设置CCR0中断周期,数值必须是在0-65535,因为是16个bitcompareRegister:选择比较引脚,根据引脚手册查看复位的引脚是TB0.x,如果x为1,选择TIMER_B_CAPTURECOMPARE_REGISTER_1,如果x为2,选择TIMER_B_CAPTURECOMPARE_REGISTER_1TIMER_B_CAPTURECOMPARE_REGISTER_0TIMER_B_CAPTURECOMPARE_REGISTER_1TIMER_B_CAPTURECOMPARE_REGISTER_2TIMER_B_CAPTURECOMPARE_REGISTER_3TIMER_B_CAPTURECOMPARE_REGISTER_4TIMER_B_CAPTURECOMPARE_REGISTER_5TIMER_B_CAPTURECOMPARE_REGISTER_6compareOutputMode:选择比较模式TIMER_B_OUTPUTMODE_OUTBITVALUE [Default]TIMER_B_OUTPUTMODE_SETTIMER_B_OUTPUTMODE_TOGGLE_RESETTIMER_B_OUTPUTMODE_SET_RESETTIMER_B_OUTPUTMODE_TOGGLETIMER_B_OUTPUTMODE_RESETTIMER_B_OUTPUTMODE_TOGGLE_SETTIMER_B_OUTPUTMODE_RESET_SETdutyCycle:设置占空比,数值必须是在0-65535,因为是16个bit
} Timer_B_outputPWMParam;

定时器基地址

TIMER_B0_BASE   //好像只有这一个

捕获实验

代码

详情请看:MSP430F5529库函数定时器A——捕获实验;

需要注意我们这里要打印浮点数据,所以需要配置一下。详情看MSP430F5529库函数学习——串口浮点数据打印部分

#include "driverlib.h"
#include 
#include 
#include #define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))void UART_printf(uint16_t baseAddress, const char *format,...)
{uint32_t length;va_list args;uint32_t i;char TxBuffer[128] = {0};va_start(args, format);length = vsnprintf((char*)TxBuffer, sizeof(TxBuffer), (char*)format, args);va_end(args);for(i = 0; i < length; i++)USCI_A_UART_transmitData(baseAddress, TxBuffer[i]);
}//9600
void Usart1_Init()
{//P4.4=UCA1TXD      P4.5=UCA1RXDGPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P4, GPIO_PIN5+GPIO_PIN4);USCI_A_UART_initParam param1 = {0};param1.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;param1.clockPrescalar = 6;param1.firstModReg = 13;param1.secondModReg = 0;param1.parity = USCI_A_UART_NO_PARITY;   //无校验位param1.msborLsbFirst = USCI_A_UART_LSB_FIRST;  //低位先行param1.numberofStopBits = USCI_A_UART_ONE_STOP_BIT;  //1停止位param1.uartMode = USCI_A_UART_MODE;param1.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;if (STATUS_FAIL == USCI_A_UART_init(USCI_A1_BASE, ¶m1)){return;}//Enable UART module for operationUSCI_A_UART_enable(USCI_A1_BASE);//Enable Receive InterruptUSCI_A_UART_clearInterrupt(USCI_A1_BASE,USCI_A_UART_RECEIVE_INTERRUPT);USCI_A_UART_enableInterrupt(USCI_A1_BASE,USCI_A_UART_RECEIVE_INTERRUPT);
}uint32_t Sign_Counts = 0;
void Timer_B0_Capture_Init()
{Timer_B_initContinuousModeParam htim = {0};htim.clockSource = TIMER_B_CLOCKSOURCE_SMCLK;  //1048576Hzhtim.clockSourceDivider = TIMER_B_CLOCKSOURCE_DIVIDER_1;  //一分频,1048576Hzhtim.timerInterruptEnable_TBIE = TIMER_B_TBIE_INTERRUPT_ENABLE;  //使能TBIE中断htim.timerClear = TIMER_B_DO_CLEAR;        //把定时器的定时计数器,分频计数器的计数值清零htim.startTimer = true;                 //初始化后立即启动定时器Timer_B_initContinuousMode(TIMER_B0_BASE, &htim);  //设置为连续计数模式GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P7, GPIO_PIN4);   //复用P7.4Timer_B_initCaptureModeParam capture_htim = {0};capture_htim.captureRegister = TIMER_B_CAPTURECOMPARE_REGISTER_2;   //因为P7.4使用的是TB0.2,所以这里是REGISTER_2capture_htim.captureMode = TIMER_B_CAPTUREMODE_RISING_AND_FALLING_EDGE;  //选择双边沿触发capture_htim.captureInputSelect = TIMER_B_CAPTURE_INPUTSELECT_CCIxA;     //因为是CCI2A所以选择INPUTSELECT_CCIxAcapture_htim.synchronizeCaptureSource = TIMER_B_CAPTURE_SYNCHRONOUS;     //捕获源与计时器时钟同步capture_htim.captureInterruptEnable = TIMER_B_CAPTURECOMPARE_INTERRUPT_ENABLE;  //打开定时器中断capture_htim.captureOutputMode = TIMER_B_OUTPUTMODE_OUTBITVALUE;         //定时器输出电平由OUT位控制Timer_B_initCaptureMode(TIMER_B0_BASE,&capture_htim);
}int main(void)
{//关闭看门狗WDT_A_hold(WDT_A_BASE);//打开输入捕获Timer_B0_Capture_Init();Usart1_Init();//interrupts enabled__bis_SR_register(GIE);while(1){//UART_printf(USCI_A1_BASE,"hi");delay_ms(1000);UART_printf(USCI_A1_BASE,"高电平持续时间:%f ms",1000.*Sign_Counts/1048576); //注意,这里1000后面必须+'.'表示是浮点运算!!!否则结果为0!!!}
}#pragma vector=TIMER0_B1_VECTOR
__interrupt
void TIMER0_B0_ISR (void)
{static uint16_t  Overflow_Times = 0;static uint16_t Sign_Begin = 0, Sign_End = 0;switch(TB0IV){case TB0IV_TBCCR2:if(GPIO_getInputPinValue(GPIO_PORT_P7,GPIO_PIN4))  //获取P7.4引脚电平,如果为高电平,将当前寄存器值存入Sign_Begin{Sign_Begin = Timer_B_getCaptureCompareCount(TIMER_B0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2);}else             //获取P2.5引脚电平,如果为低电平,将当前寄存器值存入Sign_End{Sign_End = Timer_B_getCaptureCompareCount(TIMER_B0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2);if(!Overflow_Times)    //计算高电平时间,如果高电平和低电平都在一个计数周期之内,进入Sign_Counts = Sign_End - Sign_Begin;   //如果高低电平在同一个计数周期内,那么直接相减else                   //计算高电平时间,如果高电平和低电平不在一个计数周期之内,进入{//注意,这里强制类型转换,是因为uint16_t 的最大值为65535,此处的Sign_Counts值会明显大于65535Sign_Counts = (uint32_t)(65536 * Overflow_Times + Sign_End - Sign_Begin);  //如果高低电平不在同一个计数周期,需要先加上一个周期的计数值Overflow_Times = 0;}}Timer_B_clearCaptureCompareInterrupt(TIMER_B0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2);break;case TB0IV_TBIFG:if(GPIO_getInputPinValue(GPIO_PORT_P7,GPIO_PIN4))  //获取P7.4引脚电平。如果定时器都溢出中断了,现在还是高电平,那么表明高电平和低电平不在同一个定时周期内{++Overflow_Times;}else  //获取P7.4引脚电平。如果定时器溢出中断了,现在不是高电平,那么表明高电平和低电平在同一个定时周期内Overflow_Times = 0;Timer_B_clearTimerInterrupt(TIMER_B0_BASE);break;default:break;}
}

结构体参数

typedef struct Timer_B_outputPWMParam {
clockSource:选择时钟源,一般都是选择ACLK或者SMCLK作为时钟源TIMER_B_CLOCKSOURCE_EXTERNAL_TXCLK [Default]TIMER_B_CLOCKSOURCE_ACLKTIMER_B_CLOCKSOURCE_SMCLKTIMER_B_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLKclockSourceDivider:设置分频次数TIMER_B_CLOCKSOURCE_DIVIDER_1 [Default]TIMER_B_CLOCKSOURCE_DIVIDER_2TIMER_B_CLOCKSOURCE_DIVIDER_3TIMER_B_CLOCKSOURCE_DIVIDER_4TIMER_B_CLOCKSOURCE_DIVIDER_5TIMER_B_CLOCKSOURCE_DIVIDER_6TIMER_B_CLOCKSOURCE_DIVIDER_7TIMER_B_CLOCKSOURCE_DIVIDER_8TIMER_B_CLOCKSOURCE_DIVIDER_10TIMER_B_CLOCKSOURCE_DIVIDER_12TIMER_B_CLOCKSOURCE_DIVIDER_14TIMER_B_CLOCKSOURCE_DIVIDER_16TIMER_B_CLOCKSOURCE_DIVIDER_20TIMER_B_CLOCKSOURCE_DIVIDER_24TIMER_B_CLOCKSOURCE_DIVIDER_28TIMER_B_CLOCKSOURCE_DIVIDER_32TIMER_B_CLOCKSOURCE_DIVIDER_40TIMER_B_CLOCKSOURCE_DIVIDER_48TIMER_B_CLOCKSOURCE_DIVIDER_56TIMER_B_CLOCKSOURCE_DIVIDER_64timerPeriod:设置CCR0中断周期,数值必须是在0-65535,因为是16个bitcompareRegister:选择比较引脚,根据引脚手册查看复位的引脚是TB0.x,如果x为1,选择TIMER_B_CAPTURECOMPARE_REGISTER_1,如果x为2,选择TIMER_B_CAPTURECOMPARE_REGISTER_1TIMER_B_CAPTURECOMPARE_REGISTER_0TIMER_B_CAPTURECOMPARE_REGISTER_1TIMER_B_CAPTURECOMPARE_REGISTER_2TIMER_B_CAPTURECOMPARE_REGISTER_3TIMER_B_CAPTURECOMPARE_REGISTER_4TIMER_B_CAPTURECOMPARE_REGISTER_5TIMER_B_CAPTURECOMPARE_REGISTER_6compareOutputMode:选择比较模式TIMER_B_OUTPUTMODE_OUTBITVALUE [Default]TIMER_B_OUTPUTMODE_SETTIMER_B_OUTPUTMODE_TOGGLE_RESETTIMER_B_OUTPUTMODE_SET_RESETTIMER_B_OUTPUTMODE_TOGGLETIMER_B_OUTPUTMODE_RESETTIMER_B_OUTPUTMODE_TOGGLE_SETTIMER_B_OUTPUTMODE_RESET_SETdutyCycle:设置占空比,数值必须是在0-65535,因为是16个bit
} Timer_B_outputPWMParam;typedef struct Timer_B_initCaptureModeParam {
captureRegister:选择波形捕获引脚,根据引脚手册查看复位的引脚是TB0.x,如果x为1,选择TIMER_B_CAPTURECOMPARE_REGISTER_1,如果x为2,选择TIMER_B_CAPTURECOMPARE_REGISTER_1TIMER_B_CAPTURECOMPARE_REGISTER_0TIMER_B_CAPTURECOMPARE_REGISTER_1TIMER_B_CAPTURECOMPARE_REGISTER_2TIMER_B_CAPTURECOMPARE_REGISTER_3TIMER_B_CAPTURECOMPARE_REGISTER_4TIMER_B_CAPTURECOMPARE_REGISTER_5TIMER_B_CAPTURECOMPARE_REGISTER_6captureMode:选择捕获模式TIMER_B_CAPTUREMODE_NO_CAPTURE [Default]      //不捕获TIMER_B_CAPTUREMODE_RISING_EDGE               //上升沿触发TIMER_B_CAPTUREMODE_FALLING_EDGE              //下降沿触发TIMER_B_CAPTUREMODE_RISING_AND_FALLING_EDGE   //双边沿触发captureInputSelect:选择捕获输入口,一般都是TIMER_B_CAPTURE_INPUTSELECT_CCIxA。具体查看引脚手册,如果是 CCIxA input,那么选择TIMER_B_CAPTURE_INPUTSELECT_CCIxA。如果是CCIxB,选择TIMER_B_CAPTURE_INPUTSELECT_CCIxBTIMER_B_CAPTURE_INPUTSELECT_CCIxA [Default]TIMER_B_CAPTURE_INPUTSELECT_CCIxBTIMER_B_CAPTURE_INPUTSELECT_GNDTIMER_B_CAPTURE_INPUTSELECT_VccsynchronizeCaptureSource:决定捕获源是否应该与Timer_B时钟同步TIMER_B_CAPTURE_ASYNCHRONOUS [Default]    //不同步TIMER_B_CAPTURE_SYNCHRONOUS               //同步captureInterruptEnable:是启用或禁用Timer_B捕获比较中断TIMER_B_CAPTURECOMPARE_INTERRUPT_DISABLE [Default]   //禁用Timer_B捕获比较中断TIMER_B_CAPTURECOMPARE_INTERRUPT_ENABLE              //启用Timer_B捕获比较中断captureOutputMode:指定输出模式。因为是捕获,所以引脚不需要输出,故选择TIMER_B_OUTPUTMODE_OUTBITVALUETIMER_B_OUTPUTMODE_OUTBITVALUE [Default]TIMER_B_OUTPUTMODE_SETTIMER_B_OUTPUTMODE_TOGGLE_RESETTIMER_B_OUTPUTMODE_SET_RESETTIMER_B_OUTPUTMODE_TOGGLETIMER_B_OUTPUTMODE_RESETTIMER_B_OUTPUTMODE_TOGGLE_SETTIMER_B_OUTPUTMODE_RESET_SET} Timer_B_initCaptureModeParam;

中断向量

这里因为我们是使用的TBIE中断,所以是TIMER0_B1_VECTOR中断向量

TIMER0_B1_VECTOR   //定时器B的TBIE中断
TIMER0_B0_VECTOR   //定时器B的CCR0中断

 Switch部分

因为TBIE中断中包含了很多,如下

    switch(TB0IV){case TB0IV_TBCCR1:  break;   //CCR1中断,由引脚触发case TB0IV_TBCCR2:  break;   //CCR2中断,由引脚触发case TB0IV_TBCCR3:  break;   //CCR3中断,由引脚触发case TB0IV_TBCCR4:  break;   //CCR4中断,由引脚触发case TB0IV_TBCCR5:  break;   //CCR5中断,由引脚触发case TB0IV_TBCCR6:  break;   //CCR6中断,由引脚触发case TB0IV_TBIFG:   break;   //TBIFG中断,由定时器计数到65535——0这一过程触发default:            break;}

相关内容

热门资讯

泡香蕉用什么品牌的酒比较好?酒... 泡酒一直是许多女性朋友们喜爱的家庭饮品,尤其是在炎热的夏天,一杯清爽的水果酒既能解渴,又能享受浓郁的...
京都街头的治愈甜味 —— 宇治... 在京都,时间似乎总比别处走得慢些。这座承载了千年历史的古都,既有金阁寺的辉煌、清水寺的古朴,也有巷弄...
早餐吃什么最简单又营养?5种食... 早餐是一天中最重要的一餐,它为身体提供所需的能量和营养,为新的一天打下坚实的基础。然而,对于许多人来...
市面上的雪糕越做越小,是被控糖... 作者:敏敏 张艺 小巧精致、一口一个,这就是近期风靡社交网络的迷你雪糕。 迷你雪糕就是普通雪糕的缩小...
秋分艾灸养生:一穴调阴阳,顺应... 秋分,作为二十四节气中阴阳平衡的“分水岭”,昼夜均等、寒暑相平,自然界进入“阳消阴长”的过渡阶段。此...
张胜源在岗什卡景区调研时强调 ... 9月11日,州委副书记、州长张胜源前往门源县祁连山岗什卡雪峰景区开展实地调研时强调,要始终坚持生态保...
今年杭州的第一朵桂花开了?杭州... 潮新闻客户端 记者 戴佳轶 金檬 连续几天的雷阵雨洗去了杭城的燥热,西湖边的风里终于掺进了一丝凉意。...
先睹为快!上海旅游节花车今夜集... 9月11日晚,来自海内外的25辆花车在浦东新区中海工业立新船厂集体亮相。25辆花车主题鲜明,造型精致...
五台山秋日密语|暖翠琉璃菩萨顶... 秋日的五台山,是一轴以金红为主色调的禅意长卷。当群山层林尽染,菩萨顶——这座始建于北魏、定型于清代,...
老闪家扯面成网红美食,探店视频... 📌 摘要|洛宁扯面火了。美食博主带火网红美食。筋道面太诱人。怎么吃更健康?这篇教你控量配菜。教你增饱...
年份酒赛道升温:破局需以“真”... 近日,洋河股份旗下手工班产品获得中国酒业协会与方圆标志认证集团联合认证,成为国内首个通过权威机构认证...
原创 女... 老公和女儿还在客厅里打闹,根本没注意到我已经离开了饭桌。 许是老公这次又买了什么稀罕玩意儿,惹得女儿...
昆山“荟园春”素食自助开启全民... 昆山“荟园春”素食自助开启全民健康饮食新体验本网讯 记者华明报道 在昆山市周市镇青阳路万达广场,一家...
Airbnb爱彼迎发布国庆黄金... 来源:滚动播报 (来源:北京商报) 随着免签政策进一步扩容以及国际航线持续加密,今年国庆黄金周 8 ...
第17届GTI广州游乐设备产业... 9月10日,第17届GTI广州游乐设备产业展在广交会展馆A区启幕,这场持续至9月12日的行业盛会,汇...
花开成海景色美 夏秋之交,多地花开成海,景美如画。 ↑2025年9月10日,游客在浙江省乐清市狮子峰马鞭草花海赏花...
上海乐高乐园暑期打响“翻身仗”... 【文/观察者网 邓军 编辑/赵乾坤】 作为国内首家建成开业的乐高乐园,上海乐高乐园度假区承担的不仅...
这道菜让肉食控集体投降!荔浦芋... 当荔浦芋头遇上五花肉,这场美食界的"天作之合"简直让人欲罢不能!那层层叠叠的造型,金黄酥脆的外表,软...
秋天的第一碗藕汤来了!喜欢吃粉... 极目新闻记者 曹磊 排骨藕汤,吃光喝光。立秋已过去一个多月,白露节气也刚刚到来不久,武汉人秋天的第一...
杨和苏和Rapeter一起吃播... 杨和苏又白练的一天!和Rapeter一起“脏增肌”! 两人吃着吃着干起了Rapeter的老本行!直播...