Interrupt Problem Arduino Due

OP #3627282
Lesenswert?

Guten morgen zusammen,

ich habe folgendes Problem: und zwar habe ich ein Mikrofon, welches 
digitale Signale im PDM-Format ausgiebt.
Dieses Mikrofon wird mit einem 2MHz-Clock-Signal angesteuert, mit dem 
selben Takt schickt das Mikrofon die Signale auch raus. Jetzt möchte ich 
diese Signale über ein Interrupt einlesen. Wenn eine bestimmte Anzahl an 
Werten aufgenommen wurde soll der Interrupt deaktiviert werden, damit 
die Werte in Ruhe abgearbeitet werden können. Aber leider kommen keine 
Daten auf meinem Rechner an. Das Clocksignal und die Serielle 
Übertragung ansich funktionieren aber das Zusammenspiel leider nicht.

Habt ihr eine Idee woran es liegen kann?

Vielen dank schon mal im Vorraus!!!
1
volatile int n=0;
2
volatile unsigned char data[65536];
3

4
void setup() {
5
    Serial.begin(9600); 
6
  
7
  pinMode(25, INPUT);
8
  pinMode(29,OUTPUT);
9
  pinMode(7,INPUT);
10
 
11
  digitalWrite(29,HIGH);
12

13
int32_t mask_PWM_pin_7 = digitalPinToBitMask(7);
14

15
REG_PMC_PCER1 = 1<<4;                
16
REG_PIOC_PDR |= mask_PWM_pin_7;      
17
REG_PIOC_ABSR |= mask_PWM_pin_7;     
18
REG_PWM_CLK = 0;                  
19
REG_PWM_CMR6 = 0<<9;               
20
REG_PWM_CPRD6 = 35;        
21
REG_PWM_CDTY6 = 17;                 
22
REG_PWM_ENA = 1<<6; 
23

24
attachInterrupt(7, read, RISING);          
25
}
26

27
void loop() {
28
 
29
int b = 1; 
30
int y = 0;
31

32
  if (n > 65536){
33
    detachInterrupt(7);
34
   
35
   for (int zeiger = 0; zeiger < 65024; zeiger++) {
36

37
      for(int k = 0; k < 512; k++){
38
        y = b * data[k + zeiger];
39
        }
40
        Serial.println(y);
41
        y = 0;
42
    }
43
    delay(1000);  
44
    n = 0;
45

46
    attachInterrupt(7, read, RISING);
47
  }
48
}     
49

50
void read (){
51
  data[n] = REG_PIOD_PDSR & 0x1;   
52
  n=n+1;
53
}

Gruß Olli
Gast #3628818
Lesenswert?

Oliver Reinsdorff schrieb:
> Wenn ich das Clock-Signal auf 100kHz runtersetzt funktioniert es leider
> ebenfalls nicht.

Wenn dein Prozessor mit den Default-Einstellungen läuft, läuft der mit 
1MHz Takt. Da sind auch 100kHz Interrupt-Frequenz noch seeeehr 
sportlich.

Der weiteren schau doch mal ins Datenblatt, wie

> volatile unsigned char data[65536];

mit der SRam-Größe des Prozessors zusammenpasst.

Und dann, obwohl in dem Fall eher akademisch, denkst du bitte auch 
nochmal über diese Zeile nach:

> if (n > 65536){

Vermutlich sind noch mehr Fehler drin, aber die darftst du dann selber 
finden.

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren