Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all 3634 articles
Browse latest View live

MSP430F5529的定时器中断无法进入

$
0
0

我采用CCR1.CCR2.CCR0产生了pwm波 ,但是 这样的话 定时器中断函数无法进入    。

单独采用CCR0,不使用CCR1,CCR2,定时器可以进入中断函数。

想请问是哪个地方配置错误了呢?。

代码如下:

#include "io430.h"


/*定时器输出单元举例:
ACLK时钟频率为LFXT1=32768Hz,利用Timer_A输出周期为512/32768
=15.625ms,占空比分别为75%和25%的PWM波
*/
int flag=0;
int i=0;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;


//Initialize
P4DIR |= BIT7; //将4.7设为输出 led
P4OUT^= BIT7;
P1DIR |= BIT0;
P1OUT |= BIT0;
P1SEL |= BIT2; //从P1.2输出
P1DIR |= BIT2;
P1SEL |= BIT3; //从P1.3输出
P1DIR |= BIT3;

TA0CTL=TASSEL_1+TACLR;
TA0CCTL0 = CCIE;
TA0CCR0=512-1;//PWM周期
TA0CCTL1=OUTMOD_7;
TA0CCR1=384;//384/512=0.75
TA0CCTL2=OUTMOD_7;
TA0CCR2=128;//占空比128/512=0.25

TA0CTL|=MC_1;//增计数模式
__enable_interrupt();//打开总中断
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts


}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A0(void)
{   i=i+1;
   if(i==100)
   {i=0;
   P4OUT ^= BIT7;
   }


}


MSP430FR6047 低功耗以及DMA问题

$
0
0

1、使用USS库 单片机进入不了低功耗模式,屏蔽USS相关API才可以

2、使用USS库 使用DMA中断时编译出现"

Warning[w52]: More than one definition for the byte at address 0xffe4 in common segment INTVEC. It is defined in module "USS_Lib_HAL" as well as in module "main"

",已经被USS占用,我怎么才能使用

msp430f5438a使用IAR编译,使用低优化等级出错,使用高优化等级通过

$
0
0

首先是使用低优化等级:

下面是使用高优化等级

请大家帮忙看看,是哪里出现问题了?感谢各位指教。

MSP430FR6972串口在LPM3模式下接收数据异常

$
0
0

芯片:MSP430FR6972

问题描述:

串口配置:波特率115200,时钟源SMCLK=1M,在低功耗模式LPM3下接收到的数据是错的。在LPM1模式正常或者把波特率设置为9600也是正常的

在论坛找到一个和我同样问题的提问,但是解答不够充分。

https://e2echina.ti.com/question_answer/microcontrollers/msp430/f/55/p/100453/538570#538570

程序代码:

int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
PM5CTL0 &= ~LOCKLPM5;
MSP_Clock_Config();
MSP_USCI1_Init();
Init_Var();
_EINT();
while(1)
{
if(USCI1_RTx->Rxflag == 1)
{
USCI1_Send_nByte(USCI1_RTx->Rxbuf, USCI1_RTx->Rxlen);
USCI1_RTx->Rxflag=0;
USCI1_RTx->Rxlen=0;
}
LPM3;
}
}

串口配置:

void MSP_USCI1_Init(void)
{
/* Configure UART pins */
P3SEL0 |= BIT4 | BIT5;
P3SEL1 &= ~(BIT4 | BIT5);

UCA1CTLW0 = UCSWRST;
UCA1CTLW0 |= UCSSEL__SMCLK;
/* 115200 */
// UCA1BR0 = 8;
// UCA1MCTLW = 0xD600;
// UCA1BR1 = 0;
/* 9600 */
UCA1BR0 = 6;
UCA1BR1 = 0;
UCA1MCTLW |= UCOS16 | UCBRF_8 | 0x2000;

UCA1CTL1 &= ~UCSWRST;
UCA1IE |= UCRXIE;
}

老版本的LSD-FET430UIF能调试MSP430F5529吗

$
0
0

    我手里有几个老版本的仿真器,具体型号是MSP430 USB Debug-Interface LSD-FET430UIF,不知道用它是否能通过SBW方式调试MSP430F5529。已经做了一个MSP430F5529的电路板,调试环境是CCS,调试无法进行!提示:Error connecting to the target : Unknown device

请问BT-MSPAUDSOURCE Tools Bluetooth and MSP430 Audio开发板(MSP430F5229)的系统初始化C代码的编写

$
0
0

大家好:

    我们购买了BT-MSPAUDSOURCE Tools Bluetooth and MSP430 Audio开发板(MSP430F5229),请教系统初始化代码的编写:

例如:厡代码如下:

      WDTCTL = WDTPW + WDTHOLD;
      SCFI0 |= FN_2;
      FLL_CTL0 |= XCAP18PF;
      SCFQCTL = 127;  // 32768*128=4194304*/

 

我们希望使用DDS芯片AD9954模块!

辛苦了

            

TPS610995的功耗问题

$
0
0

Hi team:

     在产品设计中供电使用的是单节锂电池供,想要使电池电量完全用尽,所以加了TPS610995,该颗芯片的特性是当输入高于输出(输出是3.6v)时,输出跟随输入,此时我想了解跟随时的功耗是多少?手册里是否有列出?谢谢。

FR6972 AES加密问题

$
0
0

Hi :

    再使用FR6972 做AES加密时 ,出现以下疑问请帮忙解惑:

要求AES128加密,填充规则是No Padding时,加密数据长度不是16整数倍时怎么处理?

另外是否有AES加密相关文档说明帮忙提供一下,谢谢。


关于FR6972的SVS检电压例程

$
0
0

Hi team:

    在使用FR6972时,想用SVS 监测电源电压,想问下是否有相关例程,官网提供的例程中没有这部分程序。谢谢。

如何使用PMAP配置P4.4为TA1.2

$
0
0

使用PMAP配置P2.4和P4.4为TA1.1和TA1.2功能配置电机,P2.4配置成功,出现了PWM波形,但是P4.4配置失败,想知道是什么原因:

关于MSP430FR6972IPMR的LCD_C的 Internal Charge Pump问题导致段码液晶显示异常

$
0
0

求助各位大神

一、产品描述:

我们产品主控用MSP430FR6972IPMR驱动段码液晶,产线批量生产时发现部分液晶数字显示比较暗,导致产品无法正常使用。经过我们一系列的排查,导致液晶不能正常显示的原因是:使用MSP430FR6972IPMR的internal Charge Pump时,我们产品设定的Internal VLCD 的电压为3V,而实际测量的有问题的芯片LCDCAP引脚的电压为2.02V,导致液晶数值显示特别暗。正常的芯片的LCDCAP引脚的实际电压3V,液晶显示正常;

我们通过阅读MSP430FR6972IPMR的数据手册、《MSP430FR58xx, MSP430FR59xx,MSP430FR68xx, and MSP430FR69xx Family User's Guide 》、《MSP430FR6972 Device Erratasheet 》、《Designing With MSP430™ MCUs and Segment LCDs 》、《Driving Large LCDs With LCD Peripheral of the MSP430 》等相关的文档,均为找到解决的方法,特向TI原厂的线上技术人员求助。

二、问题总结:在MSP430FR6972IPMR的internal Charge Pump作为Internal VLCD,段码LCD选用的内部偏压的条件下,我们设定的Internal VLCD 的电压为3V,而实际测量的有问题的芯片的LCDCAP引脚的电压为2.02V的原因是什么?有什么好的解决方法?

三、我们目前做的排查工作如下:

1、产品属于批量1年多的产品,并非第一次批量生产,产品硬件原理图和软件配置未做过更改,原来的MSP430FR6972IPMR显示正常,只在最近2批生产中遇到几十片MSP430FR6972IPMR对应的产品的液晶显示有问题;----排除了首次应用问题。

2、我们将LCD显示正常的电路板上的MSP430FR6972与LCD显示有问题的电路板上的MSP430FR6972进行了调换,发现原来正常的电路板上的液晶显示异常,原来显示有问题的电路板,显示正常。经过我们多次调换发现液晶显示异常的这个问题是跟随着MCU。----排除了我们LCD以及电路板其他外围器件的问题,将问题定位到了MCU上。

3、我们批量的产品在MCU的VCC和AVCC的测量电压均为3.3V的情况下,VLCD通过软件配置成3V;选用用万用表测量,LCD显示异常的MCU的LCDCAP引脚的电压实际为2.02V,LCD显示正常的MCU的LCDCAP引脚的电压为3V;----定位液晶显示不清晰的问题是由LCDCAP的电压比较低导致的

4、我们将驱动LCD显示异常的MSP43FR6972的芯片的VLCD来源选为AVCC(3.3V),LCDCAP引脚的电压测量为3.3V,LCD显示清晰,但是有鬼影出现(鬼影是因为电压过高导致的)。但是这种情况会增加产品的功耗,影响产品的使用寿命;----再次验证液晶显示不清晰的问题是由LCDCAP引脚的电压比较低导致的

5、我们产品采用一次性锂电池供电,LDO稳压输出3.3V给MCU供电,LCDCAP引脚通过一个4.7-µF 的钽电容接地,我们尝试将钽电容的值增加到10uF和47uF,LCD数值显示不清晰的问题没有得到改善;----通过实际验证的LCDCAP与地之间的电容值增大不能解决问题;

四、相关原理图与测试图片

1、我们的LCD部分的原理图如下

2、LCD显示截图

LCD数值显示正常

LCD数值显示异常

3、电压表实际测试LCDCAP引脚的电压截图如下:

LCD显示正常的板子

LCD显示异常的板子

MSP430FR2522触摸设计调用函数

$
0
0

TI 工程师好  :

          我在boostxl-capkeypad demo中关于 MAP_CAPT_setChannelActive(1, 3);  MAP_CAPT_setChannelActive(0, 0);之类的原函数看不到,怎么才能可以看到这些原函数?这对我们学习触摸产品设计意义很大。

ADC 使用内部参考电压 数值不正常

$
0
0

您好 

    请问CC430 ADC使用内部参考电压 数值不正常,ADC 值维持300多,不随着电压变化。

    使用内部参考电压有何要求?

  1  目前的设计P2.4(VREF-)悬空,

手册上这么说的,悬空是不是不行呀?

Negative terminal for the ADC reference voltage for both sources, the internal reference
voltage, or an external applied reference voltage (CC430F613x only

  2 代码是参考官方例程,内部参考

REFCTL0 |= REFMSTR+REFVSEL_2+REFON+REFTCOFF;

/* Initialize ADC12 */
ADC12CTL0 = ADC12ON+ADC12SHT02; // Turn on ADC12, set sampling time
ADC12CTL1 = ADC12SHP; // Use sampling timer
ADC12MCTL0 = ADC12SREF_1; // Vr+=Vref+ and Vr-=AVss

__delay_cycles(75); // 75 us delay @ ~1MHz

ADC12CTL0 |= ADC12ENC;

MSP430F5529写不了代码

MSP430FR2353 AD多通道采集 现在采集通道8 和内部温度通道A12 只采集这两个通道求指点下,以下是我的配置读取参考官方例子,参考电压内部2.5V,不顺序采集AD ,只采集指定的通道AD的采集

$
0
0

#include <msp430.h>
unsigned int ADC_Result[13]; // 12-bit ADC conversion result array
unsigned char i;
#define CALADC_15V_30C *((unsigned int *)0x1A1A) // Temperature Sensor Calibration-30 C
// See device datasheet for TLV table memory mapping
#define CALADC_15V_85C *((unsigned int *)0x1A1C) // Temperature Sensor Calibration-High Temperature (85 for Industrial, 105 for Extended)

int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
// Configure ADC
// Configure ADC A1 pin
P5SEL0 |= BIT0;
P5SEL1 |= BIT0;
ADCCTL0 |= ADCSHT_8 | ADCON; // ADCON, S&H=16 ADC clks
ADCCTL1 |= ADCSHP | ADCCONSEQ_1 | ADCSSEL_1; // ADCCLK = MODOSC; sampling timer
ADCCTL2 &= ~ADCRES; // clear ADCRES in ADCCTL
ADCCTL2 |= ADCRES_2; // 12-bit conversion results
ADCIE |= ADCIE0; // Enable ADC conv complete interrupt
ADCMCTL0 = ADCINCH_12 | ADCSREF_1; // A1 ADC input select; Vref=2.5V
// Configure reference module
PMMCTL0_H = PMMPW_H; // Unlock the PMM registers
PMMCTL2 |= INTREFEN | REFVSEL_2 | TSENSOREN ; // Enable internal 2.5V reference
__delay_cycles(400); // Delay for reference settling
_EINT();
while(1)
{
while(ADCCTL2 & ADCBUSY); // Wait if ADC core is active
ADCCTL0 |= ADCENC | ADCSC; // Sampling and conversion start
__delay_cycles(5000);
}

}
// ADC interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC_VECTOR
__interrupt void ADC_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC_VECTOR))) ADC_ISR (void)
#else
#error Compiler not supported!
#endif
{
volatile float temp;
volatile float IntDegF;
volatile float IntDegC;

switch(__even_in_range(ADCIV,ADCIV_ADCIFG))
{
case ADCIV_NONE:
break;
case ADCIV_ADCOVIFG:
break;
case ADCIV_ADCTOVIFG:
break;
case ADCIV_ADCHIIFG:
break;
case ADCIV_ADCLOIFG:
break;
case ADCIV_ADCINIFG:
break;
case ADCIV_ADCIFG:

ADC_Result[i] = ADCMEM0;
if(i == 0)
{
i =12;
temp =ADC_Result[11];
// Temperature in Celsius
// The temperature (Temp, C)=
IntDegC = (temp-CALADC_15V_30C)*(85-30)/(CALADC_15V_85C-CALADC_15V_30C)+30;

// Temperature in Fahrenheit
// Tf = (9/5)*Tc | 32
IntDegF = 9*IntDegC/5+32;
//__bic_SR_register_on_exit(LPM3_bits); // Exit LPM3
}
else
{
i--;
}

break;
default:
break;
}
}


MSP430FR6047 USS测量数据是否正确

$
0
0

以下是采集的时间差单位:ps

未滤波数据
128.35243
-194.57502
92.31371
64.11938
206.3416
55.933924
98.85071
25.067946
249.77
-120.11014
-128.23876
-122.44072
6.48015
145.17809
-39.61986
160.52582
-21.884716
6.082246
-7.730705
133.86626
1.762146
171.8945
-140.63062
89.4147
6.878054
-20.065728
-240.95926
70.31531
-125.51027
-37.118752
-9.379164
143.47279
-96.57697
-298.08688
5.343281
89.24417
6.707524
57.411856
160.18475
260.05864
20.406788
-67.245765
43.883116
4.718004
57.525536
-43.314688
-15.63194
283.3076
-30.297542
57.241324
150.91929
99.64651
289.90142
-55.820236
83.7872
-34.788172
219.64296
184.9685
58.605568
27.455372
25.181636
53.20544
5.115908
-49.396928
113.34578
50.59064
161.71953
205.26158
18.701484
201.90782
-75.71543
54.853896
-60.083492
-20.008884
93.50742
-113.45946
-100.04442
23.362644
-111.0152
-6.195933
98.45281
263.18504
76.738615
-222.14406
18.928858
221.1209
-38.994588
-79.012355
11.482371
-137.22002
-249.42894
4.66116
-97.65699
-73.157475
33.59446
86.7999
30.92282
144.38228
129.48931
43.25784
-125.51027
131.87672
14.040325
108.00249
-127.3861
-243.51722
-21.486812
103.1708
-156.20571
30.354384
-0.17053
62.925664
-20.2931
-26.716406
12.164492
70.08794
-18.985704
-178.14728
117.09744
112.03838
0.17053
23.646862
-151.43086
83.673515
78.38708
-8.128609
58.49188
15.063506
119.31434

滤波后数据
15.531328
16.96443
10.050924
15.726605
20.267634
26.152532
13.054031
-5.616956
-7.499671
5.834823
13.825983
16.533892
-12.755262
-20.124722
-13.443094
11.458044
16.79831
4.771425
-3.203745
-0.082817
11.607524
16.265079
8.824181
0.677015
0.104122
2.450576
6.815707
-0.476299
-5.42933
-5.734179
-9.377361
-11.466454
-10.567787
-3.60814
-3.924379
-3.04017
3.599806
7.52615
8.516352
7.942931
6.200854
-2.674009
-12.259663
-13.765175
-8.51671
7.996446
13.934135
17.843282
14.62663
16.540245
18.075996
11.647537
-3.157098
-6.856598
-4.558404
1.667804
6.741744
11.818937
14.882701
15.132666
16.581152
15.285126
10.174712
-1.156819
0.054128
8.763214
17.33607
17.530782
12.78235
7.347579
2.47905
1.461593
3.994905
3.856885
5.026894
5.972524
11.050024
11.011155
6.88545
3.617526
6.599881
11.773688
12.881829
11.40296
13.09559
16.838002
14.896539
11.950406
16.289087
25.758088
27.400694
22.714854
23.699428
22.531408
17.382006
11.74588
9.536017
11.577587
13.727452
14.167241
17.590312
24.131098
31.10408
30.827868
26.875342
22.440296
19.192912
19.867468
26.653498
31.063716
30.547436
17.851956
8.124105
7.516187
18.79791
27.468814
24.61577
21.636216
19.631564
17.881508
18.012906
20.945734
28.473674
26.364742
26.87127
19.50691
17.93648
17.042796
19.398886
18.011078
15.720013
14.03101
11.601582
14.088245
20.093724
21.441042
22.240566
25.48762
34.102596
30.298242
21.75031
13.788278
16.090874
17.290628
17.21019
17.098318
23.44909
24.465394
16.847086
2.435357
-2.297587
9.984752
27.443572
35.780732

感觉滤波后数据还是不太稳定,进行重复测量极差在0.2%左右,这正常吗?还是我配置的问题?

用“MSP-GANG Programmer”烧录,不能重复的对同一苾片进行第二次烧录

$
0
0

用“MSP-GANG Programmer”烧录:(图:D)烧录芯片“MSP430G2452”时,

 文件大小为7616(图:A),可以反复的对同一芯片进行烧录。

 

  但烧录文件大小为8054(图:B),只可以对空白的芯片进行烧录,

不能重复的对同一苾片第二次烧录(图:C),

这一现像需要怎么处理?谢谢!

See details below... Import failed for project 'klm50_f249_modbus_2018-3-23' because its meta-data cannot be interprete

$
0
0

用ccs8.3导入msp430工程时出现错误,弄了很久无法解决

MSP430FR2353 AD采集多通道采集,对A8 、A12(内部温度AD)进行采集,单独运行代码都能进行采集正常,看了用户手册对采集进行配置时,只有单次单通道采集,单次序列多通道采集,单次重复采集,多次序列通道采集,配置不能选择指定的通道进行采集吗?

$
0
0

看了用户手册ADCCTL1  寄存器  ADCCONSEQX 位是对采集顺序进行配置的,我想知道咱们这款芯片是不支持指定通道采集吗? 还是只支持序列多通道采集,如果支持序列多通道,我想用内部温度采集通道12和通道8指定最高通道12   岂不是0 -12 所有的都采集到,根本不是我想要的,求大神指导下,以下是我的代码

#include <msp430.h>
unsigned int ADC_Result[13]; // 12-bit ADC conversion result array
unsigned char i;
#define CALADC_15V_30C *((unsigned int *)0x1A1A) // Temperature Sensor Calibration-30 C // See device datasheet for TLV table memory mapping
#define CALADC_15V_85C *((unsigned int *)0x1A1C) // Temperature Sensor Calibration-High Temperature (85 for Industrial, 105 for Extended)
void Software_Trim(); // Software Trim to get the best DCOFTRIM value
#define MCLK_FREQ_MHZ 8 // MCLK = 8MHz

int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
//configure clock
__bis_SR_register(SCG0); // disable FLL
CSCTL3 |= SELREF__REFOCLK; // Set REFO as FLL reference source
CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_3;// DCOFTRIM=3, DCO Range = 8MHz
CSCTL2 = FLLD_0 + 243; // DCODIV = 8MHz
__delay_cycles(3);
__bic_SR_register(SCG0); // enable FLL
Software_Trim(); // Software Trim to get the best DCOFTRIM value
CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK; // set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz
// Configure ADC A8 pin
P5SEL0 |= BIT0;
P5SEL1 |= BIT0;
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
ADCCTL0 |= ADCSHT_8 | ADCON; // ADCON, S&H=256 ADC clks
ADCCTL1 |= ADCSHP | ADCCONSEQ_1 | ADCSSEL_0; // ADCCLK = MODOSC; sampling timer
ADCCTL2 &= ~ADCRES; // clear ADCRES in ADCCTL
ADCCTL2 |= ADCRES_2; // 12-bit conversion results
ADCIE |= ADCIE0; // Enable ADC conv complete interrupt
// ADCMCTL0 = ADCINCH_12 | ADCINCH_8 | ADCSREF_1;
// ADCMCTL0 |= ADCINCH_12 | ADCSREF_1; // A8 ADC input select; Vref=2.5V
// Configure reference module
PMMCTL0_H = PMMPW_H; // Unlock the PMM registers
PMMCTL2 |= INTREFEN | REFVSEL_2 | TSENSOREN ; // Enable internal 2.5V reference
// PMMCTL2 |= INTREFEN | REFVSEL_2 ; // Enable internal 2.5V reference
__delay_cycles(400); // Delay for reference settling
_EINT();
while(1)
{
while(ADCCTL2 & ADCBUSY); // Wait if ADC core is active
ADCCTL0 |= ADCENC | ADCSC; // Sampling and conversion start
__delay_cycles(5000);
}

}
// ADC interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC_VECTOR
__interrupt void ADC_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC_VECTOR))) ADC_ISR (void)
#else
#error Compiler not supported!
#endif
{
volatile float temp;
volatile float IntDegF;
volatile float IntDegC;

switch(__even_in_range(ADCIV,ADCIV_ADCIFG))
{
case ADCIV_NONE:
break;
case ADCIV_ADCOVIFG:
break;
case ADCIV_ADCTOVIFG:
break;
case ADCIV_ADCHIIFG:
break;
case ADCIV_ADCLOIFG:
break;
case ADCIV_ADCINIFG:
break;
case ADCIV_ADCIFG:

ADC_Result[i] = ADCMEM0;
if(i == 0)
{
i =12;
temp =ADC_Result[11];
// Temperature in Celsius
// The temperature (Temp, C)=
IntDegC = (temp-CALADC_15V_30C)*(85-30)/(CALADC_15V_85C-CALADC_15V_30C)+30;

// Temperature in Fahrenheit
// Tf = (9/5)*Tc | 32
IntDegF = 9*IntDegC/5+32;
//__bic_SR_register_on_exit(LPM3_bits); // Exit LPM3
}
else
{
i--;
}

break;
default:
break;
}
}
void Software_Trim()
{
unsigned int oldDcoTap = 0xffff;
unsigned int newDcoTap = 0xffff;
unsigned int newDcoDelta = 0xffff;
unsigned int bestDcoDelta = 0xffff;
unsigned int csCtl0Copy = 0;
unsigned int csCtl1Copy = 0;
unsigned int csCtl0Read = 0;
unsigned int csCtl1Read = 0;
unsigned int dcoFreqTrim = 3;
unsigned char endLoop = 0;

do
{
CSCTL0 = 0x100; // DCO Tap = 256
do
{
CSCTL7 &= ~DCOFFG; // Clear DCO fault flag
}while (CSCTL7 & DCOFFG); // Test DCO fault flag

__delay_cycles((unsigned int)3000 * MCLK_FREQ_MHZ);// Wait FLL lock status (FLLUNLOCK) to be stable
// Suggest to wait 24 cycles of divided FLL reference clock
while((CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)) && ((CSCTL7 & DCOFFG) == 0));

csCtl0Read = CSCTL0; // Read CSCTL0
csCtl1Read = CSCTL1; // Read CSCTL1

oldDcoTap = newDcoTap; // Record DCOTAP value of last time
newDcoTap = csCtl0Read & 0x01ff; // Get DCOTAP value of this time
dcoFreqTrim = (csCtl1Read & 0x0070)>>4;// Get DCOFTRIM value

if(newDcoTap < 256) // DCOTAP < 256
{
newDcoDelta = 256 - newDcoTap; // Delta value between DCPTAP and 256
if((oldDcoTap != 0xffff) && (oldDcoTap >= 256)) // DCOTAP cross 256
endLoop = 1; // Stop while loop
else
{
dcoFreqTrim--;
CSCTL1 = (csCtl1Read & (~DCOFTRIM)) | (dcoFreqTrim<<4);
}
}
else // DCOTAP >= 256
{
newDcoDelta = newDcoTap - 256; // Delta value between DCPTAP and 256
if(oldDcoTap < 256) // DCOTAP cross 256
endLoop = 1; // Stop while loop
else
{
dcoFreqTrim++;
CSCTL1 = (csCtl1Read & (~DCOFTRIM)) | (dcoFreqTrim<<4);
}
}

if(newDcoDelta < bestDcoDelta) // Record DCOTAP closest to 256
{
csCtl0Copy = csCtl0Read;
csCtl1Copy = csCtl1Read;
bestDcoDelta = newDcoDelta;
}

}while(endLoop == 0); // Poll until endLoop == 1

CSCTL0 = csCtl0Copy; // Reload locked DCOTAP
CSCTL1 = csCtl1Copy; // Reload locked DCOFTRIM
while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // Poll until FLL is locked
}

usb进行BSL程序加载的相关代码

$
0
0

使用MSP430F5528过程中,想要借助加载程序,实现用户与器件通信,以便从存储器中读取数据并写入数据。在别人的论文中看到,可以在TI官网找到USB进行BSL程序加载的相关代码以及cmd文件,自己没有找到,哪个好心的小哥哥小姐姐有用过相关程序吗?请赐教。

Viewing all 3634 articles
Browse latest View live