#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
*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
\r
int main(void)\r
{\r
- uint32_t i, j;\r
int32_t bufidx_dma_done;\r
FATFS fatfs;\r
DIR dir;\r
lcd_puts("Init....");\r
\r
/*\r
+ * オーディオコーデックを初期化する。\r
+ */\r
+ ssm2603_init();\r
+\r
+ /*\r
* SDカードをマウントする。\r
*/\r
if (pf_mount(&fatfs) == FR_OK) {\r
*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
*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
*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
* 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