Assembler source Editor and message windows 1) ASSEMBLER DIRECTIVES Change or adjust the way the assembler works with the code Assembler directives can be divided into the following groups DEFINE SEGMENTS .cseg .dseg .eseg .csegsize PROGRAM MEMORY .db .dw .cseg .org EEPROM .db .dw .eseg .org .dseg .org SRAM .byte REGISTER & CONSTANTS .def .equ .set CODING .macro .endmacro .listmac .include ASSEMBLER OUTPUT .device .exit .list .nolist .org 1a) DEFINE SEGMENTS .cseg .dseg .eseg .csegsize .org ; Start program segment Word Counter for programs, Byte Counter for SRAM and EEPROM, The values of the Location Counters are defined by .org 1b) PROGRAM MEMORY .db .dw .cseg .org 1c) EEPROM .db .dw .eseg .org Define (initialize) values using .DB and .DW 1d) SRAM .byte .dseg .org Define code name for SRAM locations using .BYTE 1e) REGISTER & CONSTANTS .def .equ .set Rename Registers Name constants Rename constants (can be used many times with different value) 1f) CODING .macro .endmacro .listmac .include Arguments 0 and 1 are r2 and r1 respectively .def pseudo instruction (assembler directive) for sreg in INCLUDE file 1g) ASSEMBLER OUTPUT .device .exit .list .nolist 2) EXPRESSIONS Operands Functions Operators 2.1) Operands 2.2) Functions 2.3) Operators Unary operators Binary operators 3) AVR STUDIO 4 4.3) Description of the views T The following views are available: Output tabs Build window – Message window – Find in files function – Breakpoints Workspace tabs Project view I/O view Register – Processor core register – Stack – I/O register Info view Interrupt vector – AVR package – I/O register Watch view Memory view SRAM – Flash Memory – Register – I/O register – EEPROM Register window Dissasembler window 4.3.1) Output tabs Build window – Message window – Find in files function – Breakpoints The Build view. Output from the compiler / assembler is routed to this window. The result of the compilation / assembly can be read here. When compiling or building projects output messages and warnings are printed in this view. Double click on an error or you to the source code location. The key F4 can also be used, and will go to the next error. Breakpoints. Lists all active breakpoints in all modules. Breakpoints can be enabled, disabled and removed in the view. More details in section 4 of the debugging document. 4.3.2) Workspace tabs Project view I/O view Register – Processor core register – Stack – I/O register Info view Interrupt vector – AVR package – I/O register 4.3.2.1) Project view 4.3.2.2) I/O View Register – Processor core register – Stack – I/O register The view has 4 fields of information for the I/O registers, name, value, bits and address. 4.3.2.3) Info view Interrupt vector – AVR package – I/O register This view is static and show all interrupts, pin configuration and available IO adresses for the selected device. 4.3.3) Watch view With the watch window you can view and edit all defined symbols when debugging. Edit Double click on an empty line to type a variable name. Quick watch Highlight the variable you want to watch in the editor and select quickwatch. You can look at the variable and its contents and alternatively add it to the watch view. 4.3.4) Memory View Editing Change the value by clicking on the location and type a new value. This can also be done with the ASCII values in the right border (if shown). 4.3.5) Register window 4.3.6) The Disassembler window The disassembler window shows your program code disassembled. Program execution and AVR instructions can be followed in this view. +000000B9: +000000BA: +000000BB: +000000BC: 2700 BF05 E800 BF04 CLR R16 OUT 0x35,R16 LDI R16,0x80 OUT 0x34,R16 Exclusive OR Out to I/O location Load immediate Out to I/O location 4.4) ΑΝΑΠΤΥΞΗ ΚΩΔΙΚΑ AVR Assembler To get started is simple, when AVR Studio loads, select the AVR Assembler from the project dialog box, select a project name directory where the project shall reside, and click finish. A project file is created, an *.asm file is available in the editor window and you are set for writing your first instructions. Check out the online AVR assembler has it's own book where all instructions and directives are explained. In addition, there is context sensitive help in the editor window, just write an instruction, place the cursor on top of the instruction and press F1, and you will get help on the syntax on the selected instruction. 4.5 Simulator The simulator supports all existing new AVR devices, look at the tools and device support for an overview. It simulates not only the CPU, but nearly all the on-chip I/O modules and memory, as well as the I/O ports. Special care has been taken to ensure proper simulation of the device, and there are only small differences between simulated and actual behaviour. The simulator does not connect to outside hardware and has to be stimulated from pre-calculated stimuli files. But as the device is simulated entirely inside the PC memory, the user has extended visibility of all the on-chip functions. If you develop for a specific device in mind you should include the *.def.inc file for the part. Each part has it's own *.inc file that defines all internal registers, bits and a lot of other stuff that makes it simpler for you to write code for the part. In addition the *.inc file sets the device directive for the assembler, letting the assembler know which part you are developing for. The part files are found in the \ProgramFiles\Atmel\AVRTools\AVRAssembler\ΐppnotes folder on your computer. A include file for ATmega8 will typically be named "m8def.inc". You do not have to give a path with the *.inc file as long as it is found in the default directory. Press F7 in order to compile. The result of the compilation will show in the previously described Build view in the output window frame. 4. 6) Programming the Target AVR Device STK500 is controlled from AVR Studio, version 3.2 and higher. To program a hex file into the target AVR device, select "STK500" from the "tools“ menu in AVR Studio. Select the AVR target device from the pull-down menu on the “Program” tab and locate the intel-hex file to download. Press the "erase" button, followed by the "program" button. The Status LED will now turn yellow while the part is programmed, and when programming succeeds the LED will turn green. If programming fails, the LED will turn red after programming, see the "Trouble-shooting guide" (Help in STK500 user's guide). 1) 8 διακόπτες 2) 8 LED 3) Δύο σειρές από ακροδέκτες (headers). 4) Μία περιοχή με υποδοχές διαφόρων τύπων AVR (target sockets) και τις υποδοχές για εξωτερικές συνδέσεις των ακροδεκτών των AVR. Κάθε φορά τοποθετείται ένας μόνο AVR . 5) Μία περιοχή με διακλαδωτήρες (jumpers) και μία ενδεικτική λυχνία τροφοδοσίας των υποδοχών. 6) Μία σειρά από ακροδέκτες (headers) και υποδοχή για κρύσταλλο. 7) Το τμήμα προγραμματισμού των μνημών των AVR, τους διακόπτες reset και προγραμματισμού και την ενδεικτική λυχνία κατάστασης προγραμματισμού. Υπάρχουν επίσης ένας άλλος AVR ο 8535 (Master AVR) και το κύκλωμα για τις τάσεις RS232, το ΜΑΧ202. 8) Τον διακόπτη τροφοδοσίας, την λυχνία τροφοδοσίας και τις υποδοχές τροφοδοσίας και RS232C (για PC και επιπρόσθετη για άλλη χρήση). 5) Debugging facilities ΓΕΝΙΚΑ ΣΧΟΛΙΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΚΩΔΙΚΑ ΚΑΙ ΣΤΗΝ ΧΗΣΗ ΤΟΥ AVR STUDIO • Σχόλια σε ομάδες εντολών για την περιγραφή της διαδικασίας που υλοποιείται. • Συμβατότητα του επιλεχθέντος μοντέλου AVR, με τις επιλογές σε εντολές, τρόπους προσπέλασης, κλπ. Χρήση των συμβατών I/O ports με το συγκεκριμένο μοντέλο AVR. Χρησιμοποιείστε θέσεις υπάρχουσας (εγκατεστημένης για το συγκεκριμένο μοντέλο AVR) SRAM . • Μην ξεχνάτε την ψευδοεντολή .include “8515def.inc”. • Μη ξεχνάτε τις αρχικές συνθήκες (ιδιαίτερα στο περιβάλλον του simulator) για τους καταχωρητές R0- R31 και SP, καθώς και την εισαγωγή της εντολής sei. • Input από PINx και όχι από PORTx. • Τερματισμός προγράμματος σας , π.χ. Loop: rjmp loop. • Οταν χρησιμοποιείτε τη στοίβα, θα πρέπει να δίνετε αρχικές συνθήκες στον SP . Συνήθως η αρχή της στοίβας ορίζεται στην ramend (γνωστή από την include). • Προσοχή στη χρήση αρνητικής λογικής για τον καθορισμό δυαδικών μεταβλητών. • Προσοχή στη χρήση των ψευδοεντολών για την ονομασία καταχωρητών. • Ξεκινήστε με Open Project, για τον καθορισμό περιβάλλοντος και επεξεργαστή. • Αποθηκεύστε τα αρχεία σας στο συγκεκριμένο χώρο users. Αρχεία από την Flash δεν διαβάζονται. Κατά τον προγραμματισμό του 8515, προσοχή στην χρήση του επιθυμητού αρχείου (αυτού που πρόκειται να εκτελέσετε) με το κατάλληλο pathname. • Οι κάρτες STK500 διαθέτουν διαφορετικό επεξεργαστή. Ελέγξτε του τύπο του, για να τον χρησιμοποιήσετε στην εντολή include και στο παράθυρο προγραμματισμού της STK500. • Μετά από κάθε αλλαγή στον κώδικα, εκτελέστε Build and run και στην συνέχεια προγραμματίστε την κάρτα STK500. • Στο στάδιο της αποσφαλμάτωσης, βρόχοι καθυστέρησης καλύτερα να ορίζονται σαν σχόλια (comment out). • Προσεκτική επιλογή των Breakpoints. • Προσεκτική παρακολούθηση των I/O window και Memory windows. • Η χρήση του watch view είναι χρήσιμη για την παρακολούθηση των τιμών των μεταβλητών που ορίζονται με κωδικό όνομα. • Οταν το πρόγραμμα εκτελείται στον target AVR στην STK500, για να βεβαιωθείτε οτι το πρόγραμμα σας διέρχεται από συγκεκριμένη περιοχή χρησιμοποιείτε κατάλληλες ενδείξεις στα LEDs και προσωρινές στάσεις στην εκτέλεση του προγράμματος με αέναο βρόχο ή με πίεση κατάλληλου πλήκτρου. • Η ορθή λειτουργία του προγράμματος στο περιβάλλον του simulator, δεν σας εξασφαλίζει και ορθή λειτουργία στην κάρτα STK500. Ιδιαίτερη προσοχή στη χρήση διακοπτών και LEDs (αρνητική λογική). Debug toolbar Views toolbar