トップ 一覧 検索 ヘルプ RSS ログイン

PRG-arduino-asmの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
! Arduino asm 

 asm("
 オペコード1 オペランド1 \n\t
 オペコード2 オペランド2 \n\t
 ");

もしくは

 asm volatile(
 "オペコード1 オペランド1[マクロA名]" "\n\t"
 "オペコード2 オペランド2[マクロB名]" "\n\t"
 );

! sample LED brink
 volatile uint8_t *port;
 uint8_t High,Low,Mask;
 uint8_t PinNumber = 2;
 
 void setup() {
 
  DDRD = 0x04;
  PORTD = 0x00;
 
  port = portOutputRegister(digitalPinToPort(PinNumber));
  Mask = digitalPinToBitMask(PinNumber);
  High = *port | Mask;
  Low = *port | ~Mask;
  ledFlashing();
 }
 
 void loop() {
 
 }
 
 
 void ledFlashing(){
 
      asm volatile(
      "LEDS:"                 "\n\t"  //LEDS
      "st %a[port], %[High]"  "\n\t"  //I/Oポートに転送
      "rcall delay1000m"      "\n\t"  //1秒待ち
      "st %a[port], %[Low]"   "\n\t"  //I/Oポートに転送
      "rcall delay1000m"      "\n\t"  //1秒待ち
      "rjmp LEDS"             "\n\t"  //繰り返し
 
      "delay1000m:"           "\n\t"  //サブルーチン
      "ldi R18,60"            "\n\t"  //汎用レジスタに定数60転送
      "delay52:"              "\n\t"  //
      "rcall delay1"          "\n\t"  //delay1を呼ぶ
      "dec r18"               "\n\t"  //R18をデクリメント
      "brne delay52"          "\n\t"  //R18が0でなければdelay52を呼ぶ
      "ret"                   "\n\t"  //復帰
 
      "delay1:"               "\n\t"  //サブルーチン
      "ldi r19,255"           "\n\t"  //R19に定数255を転送
      "delay12:"              "\n\t"  //
      "rcall delay4"         "\n\t"   //delay4へ
      "dec r19"               "\n\t"  //R19をデクリメント
      "brne delay12"          "\n\t"  //R19が0でなければdelay12
      "ret"                   "\n\t"  //復帰
 
      "delay4:"              "\n\t"  //サブルーチン 4クロック分
      "ldi r20,255"          "\n\t"  //R20に定数255を転送
      "delay42:"             "\n\t"  //
      "nop"                  "\n\t"  //1クロック何もしない。
      "dec r20"              "\n\t"  //R20をデクリメント
      "brne delay42"         "\n\t"  //
      "ret"                          //復帰
       :[port]"+e"(port)
       :[High]"r"(High),
        [Low]"r"(Low)
      );
  }

! 参照元
 http://qiita.com/TakeoChan/items/8362eaf53cf199262cb7
http://qiita.com/TakeoChan/items/8362eaf53cf199262cb7

http://edu.net.c.dendai.ac.jp/micom/2018/2/index.html#flash