SAM D10 Xplained Mini - 00 Vytvorenie vzorového projektu

Zápisník experimentátora

Hierarchy: SAM D10 Xplained Mini

Úvodné oboznámenie sa s vývojovou doskou SAM D10 Xplained Mini. Doska umožňuje otestovať možnosti 32-bitového mikrokontroléra ATSAMD10. Oboznámime sa s možnosťami dosky a vygenerujeme si základný projekt.

Popis dosky

Doska sa pripája k počítaču cez USB konektor. Je to ten istý typ, ktorý je aj na mobilných telefónoch. Jeden USB kábel je aj pribalený ku doske.

Komunikáciu s programom Atmel Studio zabezpečuje ten väčší mikrokontrolér, ktorý obsahuje mEDBG program. Pomocou neho je možné ATSAMD10 programovať a debuggovať. V skutočnosti je to ATmega32U4, ktorý je použitý na niektorých doskách Arduino.

Malý mikrokontrolér v strede je ATSAMD10. Jeho piny sú pripojené na otvory pre odlamovacie lišty, ktoré dodržujú rozmiestnenie pinov na klasickom Arduino Uno. Pozor na to, že mikrokontrolér pracuje na 3,3 V.

Na doske sa nachádzajú ešte tri periférie:

  • Tlačidlo pripojené na pin PA25 a zapojené ako pull-up.
  • LED dióda pripojená na pin PA09.
  • Kapacitný dotykový senzor QTouch je zapojený na pin PA07.

Podrobnosti o doske sa možno dozvedieť na jej domovskej stránke. Nachádza sa na nej aj manuál so základným návodom. K dispozícii je aj schéma dosky.

Základný projekt

V programe Atmel Studio 7.0 si projekt ku doske vygenerujeme nasledovne:

  • V menu vyberieme File/New/Project.
  • Na zobrazenom dialógu si z ponuky vyberieme GCC C ASF Board Project. Do poľa Name napíšeme text samd10_test00. Stlačíme OK.
  • Zobrazí sa dialóg na výber dosky. Použijeme voľbu Select By Board a vyberieme si SAM D10 Xplained Mini.
  • Vygeneruje sa nám vzorový projekt, ktorý bude obsahovať jednoduchý program. Program po stlačení tlačidla na doske zapne LED na doske.

Vygenerovaný projekt sa skladá z množstva súborov, preto sa v tomto úvodnom článku zameriame na popis jednotlivých súborov, ktoré sú pre nás doležité.

  • samd10_test00
    • samd10_test00.atsln
    • .vs
    • samd10_test00
      • samd10_test00.cproj
      • samd10_test00.componentinfo.xml
      • Debug
      • src
        • asf.h
        • main.c
        • ASF
          • common
          • sam0
            • boards
              • samd10_xplained_mini
                • board_init.c
                • samd10_xplained_mini.h
            • drivers
              • port
              • system
                • system.h
                • system.c
                • clock
                  • clock_samd09_d10_d11
                    • clock.c
                • interrupt
                • pinmux
                • power
                • reset
            • utils
          • thirdparty
        • config
          • conf_board.h
          • conf_clocks.h

main.c

Toto je úvodný súbor s funkciou main. Vidíme, že na začiatku sa volá funkcia system_init, ktorej úlohou je nastaviť všetky periférie dosky tak, ako sa nachádzajú zapojené na plošnom spoji. Funkcia sa nachádza v súbore system.c.

Nasleduje samotný program, ktorý podľa toho, či je tlačidlo stlačené, zapína alebo vypína LED na doske. Vidíme použitie niekoľkých funkcií s dlhými názvami a niekoľkých konštánt, ktoré sú uvedené veľkými písmenami. Konštanty sú definované v súbore samd10_xplained_mini.h.

#include <asf.h>

int main (void)
{
    system_init();

    /* Insert application code here, after the board has been initialized. */

    /* This skeleton code simply sets the LED to the state of the button. */
    while (1) {
        /* Is button pressed? */
        if (port_pin_get_input_level(BUTTON_0_PIN) == BUTTON_0_ACTIVE) {
            /* Yes, so turn LED on. */
            port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE);
        } else {
            /* No, so turn LED off. */
            port_pin_set_output_level(LED_0_PIN, !LED_0_ACTIVE);
        }
    }
}

system.c

Funkcia system_init je určená len na to, aby pospúšťala iné inicializačné funkcie. Funkcia system_clock_init je v súbore clock.c a nastavuje hodiny na doske. Funkcia system_board_init je v súbore board_init.c a nastavuje periférie na doske. Ostatné funkcie nie sú pre naše pochopenie dôležité.

void system_init(void)
{
    /* Configure GCLK and clock sources according to conf_clocks.h */
    system_clock_init();

    /* Initialize board hardware */
    system_board_init();

    /* Initialize EVSYS hardware */
    _system_events_init();

    /* Initialize External hardware */
    _system_extint_init();
    
    /* Initialize DIVAS hardware */
    _system_divas_init();
}

clock.c

Tento súbor nemusíme extrémne rozpitvávať. Stačí nám vedieť, že využíva súbor conf_clocks.h, ktorý obsahuje preddefinované nastavenie hodín podľa zapojenia na doske.

conf_clocks.h

V tomto súbore sa nachádza obrovské množstvo definícií, ktoré nastavujú hodiny. Implicitne je to nastavené podľa dosky, ale nič nám nebráni experimentovať s nastaveniami a nastaviť to podľa seba. Treba ale vedieť, čo jednotlivé definície znamenajú a aká je vnútorná stavba hodín v mikrokontroléri. Náhodnými zmenami nedosiahnete nič.

board_init.c

V tomto súbore sa konfigurujú piny v mikrokontroléri tak, ako sú na doske k jednotlivým pinom pripojené tlačidlá a LED. Podobným spôsobom si môžete nastaviť aj vlastné piny, ktoré máte vyvedené na doske.

void system_board_init(void)
{
    struct port_config pin_conf;
    port_get_config_defaults(&pin_conf);

    /* Configure LEDs as outputs, turn them off */
    pin_conf.direction  = PORT_PIN_DIR_OUTPUT;
    port_pin_set_config(LED_0_PIN, &pin_conf);
    port_pin_set_output_level(LED_0_PIN, LED_0_INACTIVE);

    /* Set buttons as inputs */
    pin_conf.direction  = PORT_PIN_DIR_INPUT;
    pin_conf.input_pull = PORT_PIN_PULL_UP;
    port_pin_set_config(BUTTON_0_PIN, &pin_conf);
}

samd10_xplained_mini.h

Vybral som iba niekoľko podstatných definícií zo súboru. Vybral som len tie, ktoré sú používané v kóde funkcií system_board_init a main.

#define LED0_PIN                  PIN_PA09
#define LED0_ACTIVE               true
#define LED0_INACTIVE             !LED0_ACTIVE

#define SW0_PIN                   PIN_PA25
#define SW0_ACTIVE                false
#define SW0_INACTIVE              !SW0_ACTIVE

#define LED_0_PIN                 LED0_PIN
#define BUTTON_0_PIN              SW0_PIN

Záverečné poznámky ku projektu

Vidíte, že základný projekt pre 32-bitové mikrokontroléry, ktorý vygeneruje program Atmel Studio je dosť zložity, ale po bližšom skúmaní to má svoju logiku. Ak by ste si nechali vygenerovať projekty pre iné Xplained dosky, videli by ste, že tento základný princíp je zachovaný a že sa menia iba definície.

Video

Vo videu je popísaná doska a je v ňom vidno aj program, ktorý sa dá stiahnuť na tejto stránke.



Download

30.10.2015


Menu