Renesas Rulz - Japan
Renesas Rulz - Japan
  • User
    Join or sign in
  • Site
  • Search Japan.RenesasRulz.com
  • User
  • Renesas Rulz
  • FAQ
  • パートナー
  • 半導体セミナ
  • eラーニング
  • ヘルプ
  • More
  • Cancel
  • かふぇルネ
  • がじぇるね
  • English Community
  • More
  • Cancel
がじぇっとるねさすコミュニティ
がじぇっとるねさすコミュニティ
GR-ROSE SPI.transfer16()が使えませんでした
  • Forums
  • Blog
  • Files
  • がじぇっとるねさす ゆーざー会 - Wiki
  • Tags
  • More
  • Cancel
  • New

 

 GR-SAKURA

 GR-KURUMI

 GR-COTTON

 GR-CITRUS

 GR-PEACH

 GR-KAEDE

 GR-ADZUKI

 GR-LYCHEE

 GR-ROSE

 GR-MANGO(*)

 SNShield

 Web Compiler

 IDE for GR

 TOPPERS関連

 女子美コラボ

 その他

 ※プロデューサミーティング中

 作り方使い方資料

 イベント関連

 作品記事

 体験記事

 その他

 

 ライブラリ

 ツール

 その他・過去ファイル

  • Replies 1 reply
  • Subscribers 446 subscribers
  • Views 2198 views
  • Users 0 members are here
  • spi
  • GR-ROSE
Options
  • Share
  • More
  • Cancel
Related Tags
  • B3M
  • DDS-XRCE
  • Dynamixel
  • esp8266
  • FIT
  • GR-ROSE
  • HYGRO
  • ICS
  • include
  • JSTK2
  • KYPD
  • MG996R
  • MIC3
  • NAV
  • OLED
  • pin
  • PMOD
  • ROS
  • ROS2
  • rosserial
  • RS-485
  • RX65N
  • Serial2
  • spi
  • Wire
Related

SPI.transfer16()が使えませんでした

Yuuichi Akagawa
Yuuichi Akagawa over 1 year ago

すっかり報告を忘れていましたが、SPI.transfer16()が使えなかったので実装しました。
(SPIMemoryライブラリで使われていました)

0.91ベースです。

https://gist.github.com/YuuichiAkagawa/30c9863f47a7b7190c0f00fc9efdd176

$ diff -up SPI.h.orig SPI.h
--- SPI.h.orig  2019-02-26 13:17:06.000000000 +0900
+++ SPI.h       2019-04-13 10:19:15.795784900 +0900
@@ -311,10 +311,11 @@ public:
     return (byte)RSPI1.SPDR.LONG;
 #endif //__RX600__
   }
-#ifndef __RX600__
+
   inline static uint16_t transfer16(uint16_t data) {
     union { uint16_t val; struct { uint8_t lsb; uint8_t msb; }; } in, out;
     in.val = data;
+#ifndef __RX600__
     if (!(SPCR & _BV(DORD))) {
       SPDR = in.msb;
       asm volatile("nop"); // See transfer(uint8_t) function
@@ -334,8 +335,22 @@ public:
       while (!(SPSR & _BV(SPIF))) ;
       out.msb = SPDR;
     }
+#else
+    //Add 2019.4.13 Yuuichi AKagawa
+    //MSB first?
+    if(RSPI1.SPCMD0.BIT.LSBF == 0) {
+       //MSB first transfer
+       out.msb = transfer(in.msb);
+       out.lsb = transfer(in.lsb);
+    }else{
+       //LSB first transfer
+       out.lsb = transfer(in.lsb);
+       out.msb = transfer(in.msb);
+    }
+#endif //__RX600__
     return out.val;
   }
+#ifndef __RX600__
   inline static void transfer(void *buf, size_t count) {
     if (count == 0) return;
     uint8_t *p = (uint8_t *)buf;
  • Reply
  • Cancel
  • Cancel
  • Okamiya Yuuki
    Okamiya Yuuki over 1 year ago
    ありがとうございます!助かります。
    • Cancel
    • Up 0 Down
    • Reply
    • Cancel
サイト使用条件
プライバシーポリシー
お問い合わせ
© 2010-2020 Renesas Electronics Corporation. All rights reserved.