Vragen omtrend het programmeren van een Stellaris Launchpad

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
Na redelijk wat ervaring opgedaan te hebben met 8bit microcontrollers ben ik nu bezig met een Stellaris Launchpad. Uiteraard heb ik de uitleg op hun website inclusief de filmpjes doorgenomen maar ik loop nu al tegen een probleem aan.

Wat ik probeer te doen is simpelweg RC5 hoog te maken, dit doe ik door een aanpassing in het standaard led blink programma (project0 om precies te zijn). Het probleem is nu dat RC5 meeknipperd met de led, terwijl hij gewoon hoog zou moeten blijven. Met behulp van de debugger heb ik aangegeven welke regels hiervoor zorgen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"


#define RED_LED   GPIO_PIN_1
#define BLUE_LED  GPIO_PIN_2
#define GREEN_LED GPIO_PIN_3


int
main(void)
{
    //
    // Setup the system clock to run at 50 Mhz from PLL with crystal reference
    //
    SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|
                    SYSCTL_OSC_MAIN);

    //
    // Enable and configure the GPIO port for the LED operation.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, RED_LED|BLUE_LED|GREEN_LED|GPIO_PIN_4);

    // stel portc in
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
    GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_5,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_DIR_MODE_OUT);


    while(1)
    {
        // maakt pc5 laag, wat ik niet verwachte
        GPIOPinWrite(GPIO_PORTF_BASE, RED_LED|BLUE_LED|GREEN_LED|GPIO_PIN_4, RED_LED|BLUE_LED|GREEN_LED|GPIO_PIN_4);

        // heeft geen invloed op pc5, terwijl ik verwacht dat hij hem hoog maakt
        GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_PIN_5);

        SysCtlDelay(2000000);

        GPIOPinWrite(GPIO_PORTF_BASE, RED_LED|BLUE_LED|GREEN_LED, BLUE_LED);

        SysCtlDelay(2000000);

        // pc5 wordt hoog door deze regel, ook niet verwacht
        GPIOPinWrite(GPIO_PORTF_BASE, RED_LED|BLUE_LED|GREEN_LED, GREEN_LED);

        SysCtlDelay(2000000);
    }
}


Ik begrijp hier niets van.

Acties:
  • 0 Henk 'm!

  • Dogooder
  • Registratie: April 2004
  • Laatst online: 23:49

Dogooder

dus...

Ik heb geen verstand van dit specifieke board, maar ik zie in de setup PortF staan en jij gebruikt PortC. Verder denk ik dat je je even moet verdiepen in masks. Zonder achtergrond kennis zie ik helaas niet zo 1 2 wat je nu precies naar de port schrijft. Ik denk dat je de waardes moet XORen in de mask of iets in die richting.

Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
Het klopt dat portF wordt ingesteld, dit is deel van het originele project en hier is de led dus op aangesloten die knipperd en dit ook hoort te doen. De uitgang van pc5 zou echter de hele tijd hoog moeten zijn, maar is dit dus niet.

Ik heb mij zeker verdiept in de masks en naar mijn weten werken deze zo:
je geeft een mask mee, bv: 0101 0101
en je geeft een getal, bv 1111 1111
Nu zorgt het mask ervoor dat de bits op positie 1,3,5,7 in dit geval enkel in enen worden omgezet, de rest wordt genegeerd. Dit is ook hoe ik het heb gebruikt.

Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
Niemand?

Mijn vraag is dus waarom portC pint5 hier hoog wordt:

GPIOPinWrite(GPIO_PORTF_BASE, RED_LED|BLUE_LED|GREEN_LED, GREEN_LED);

Hier laag wordt:

GPIOPinWrite(GPIO_PORTF_BASE, RED_LED|BLUE_LED|GREEN_LED|GPIO_PIN_4, RED_LED|BLUE_LED|GREEN_LED|GPIO_PIN_4);


En er hier niets gebeurd:

GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_PIN_5);

Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Tja ik had je topic ook al gezien, maar weinig ideeën, enige die ik heb:

Je kijkt naar de verkeerde pin, het is helemaal niet portc, pin 5 (klinkt niet heel waarschijnlijk)
De definities zijn fout (klinkt nog onwaarschijnlijker)
Je runt andere code dan dat je denkt dat je runt (kan niet echt als je hem in debug mode heb)
Er staat standaard intern een optie aan dat hij wat pinnen aan elkaar heeft verbonden (lijkt me ook nogal vreemd).

Kan je met je debugger zien wat er in die functie gebeurd? En wat de waardes zijn van je GPIO registers?

Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
ik weet zker dat ik naar de juiste pin kijk, de defenities zijn gewoon uit voorbeelden.
Ik run de juiste code, als ik naar het portc register kijk zie ik steeds dit (het vernaderd dus niet):

GPIO_PORTC
GPIO_DATA 0x0000002D GPIO Data [Memory Mapped]
GPIO_DIR 0x00000020 GPIO Direction [Memory Mapped]
GPIO_IS 0x00000000 GPIO Interrupt Sense [Memory Mapped]
GPIO_IBE 0x00000000 GPIO Interrupt Both Edges [Memory Mapped]
GPIO_IEV 0x00000000 GPIO Interrupt Event [Memory Mapped]
GPIO_IM 0x00000000 GPIO Interrupt Mask [Memory Mapped]
GPIO_RIS 0x0000000F GPIO Raw Interrupt Status [Memory Mapped]
GPIO_MIS 0x00000000 GPIO Masked Interrupt Status [Memory Mapped]
GPIO_ICR 0x00000000 GPIO Interrupt Clear [Memory Mapped]
GPIO_AFSEL 0x0000000F GPIO Alternate Function Select [Memory Mapped]
GPIO_DR2R 0x000000FF GPIO 2-mA Drive Select [Memory Mapped]
GPIO_DR4R 0x00000000 GPIO 4-mA Drive Select [Memory Mapped]
GPIO_DR8R 0x00000000 GPIO 8-mA Drive Select [Memory Mapped]
GPIO_ODR 0x00000000 GPIO Open Drain Select [Memory Mapped]
GPIO_PUR 0x0000000F GPIO Pull-Up Select [Memory Mapped]
GPIO_PDR 0x00000000 GPIO Pull-Down Select [Memory Mapped]
GPIO_SLR 0x00000000 GPIO Slew Rate Control Select [Memory Mapped]
GPIO_DEN 0x0000002F GPIO Digital Enable [Memory Mapped]
GPIO_LOCK 0x00000001 GPIO Lock [Memory Mapped]
GPIO_CR 0x000000F0 GPIO Commit [Memory Mapped]
GPIO_AMSEL 0x00000000 GPIO Analog Mode Select [Memory Mapped]
GPIO_PCTL 0x00001111 GPIO Port Control [Memory Mapped]
GPIO_ADCCTL 0x00000000 GPIO ADC Control [Memory Mapped]
GPIO_DMACTL 0x00000000 GPIO DMA Control [Memory Mapped]
GPIO_SI 0x00000000 GPIO Select Interrupt [Memory Mapped]

Als ik kijk naar GPIO_DATA van PortF kijk veranderd het daar wel.

Acties:
  • 0 Henk 'm!

  • DaWaN
  • Registratie: Oktober 2002
  • Laatst online: 22:48

DaWaN

'r you wicked ??

Gaat het hier om de http://www.ti.com/tool/EK-LM4F120XL ?

If you do not change direction, you may end up where you are heading


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Je zegt dat er niks verandert in GPIO PORTC registers, en dat is ook als die LED wel aan gaat? Dan kan die LED niet aan een GPIO van PORT C zitten.

Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
@dawan, ja die is het

@sissors, als ik echter de print op het board moet geloven is dit wel het geval.

Acties:
  • 0 Henk 'm!

  • huub8
  • Registratie: Maart 2009
  • Laatst online: 28-06-2021
Na alles opnieuw te maken doet hij het vreemd genoeg nu wel. Maar ik loop nu tegen een nieuw probleem aan, ik heb namelijk een scherm met een sd1289 controller, die ik voorheen aanstuurde met een 8 bit pic in mikroC. Nu wil ik dit overzetten naar de stellaris, hieronder staat de functie voor het vullen van het scherm met een bepaalde kleur:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void
TFT_Fill(int color)
{
  int i,j;
  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_6, 0);
  TFT_Set_Address(0,0,239,319);
  Write_Data(color);
  for(i = 0; i <= 319; i++)
  {
    for(j = 0; j <= 239; j++)
    {
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 0);
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, GPIO_PIN_4);
    }
  }
  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_PIN_6);
}

maar door een voor mij onbekende reden veranderd de waarde van color bij de gpio pin write regel, iemand een idee hoe dit kan?

(color veranderd naar 1073758208 in mijn debugger, het enige wat ik kan vinden is als ik de pin write regel in ga, dan zie ik dit staan in mijn lijst met variabelen: ulPort unsigned long 1073758208 Register R0)

[ Voor 11% gewijzigd door huub8 op 29-06-2013 16:27 ]

Pagina: 1