请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP432P401R 工具/软件:Code Composer Studio
大家好,
我在使用MSP432P401R中断时遇到问题。 我用黑色版本(修订版 1.0)使用代码编辑器6.2 ,并且运行良好,两个中断执行正常。
我将我的主板升级到Rev C RED版本Code Composer 7,现在ADC14_IRQHandler没有执行,只有TA0_N_IRQHandler。 我尝试再次使用我的第一版黑色版本,但它是相同的。
我可以使ADC14 ISR工作的唯一方法是对NVIC偏移进行注释以设置定时器的中断,因此我只需启用ADC的NVIC偏移。
我做错了吗? 提前感谢您的参与。
//*************************************************************************************************
////
control P-I para CONVERTIDOR full bridge
//////************************************************************************************************
#include "msp.h"
// definiciosNES para la frecuencia
#define frece 10万
#define msprun 4800万
int cuentas =(msprun/frec)/2;
// definion de variables
double periodo = 1/frec;
double d = 0.35 ;
double voltaje_anterado=0;
double media=0;
double mediosalida
= 0
int i =0;
int contador =0;
int muestras =0;
strt control {
双聚基;
双KP;
双重错误;
双设定点;
双错误间歇;
双重错误_前位;
双微积分;
/***** 变量del Mario***** //
ki = 0.0.0988万
// Kp = 0.0001 ;
/********************* /
INICIAlIZACIÓN // de Las estructuras
control ={ 0.0.0187万 ,0.0.0022万 };
//PROTOiPOS de funciones
void ADC_START (void);
void gPIO_config (void);
void timer_config (void);
void control_PI (void);
void main(void){
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;//停止监视程序计时器
ADC_START();
timer_config();
gPIO_CONFIG();
__enable_interrupts();
NVIC->ISER[0]=1<<(ADC14_IRQn)& 31);
NVIC->ISER[0]|=1<<(TA0_N_IRQn)和31);
NVIC->IP[9]=0;
NVIC->IP[24]=255;
//ENCIENDE EL ADC
ADC14->CTL0 |= ADC14_CTL0_ENC;
用于(i = 0;i < 5万;I++){}
用于(;){
//control_pi();
}
}
void control_pi (void){
control.error = control.setpoint - voltaje_promedio;
control.error_int =(control.error - control.error_anterior);
control.calculo = control.kp * control.error + control.error_int * control.ki;
Salida = control.calculo + salida_anterior;
// limitación del control para 0.01 < d < 0.48
IF (salida > 0.48){
D = 0.48 ;
}其他条件(salida <0){
D = 0.03 ;
其他{
D = salida;
}
control.error_anterior = control.error;
Salida_anterior = salida;
}
void ADC14_IRQHandler(void){
静态uint16_t状态= ADC14_IFGR0_IFG0;
ADC14->CLRIFGR0 |=1;
p4->out || BIT0;
__no_operation();
p4->out &=~BIT0;
状态= ADC14->MEM[0];
//公式para el factor de medición (VOUTMAS/2^14)
voltaje_sensado =(状态* 0.71.4411万);
//Promedio de Muestras
IF (contador == muestras){
voltaje_promedio = suma / muestras;
Suma =0;
contador = 0;
其他{
Suma = voltaje_sensado + suma;
contador++;
}
}
void timer_config (void){
TIMER_A1->CTL = TIMER_A_CTL_MC__UP | TIMER_A_CTL_Ssel__SMCLK
| TIME_A_CTL_ID__8;
TIMER_A1->CCTL[1]= TIMER_A_CCTLN_OUTMOD_3;
TIME_A1->CCR[0]=60;
TIME_A1->CCR[1]=30;
timer_A0->CTL = timer_a_ctl_mc_updown | timer_a_ctl_sel__SMCLK
| TIME_A_CTL_IE;
TIME_A0->CCR[0]=240;
TIME_A0->CCTL[2]= TIME_A_CCTLN_OUTMOD_6;
TIME_A0->CCR[2]=(int)(240 -(240 * d));
TIME_A0->CCTL[3]= TIMER_A_CCTLN_OUTMOD_2;
timer_A0->ccr [3]=(int)(240 * d);
}
void gPIO_config (void){
//Habilida los 2.5 和WFP 2.6 para usarse como salidas del timo.
P2->DIR ||(BIT6 | BIT5);
P2->SEL1 &=~( BIT6 | BIT5 );
P2->SEL0 ||( BIT6 | BIT5 | BIT2);
//Configura GPIO参数ADC
P4->DIR ||(BIT7);
P4->SEL0 ||(BIT7);
P4->SEL1 ||(BIT7);
//Salida para checar frecuencia de muestreo
P4->DIR ||(BIT0);
P4->SEL0 &=~(BIT0);
P4->SEL1 &=~(BIT0);
}
void ADC_START (void){
ADC14->CTL0 =(ADC14_CTL0_ssel__SYSCLK | ADC14_CTL0_DIV_0
| ADC14_CTL0_PDIV_0);// SYSCLK,/1,PrE/1
ADC14->CTL0 ||(ADC14_CTL0_SHP | ADC14_CTL0_ON);//AMPCON Timer,ADC ON
ADC14->CTL0 ||(ADC14_CTL0_CONSEQ_2);//ADC14_CTL0_SC,Repee-Single-Channel。
ADC14->CTL0 |= ADC14_CTL0_SHS_3;
ADC14->CTL1 = ADC14_CTL1_RES_14BIT;// Resolución DE 14Bit 16ciclos.
ADC14->MCTL[0]= ADC14_MCTLN_Inch_6 | ADC14_MCTLN_EOS;//A1输入。 Vref = AVCC
ADC14->IER0 = ADC14_IER0_IE0;//启用中断
}
void TA0_N_IRQHandler (void){
开关(TIME_A0->IV){
案例0x0E:
TIME_A0->CTL &=~TIMER_A_CTL_IFG;
timer_a0->ccr [2]=(int)(cuentas -(cuentas * d);
timer_a0->ccr [3]=(int)(cuentas * d);
中断;
默认:
中断;
}
}