Belegung der I/O Bereiche



  • Hallo erstmal, hoffe ihr könnt mir weiterhelfen,

    habe folgendes Problem, studiere zurzeit und mache nebenbei ein Praktikum und muss hier nun c programmieren, nunja, habe nicht wirklich eine ahnugn davon....jedenfalls nicht in der art womit meine aufgabe zu tun hat.
    bin mich da noch seitenweise am einlesen.

    also ich sollte zuerst die belegung der I/O bereiche festlegen und wäre sher dankbar wenn mir dabei jemand helfen kann damit ich etws vor mir habe und darauf aufbauen kann.

    der microcontroller: infineon xc161cj

    ich muss nun sämtliche ports des prozessors im programm definieren.

    hier ein beispiel eines ports:

    Port: P0L.0
    I/O: O
    Funktion: Shutdown_V_INT
    Konfiguration/Werte: Ausgang, Open Drain
    0 = 3.3v Spannungsregler für Shape und Signal
    Detectors eingeschaltet.
    1 = 3.3v Spannungsregler für Shape und Signal
    Detectors ausgeschaltet

    wie kann ich das in c realisieren? 😕

    vielen dank im voraus..



  • Hallo,
    ich hatte auch mal mit einem infineon-contorller zu tun. Dabei handelte es sich um den c167.

    Die Ports liesen sich über header-dateien direkt ansprechen, also

    #include <reg167.h>
    #include <intrins.h>
    
    void main(void)
    {
    
    P7_1=0;
    
    while (1)
    {
    P7_1=~P7_1; //gibt abwechselnd high und low am port 7.1 aus
    }
    
    }
    

    Werte wie Referenzspannungen für AD-Wandler etc... sollten sich über die compiler-software einstellen lassen. Wir arbeiteten mit dem tool dave von infineon. Such dir am besten ne beschreibung zur compiler software oder frag die leute in deiner abteilung.

    bash0r



  • folgende hilfmittel hab ich heute noch bekommen:

    Keil uVision 3
    Keil Ulink
    Dave 2.1

    kann nun die einstellungen über dave tätigen und den code nachher im uvison 3 compilieren und auf den controller laden...

    hat mir viel arbeit genommen...

    nungut bin immernoch an den einstellungen im dave,
    UART
    TxD
    RxD
    CAPIN
    T3EUD
    T4IN
    T3IN
    T2IN
    SSI
    MRST
    MTSR
    SCLK
    CLKOUT

    was bedeutet das genau?



  • T2 - T4IN sind vermutlich, aber höchstwahrscheinlich die inputports für die Timer 2 - 4, die müssen mit irgendwelchen ports auf dem controller-board verbunden sein.
    Mit ihnen kann der Timer durch externe signale hochgezählt werden.

    mhm, die anderen pins kommen mir jetzt so auf die schnelle unbekannt vor. CLKOUT ist der Pin, an dem ein Ausgangstakt abgegriffen werden kann. Ob dieser der Ursprungstakt des Controllers ist oder schon durch Frequenzteiler gelaufen ist, kann ich dir nicht sagen.
    Ich würde vorschlagen, du suchst mal selbst und zwar auf http://www.keil.com/dd/chip/3320.htm

    cu

    bash0r 👍



  • Wenn keine Definitionen vorliegen, kann man das auch selbst machen, hab' mal exemplarisch Abschnitte aus einem M16C- Header (sfr62.h) geholt:

    1. Adresse definieren

    #pragma ADDRESS		p6_addr		03ecH		/* Port P6 */
    #pragma ADDRESS		pd6_addr	03eeH		/* Port P6 direction register */
    

    2. Zugriffsstrukturen anlegen
    Damit man entweder als char oder bitweise auf den Port zugreifen kann, werden entsprehende union und struct gebaut:

    /********************************************************
    *	declare SFR bit		*
    ********************************************************/
    struct bit_def {
    		char	b0:1;
    		char	b1:1;
    		char	b2:1;
    		char	b3:1;
    		char	b4:1;
    		char	b5:1;
    		char	b6:1;
    		char	b7:1;
    };
    union byte_def{
    	struct bit_def bit;
    	char	byte;
    };
    

    3. Port definieren
    Jetzt werden die Portbezeichner an der passenden Adresse erzeugt

    /*------------------------------------------------------
    	Port P6  bit
    ------------------------------------------------------*/
    union byte_def p6_addr;
    #define		p6		p6_addr.byte
    
    #define		p6_0		p6_addr.bit.b0		/* Port P6  bit0 */
    #define		p6_1		p6_addr.bit.b1		/* Port P6  bit1 */
    #define		p6_2		p6_addr.bit.b2		/* Port P6  bit2 */
    #define		p6_3		p6_addr.bit.b3		/* Port P6  bit3 */
    #define		p6_4		p6_addr.bit.b4		/* Port P6  bit4 */
    #define		p6_5		p6_addr.bit.b5		/* Port P6  bit5 */
    #define		p6_6		p6_addr.bit.b6		/* Port P6  bit6 */
    #define		p6_7		p6_addr.bit.b7		/* Port P6  bit7 */
    
    /*------------------------------------------------------
    	Port P6 direction register  bit
    ------------------------------------------------------*/
    union byte_def pd6_addr;
    #define		pd6		pd6_addr.byte
    
    #define		pd6_0		pd6_addr.bit.b0		/* P6 direction register  bit0 */
    #define		pd6_1		pd6_addr.bit.b1		/* P6 direction register  bit1 */
    #define		pd6_2		pd6_addr.bit.b2		/* P6 direction register  bit2 */
    #define		pd6_3		pd6_addr.bit.b3		/* P6 direction register  bit3 */
    #define		pd6_4		pd6_addr.bit.b4		/* P6 direction register  bit4 */
    #define		pd6_5		pd6_addr.bit.b5		/* P6 direction register  bit5 */
    #define		pd6_6		pd6_addr.bit.b6		/* P6 direction register  bit6 */
    #define		pd6_7		pd6_addr.bit.b7		/* P6 direction register  bit7 */
    

    Natürlich liegen die Adressen beim Infineon anders, aber bei linear adressierten Controllern funktioniert die Methode immer - weiß zwar nicht, ob das wirklich ANSI- konform ist 😕 , aber damit wird nach so einer copy&paste- Orgie die Handhabung einzelner Bits freundlicher:

    4. Gebrauch im Programm

    #include "sfr62.h" /* header mit Definition einlesen */
    ...
    
    int main(void()
    {
    pd6_6 = 0x01 /* Pin6 auf Port 6 als Ausgang schalten */
    p6_6 = 0x01  /* Pin6, Port 6 auf High setzen */
    p6_6 = 0x00  /* Pin6, Port 6 auf Low setzen */
    }
    

    Natürlich geht's auch mit Masken, aber Embedded- Compiler erzeugen so immer schnelleren Code ... hoffe geholfen zu haben 😃



  • Vergessene Strichpunkte bitte selbst einstreuen!



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • vielen dank für die rasche hilfe, hat mir sehr geholfen...
    mein nächsten problem steht schon vor der tür... 😕

    mehr dazu ine in einem anderen topic


Anmelden zum Antworten