teamALI / Mbed 2 deprecated HB2018

Dependencies:   mbed FreeRTOS

Revision:
8:1ca49cb18290
Parent:
1:15ab74f0d0f1
Child:
17:f9610f3cfa1b
--- a/fpga.cpp	Sat Nov 24 11:49:51 2018 +0000
+++ b/fpga.cpp	Mon Nov 26 13:58:16 2018 +0000
@@ -1,8 +1,10 @@
 #include "mbed.h"
-#include "debug.h"
 #include "fpga.h"
-#define CLK_CYC 20.83
+
+#define CLK_CYC 20.83   //FPGAのクロック周期
 
+//-----------------------------
+//FPGAレジスタアドレスマップ
 #define ADR_TEST_REG 0x0 //テストレジスタ
 #define ADR_RPM_FLSB 0x1 //エンジン回転数 前 LSB
 #define ADR_RPM_FMSB 0x2 //エンジン回転数 前 MSB
@@ -22,7 +24,7 @@
 #define ADR_USER_SW 0xD //ユーザースイッチ
 #define ADR_ACCEL_F 0xE //アクセル前
 #define ADR_ACCEL_B 0xF //アクセル後ろ
-
+//-----------------------------
 
 // ################################################################
 // SPI通信フォーマットに合わせた供用体定義
@@ -41,33 +43,42 @@
 // グローバル変数
 // ###############################################################
 static  SPI             spi (p5,p6,p7)  ;//SPI通信ポート定義: mosi, miso, clk
-static  DigitalOut      CS_n(p8)        ;//SPIのチップセレクト
+static  DigitalOut      CS_n(p8)        ;//SPIのチップセレクトピン
 
-//----------------------------------------------------------------
+//-----------------------------------
 //SPIデータ送出
-//----------------------------------------------------------------
-static UINT16 xSpiSendDt(UINT16  dat){
+//-----------------------------------
+static UINT16 xSpi16bitSend(UINT16  dat){
     unsigned int rtn;
 
     CS_n= 0;                //チップセレクトアサート
     rtn = spi.write(dat);   //データ出力
     CS_n = 1;               //チップセレクトネゲート
-    return rtn;
+    return rtn;             //SPIリードデータを返す
+}
+//-----------------------------------
+//SPI送出データの組み立てて通信
+//-----------------------------------
+static UINT16 xSpi(UCHAR  id , UINT16 val){
+    UINT16 spiRtn=0;
+    SPI_CMD cmd;
+
+    //引数を送信するコマンドに成形
+    cmd.bf.id  = id;
+    cmd.bf.val = val; 
+    //SPIデータ送出し読み出し値を取得
+    spiRtn = xSpi16bitSend(cmd.spiCmd);
+    //レジスタ読み出し値を返す
+    return spiRtn;
 }
 
 //================================================================
 //テストレジスタアクセス
 //================================================================
-UINT16 fpgaTest(){
-    static unsigned char k=0;
-    UINT16 spiRtn=0;
-    SPI_CMD cmd;
-
-    //引数を送信するコマンドに成形
-    cmd.bf.id  = ADR_TEST_REG;
-    cmd.bf.val = k++  ; 
-    //SPIデータ送出
-    spiRtn = xSpiSendDt(cmd.spiCmd);
+UINT16 fpgaTest(UINT16 val){
+    //SPI通信
+    UINT16 spiRtn = xSpi(ADR_TEST_REG , val);
+    //レジスタ読み出し値を返す
     return spiRtn;
 }
 //================================================================
@@ -78,18 +89,9 @@
     UINT16      RpmLsb=0;
     UINT32      Rpm=0;
     double      clc;
-    SPI_CMD     cmd;
-
-    //引数を送信するコマンドに成形
-    cmd.bf.val = 0  ;
     
-    //下位12bit読み出し
-    cmd.bf.id  = (frontFlg==true) ? ADR_RPM_FLSB : ADR_RPM_BLSB;
-    RpmLsb = xSpiSendDt(cmd.spiCmd);
-    
-    //上位12bit読み出し
-    cmd.bf.id  = (frontFlg==true) ? ADR_RPM_FMSB : ADR_RPM_BMSB;
-    RpmMsb = xSpiSendDt(cmd.spiCmd);
+    RpmLsb = xSpi((frontFlg==true) ? ADR_RPM_FLSB : ADR_RPM_BLSB , 0);//下位12bit読み出し
+    RpmMsb = xSpi((frontFlg==true) ? ADR_RPM_FMSB : ADR_RPM_BMSB , 0);//上位12bit読み出し
     
     //24bit連結:48MHzのクロックサイクル数換算
     Rpm = (RpmMsb << 12) | RpmLsb;
@@ -98,43 +100,14 @@
     clc = (double)Rpm * CLK_CYC;
     clc = clc / 1000;
     clc = 30000000 / clc;
-    
-//    debug("LSB=0x%04X\t",RpmLsb);
-//    debug("MSB=0x%04X\t",RpmMsb);
-//    debug("RPM=0x%08X\t",Rpm);
-    
+    //回転数rpmを返す
     return (UINT16)clc;
 }
-
 //================================================================
-//ユーザースイッチ読み取り
+//サブプロペラ設定    位置  0:前左 1:前右 2:後左 3:後右
 //================================================================
-UINT16 fpgaUserSw(){
-    UINT16 spiRtn=0;
-    SPI_CMD cmd;
-
-    //引数を送信するコマンドに成形
-    cmd.bf.id  = ADR_USER_SW;
-    cmd.bf.val = 0  ; 
-    //SPIデータ送出/読み出し
-    spiRtn = xSpiSendDt(cmd.spiCmd);
-    //戻り値
-    return spiRtn;
-}
-
-//================================================================
-//サブプロペラ設定
-//================================================================
-void fpgaSubProp
-    (UCHAR iPos     //位置  0:前左 1:前右 2:後左 3:後右
-    ,UCHAR iSlotl   //スロットル設定値
-    )
-{
-    SPI_CMD cmd;
+bool fpgaSubProp(UCHAR iPos,UINT16 iSlotl){
     UCHAR reg_adr[1];
-    //-----------
-    //設定値は共通
-    cmd.bf.val = iSlotl  ; 
 
     switch (iPos){
         case 0x0://
@@ -154,16 +127,34 @@
             reg_adr[1] = ADR_SUB_BR_O;
             break;
         default:
-            return;//何もしないで終わる
-            //break;
+            return false;//何もしないで終わる
     }
 
-    //吸気側
-    cmd.bf.id  = reg_adr[0];
-    xSpiSendDt(cmd.spiCmd);
-    //排気側
-    cmd.bf.id  = reg_adr[1];
-    xSpiSendDt(cmd.spiCmd);    
+    xSpi(reg_adr[0] , iSlotl);//吸気側
+    xSpi(reg_adr[1] , iSlotl);//排気側
+    
+    //正常終了
+    return true;
+}
+
+//================================================================
+//ユーザースイッチ読み取り
+//================================================================
+UINT16 fpgaGetUserSw(){
+    //SPIデータ送出/読み出し
+    UINT16 spiRtn = xSpi(ADR_USER_SW , 0);
+    //戻り値
+    return spiRtn;
+}
+
+//================================================================
+//アクセル設定    位置  0:前 1後
+//================================================================
+bool fpgaEngine(bool iFlontFlg , UINT16 iSlotl){
+    
+    xSpi((iFlontFlg==true)? ADR_ACCEL_F : ADR_ACCEL_B , iSlotl);
+    
+    return true;
 }
 
 //================================================================