Marián Kubáň, Peter Barcík UREL, FEKT, VUT Brno
xbarci00@stud.feec.vutbr.cz
xkuban00@stud.feec.vutbr.cz
Vývojový kit AT91SAM9XE je vhodný na vývoj nasledujúcich aplikácií: WEB server, linuxové prostredie, aplikacie s dotykovým displejom, audio aplikácie, RTOS. Na (Obrázku 1) sú vyznačené dôležté časti dosky pri programovaní a odladovaní aplikácie. Doska obsahuje slot pre SD/MMC pamäťové karty. Vstupno-výstupné porty sú vyvedené na jumperové lišty označené ako J23 (PIO-A), J24 (PIO-C), J26 (PIO-B). K procesoru sú pripojené externé pamäte NANDFlash s veľkosťou 256 MB a SDRAM s veľkosťou 64 MB. Okrem integrovaného DA prevodníka je možné pre audio aplikácie použiť externý Audio DAC AT73213 s výstupným zosilňovačom. Prevodník je možné ovládať pomocou I2S zbernice.
Mikrokontrolér AT91SAM9XE512 je založený na 32-bitovom jadre rodiny procesorov ARM926EJ. Dokáže pracovať na frekvencii až 160 MHz. Obsahuje 512 KB pamäti Flash a 16 KB pamäti SRAM taktiež je možné pripojiť externú NAND Flash pamäť, ďalej obsahuje periférie: 2 x USB 2.0 Full speed host port, 1 x USB 2.0 Full speed device port, 4 x USART, 2 x UART, 2 x SPI, SSC (I2S), 2 x TWI (I2C), 6 x 16-bitový časovač, 10-bitový AD prevodník a 2 x interface na MMC kartu.
Návrat na obsah
Pre nahrávanie zdrojových kódov aplikácií existuje množstvo spôsobov. Jedným z najrozšírenejších je použitie progamovacieho agenta SAM-BA [2] a zdrojového *.bin súboru. Je to jednoduchý multi-platformný program, s podporou programovania množstva vývojových kitov, ale aj samostatných mikrokontrolérov ATMEL SAMX. Kľúčové vlastnosti programovacieho agenta SAM-BA sú nasledovné:
S novou verziou 2.10_cdc bola zavedená kompatibilita pre nové Windowsy (Win Vista a Seven). Okrem samotného programu je však nutné nainštalovať ovládače programovacieho USB portu SAM-BA_cdc [2] podľa nasledovného postupu:
Pre správnu funkciu programu je nutné striktne dodržať nasledujúci postup programovania dosky.
Podľa (Obrázka 5) zvolíme záložku Flash. V roletovom menu vyberieme a tlačidlom Execute vykonáme skripty poďľa naznačeného poradia.
Po nahrátí binárneho súboru môžeme porovnať program nahratý v pamäti flash s originálnym bin súborom. (Obrázok 7)
Obr. 7: Overenie programu vo Flash
Z balíčka vzorových programov pre vývojovú dosku AT91SAM9XE [3] sme vyskúšali niekoľko programov napr. ovládanie LED pomocou tlačítka, AD prevodník s výstupom cez Serial Debug Port a program, ktorý sa po pripojení USB_Device k PC správa ako pamäťové zariadenie s veľkosťou 10 MB. Pre ukážku sú zobrazené niektoré časti programu pre ovládanie blikania dvoch LED s dvoma tlačítkami. Tlačítkom BP3 zastavujeme a spúšťame blikanie oranžovej LED. Blikanie každú sekundu je zabezpečené prerušením, pri pretečení čítača časovača TC_0. Zároveň je na UART vyslané číslo "2". Tlačidlom BP4 ovládame blikanie zelenej LED s intervalom 0,5 s, ktoré je realizované v hlavnej slučke programu. Na UART je vyslané číslo "1".
Ukážka zdrojového súboru:
Textový výstup na UARTe môže vyzerať nasledovne:1 //------------------------------------------------------------------------------ 2 // Headers 3 //------------------------------------------------------------------------------ 4 5 #include <board.h> 6 #include <pio/pio.h> 7 #include <pio/pio_it.h> 8 #include <pit/pit.h> 9 #include <aic/aic.h> 10 #include <tc/tc.h> 11 #include <utility/led.h> 12 #include <utility/trace.h> 13 14 #include <stdio.h> 15 16 //------------------------------------------------------------------------------ 17 // Local definitions 18 //------------------------------------------------------------------------------ 19 #ifndef AT91C_ID_TC0 20 #if defined(AT91C_ID_TC012) 21 #define AT91C_ID_TC0 AT91C_ID_TC012 22 #elif defined(AT91C_ID_TC) 23 #define AT91C_ID_TC0 AT91C_ID_TC 24 #else 25 #error Pb define ID_TC 26 #endif 27 #endif 28 29 /// Delay for pushbutton debouncing (in milliseconds). 30 #define DEBOUNCE_TIME 500 31 32 /// PIT period value in µseconds. 33 #define PIT_PERIOD 1000 34 35 //------------------------------------------------------------------------------ 36 // Local variables 37 //------------------------------------------------------------------------------ 38 39 /// Pushbutton \#1 pin instance. 40 const Pin pinPB1 = PIN_PUSHBUTTON_1; 41 42 /// Pushbutton \#1 pin instance. 43 const Pin pinPB2 = PIN_PUSHBUTTON_2; 44 45 /// Indicates the current state (on or off) for each LED. 46 unsigned char pLedStates[2] = {1, 1}; 47 48 /// Global timestamp in milliseconds since start of application. 49 volatile unsigned int timestamp = 0; 50 51 //------------------------------------------------------------------------------ 52 /// Interrupt handler for TC0 interrupt. Toggles the state of LED\#2. 53 //------------------------------------------------------------------------------ 54 void ISR_Tc0(void) 55 { 56 // Clear status bit to acknowledge interrupt 57 AT91C_BASE_TC0->TC_SR; 58 59 // Toggle LED state 60 LED_Toggle(1); 61 printf("2 "); 62 } 63 //------------------------------------------------------------------------------ 64 /// Waits for the given number of milliseconds (using the timestamp generated 65 /// by the PIT). 66 /// \param delay Delay to wait for, in milliseconds. 67 //------------------------------------------------------------------------------ 68 void Wait(unsigned long delay) 69 { 70 volatile unsigned int start = timestamp; 71 unsigned int elapsed; 72 do { 73 elapsed = timestamp; 74 elapsed -= start; 75 } 76 while (elapsed < delay); 77 } 78 //------------------------------------------------------------------------------ 79 /// Application entry point. Configures the DBGU, PIT, TC0, LEDs and buttons 80 /// and makes LED\#1 blink in its infinite loop, using the Wait function. 81 /// \return Unused (ANSI-C compatibility). 82 //------------------------------------------------------------------------------ 83 int main(void) 84 { 85 // DBGU configuration 86 TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK); 87 printf("-- Getting Started Project %s --\n\r", SOFTPACK_VERSION); 88 printf("-- %s\n\r", BOARD_NAME); 89 printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__); 90 91 // Configuration 92 ConfigurePit(); 93 ConfigureTc(); 94 ConfigureButtons(); 95 ConfigureLeds(); 96 97 // Main loop 98 while (1) { 99 100 // Wait for LED to be active 101 while (!pLedStates[0]); 102 103 // Toggle LED state if active 104 if (pLedStates[0]) { 105 106 LED_Toggle(0); 107 printf("1 "); 108 } 109 110 // Wait for 500ms 111 Wait(500); 112 } 113
1 -- Getting Started Project 1.5 -- 2 -- AT91SAM9XE-EK 3 -- Compiled: Dec 18 2008 16:08:51 -- 4 1 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 . . .
[1] User guide AT91SAM9XE-EK - http://www.atmel.com/dyn/resources/prod_documents/doc6311.pdf
[2] SAM-BA_2.10_cdc http://www.atmel.com/dyn/resources/prod_documents/sam-ba_2.10.exe
[3] AT91SAM9XE-EK Software Package for IAR 5.2, Keil and GNU -
http://www.atmel.com/dyn/resources/prod_documents/at91sam9xe-ek.zip
[4] AT91SAM Bootstrap-
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4093
[5] USB-JTAG programmer-
http://www.modularcircuits.com/usb_programmer.htm
http://www.ftdichip.com/Products/ICs/FT2232D.htm
[7] CrossStudio for ARM 2.0-
http://www.rowley.co.uk/