OSDN Git Service

Separated the SSM2603 control codes.
authorShinichiro Nakamura <shinta.main.jp@gmail.com>
Thu, 9 Aug 2012 18:24:51 +0000 (03:24 +0900)
committerShinichiro Nakamura <shinta.main.jp@gmail.com>
Thu, 9 Aug 2012 18:24:51 +0000 (03:24 +0900)
firm/bare_metal/Makefile
firm/bare_metal/main.c
firm/bare_metal/ssm2603.c [new file with mode: 0644]
firm/bare_metal/ssm2603.h [new file with mode: 0644]

index ac35b81..55f8897 100644 (file)
@@ -6,7 +6,7 @@ PROJECT = bluetank
 #
 # Source files and search directories
 #
-CSRC   += lcd.c led.c main.c mmc.c pff.c twi.c
+CSRC   += lcd.c led.c main.c mmc.c pff.c twi.c ssm2603.c
 ASRC   +=
 VPATH   =
 
index d64307d..e2868b1 100644 (file)
 #include "lcd.h"\r
 #include "led.h"\r
 #include "pff.h"\r
-#include "twi.h"\r
+#include "ssm2603.h"\r
 \r
-/* システムクロック(100MHz) */\r
-#define SCLOCK_HZ   (100000000)\r
+#define SCLOCK_HZ           (100000000) /**< システムクロック(100MHz) */\r
+#define DMA_SAMPLE_SIZE     (256)       /**< 1回のサンプルサイズ */\r
 \r
-/* SSM2603のI2Cデバイスアドレス */\r
-#define TWI_DEVICE_ADDR (0x1A)\r
-\r
-/* 1回のサンプルサイズ */\r
-#define NUM_SAMPLES     (256)\r
-\r
-/* SPORT RX DMA割り込みのプロトタイプ宣言 */\r
 void sport_rx_isr() __attribute__((interrupt_handler));\r
-/* オーディオ処理用関数 */\r
 void audio_effect(const int32_t* src, int32_t* des, int32_t count);\r
 \r
-/* SPORT受信バッファ(ダブルバッファ) */\r
-static int32_t sport_buffer_rx[2][NUM_SAMPLES];\r
-/* SPORT受信バッファ(ダブルバッファ) */\r
-static int32_t sport_buffer_tx[2][NUM_SAMPLES];\r
-/* DMAがどのバッファ使用をしているか */\r
-static volatile int32_t bufidx_dma_target;\r
-/* データ転送完了フラグ */\r
-static volatile int32_t data_ready;\r
+static int32_t sport_buffer_rx[2][DMA_SAMPLE_SIZE]; /**< SPORT受信バッファ(ダブルバッファ) */\r
+static int32_t sport_buffer_tx[2][DMA_SAMPLE_SIZE]; /**< SPORT受信バッファ(ダブルバッファ) */\r
+static volatile int32_t bufidx_dma_target;          /**< DMAがどのバッファ使用をしているか */\r
+static volatile int32_t data_ready;                 /**< データ転送完了フラグ */\r
 \r
 int iii;\r
 \r
-/* SSM2603 TWI初期化データ列 */\r
-static const uint8_t ssm2603_initdata[] =\r
-{\r
-    (0x0F << 1) | 0, 0x00,\r
-    (0x00 << 1) | 1, 0x17,\r
-    (0x01 << 1) | 1, 0x17,\r
-    (0x02 << 1) | 1, 0x79,\r
-    (0x03 << 1) | 1, 0x79,\r
-    (0x04 << 1) | 0, 0x12,\r
-    (0x05 << 1) | 0, 0x00,\r
-    (0x06 << 1) | 0, 0x02,\r
-    (0x07 << 1) | 0, 0x4E,\r
-    (0x08 << 1) | 0, 0x00,\r
-    (0x09 << 1) | 0, 0x01,\r
-};\r
-\r
 static void setup_pll(uint8_t mul_val, uint8_t div_val)\r
 {\r
     *pSIC_IWR = IWR_ENABLE(0);  /* PLLのみIWRを許す */\r
@@ -62,7 +34,6 @@ static void setup_pll(uint8_t mul_val, uint8_t div_val)
     *pSIC_IWR = IWR_ENABLE_ALL;\r
 }\r
 \r
-/* SPORT RX DMA割り込みハンドラ */\r
 __attribute__((interrupt_handler)) void sport_rx_isr()\r
 {\r
     *pDMA1_IRQ_STATUS = DMA_DONE;\r
@@ -75,7 +46,6 @@ __attribute__((interrupt_handler)) void sport_rx_isr()
 \r
 int main(void)\r
 {\r
-    uint32_t i, j;\r
     int32_t bufidx_dma_done;\r
     FATFS fatfs;\r
     DIR dir;\r
@@ -104,6 +74,11 @@ int main(void)
     lcd_puts("Init....");\r
 \r
     /*\r
+     * オーディオコーデックを初期化する。\r
+     */\r
+    ssm2603_init();\r
+\r
+    /*\r
      * SDカードをマウントする。\r
      */\r
     if (pf_mount(&fatfs) == FR_OK) {\r
@@ -129,24 +104,6 @@ int main(void)
     *pPORTG_FER |= (PG1 | PG2 | PG3 | PG5 | PG6 | PG7);\r
 \r
     /*\r
-     * TWI初期化\r
-     */\r
-    twi_init();\r
-\r
-    /*\r
-     * SSM2603初期化\r
-     */\r
-    for (i = 0; i < sizeof(ssm2603_initdata); i+=2) {\r
-        twi_master_write(TWI_DEVICE_ADDR, TWI_STOP, &ssm2603_initdata[i], 2);\r
-        /*\r
-         * STOP CONDITIONから600ns以上空ける\r
-         */\r
-        for (j = 0; j < 300; j++) {\r
-            asm("ssync;");\r
-        }\r
-    }\r
-\r
-    /*\r
      * 割り込みハンドラをIVG9に登録\r
      */\r
     *pEVT9 = sport_rx_isr;\r
@@ -178,7 +135,7 @@ int main(void)
     *pDMA1_PERIPHERAL_MAP = 0x1000;\r
     *pDMA1_CONFIG = FLOW_AUTO | DI_EN | DI_SEL | DMA2D | WDSIZE_32 | WNR;\r
     *pDMA1_START_ADDR = sport_buffer_rx;\r
-    *pDMA1_X_COUNT = NUM_SAMPLES;\r
+    *pDMA1_X_COUNT = DMA_SAMPLE_SIZE;\r
     *pDMA1_X_MODIFY = sizeof(int32_t);\r
     *pDMA1_Y_COUNT = 2;\r
     *pDMA1_Y_MODIFY = sizeof(int32_t);\r
@@ -189,7 +146,7 @@ int main(void)
     *pDMA2_PERIPHERAL_MAP = 0x2000;\r
     *pDMA2_CONFIG = FLOW_AUTO | DMA2D | WDSIZE_32;\r
     *pDMA2_START_ADDR = sport_buffer_tx;\r
-    *pDMA2_X_COUNT = NUM_SAMPLES;\r
+    *pDMA2_X_COUNT = DMA_SAMPLE_SIZE;\r
     *pDMA2_X_MODIFY = sizeof(int32_t);\r
     *pDMA2_Y_COUNT = 2;\r
     *pDMA2_Y_MODIFY = sizeof(int32_t);\r
@@ -240,7 +197,7 @@ int main(void)
              * DMAが完了したバッファを使用してオーディオ処理を行なう。\r
              */\r
             bufidx_dma_done = bufidx_dma_target ^ 1;\r
-            audio_effect(sport_buffer_rx[bufidx_dma_done], sport_buffer_tx[bufidx_dma_done], NUM_SAMPLES);\r
+            audio_effect(sport_buffer_rx[bufidx_dma_done], sport_buffer_tx[bufidx_dma_done], DMA_SAMPLE_SIZE);\r
         }\r
     }\r
 \r
diff --git a/firm/bare_metal/ssm2603.c b/firm/bare_metal/ssm2603.c
new file mode 100644 (file)
index 0000000..51140e8
--- /dev/null
@@ -0,0 +1,47 @@
+
+#include <cdefBF592-A.h>
+#include "twi.h"
+#include "ssm2603.h"
+
+/* SSM2603\e$B$N\e(BI2C\e$B%G%P%$%9%"%I%l%9\e(B */
+#define TWI_DEVICE_ADDR (0x1A)
+
+/* SSM2603 TWI\e$B=i4|2=%G!<%?Ns\e(B */
+static const uint8_t ssm2603_initdata[] =
+{
+    (0x0F << 1) | 0, 0x00,
+    (0x00 << 1) | 1, 0x17,
+    (0x01 << 1) | 1, 0x17,
+    (0x02 << 1) | 1, 0x79,
+    (0x03 << 1) | 1, 0x79,
+    (0x04 << 1) | 0, 0x12,
+    (0x05 << 1) | 0, 0x00,
+    (0x06 << 1) | 0, 0x02,
+    (0x07 << 1) | 0, 0x4E,
+    (0x08 << 1) | 0, 0x00,
+    (0x09 << 1) | 0, 0x01,
+};
+
+void ssm2603_init(void)
+{
+    uint32_t i, j;
+
+    /*
+     * TWI\e$B=i4|2=\e(B
+     */
+    twi_init();
+
+    /*
+     * SSM2603\e$B=i4|2=\e(B
+     */
+    for (i = 0; i < sizeof(ssm2603_initdata); i+=2) {
+        twi_master_write(TWI_DEVICE_ADDR, TWI_STOP, &ssm2603_initdata[i], 2);
+        /*
+         * STOP CONDITION\e$B$+$i\e(B600ns\e$B0J>e6u$1$k\e(B
+         */
+        for (j = 0; j < 300; j++) {
+            asm("ssync;");
+        }
+    }
+}
+
diff --git a/firm/bare_metal/ssm2603.h b/firm/bare_metal/ssm2603.h
new file mode 100644 (file)
index 0000000..7b673ea
--- /dev/null
@@ -0,0 +1,8 @@
+
+#ifndef SSM2603_H
+#define SSM2603_H
+
+void ssm2603_init(void);
+
+#endif
+