Jag har med mycket möda och stort besvär funnit att nedan visade avbrottsrutin fungerar. Den skriver snällt ut värden från analogport A0 på en GLCD. Nu till själva problemet. Jag vill ha tag i värdet "viper" för att använda utanför denna rutin, den skall nämligen ändra en visares läge på displayen. Hur gör jag för att kkomma åt värdet på viper i main-loopen utanför "extern C".
Jag hade kunnat göra programmet i MPLAB X om jag bara finge min PICkit3 någon gång. Men jag tänkte jag kunde passa på att kolla in i Arduino.världen lite under tiden, så därför sitter jag nu här med skägget i brevlådan.
Lägg märke till att det är UNO32 med PIC32 µC jag håller på med. Det är helt annorlunda avbrottshantering på denna än vad den vanliga UNO använder.
Jag antar att man måste delarera viper globalt, men hittar ingen syntax som fungerar.
Kod: Markera allt
#include <plib.h>
#define SYS_FREQ (80000000)
#include <GLCD.h>
void setup()
{
GLCD.begin(34, 36, 37, 26, 27, 28, 29, 30, 31, 32, 33, 2, 7, 8);
// Clear the screen
GLCD.cls();
GLCD.update();
SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
T1CON =0;
T1CON =7984; //T1_PS_1_8;//0x0; // Stop the Timer and Reset Control register
// Set prescaler at 1:256, internal clock source
TMR1 = 0x0; // Clear timer register
PR1 = 65535; // 16 bitars tal max
// Load period register
IPC1SET = 0x000C; // Set priority level=3
IPC1SET = 0x0001; // Set subpriority level=1
IFS0CLR = 0x0010; // Clear Timer interrupt status flag
IEC0SET = 0x0010; // Enable Timer interrupts
T1CONSET = T1_ON; //0x8000; // Start Time
}
void loop(){
// ************ Här vill jag komma åt viper. ************
....
....
....
}
extern "C"
{
void __ISR(_TIMER_1_VECTOR,ipl3) pwmOn(void)
{
String viper = String(analogRead(A0), DEC);
GLCD.setCursor(0,0);
GLCD.print(viper +" ");
GLCD.update();
mT1ClearIntFlag(); // Clear interrupt flag
}
}