mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Externer Interrupt über i/o port 1 pin 7


Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,

ich arbeite auf einen cc2431 mit 8051 cpu. habe jetzt über i/o ports 
eine peripherie angehängt. nun würde ich gerne auf den port 1 pin 7 
einen interrupt initialisieren der bei ankommenden daten ausgelöst wird. 
kann mir da vielleicht jemand ein kochrezept dafür geben bzw. ein 
kleines beispiel.

vielen dank,

gruß jimbo

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schnell ?

Nicht interrupfähige Pins kann man im Timerinterrupt pollen.


Peter

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"wie schnell?"

=> in welchen zyklus der interrupt ausgelöst werden soll?

die pins sind für interrupts ausgelegt.

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs jetzt so gemacht funktioniert aber nicht.

initISR()
EAL = 0x01 //Enable all Interrupts
P1IEN = 0x07 //Enable port 1 pin 7 interrupt
INT_ENABLE(INUM_P1INT, INT_ON) //port 1 interrupt enable und setzen der 
vektor
                               //adresse

#pragma vector=P1INT_VECTOR
__interrupt void P1INT_IRQ(void){
  BYTE data;
  if(P1IFG == 0x07) {                //schaue ob pin 7 gesetzt
   ...
  }
  P1IF = FALSE;                     //setze auf 0x00
}

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute mal, der Kommentar ist falsch, beim 8051 kann man nämlich 
keine Interruptvektoren setzen, die sind fest.


Ansonsten, es ist wohl kein Standard-8051 und auch kein Keil Compiler.

Ich kann also nicht sagen, wie bei Deinem Compiler ein Interrupt 
aussehen muß.

Ein Datenblatt des cc2431 mit der Interrupt- und Registerbeschreibung 
habe ich auch nicht gefunden.


Peter

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo peter,

hier der link zum datenblatt (ist vom cc2430, das vom cc2431 verweist 
darauf),

http://www.chipcon.com/files/CC2430_Data_Sheet_rev1p03.pdf

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach der compiler ist ein iar compiler

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also verstehe das nicht.

nochmal initialisierung. bin nach dem schema von seite 51 vorgegangen.

IEN0.EA = 0x01     //Enable all interrupts
IEN2.P1IE = 0x10   //Enable port 1 interrupts
PICTL   = 0x02     //falling edge on input gives interrupt
                   //wenn peripherie interrupt auslöst geht es von 1 auf 
0
P1IEN  = 0x08      //enable 1_7

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok habs hinbekommen. hab vor lauter ... das register P1IEN falsch 
gesetzt.
also hier die lösung um einen interrupt auf den io port 1 pin 7 zu 
setzen.

#pragma vector=P1INT_VECTOR
__near_func __interrupt void P1INT_IRQ(void){
  BYTE data;
  data = P1_7;
  if(P1IFG == 0x07) {
    data = IndirectReadByte(0x04);
    I_STATUS[0] = data;

  }
  IndirectWriteByte(INT_REG, 0x01);
  P1IF = FALSE;
}


void initISRP1_7(void) {
  INT_GLOBAL_ENABLE(TRUE);
  INT_ENABLE(INUM_P1INT, INT_ON);
  PICTL = 0x02;
  P1IEN = 0x80;
}

nochmals danke für die hilfe

gruß

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok nochmal ne kleine verbesserung. bei dem vorgänger beispiel habe ich 
vergessen das status register zurück zu setzen.

#pragma vector=P1INT_VECTOR
__near_func __interrupt void P1INT_IRQ(void){
 INT_GLOBAL_ENABLE(INT_OFF);

   P1IFG &= ~0x80;
...
  P1IF = 0x00;
  INT_GLOBAL_ENABLE(INT_ON);
}


void initISRP1_7(void) {
  P1IFG = 0x00;
  INT_GLOBAL_ENABLE(TRUE);
  INT_ENABLE(INUM_P1INT, INT_ON);
  PICTL |= 0x02;
  P1IEN |= 0x80;
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.