Msp430f5529开发板测周期和AD

更新时间:2024-03-30 20:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Msp430f5529开发板测频率和ADC采样电压

必备资料: f5529的中文指导和数据手册(遗憾是汇编语言不是C) 中文指导:网上有大侠把英文版的用户指导翻译成中文了 数据手册:还没有出现中文版这种神器,不过多看几遍就OK

一.定时器A一些基本资料

至于寄存器里面含义自己应该可以看懂!

这句话我认为有一个极容易产生一个误区,就是TA有7个比较捕获寄存器, 当你查看msp430f5529.h的时候,我就发现只有 TAxCCTL0,TAxCCR0 TAxCCTL1,TAxCCR1 TAxCCTL2,TAxCCR2 它们都是共用一个TACTL。

压根就是没有3~6例如没有TAxCCTL3,TAxCCR3,我认为单片机上肯定是有7个比较捕获寄存器,就是msp430f5529没有对剩余的四个进行宏定义。个人想法。

TAxCCTL0,TAxCCR0

这个最高级,好像大部分的430单片机写的程序都是优先写它。 特点:增计数模式 连续计数模式 增减计数模式 !!!!!!!这几种模式都能用 例如增计数模式:

TA0CCTL0 = CCIE; // CCR0 interrupt enabled TA0CCR0 = 50000;

TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR __bis_SR_register(GIE); // Enter LPM0, enable interrupts

就凭它的权力最多,就应该单独想用一个中断函数与CCTL1,CCTL2区分开来!

// Timer0 A0 interrupt service routine #pragma vector=TIMER0_A0_VECTOR

__interrupt void TIMER0_A0_ISR(void) { }

其中的R0代表你用的TA定时器的第几个 TA0-----R0 TA1-----R1 TA2-----R2

CCTL0---A0 一个中断对应一个中断源

例如我写的是TA2CCTL0和TA2CCR0,则对应的中断就是

#pragma vector=TIMER2_A0_VECTOR

应该明白了吧!

TAxCCTL1,TAxCCR1 TAxCCTL2,TAxCCR2 特点:连续计数模式

经我调试

TA0CCTL1 = CCIE; // CCR0 interrupt enabled TA0CCR1 = 50000;

TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR

是进不了中断的,这是血的教训,(如果你采用的是比较模式,千万别想着,TMD理论上就是这样,为什么进不了中断) 应该把 MC_1改为MC_2就OK了.

官方这样说

这样可以从侧面提问,上文中为什么不是TAxCCRx,而只是TAxCCR0!应该明白了,

这里有一点千万要区分开来,这是晕死的教训!

TA0R,与TA0CCR1的区别,我也不知道是看了那本破书,或者就是那些5系列一下的430单片机程序可以,我只能感叹F5529真是神器!

在中断函数里把cap=TA0CCR1,或者是TA1CCR1,还说TA0R,TA0CCRx其实是一样的,就是计数的储存。可能在一些5系列一下的430单片机是可以,但是在f5529严格区分开来,养成好习惯,TA0R不等于TA0CCRx TA0CCR0是定数的,是不变的 TA0R是用来计数的。是变化的

比较模式就是那TA0R去不断比较TA0CCR0,以万变应不变,超过就产生中断! 所以你在中断读取你计数的值

这样写是菜鸟

cap=TA0CCR1是XXXXXXX 应该写成

cap=TA0R,必须养成这个好习惯!!!!!!!!!

它们的中断函数 是多源中断,说白了就是三个有用的

case 2: CCTL1 case 4: CCTL2

case 14: 连续计数溢出中断 可以对比一下下面这个图:

中断函数

#pragma vector=TIMER1_A1_VECTOR __interrupt void TIMER1_A1_ISR(void)

这里就是TA1CCLx x是取值为1,2的 例子:

// Timer1_A3 Interrupt Vector (TAIV) handler#pragma vector=TIMER1_A1_VECTOR

__interrupt void TIMER1_A1_ISR(void) {

switch(__even_in_range(TA1IV,14)) {

case 0: break; // No interrupt case 2: break; // CCR1 case 4: break; // CCR2 case 6: break; // reserved case 10: break; // reserved case 12: break; // reserved case 14: break; // overflow default: break; } }

这里对应的寄存器应该是TA1CCL1或者是TA1CCL2

!!!!!!!!!!!! !

本文来源:https://www.bwwdw.com/article/uger.html

Top