AVR Assembler

Information sur le langage "assembleur" (langage machine) des chips utilisés par l'Arduino.
° La liste des instructions assembleur, du site de microchip.
C'est une référence.
° AVR Assembler tutorial 1
.
° AVR Assembler tutorial 3
.
° AVR Assemble, lecture 6.
.
° Arduino inline Assembly
.
° Arduino assembler examples.
.
Chercher : arduino inline assembly
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFgg6MAI&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F03%2F10%2Farduino-inline-assembly-tutorial-4%2F&usg=AOvVaw1HCeOMwX18sb-qwFPpiAhz
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFghDMAM&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F03%2F31%2Farduino-inline-assembler-tutorial-11-tables%2F&usg=AOvVaw1qUpvkJhmN9UKaa7bHKoBx
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&uact=8&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFghMMAQ&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F03%2F16%2Farduino-inline-assembly-tutorial-7-bit-shifts%2F&usg=AOvVaw15UHzp4PU9okwxXSm3xKY1
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&uact=8&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFghVMAU&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F03%2F11%2Farduino-inline-assembly-tutorial-5-2%2F&usg=AOvVaw0Sek8XqPtyUbVIMjltoaTR
https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&cad=rja&uact=8&ved=0ahUKEwjm2qaC0KDaAhVRzKQKHSxUC_oQFgheMAY&url=https%3A%2F%2Fucexperiment.wordpress.com%2F2016%2F04%2F02%2Farduino-inline-assembly-tutorial-12-functions%2F&usg=AOvVaw3mh86aDOlxeGMiNfstmCIC
° Un livre sur l'Arduino inline assembly
.
° One second delay in assembly language.
.
° Port Registers
Comment accéder à 8 pins d'un coup.
°
.
°
.
° ex0400_timer_interrupt.ino
.
° ex0401_timer_interrupt.ino
.

Avec la colorisation syntaxique   ...   Sans la colorisation syntaxique

ex0400_timer_interrupt.ino   TOP
Un petit exemple d'utilisation du timer du ATmega328 de l'Arduino, pour qu'il génère des "interrupt", qui accèdent régulièrement à une fonction.


ex0400_timer_interrupt.ino
Il n'y a pas d'images associée, car le but est juste de tester les timers, sans connexions hardware.

ex0401_timer_interrupt.ino   TOP
.
int16_t _atoi(const char *s) {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
  //sign & c are initialized inside inline asm code
  register uint8_t sign, c;
#pragma GCC diagnostic pop
  //force result into return registers
  register int16_t result asm("r24"); 
   
  asm (
    "ldi  %A0, 0x00         \n" //result = 0
    "ldi  %B0, 0x00         \n"
 
  "1:                       \n"
    "ld   %2, Z+            \n" //fetch char
    "cpi  %2, '-'           \n" //negative sign?
    "brne 2f                \n"
    "ldi  %3, 0x01          \n" //sign = TRUE
 
  "2:                       \n"
    "cpi  %2, '/' + 1       \n" //step over whitespace/garbage
    "brcc 3f                \n"
    "rjmp 1b                \n"
 
  "3:                       \n"
    "rjmp 5f                \n"
 
  "4:                       \n"
    "ldi  r23, 10           \n" //result *= 10
    "mul  %B0, r23          \n"
    "mov  %B0, r0           \n"
    "mul  %A0, r23          \n"
    "mov  %A0, r0           \n"
    "add  %B0, r1           \n"
    "clr  __zero_reg__      \n" //r1 trashed by mul
    "add  %A0, %2           \n" //result += new digit
    "adc  %B0, __zero_reg__ \n"
    "ld   %2, Z+            \n" //fetch next digit char
   
  "5:                       \n"
    "subi %2, '0'           \n" //convert char to 0-9
    "cpi  %2, 10            \n" //end of string?
    "brlo 4b                \n"
 
    "cpi  %3, 0             \n" //negative?
    "breq 6f                \n"
    "com  %B0               \n" //negate result
    "neg  %A0               \n"
    "sbci %B0, -1           \n"
   
  "6:                       \n"
    : "+r" (result) : "z" (s), "a" (c), "a" (sign) : "memory"
  );
 
  return result;
}
ex0401_timer_interrupt.ino
Il n'y a pas d'images associée, car le but est juste de tester les timers, sans connexions hardware.


TOP

Plan du Site : Home   arrow   Microcontroleur   arrow   avr_assembler.html ( = http://www.juggling.ch/gisin/microcontroleur/avr_assembler.html )


Page mise à jour le 4 avril 2018 par Bernard Gisin     ( Envoyer un e-mail )
Hébergement par : www.infomaniak.ch