工具/软件:Code Composer Studio
您好! 我正在将汽车计算机作为嵌入式系统项目,并且我正在使用许多外围设备。 它们在独立工作时都能正常工作,但当我将它们放在一个问题中时,有些中断从未发生。 例如,我使用TIVA作为从属设备,当温度达到特定值时,我会向MSP430发送一个字符并打开一个LED。 当我单独尝试时,它是有效的,但当我将它们放入完整的程序时,我没有收到任何东西。
当我在MSP430中使用ADC时,附加到寄存器的变量值在独立工作时获得该值,但如果我要修改计时器寄存器与电位器位置相关的频率, ADC既不读取该值,也不会使计时器获得正确的值。
所以,我不知道是不是中断问题,是否有特定的配置,还是我应该在main中订购它们。c根据它们 的优先级失败?
我将粘贴两个程序,第一个程序是主器(MSP430)的主要程序,第二个程序是我控制计时器频率的程序。
/*
*计算机仪表板代码主控
*
这是汽车仪表板计算机的主微控制器的代码
*实施的通信协议使用主控中的UART端口
*以及从属设备, 但这将像CAN总线一样工作,因为它们都具有
*相互通信
*
**使用的内容:
*-UART COM端口2
*-UART COM端口4
*-LCD 4位模式
*-矩阵键盘4x4
*-内部温度传感器
*-用于时钟和日历
的内部RTC *-速度和距离的捕获模式
*-内部按钮
**
2017年11月12日创建
*Gerardo Moreno *//***************************************************
图书馆********************************************************
#include <MSP4S.h>
#include <intrinsics.h>
#include <stdint.h>
#include "driverlib.h"
#include "libraries/lcd.h"
#include "libraries/itoa.h"
#include "libraries/Keypad.h"
#include "libraries/RealTime.h"
#include "libraries/********************************/libraries/****************.h"
#include "********/libraries/****************.h"
常数**************************************************************
#define one_second 800万#define
half_second 800万/2
#define one_millisecond 8000//***************************************************************************
原型**************************************************************
void initgPIO(void);
void initClocks(void);
int verifyDisLife(void);
void initUART(void);
void initADC(void);
//******************************************************************* 变量**************************************************************
uint8_t poterLife =11;
uint8_t potinterTripA =11;
uint8_t potinterTripB =11;
uint16_t counterLife =0 ;
uint16_t counterTripA =0 ;
uint16_t counterTripB =0 ;
uint16_tlastTime =0 ;
uint16_t ADCdistar; Alfar;
外部集成选项计数器;
//************************************************* 非易失性内存中的变量*******************************************************
#pragma persistent (distanceLife)
UINT32_t distanceLife =0;
#pragma persistent (distanceTripA)
UINT32_t distanceTripA =0;
#KLma persistent (distancePragB)
UINT32_t distanceTripB =0;
uint8_t valor;
int main(void){
毫秒tctl = WDTpw_initbycles; p_w_tches; pgp_p_done =~pode_timer; p_wcles; p_wcluse_p_wclones; p_wcluse_pode_p_wclus; p_wd> p_wcluse_p_wcluse_pode_pode_
//initUART();
//__delay_cycles (one_millisond);
//initADC();
// TA1CCTL2 = CM_1 | CCIS_1 |
Cursor | CAP | CCIE;// TA1CTL = tassel__ACLK | MC__continuous;initrents();//配置所有外设寄存器的寄存器|
cursor | clcd | clcd lcd lcd lcd lcd l| send life_1;sset;send (set_13" het) lcd_set_13" 0);
send_string ("km");
set_cursor (13,1);
send_string ("km");
同时(1){
// ADC12CTL0 |= ADC12ENC | ADC12SC;
counterLife++;
IF (counterLife == 508){
CounterLife =0;
distanceLife++;
}
verifyDisLife();
Set_Cursor (pointerLife, 0);
itoa (distanceLife,distanceLifeChar,10);
send_string(distanceLifeChar);
readKeyboard();
}
}//**************************************************************
中断矢量代码******************************************************
//ADC中断向量
#pragma vector = ADC12_Vector
__interrupt void ADC12_ISR(void){
switch (__偶 数_in_range(ADC12IV, ADC12IV_ADC12RDYIFG))){
CASE ADC12IV_NONE:
Break ;// Vector 0:中断CAD12IFF;
CAD12; CADIF; CAD: CAD12; CAD12;
CADIF: CAD12; CAD: CADIVEC12; CAD: CADIF; CADIF12; CAD: CADIF: CADI; CADI; CADI; CADI; CADI; CADI; CADI; CADI; CADI: CADI; CADIF: CADI; CADIF12; CAST_CADIF12; CAST
//矢量8:ADC12BLO
CASE ADC12IV_ADC12INIFG:
中断;//矢量10:ADC12BIN
CASE ADC12IV_ADC12IFG0: //向量12:ADC12MEM0中断
ADCValue = ADC12MEM0;
// IF (ADC12MEM0 >= 0x7ff) // ADC12MEM0 = A1 > 0.5AVcc?
// P1OUT |= BIT0; // WFP 1.0 = 1
// else
// p1out &=~BIT0; //
矢量1.0 = 0 //从LPM0退出并继续执行main __BIC_SR_REGISTER_ON_EXIT (LPM0_bits);break;Case ADC12IV_ADC12IFG1:Break;// Vector 14:ADC12MEM1 Case ADC12IV_ADC12IFG2:Break;// MEIF16:ADC12M3/ CAMP4
CASE:CADIV
:CA12:CADIVEC12M12M2/ CADIV:CA12:CADIV:CADIV:CA12 ADC12MEM5
CASE ADC12IV_ADC12IFG6:
Break;// Vector 24:ADC12MEM6
CASE ADC12IV_ADC12IFG7:
Break;// Vector 26:ADC12MEM7
CASE ADC12IV_ADC12IFME8:
Break;// Vector 28:ADC12MEM8
:ADC1232 CASE:CAMP12
:CA12:CADIF12
ADC12MEM12
CASE ADC12IV_ADC12IFG13:
Break;// Vector 38:ADC12MEM13
CASE ADC12IV_ADC12IFG14:
Break;// Vector 40:ADC12MEM14
CASE ADC12IV_ADC12IFG15:
Break;// Vector ADC1218
:CAMP12
:ADC1216
ADC12MEM19
CASE ADC12IV_ADC12IFG20:
Break;// Vector 52:ADC12MEM20
CASE ADC12IV_ADC12IFG21:
Break;// Vector 54:ADC12MEM21
CASE ADC12IV_ADC12IFG22:
Break;// CAME56:ADC12MEM22
:ADC12DIVector ADC1224/
CASE:ADC1224: CAMP12DIVector ADC1224/ CAMP1224: ADC12DIVector ADC1224: CAMP12
ADC12MEM26
CASE ADC12IV_ADC12IFG27:
Break;// Vector 66:ADC12MEM27
CASE ADC12IV_ADC12IFG28:
Break;// Vector 68:ADC12MEM28
CASE ADC12IV_ADC12IFG29:
Break;// Vector 70:ADC12MEM29
:ADC1231 CAMP12
:ADC1231 CAMP12:ADC12IDIV:CADIV CADIV:ADC12IDIV:CADIV:ADC1274 CADIV:ADC12IDIV:CADIV CADIV:ADC1231/ ADC1231/ ADC12IDIV:ADC12IDIV CADIV:CADIV CADIV:ADC12IDIV:ADC12IDIV
}
UART中断向量
#pragma vector=USI_A0_vector
__interrupt void USI_A0_ISR(void){
switch (__偶 数_in_range(UCA0IV, USI_UART_UCTXCPTIF)){
Case USI_NONE:
Break;
Case USI_OUT_UCROUT_UCRXIFG:
while (!(UCA0_CAF;0
=
0 =
0;CA0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0;0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 =
P1OUT |= 0x01;
P9OUT |= 0x00;
中断;
案例'd':
P1OUT &=~BIT0;
P9OUT &=~BIT7;
中断;
}__NO_OPEX()
;
中断;
CASE USI_UART_UCTXIFG:
Break;
CASE USI_UART_UCSTIFG:
Break;
}//timer
中断向量
#pragma矢量= Timer1_A1_Vector
__interrupt Timer1_A1_RTC(void){
counterLife =(TA1CCR1/CR_ISR_
vector/}/TC1void
/TC1_ rfime/}_TC1_
功能区***************************************************************************************************
void initGPIO (void){//configure
pins
P1DIR || 0x00, P1OUT = 0xFF, P1REN || 0xFF;
P1SEL0 || BIT0;
P1SEL1 || BIT0;
P2DIR || 0xFF,P2OUT = 0x00;
P3DIR || 0xFF,P3OUT = 0x00;
P4DIR || 0xFF, P4OUT = 0x00;
P5DIR || 0xFF,P5OUT = 0x00;
P6DIR || 0xFF,P6OUT = 0x00;
P7DIR || 0xFF,P7OUT = 0x00;
P8DIR || 0xFF,P8OUT = 0x00;
P9DIR || 0x3F, P9OUT = 0x00;
P10DIR || 0xFF,P10OUT = 0x00;
P1SEL0 || BIT3;
P1SEL1 || BIT3;
P2SEL0 |= BIT0 | BIL1; //WFP配置UART/WFP 2.0 2.1 AS模式
P2SEL1 |= BIT0 | BIT1;
P9SEL1 |= BIT6; //配置
ADC P9SEL0的IVA 1.1 |= BIT6;} void initClocks(void){//配置时钟CSCTL0_H = CSCKEY>> 8; CSCTL1 = DCOFsel_3| DCORSEL;CSCTL2 =__LFXTCLK | DISC__DCOCLK | SELM_1_ DSC1_
Int verifyDisLife(void){
IF ((distanceLife >=10)&&(distanceLife <100)){
poterLife =10;
} ELSE IF ((distanceLife >=100)&&(distanceLife <1000)){
poterLife =9;
} ELSE IF ((distanceLife >=1000)&(distanceLife <1万))}
否则,如果((distanceLife >= 1万)&&(distanceLife < 10万)){
pointerLife =7;
}否则,如果((distanceLife >= 10万)&&(distanceLife < 100万)){
pointerLife =6;
} else {
__no_operation()
;}返回pointerLife;
LWvoid initWCTST (void){
UCA0; //将eUSCI置于RESET
UCA0CTLW0 |= UCSSEL__SMCLK;
UCA0BR0 =52; // 8万/16/9600
UCA0BR19600 UCA0BR1 = 0x00;
UCA0MCTLW || UCOS16 | UCBRF_1 | 0x4900;
UCA0CTLW0 &=~UCSWRST; //初始化eUSCI
UCA0IE |= UCRXIE;//启用USI_A0 RX中断 //启用USI_A0 RX中断
}
void initADC(void){
ADC12CTL0 = ADC12SHT0_2 | ADC12ON;
ADC12CTL1 = ADC12SHP; // ADCCLK = MODOSC;采样计时器
ADC12CTL2 |= ADC12RES_2; // 12位转换结果
ADC12IER0 |= ADC12IE0; //启用ADC转换完成中断
ADC12MCTL0 |= ADC12INCH_14;
While (!(REFCTL0 & REFGENRDY));
}
void modeOption(void){
switch (optionCounter){
Case 0:
Set_Cursor (0, 1);
send_string("Trip A:");
break;
Case 1,
Set_Cursor 0: 1);
send_string ("行程B:");
break;
case 2:
set_cursor (0,1);
send_string ("time:");
break;
case 3:
set_cursor (0,1);
send_string ("Temp:");
set_cursor (12,1);
send_string("°C");
break;
}
第二个问题:
/*--版权--,BSD_EX
//********************************************************************************************************
#include <MSP430-h>
int showValADC;
int main (void){
WDTCTL = WDTPW | WDTHOLD; //停止WDT
//配置GPIO
P1DIR || BIT3;
P1OUT || BIT3;
P9SEL1 || BIT6; //为8.4 ADC
P9SEL0 |= BIT6;
CSCTL0_H = CSCKEY >> 8;
CSCTL1 = DCOFSEL_3 | DCORSEL;
CSCTL2 = LAST__LFSTCLK | SELS__DCOCLK | SELM__DCODICLK;
CSCTL3 = DCOTL3 = DSCTL1 = 12 =
12;12 = C0 = 12 = 12 = 0;12 = 12 = 0 = 0 = 0;12 = 0 = 0 = 0 = 0 = 0 = 0 //采样时间,S&H=16,
ADC12CTL1上的ADC12 = ADC12SHP | ADC12SSEL_2; //使用采样计时器
ADC12CTL2 || ADC12RES_2; // 12位转换结果
ADC12MCTL0 |= ADC12INCH_14 |~(ADC12DIF); // A1 ADC输入选择;Vref=AVCC
ADC12IER0 |= ADC12IE0; //启用ADC转换完全中断
//禁用GPIO通电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPPM5;
TA0CCTL0 = CCIE; // TACR0中断已启用
TA0CCR0 =3999;
TA0CTL = tassel__SMCLK | MC__UP; // SMCLK,运行模式
同时(1){
__DELAY_CYCLES (5000);
ADC12CTL0 |= ADC12ENC | ADC12SC;//开始采样/转换
TA0CCR0 =(showValADC * 3999)/4095;
__bis_sr_register (LPM0_bits)| GIE);// lPM_modation
,ADC12_ISR0,操作将退出 //用于调试器
}
//
Timer0_A0中断服务例程
#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__)
#pragma vector = TIMER0_ISR_vector
__interrupt void Timer0_A0_ISR(void)
#Elif defined(____G_GA0_)
void _attribute_imer0_imer0_imer0)
#endif
{
P1OUT ^= BIT3;
}
#pragma vector = ADC12_Vector
__interrupt void ADC12_ISR(void){
SWITCH (__偶 数_in_range(ADC12IV, ADC12IV_ADC12OVIFG)){
CASE ADC12IV_NONE:
中断;//
中断CADIF0:中断CADIVEC12:中断CADIVEC; CADIVEC12:中断CADIVEC; CADIF:中断CADIVEC12; CADIVEC12:中断CADIVEC12; CADIVEC12:中断CADIVEC; CADIVEC; CADIVEC12; CADIVEC12:中断CADIVEC:中断CADIVEC; CADIVEC
ADC12BHI
案例ADC12IV_ADC12LOIFG:
中断;//向量8:ADC12BLO
案例ADC12IV_ADC12INIFG:
中断;//向量10:ADC12BIN
案例ADC12IV_ADC12IFG0: //向量12:ADC12MEM0中断
显示值ADC = ADC12MEM0;
// IF (ADC12MEM0 >= 0x7ff) // ADC12MEM0 = A1 > 0.5AVcc?
// P1OUT |= BIT0; // WFP 1.0 = 1
// else
// p1out &=~BIT0; //
矢量1.0 = 0 //从LPM0退出并继续执行main __BIC_SR_REGISTER_ON_EXIT (LPM0_bits);break;Case ADC12IV_ADC12IFG1:Break;// Vector 14:ADC12MEM1 Case ADC12IV_ADC12IFG2:Break;// MEIF16:ADC12M3/ CAMP4
CASE:CADIV
:CA12:CADIVEC12M12M2/ CADIV:CA12:CADIV:CADIV:CA12 ADC12MEM5
CASE ADC12IV_ADC12IFG6:
Break;// Vector 24:ADC12MEM6
CASE ADC12IV_ADC12IFG7:
Break;// Vector 26:ADC12MEM7
CASE ADC12IV_ADC12IFME8:
Break;// Vector 28:ADC12MEM8
:ADC1232 CASE:CAMP12
:CA12:CADIF12
ADC12MEM12
CASE ADC12IV_ADC12IFG13:
Break;// Vector 38:ADC12MEM13
CASE ADC12IV_ADC12IFG14:
Break;// Vector 40:ADC12MEM14
CASE ADC12IV_ADC12IFG15:
Break;// Vector ADC1218
:CAMP12
:ADC1216
ADC12MEM19
CASE ADC12IV_ADC12IFG20:
Break;// Vector 52:ADC12MEM20
CASE ADC12IV_ADC12IFG21:
Break;// Vector 54:ADC12MEM21
CASE ADC12IV_ADC12IFG22:
Break;// CAME56:ADC12MEM22
:ADC12DIVector ADC1224/
CASE:ADC1224: CAMP12DIVector ADC1224/ CAMP1224: ADC12DIVector ADC1224: CAMP12
ADC12MEM26
CASE ADC12IV_ADC12IFG27:
Break;// Vector 66:ADC12MEM27
CASE ADC12IV_ADC12IFG28:
Break;// Vector 68:ADC12MEM28
CASE ADC12IV_ADC12IFG29:
Break;// CASE:ADC12EC1276 CAMEM29:
CAMP12
:ADC1231 CAMEDIV
:CADIV:CADIV:CADIV CADIV:ADC1231/ ADC1274 CADIV:CADIV:CADIV:CADIV:ADC12DIV CADIV:CADIV:CADIV:ADC12IDIV:ADC12IDIV:CADIV:CADIV CA12