1、Msp430f5529开发板测周期和ADMsp430f5529开发板测频率和ADC采样电压必备资料: f5529的中文指导和数据手册(遗憾是汇编语言不是C) 中文指导:网上有大侠把英文版的用户指导翻译成中文了 数据手册:还没有出现中文版这种神器,不过多看几遍就OK一定时器A一些基本资料 至于寄存器里面含义自己应该可以看懂!这句话我认为有一个极容易产生一个误区,就是TA有7个比较捕获寄存器,当你查看msp430f5529.h的时候,我就发现只有TAxCCTL0,TAxCCR0 TAxCCTL1,TAxCCR1 TAxCCTL2,TAxCCR2 它们都是共用一个TACTL。压根就是没有36例如没有
2、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); /
3、 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-R0TA1-R1TA2-R2CCTL0-A0 一个中断对应一个中断源例如我写的是TA2CCTL0和TA2CCR0,则对应的中断就是#pragma vector=TIMER2_A0_VECTOR应该明白了吧!TA
4、xCCTL1,TAxCCR1 TAxCCTL2,TAxCCR2 特点:连续计数模式经我调试TA0CCTL1 = CCIE; / CCR0 interrupt enabledTA0CCR1 = 50000;TA0CTL = TASSEL_2 + MC_1 + TACLR; / SMCLK, upmode, clear TAR是进不了中断的,这是血的教训,(如果你采用的是比较模式,千万别想着,TMD理论上就是这样,为什么进不了中断)应该把 MC_1改为MC_2就OK了.官方这样说这样可以从侧面提问,上文中为什么不是TAxCCRx,而只是TAxCCR0!应该明白了,这里有一点千万要区分开来,这是晕死
5、的教训!TA0R,与TA0CCR1的区别,我也不知道是看了那本破书,或者就是那些5系列一下的430单片机程序可以,我只能感叹F5529真是神器!在中断函数里把cap=TA0CCR1,或者是TA1CCR1,还说TA0R,TA0CCRx其实是一样的,就是计数的储存。可能在一些5系列一下的430单片机是可以,但是在f5529严格区分开来,养成好习惯,TA0R不等于TA0CCRxTA0CCR0是定数的,是不变的TA0R是用来计数的。是变化的比较模式就是那TA0R去不断比较TA0CCR0,以万变应不变,超过就产生中断!所以你在中断读取你计数的值这样写是菜鸟cap=TA0CCR1是XXXXXXX应该写成c
6、ap=TA0R,必须养成这个好习惯!它们的中断函数 是多源中断,说白了就是三个有用的case 2: CCTL1case 4: CCTL2case 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)
7、 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 !2ADC12(12为模数转换器) ADC 内核将一个模拟输入信号转换为12 位的
8、数字信号,并将其结果存储在转换存储器中。该内核采用两个可编程/选择的电压(VR+和VR-)作为转换的上限和下限。当输入信号大于或等于VR+时,数字输出(NADC)为最大值(0FFFh),而当输入信号小于者等于VR-时,输出为0。在转换控制存储器中定义输入通道和参考电压(VR+和VR-)。ADC转换结果Nadc的计算公式为:Nadc = 4095 (Vin-VR -)(VR +-VR -) ADC12_A 内核可通过两个寄存器ADC12CTL0 和ADC12CTL1 来进行配置,通过ADC12ON 位使能内核。在理解一句话:ADC12硬件会把转换的结果自动存放到ADC12MEM存储器中,每个AD
9、C12MEMx都有自己对应的ADC12MCTLx.void adc1() P6SEL |= BIT6; ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC; ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; ADC12MCTL0=ADC12SREF_0+ADC12INCH_6; ADC12CTL0 |= ADC12ENC;中断函数里#pragma vector=ADC12_VECTOR_interrupt void ADC12ISR (void) 转换的数据在ADC12MEM0; /这点要想通ADC12中断ADC12有18 个中断源:ADC1
10、2IFG0-ADC12IFG15ADC12OV,ADC12MEMx 溢出ADC12TOV,ADC12_A转换时间溢出当ADC12MEMx存储寄存器载入转换结果的时候,相应的ADC12IFGx位置位。如果相应的ADC12IEx位和GIE 位置位,将产生中断请求。温馨提示:如果你是在msp430f5529现有的工程修改你想要的程序,那你要注意了,系统工程本身就用了AD采样了,齿轮采样已经用了AD的中断,有两种方法你可以选择,在它的Wheel.c里修改,或者你自己新建个工程,不用齿轮!在看程序之前,请注意:1.我们要把一个信号,脉冲信号引用单片机,肯定要选用一个端口,网上的程序程序的端口F5529是
11、不能用的,因开发板上的没有排针引出,为此我痛苦了好久,不过没事,用现有排针的端口P2.1,P2.0.翻看数据手册:找到寄存器怎么对应呢!TA1CCTL1-TA1.1TA1CCTL2-TA1.2例如TA0CCTL2-TA0.2,知道了吧,接下来就是设置这个端口为第二功能,外围模块!编好程序怎么知道你程序能不能采到数据,小技巧就是你在P2.0引出一根杜邦线,在VCC和GND之间切换,有数据就OK,接下来就调试数据!2.采样的端口你也要根据你排针上你有什么来选择这里我选择的是P6.6的第二功能!编好程序怎么知道你程序能不能采到数据,小技巧就是你在P6.6引出一根杜邦线,接VCC或者GND,有数据就OK,接下来就调试数据!! 为了程序的完整性,请进入这个网站下载!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1