工具/软件:Code Composer Studio
您好!
我叫 Trujillo、我来自西班牙。 首先,我对我可能会犯的任何英文书写错误表示歉意。
实际上、我使用的是 MSP430FR5969、我尝试从计时器 A 中断生成 PWM 信号(计时器 B)(在可闻频率范围内)。 我发现的问题是来自 Timer B 的 PWM 信号显示正确、但我需要来自 Timer A 的 PWM 保持工作。 最后一点不会发生。 ISR 似乎有很多工作要做、CPU 处理速度无法达到我所需的速度。 这是守则,如果有人能帮助我,我将会非常感激。
#include
#include
unsigned int mostra (void);
unsigned int valor=0;
unsigned long resultats=0.0;
unsigned int vector[48]={0};
unsigned int puntero=0;
unsigned long Mitja=0.0;
//
* main.c
*
/ int main (void){
WDTCTL = WDTPW | WDTHOLD; //停止 WDT
//配置 GPIO -------------------------------------------------------
//
P1DIR |= BIT2;
P1SEL0 |= BIT2;
P1DIR |= BI5;
P1SEL0 &=~BI5;
P1DIR = 0x10;
P1SEL0 = 0x10;
P4SEL0 |= BIT4;
P4SEL1 |= BIT4;
//禁用 GPIO 上电默认高阻抗模式,以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//--- ////
configuración de los clocks
//------------------------------------------------------- //
CSCTL0_H = CSKEY >> 8; //解锁 CS 寄存器
CSCTL1 = DCOFSEL_6;
CSCTL2 = SELA_VLOCLK | SELS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA_8 | DIVS_8 | DIVM__1;
CSCTL0_H = 0;
//----------------- /////// configuración
ó n del ADC12
//--------------- //
ADC12CTL0 = ADC12SHT1_0 | ADC12ON;
ADC12CTL1 = ADC12SHP | ADC12SSEL_3 | ADC12PDIV_1 | ADC12CONSEQ_0;
ADC12CTL2 =ADC12RES_2;
ADC12CTL3 = ADC12C12PDIV_1 | ADC12CONSEQ0;ADC12CTL2 =ADC12TRC12TAC10
= ADC12MCTR_ADC12TAC0;ADC12TALL_ADC12TAC10;ADC12TRC12TACTR
///---------------------------------------------------------- /////// configuración
de la Señal PWM Principal
//--------------- //
TA1CTL = tassel_SMCLK | MC__UP | TACLR;
TA1CCR0 = 2325-1;
TA1CCTL1 = OUTMOD_7;
TA1CCR1 = 1850;
TA1CCTL2 = CCIE;
TA1CCR2 = 1965年;
//----------------- //
__bis_SR_register (LPM0_bits+GIE);//输入 LPM0 y generamos la ISR
while (1){};
}//------
ISR -------------------------------------------------------------- //
#pragma vector=Timer1_A1_vector // INTERRUPCIÓN EN Timer1:TA1.1
__interrupt void Temp (void)
{
switch (TA1IV)
{
case 4:// interrupción en TA1CCR2
mistra();
int i;
vector[puntero]=mustra();
if (puntero=47){
puntero=0;
for (i=0;i<48;i++){
Mitja=Mitja+vector[i];
}
tattat=Mitja/48;
if (resultat<<205){
resultat=205.0;
}
//--- configuración de la Señal PWM de salida de audio para localización -------- //
TB0CTL = TBSSEL_SMCLK | MC__UP | CNTL_1 | TBCLR;
TB0CCTL1 = OUTMOD_7;
TB0CCR0 =(409600/结果)-1;
TB0CCR1 = TB0CCR0/2;
Mitja=0;
resulttat=0.0;
}
否则
为 puntero++;
break;
}
TA1CTL &&~TAIFG;
}
//------ ADC12------------------------------------------------------- //
unsigned int motra (void)
{
ADC12MEM10=0;
ADC12CTL0 |= ADC12ENC | ADC12SC;
while (((ADC12CTL0&ADC12SC)=ADC12SC){};
valor=ADC12MEM10;
ADC12CTL0 &=~ADC12ENC;
return valor;
}
非常感谢!
Trujillo