Ich versuche, ein Programm mit meinem MSP430FR6989 von Texas Instruments zu machen. Ich sende ein analoges Signal an mein ADC-Modul im uC, das es in ein digitales Signal umwandelt. Wenn der Wert größer als 0x800 ( 1,65 V ) ist, setze eine blaue LED, andernfalls lösche die blaue LED
Ich versuche das mit Interrupts.
Dies ist ein Ausschnitt meines Codes
EDIT2 Ich habe den gesamten Code anstelle des Snippets hinzugefügt
#include <msp430.h>
#define ENABLE_PINS 0xFFFE
void ADC_SETUP (void);
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
PM5CTL0 = ENABLE_PINS;
P4DIR = BIT3;
ADC_SETUP ();
ADC12IER0 = ADC12IE0;
_BIS_SR(GIE);
ADC12CTL0 = ADC12CTL0 | ADC12ENC;
ADC12CTL0 = ADC12CTL0 | ADC12SC;
while(1);
return 0;
}
void ADC_SETUP (void)
{
#define ADC12_SHT_16 0x0200
#define ADC12_ON 0x0010
#define ADC12_SHT_SRC_SEL 0x0200
#define ADC12_12BIT 0x0020
#define ADC12_P92 0x000A
ADC12CTL0 = ADC12_SHT_16 | ADC12_ON;
ADC12CTL1 = ADC12_SHT_SRC_SEL;
ADC12CTL2 = ADC12_12BIT;
ADC12MCTL0 = ADC12_P92;
}
#pragma vector = ADC12_VECTOR//0xFFEA//ADC12_VECTOR
__interrupt void ADC12_ISR (void)
{
if(ADC12MEM0 > 0x0800)
P4OUT = BIT3;
else
P4OUT = 0x00;
ADC12CTL0 = ADC12CTL0 | ADC12SC;
}
Wenn ich es baue, bekomme ich diese Warnung.
#2580-D Pragma vector = akzeptiert numerische Argumente oder "unused_interrupt", aber nicht ADC12_VECTOR
Wenn ich es debugge und mein uC zu Zeile A geht und das ADC12SC-Bit gesetzt ist, geht es zu isr_trap.asm und mein uC bleibt dort hängen
Bitte helfen Sie mir bei diesem Problem.
Beginn von EDIT_0
MSP430FR6989
Code Composer Studio 6.1.0
Compiler: TI v4.4.3
Ende von EDIT_0
Beginn von EDIT_1
Ich kann die .map-Datei hier nicht kopieren und einfügen, da sie zu groß ist, da ich die Zeichenbeschränkung für diesen Beitrag überschritten habe.
Stattdessen habe ich die Datei in eine Textdatei kopiert und an diesen Link gesendet.
Sie heißt ADC_ISR_UDEMY.map.txt
Ende von EDIT_1
Beginn von EDIT_3
Entschuldigung für die späte Antwort, ich schätze die Hilfe aller in diesem Thread.
Ich habe versucht, 3 Projekte zu machen, eines mit Timer A0 CCR0 ISR ( ISR_TRAP_TIMER_TEST ), eines mit ADC12_B ISR ( ISR_TRAP_ADC_TEST ) und eines mit ADC12_B isr mit @GVelascoh Header ( ISR_TRAP_ADC_HEADER_2 ).
ISR_TRAP_TIMER_TEST funktionierte gut, die P1.0 LED blinkte
#include <msp430.h>
#define ENABLE_PINS 0xFFFE
void init_Timer (void);
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
PM5CTL0 = ENABLE_PINS;
P1DIR = BIT0;
init_Timer ();
_BIS_SR(GIE);
while(1);
return 0;
}
void init_Timer (void)
{
TA0CTL = TASSEL__ACLK | MC__UP;
TA0CCR0 = 3000;
TA0CCTL0 = CCIE;
}
#pragma vector = TIMER0_A0_VECTOR //TA0 CCR0
__interrupt void Test_ISR (void)
{
P1OUT = P1OUT ^ BIT0;
//clear the flag
}
Bauen:
**** Build of configuration Debug for project ISR_TRAP_TIMER_TEST ****
"C:\\ti\\ccsv6\\utils\\bin\\gmake" -k all
'Building file: ../main.c'
'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/bin/cl430" -vmspx --abi=eabi --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/include" --advice:power=all --advice:hw_config=all -g --define=__MSP430FR6989__ --diag_warning=225 --display_error_number --diag_wrap=off --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="main.pp" "../main.c"
"../main.c", line 19: warning #112-D: statement is unreachable
"../main.c", line 17: remark #1527-D: (ULP 2.1) Detected SW delay loop using empty loop. Recommend using a timer module instead
'Finished building: ../main.c'
' '
'Building target: ISR_TRAP_TIMER_TEST.out'
'Invoking: MSP430 Linker'
"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/bin/cl430" -vmspx --abi=eabi --data_model=restricted --use_hw_mpy=F5 --advice:power=all --advice:hw_config=all -g --define=__MSP430FR6989__ --diag_warning=225 --display_error_number --diag_wrap=off --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --printf_support=minimal -z -m"ISR_TRAP_TIMER_TEST.map" --heap_size=160 --stack_size=160 --cinit_hold_wdt=on -i"C:/ti/ccsv6/ccs_base/msp430/include" -i"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/lib" -i"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/include" -i"C:/ti/ccsv6/ccs_base/msp430/lib/5xx_6xx_FRxx" -i"C:/ti/ccsv6/ccs_base/msp430/lib/FR59xx" --reread_libs --priority --warn_sections --display_error_number --diag_wrap=off --xml_link_info="ISR_TRAP_TIMER_TEST_linkInfo.xml" --use_hw_mpy=F5 --rom_model -o "ISR_TRAP_TIMER_TEST.out" "./main.obj" "../lnk_msp430fr6989.cmd" -l"libmath.a" -l"libc.a"
<Linking>
remark #10372-D: (ULP 4.1) Detected uninitialized Port A in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port B in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port C in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port D in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port E in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
'Finished building target: ISR_TRAP_TIMER_TEST.out'
' '
**** Build Finished ****
ISR_TRAP_ADC_TEST Der uC geht immer noch zur isr_trap.asm
#include <msp430.h>
#define ENABLE_PINS 0xFFFE
void init_ADC (void);
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
PM5CTL0 = ENABLE_PINS;
P1DIR = BIT0;
init_ADC ();
_BIS_SR(GIE);
ADC12CTL0 = ADC12CTL0 | ADC12ENC;
ADC12CTL0 = ADC12CTL0 | ADC12SC;
while(1);
return 0;
}
void init_ADC (void)
{
ADC12CTL0 = ADC12ON | ADC12SHT0_2;
ADC12CTL1 = ADC12SHP;
ADC12CTL2 = ADC12RES__12BIT;
ADC12MCTL0 = ADC12INCH_10;
ADC12IER0 = ADC12IE0;
}
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR (void)
{
if(ADC12MEM0 > 0x0800)
P1OUT = BIT0;
else
P1OUT = 0x00;
}
Bauen:
**** Build of configuration Debug for project ISR_TRAP_ADC_TEST ****
"C:\\ti\\ccsv6\\utils\\bin\\gmake" -k all
'Building file: ../main.c'
'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/bin/cl430" -vmspx --abi=eabi --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/include" --advice:power=all --advice:hw_config=all -g --define=__MSP430FR6989__ --diag_warning=225 --display_error_number --diag_wrap=off --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="main.pp" "../main.c"
"../main.c", line 22: warning #112-D: statement is unreachable
"../main.c", line 20: remark #1527-D: (ULP 2.1) Detected SW delay loop using empty loop. Recommend using a timer module instead
"../main.c", line 35: warning #2580-D: pragma vector= accepts numeric arguments or "unused_interrupts" but not ADC12_VECTOR
'Finished building: ../main.c'
' '
'Building target: ISR_TRAP_ADC_TEST.out'
'Invoking: MSP430 Linker'
"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/bin/cl430" -vmspx --abi=eabi --data_model=restricted --use_hw_mpy=F5 --advice:power=all --advice:hw_config=all -g --define=__MSP430FR6989__ --diag_warning=225 --display_error_number --diag_wrap=off --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --printf_support=minimal -z -m"ISR_TRAP_ADC_TEST.map" --heap_size=160 --stack_size=160 --cinit_hold_wdt=on -i"C:/ti/ccsv6/ccs_base/msp430/include" -i"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/lib" -i"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/include" -i"C:/ti/ccsv6/ccs_base/msp430/lib/5xx_6xx_FRxx" -i"C:/ti/ccsv6/ccs_base/msp430/lib/FR59xx" --reread_libs --priority --warn_sections --display_error_number --diag_wrap=off --xml_link_info="ISR_TRAP_ADC_TEST_linkInfo.xml" --use_hw_mpy=F5 --rom_model -o "ISR_TRAP_ADC_TEST.out" "./main.obj" "../lnk_msp430fr6989.cmd" -l"libmath.a" -l"libc.a"
<Linking>
remark #10372-D: (ULP 4.1) Detected uninitialized Port A in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port B in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port C in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port D in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port E in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
'Finished building target: ISR_TRAP_ADC_TEST.out'
' '
**** Build Finished ****
ISR_TRAP_ADC_HEADER_2 Ich habe immer noch das gleiche Problem, wo das uC zu isr_trap.asm geht (ich hoffe, ich habe deinen Header richtig hinzugefügt @GVelascoh)
#include <msp430.h>
#define ENABLE_PINS 0xFFFE
void init_ADC (void);
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
PM5CTL0 = ENABLE_PINS;
P1DIR = BIT0;
init_ADC ();
_BIS_SR(GIE);
ADC12CTL0 = ADC12CTL0 | ADC12ENC;
ADC12CTL0 = ADC12CTL0 | ADC12SC;
while(1);
return 0;
}
void init_ADC (void)
{
ADC12CTL0 = ADC12ON | ADC12SHT0_2;
ADC12CTL1 = ADC12SHP;
ADC12CTL2 = ADC12RES__12BIT;
ADC12MCTL0 = ADC12INCH_10;
ADC12IER0 = ADC12IE0;
}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
if(ADC12MEM0 > 0x0800)
P1OUT = BIT0;
else
P1OUT = 0x00;
}
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void)
#else
#error Compiler not supported!
#endif
Bauen:
**** Build of configuration Debug for project ISR_TRAP_ADC_HEADER_2 ****
"C:\\ti\\ccsv6\\utils\\bin\\gmake" -k all
'Building file: ../main.c'
'Invoking: MSP430 Compiler'
"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/bin/cl430" -vmspx --abi=eabi --data_model=restricted --use_hw_mpy=F5 --include_path="C:/ti/ccsv6/ccs_base/msp430/include" --include_path="C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/include" --advice:power=all --advice:hw_config=all -g --define=__MSP430FR6989__ --diag_warning=225 --display_error_number --diag_wrap=off --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --printf_support=minimal --preproc_with_compile --preproc_dependency="main.pp" "../main.c"
"../main.c", line 23: warning #112-D: statement is unreachable
"../main.c", line 21: remark #1527-D: (ULP 2.1) Detected SW delay loop using empty loop. Recommend using a timer module instead
"../main.c", line 37: warning #2580-D: pragma vector= accepts numeric arguments or "unused_interrupts" but not ADC12_VECTOR
'Finished building: ../main.c'
' '
'Building target: ISR_TRAP_ADC_HEADER_2.out'
'Invoking: MSP430 Linker'
"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/bin/cl430" -vmspx --abi=eabi --data_model=restricted --use_hw_mpy=F5 --advice:power=all --advice:hw_config=all -g --define=__MSP430FR6989__ --diag_warning=225 --display_error_number --diag_wrap=off --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --printf_support=minimal -z -m"ISR_TRAP_ADC_HEADER_2.map" --heap_size=160 --stack_size=160 --cinit_hold_wdt=on -i"C:/ti/ccsv6/ccs_base/msp430/include" -i"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/lib" -i"C:/ti/ccsv6/tools/compiler/ti-cgt-msp430_4.4.3/include" -i"C:/ti/ccsv6/ccs_base/msp430/lib/5xx_6xx_FRxx" -i"C:/ti/ccsv6/ccs_base/msp430/lib/FR59xx" --reread_libs --priority --warn_sections --display_error_number --diag_wrap=off --xml_link_info="ISR_TRAP_ADC_HEADER_2_linkInfo.xml" --use_hw_mpy=F5 --rom_model -o "ISR_TRAP_ADC_HEADER_2.out" "./main.obj" "../lnk_msp430fr6989.cmd" -l"libmath.a" -l"libc.a"
<Linking>
remark #10372-D: (ULP 4.1) Detected uninitialized Port A in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port B in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port C in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port D in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
remark #10372-D: (ULP 4.1) Detected uninitialized Port E in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
'Finished building target: ISR_TRAP_ADC_HEADER_2.out'
' '
**** Build Finished ****
Ende von EDIT_3
Beginn von EDIT_4
Vielen Dank für Ihre Hilfe, ich habe mein Problem behoben, ich habe CCS v6.1.0 deinstalliert und CCS 8.2.0 installiert, dasselbe Programm geschrieben, und das Problem ist weg.
Ich dachte, ich würde das teilen, also lasse ich es nicht hängen.
Ende von EDIT_4
Aus Ihrer Kartendatei geht hervor, dass Ihre ISR-Funktion nicht kompiliert ist, da ihr kein Code zugeordnet ist. In der "Abschnittszuordnungskarte" können Sie feststellen, dass kein Hinweis auf das Symbol vorhanden istADC12_ISR
.text:_isr
* 0 00004400 00000020
00004400 0000001a rts430x_lc_rd_eabi.lib : boot_special.obj (.text:_isr:_c_int00_noargs_noexit)
0000441a 00000006 : isr_trap.obj (.text:_isr:__TI_ISR_TRAP)
Dies ist ein Teil einer Kartendatei für ein anderes Projekt, das ich habe, sehen Sie, wie ISR-Symbole darin detailliert sind:
.text 0 0000c600 00000d30
0000c600 0000023c main.obj (.text:main)
...
0000cc62 0000007e my-lib-Debug_2.lib : events.obj (.text:events_insert)
0000cce0 0000007c : i2c_master.obj (.text:_isr:USCIB0_ISR)
0000ce30 0000005e port_interrupts.obj (.text:_isr:Port3_ISR)
...
Versuchen Sie, Ihr Projekt zu bereinigen, und erstellen Sie es erneut. Welche Dateien schließen Sie auch ein, da der von Ihnen gepostete Code so wie er ist nicht kompilierbar ist. Außerdem sehe ich aus der Map-Datei, dass Sie eine andere Funktion haben, ADC_SETUP.
Bearbeiten: Ich sehe nur, dass Sie in Ihrem Code den Watchdog nicht ausschalten, der beim Start aktiviert ist. Normalerweise wird dazu diese Zeile am Anfang der Hauptfunktion hinzugefügt:WDTCTL = WDTPW | WDTHOLD;
Wenn Ihr Problem auf den Compiler zurückzuführen ist, helfen Ihnen diese Präprozessorbedingungen:
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void)
#else
#error Compiler not supported!
#endif
ISR_trap()
ist dies die Standardfunktion für die Verarbeitung von Interrupts, das heißt, falls Sie einen Interrupt aktivieren, aber keinen ISR definieren (oder vergessen), ISR_trap()
ihn zu verarbeiten. Standardmäßig zeigen alle Interrupt-Vektoren auf diese Funktion.'Building target: ISR_TRAP_ADC_HEADER_2.out' 'Invoking: MSP430 Linker'
dass dies ausreicht oder ich etwas anderes tun solltelnk_msp430fr6989.cmd
, das ist die Linker-Datei. Übrigens, warum verwenden Sie alte Versionen von TI-Tools? Das neueste CCS ist v8 und der TI-Compiler hat sogar seine Versionierungssyntax geändertSie müssen dem Compiler mitteilen, welchen Mikrocontroller Sie verwenden. Dies wird beim Erstellen eines Projekts abgefragt, kann aber später mit Projekt → Eigenschaften → Allgemein → Gerät → Variante geändert werden .
ManyYack
Eingebetteter_Typ
Eingebetteter_Typ
Arsenal
CL.
Eingebetteter_Typ
Eingebetteter_Typ
CL.
Eingebetteter_Typ
gustavovelascoh
Eingebetteter_Typ
gustavovelascoh
Eingebetteter_Typ
Eingebetteter_Typ
CL.
#if !defined (__MSP430FR5989__)
#error __MSP430FR5989__ is not defined
#endif
Erhalten Sie eine Fehlermeldung?