同時公開のFunctionGenerator-BLEと同時利用によりファンクション・ジェネレータを実現する。

Dependencies:   mbed

FunctionGenerator-BLE

/users/ohneta/code/FunctionGenerator-BLE

what's this ? / 概要

あとで、もっとちゃんと書く(とおもう)

同時公開のFunctionGenerator-BLEと同時利用によりmbed LPC1768を使って、ファンクション・ジェネレータを実現する。

detail / 詳細

あとで、もっとちゃんと書く(とおもう)

FunctionGenerator-BLEはI2Cで所定のフォーマットに従ったデータをDACから出力する。

DACは連続するデータを出力し、任意の波形を出力する。

BLE command format / BLEコマンドフォーマット

あとで、ちゃんと書く(とおもう)

BLE App for iPhone

iOS用アプリソースコード App source codes for iOS

https://github.com/ohneta/FuncGenBLE

pictures / とりあえず写真など

外観

/media/uploads/ohneta/img_5614.jpg

アプリ画面

/media/uploads/ohneta/img_0006.png /media/uploads/ohneta/img_0007.png

出力波形

/media/uploads/ohneta/img_5616.jpg /media/uploads/ohneta/img_5615.jpg

more pictures...

Committer:
ohneta
Date:
Tue Jun 16 07:19:51 2015 +0000
Revision:
0:cbf811b45305
1st release commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ohneta 0:cbf811b45305 1 #include "mbed.h"
ohneta 0:cbf811b45305 2 #include <I2CSlave.h>
ohneta 0:cbf811b45305 3 #include "FunctionGenCommands.h"
ohneta 0:cbf811b45305 4
ohneta 0:cbf811b45305 5
ohneta 0:cbf811b45305 6 extern "C" void mbed_reset();
ohneta 0:cbf811b45305 7
ohneta 0:cbf811b45305 8 #define PI 3.141592
ohneta 0:cbf811b45305 9
ohneta 0:cbf811b45305 10 #define WAVE_MASTER_BUFFER_SIZE 360
ohneta 0:cbf811b45305 11
ohneta 0:cbf811b45305 12 #define WAVE_READ_BUFFER_SIZE (1024 * 8)
ohneta 0:cbf811b45305 13 //#define WAVE_READ_BUFFER_SIZE_FORCE (1024 * 16 - 1)
ohneta 0:cbf811b45305 14
ohneta 0:cbf811b45305 15 #define I2C_PACKET_LENGTH 36
ohneta 0:cbf811b45305 16
ohneta 0:cbf811b45305 17 #define ONE_CLOCK_TIME ((1.0 / 3.0) / (1000.0 * 1000.0))
ohneta 0:cbf811b45305 18 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 19
ohneta 0:cbf811b45305 20 void initMasterWaveBuffer();
ohneta 0:cbf811b45305 21 void masterToReadBufferByFreq(uint32_t paramFreq);
ohneta 0:cbf811b45305 22 void clickedUpButton();
ohneta 0:cbf811b45305 23 void clickedDownButton();
ohneta 0:cbf811b45305 24 //void lookForYou();
ohneta 0:cbf811b45305 25 void doCommand(char *readBuffer, int length);
ohneta 0:cbf811b45305 26 void commandPrint(FGPacket *fgPacket);
ohneta 0:cbf811b45305 27
ohneta 0:cbf811b45305 28 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 29 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 30 //BusOut myleds(LED1, LED2, LED3, LED4);
ohneta 0:cbf811b45305 31 //BusOut ladderDacBusOut(p21, p22, p23, p24, p25, p26, p5, p6, p7, p8);
ohneta 0:cbf811b45305 32
ohneta 0:cbf811b45305 33 DigitalOut led1(LED1); // I2C I/O
ohneta 0:cbf811b45305 34 DigitalOut led2(LED2);
ohneta 0:cbf811b45305 35 DigitalOut led3(LED3); // ERROR
ohneta 0:cbf811b45305 36 DigitalOut led4(LED4); // watch dog
ohneta 0:cbf811b45305 37
ohneta 0:cbf811b45305 38 PortOut ladderDacPortOut(Port0, 0x00000001);
ohneta 0:cbf811b45305 39 // P0_0のみ有効 = p9
ohneta 0:cbf811b45305 40
ohneta 0:cbf811b45305 41 AnalogOut aout(p18);
ohneta 0:cbf811b45305 42 InterruptIn upButton(p11);
ohneta 0:cbf811b45305 43 InterruptIn downButton(p12);
ohneta 0:cbf811b45305 44
ohneta 0:cbf811b45305 45 //InterruptIn i2cStart(p13);
ohneta 0:cbf811b45305 46 InterruptIn i2cStart(p29);
ohneta 0:cbf811b45305 47 I2CSlave i2cSlave(p28, p27);
ohneta 0:cbf811b45305 48 int gLookI2C = false;
ohneta 0:cbf811b45305 49
ohneta 0:cbf811b45305 50 Serial pc(USBTX, USBRX);
ohneta 0:cbf811b45305 51
ohneta 0:cbf811b45305 52 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 53 uint32_t gMasterFrequency = 366;
ohneta 0:cbf811b45305 54 uint32_t gLastFrequency = 366;
ohneta 0:cbf811b45305 55
ohneta 0:cbf811b45305 56 uint16_t gMasterBuffer[WAVE_MASTER_BUFFER_SIZE];
ohneta 0:cbf811b45305 57 //uint16_t gReadBuffer[WAVE_READ_BUFFER_SIZE];
ohneta 0:cbf811b45305 58 uint16_t gReadBuffer[WAVE_READ_BUFFER_SIZE] __attribute__((section("AHBSRAM0")));
ohneta 0:cbf811b45305 59 uint16_t gReadBuffer_tmp[WAVE_READ_BUFFER_SIZE] __attribute__((section("AHBSRAM1")));
ohneta 0:cbf811b45305 60 volatile int gReadBufferLength = 0;
ohneta 0:cbf811b45305 61
ohneta 0:cbf811b45305 62 char gI2cReadBuffer[I2C_PACKET_LENGTH];
ohneta 0:cbf811b45305 63
ohneta 0:cbf811b45305 64 WaveformInfo gWaveformInfo;
ohneta 0:cbf811b45305 65
ohneta 0:cbf811b45305 66
ohneta 0:cbf811b45305 67
ohneta 0:cbf811b45305 68 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 69 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 70
ohneta 0:cbf811b45305 71 void initMasterWaveBuffer()
ohneta 0:cbf811b45305 72 {
ohneta 0:cbf811b45305 73 // sin-wave
ohneta 0:cbf811b45305 74 for (int i = 0; i < WAVE_MASTER_BUFFER_SIZE; i++) {
ohneta 0:cbf811b45305 75 double rad = ((double)i / WAVE_MASTER_BUFFER_SIZE) * (PI * 2); // = 0...2*PI
ohneta 0:cbf811b45305 76 double sinA = sin(rad); // answer: -1.0 〜 1.0
ohneta 0:cbf811b45305 77 gMasterBuffer[i] = (unsigned short)((sinA + 1.0) / 2.0 * 0xffff);
ohneta 0:cbf811b45305 78 }
ohneta 0:cbf811b45305 79
ohneta 0:cbf811b45305 80 gMasterFrequency = 1.0 / (ONE_CLOCK_TIME * WAVE_MASTER_BUFFER_SIZE);
ohneta 0:cbf811b45305 81 }
ohneta 0:cbf811b45305 82
ohneta 0:cbf811b45305 83 void masterToReadBufferByFreq(uint32_t paramFreq)
ohneta 0:cbf811b45305 84 {
ohneta 0:cbf811b45305 85 gMasterFrequency = paramFreq;
ohneta 0:cbf811b45305 86 gLastFrequency = gMasterFrequency;
ohneta 0:cbf811b45305 87
ohneta 0:cbf811b45305 88 gReadBufferLength = (1.0 / (paramFreq * ONE_CLOCK_TIME));
ohneta 0:cbf811b45305 89 // 2 <= gReadBufferLength <= WAVE_READ_BUFFER_SIZE
ohneta 0:cbf811b45305 90
ohneta 0:cbf811b45305 91 double x = (double)WAVE_MASTER_BUFFER_SIZE / (double)gReadBufferLength;
ohneta 0:cbf811b45305 92 //double x = (double)WAVE_READ_BUFFER_SIZE_FORCE / (double)gReadBufferLength;
ohneta 0:cbf811b45305 93
ohneta 0:cbf811b45305 94 pc.printf("gReadBufferLength: %d\n", gReadBufferLength);
ohneta 0:cbf811b45305 95 pc.printf("x: %f\n", x);
ohneta 0:cbf811b45305 96
ohneta 0:cbf811b45305 97 for (int i = 0; i < gReadBufferLength; i++) {
ohneta 0:cbf811b45305 98 int pt = (int)((double)i * x);
ohneta 0:cbf811b45305 99 gReadBuffer[i] = gMasterBuffer[pt] & 0xffc0;
ohneta 0:cbf811b45305 100 //gReadBuffer[i] = (i & 0x01) ? 0xffff : 0x0000;
ohneta 0:cbf811b45305 101 }
ohneta 0:cbf811b45305 102 }
ohneta 0:cbf811b45305 103
ohneta 0:cbf811b45305 104 void clearReadBuffer()
ohneta 0:cbf811b45305 105 {
ohneta 0:cbf811b45305 106 for (int i = 0; i < WAVE_READ_BUFFER_SIZE; i++) {
ohneta 0:cbf811b45305 107 //for (int i = 0; i < WAVE_READ_BUFFER_SIZE_FORCE; i++) {
ohneta 0:cbf811b45305 108 gReadBuffer[i] = 0x0000;
ohneta 0:cbf811b45305 109 }
ohneta 0:cbf811b45305 110 }
ohneta 0:cbf811b45305 111
ohneta 0:cbf811b45305 112 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 113 #if 0
ohneta 0:cbf811b45305 114 void clickedUpButton()
ohneta 0:cbf811b45305 115 {
ohneta 0:cbf811b45305 116 upButton.disable_irq();
ohneta 0:cbf811b45305 117 downButton.disable_irq();
ohneta 0:cbf811b45305 118 wait(0.01);
ohneta 0:cbf811b45305 119 if (upButton == 1) {
ohneta 0:cbf811b45305 120 gInterruptCount++;
ohneta 0:cbf811b45305 121 if (gInterruptCount >= WAVE_READ_BUFFER_SIZE) {
ohneta 0:cbf811b45305 122 gInterruptCount = WAVE_READ_BUFFER_SIZE - 1;
ohneta 0:cbf811b45305 123 }
ohneta 0:cbf811b45305 124 masterToReadBuffer();
ohneta 0:cbf811b45305 125 //myleds = gInterruptCount;
ohneta 0:cbf811b45305 126 }
ohneta 0:cbf811b45305 127 upButton.enable_irq();
ohneta 0:cbf811b45305 128 downButton.enable_irq();
ohneta 0:cbf811b45305 129
ohneta 0:cbf811b45305 130 //pc.printf("Interrupt Count: %d \n", gInterruptCount);
ohneta 0:cbf811b45305 131 }
ohneta 0:cbf811b45305 132
ohneta 0:cbf811b45305 133 void clickedDownButton()
ohneta 0:cbf811b45305 134 {
ohneta 0:cbf811b45305 135 upButton.disable_irq();
ohneta 0:cbf811b45305 136 downButton.disable_irq();
ohneta 0:cbf811b45305 137 wait(0.01);
ohneta 0:cbf811b45305 138 if (downButton == 1) {
ohneta 0:cbf811b45305 139 gInterruptCount--;
ohneta 0:cbf811b45305 140 if (gInterruptCount < 0) {
ohneta 0:cbf811b45305 141 gInterruptCount = 0;
ohneta 0:cbf811b45305 142 }
ohneta 0:cbf811b45305 143 masterToReadBuffer();
ohneta 0:cbf811b45305 144 //myleds = gInterruptCount;
ohneta 0:cbf811b45305 145 }
ohneta 0:cbf811b45305 146 upButton.enable_irq();
ohneta 0:cbf811b45305 147 downButton.enable_irq();
ohneta 0:cbf811b45305 148
ohneta 0:cbf811b45305 149 //pc.printf("Interrupt Count: %d \n", gInterruptCount);
ohneta 0:cbf811b45305 150 }
ohneta 0:cbf811b45305 151 #endif
ohneta 0:cbf811b45305 152 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 153 /**
ohneta 0:cbf811b45305 154 *
ohneta 0:cbf811b45305 155 */
ohneta 0:cbf811b45305 156 void i2cSlaveAction()
ohneta 0:cbf811b45305 157 {
ohneta 0:cbf811b45305 158 pc.printf("--------\n");
ohneta 0:cbf811b45305 159 pc.printf("i2cSlaveAction()\n");
ohneta 0:cbf811b45305 160
ohneta 0:cbf811b45305 161 static int cnt = 0;
ohneta 0:cbf811b45305 162
ohneta 0:cbf811b45305 163 for (int i = 0; i < I2C_PACKET_LENGTH; i++) {
ohneta 0:cbf811b45305 164 gI2cReadBuffer[i] = 0x00;
ohneta 0:cbf811b45305 165 }
ohneta 0:cbf811b45305 166
ohneta 0:cbf811b45305 167 int loopCount = 0;
ohneta 0:cbf811b45305 168 int result = i2cSlave.receive();
ohneta 0:cbf811b45305 169 while (result == I2CSlave::NoData) {
ohneta 0:cbf811b45305 170 wait_ms(10);
ohneta 0:cbf811b45305 171 result = i2cSlave.receive();
ohneta 0:cbf811b45305 172 if (loopCount > 100) {
ohneta 0:cbf811b45305 173 return;
ohneta 0:cbf811b45305 174 }
ohneta 0:cbf811b45305 175 }
ohneta 0:cbf811b45305 176
ohneta 0:cbf811b45305 177 switch (result) {
ohneta 0:cbf811b45305 178 case I2CSlave::NoData:
ohneta 0:cbf811b45305 179 break;
ohneta 0:cbf811b45305 180
ohneta 0:cbf811b45305 181 case I2CSlave::WriteGeneral: // the master is writing to all slave -- broadcast
ohneta 0:cbf811b45305 182 break;
ohneta 0:cbf811b45305 183
ohneta 0:cbf811b45305 184 case I2CSlave::WriteAddressed: // the master is writing to this slave
ohneta 0:cbf811b45305 185 int ret = i2cSlave.read(gI2cReadBuffer, I2C_PACKET_LENGTH);
ohneta 0:cbf811b45305 186 FGPacket *fgPacket = (FGPacket *)gI2cReadBuffer;
ohneta 0:cbf811b45305 187
ohneta 0:cbf811b45305 188 pc.printf("Read : ret=%d [ ", ret);
ohneta 0:cbf811b45305 189 for (int i = 0; i < fgPacket->header.length; i++) {
ohneta 0:cbf811b45305 190 pc.printf("%02x ", gI2cReadBuffer[i]);
ohneta 0:cbf811b45305 191 }
ohneta 0:cbf811b45305 192 pc.printf("]\n");
ohneta 0:cbf811b45305 193
ohneta 0:cbf811b45305 194 doCommand(gI2cReadBuffer, I2C_PACKET_LENGTH);
ohneta 0:cbf811b45305 195 break;
ohneta 0:cbf811b45305 196
ohneta 0:cbf811b45305 197 case I2CSlave::ReadAddressed: // the master has requested a read from this slave
ohneta 0:cbf811b45305 198 char buf[32];
ohneta 0:cbf811b45305 199 sprintf(buf, "Ooops:%d", cnt);
ohneta 0:cbf811b45305 200 i2cSlave.write(buf, strlen(buf));
ohneta 0:cbf811b45305 201 cnt++;
ohneta 0:cbf811b45305 202 break;
ohneta 0:cbf811b45305 203
ohneta 0:cbf811b45305 204 default:
ohneta 0:cbf811b45305 205 break;
ohneta 0:cbf811b45305 206 }
ohneta 0:cbf811b45305 207 }
ohneta 0:cbf811b45305 208
ohneta 0:cbf811b45305 209 void doCommand(char *readBuffer, int length)
ohneta 0:cbf811b45305 210 {
ohneta 0:cbf811b45305 211 FGPacket *fgPacket = (FGPacket *)gI2cReadBuffer;
ohneta 0:cbf811b45305 212 commandPrint(fgPacket);
ohneta 0:cbf811b45305 213
ohneta 0:cbf811b45305 214 switch (fgPacket->header.command) {
ohneta 0:cbf811b45305 215 // for Command
ohneta 0:cbf811b45305 216 case FGCommand_Non:
ohneta 0:cbf811b45305 217 break;
ohneta 0:cbf811b45305 218
ohneta 0:cbf811b45305 219 case FGCommand_Device:
ohneta 0:cbf811b45305 220 // reserved for future.
ohneta 0:cbf811b45305 221 // fgPacket->body.commandDevice.device
ohneta 0:cbf811b45305 222 break;
ohneta 0:cbf811b45305 223
ohneta 0:cbf811b45305 224 case FGCommand_Output:
ohneta 0:cbf811b45305 225 if (fgPacket->body.commandOutput.on == 0) {
ohneta 0:cbf811b45305 226 aout.write_u16(0x0000);
ohneta 0:cbf811b45305 227 clearReadBuffer();
ohneta 0:cbf811b45305 228 } else {
ohneta 0:cbf811b45305 229 masterToReadBufferByFreq(gMasterFrequency);
ohneta 0:cbf811b45305 230 }
ohneta 0:cbf811b45305 231 break;
ohneta 0:cbf811b45305 232
ohneta 0:cbf811b45305 233 case FGCommand_Frequency:
ohneta 0:cbf811b45305 234 // TODO: 正確な周波数計算をすること!
ohneta 0:cbf811b45305 235 masterToReadBufferByFreq(fgPacket->body.commandFrequency.frequency);
ohneta 0:cbf811b45305 236 break;
ohneta 0:cbf811b45305 237
ohneta 0:cbf811b45305 238 case FGCommand_WaveformInfo:
ohneta 0:cbf811b45305 239 // TODO: パラメタの内容をチェックすること!
ohneta 0:cbf811b45305 240 gWaveformInfo = fgPacket->body.commandWaveformInfo;
ohneta 0:cbf811b45305 241
ohneta 0:cbf811b45305 242 break;
ohneta 0:cbf811b45305 243 case FGCommand_WaveformBlock:
ohneta 0:cbf811b45305 244 // TODO: パラメタの内容をチェックすること!
ohneta 0:cbf811b45305 245 uint32_t waveformOffset = fgPacket->body.commandWaveformBlock.blockNo * gWaveformInfo.blockSize;
ohneta 0:cbf811b45305 246 memcpy((uint8_t *)gMasterBuffer + waveformOffset, fgPacket->body.commandWaveformBlock.buffer, fgPacket->body.commandWaveformBlock.length);
ohneta 0:cbf811b45305 247 break;
ohneta 0:cbf811b45305 248
ohneta 0:cbf811b45305 249 case FGCommand_WaveformToBuffer:
ohneta 0:cbf811b45305 250 masterToReadBufferByFreq(gMasterFrequency);
ohneta 0:cbf811b45305 251 break;
ohneta 0:cbf811b45305 252
ohneta 0:cbf811b45305 253 // for Status
ohneta 0:cbf811b45305 254 case FGStatus_Output:
ohneta 0:cbf811b45305 255 break;
ohneta 0:cbf811b45305 256 case FGStatus_Frequency:
ohneta 0:cbf811b45305 257 break;
ohneta 0:cbf811b45305 258 case FGStatus_Device:
ohneta 0:cbf811b45305 259 break;
ohneta 0:cbf811b45305 260
ohneta 0:cbf811b45305 261 // Special command
ohneta 0:cbf811b45305 262 case FGCommand_Reset:
ohneta 0:cbf811b45305 263 mbed_reset();
ohneta 0:cbf811b45305 264 break;
ohneta 0:cbf811b45305 265 }
ohneta 0:cbf811b45305 266 }
ohneta 0:cbf811b45305 267
ohneta 0:cbf811b45305 268 void commandPrint(FGPacket *fgPacket)
ohneta 0:cbf811b45305 269 {
ohneta 0:cbf811b45305 270 pc.printf("command: %d\n", fgPacket->header.command);
ohneta 0:cbf811b45305 271 pc.printf("length: %d\n", fgPacket->header.length);
ohneta 0:cbf811b45305 272 {
ohneta 0:cbf811b45305 273 switch (fgPacket->header.command) {
ohneta 0:cbf811b45305 274 case FGCommand_Non:
ohneta 0:cbf811b45305 275 pc.printf("FGCommand_Non \n");
ohneta 0:cbf811b45305 276 pc.printf("Param:\n");
ohneta 0:cbf811b45305 277 pc.printf(" NON\n");
ohneta 0:cbf811b45305 278 break;
ohneta 0:cbf811b45305 279 case FGCommand_Device:
ohneta 0:cbf811b45305 280 pc.printf("FGCommand_Device \n");
ohneta 0:cbf811b45305 281 pc.printf("Param:\n");
ohneta 0:cbf811b45305 282 pc.printf(" device: %d\n", fgPacket->body.commandDevice.device);
ohneta 0:cbf811b45305 283 break;
ohneta 0:cbf811b45305 284 case FGCommand_Output:
ohneta 0:cbf811b45305 285 pc.printf("FGCommand_Output \n");
ohneta 0:cbf811b45305 286 pc.printf("Param:\n");
ohneta 0:cbf811b45305 287 pc.printf(" on: %d\n", fgPacket->body.commandOutput.on);
ohneta 0:cbf811b45305 288 break;
ohneta 0:cbf811b45305 289 case FGCommand_Frequency:
ohneta 0:cbf811b45305 290 pc.printf("FGCommand_Frequency \n");
ohneta 0:cbf811b45305 291 pc.printf("Param:\n");
ohneta 0:cbf811b45305 292 pc.printf(" freq: %d\n", fgPacket->body.commandFrequency.frequency);
ohneta 0:cbf811b45305 293 break;
ohneta 0:cbf811b45305 294
ohneta 0:cbf811b45305 295 case FGCommand_WaveformInfo:
ohneta 0:cbf811b45305 296 pc.printf("FGCommand_WaveformInfo \n");
ohneta 0:cbf811b45305 297 pc.printf("Param:\n");
ohneta 0:cbf811b45305 298 pc.printf(" waveSize: %d\n", fgPacket->body.commandWaveformInfo.waveSize);
ohneta 0:cbf811b45305 299 pc.printf(" bitPerData: %d\n", fgPacket->body.commandWaveformInfo.bitPerData);
ohneta 0:cbf811b45305 300 pc.printf(" blockSize: %d\n", fgPacket->body.commandWaveformInfo.blockSize);
ohneta 0:cbf811b45305 301 pc.printf(" blockMaxNum: %d\n", fgPacket->body.commandWaveformInfo.blockMaxNum);
ohneta 0:cbf811b45305 302 break;
ohneta 0:cbf811b45305 303
ohneta 0:cbf811b45305 304 case FGCommand_WaveformBlock:
ohneta 0:cbf811b45305 305 #if 0
ohneta 0:cbf811b45305 306 pc.printf("FGCommand_WaveformBlock \n");
ohneta 0:cbf811b45305 307 pc.printf("Param:\n");
ohneta 0:cbf811b45305 308 pc.printf(" blockNo: %d\n", fgPacket->body.commandWaveformBlock.blockNo);
ohneta 0:cbf811b45305 309 pc.printf(" length: %d\n", fgPacket->body.commandWaveformBlock.length);
ohneta 0:cbf811b45305 310 pc.printf(" buffer:\n");
ohneta 0:cbf811b45305 311 for (int i = 0; i < fgPacket->body.commandWaveformBlock.length; i++) {
ohneta 0:cbf811b45305 312 pc.printf("%02x ", fgPacket->body.commandWaveformBlock.buffer[i]);
ohneta 0:cbf811b45305 313 }
ohneta 0:cbf811b45305 314 pc.printf("\n");
ohneta 0:cbf811b45305 315 #endif
ohneta 0:cbf811b45305 316 break;
ohneta 0:cbf811b45305 317
ohneta 0:cbf811b45305 318 case FGCommand_WaveformToBuffer:
ohneta 0:cbf811b45305 319 pc.printf("FGCommand_WaveformToBuffer \n");
ohneta 0:cbf811b45305 320 pc.printf("Param:\n");
ohneta 0:cbf811b45305 321 pc.printf(" NON\n");
ohneta 0:cbf811b45305 322 break;
ohneta 0:cbf811b45305 323
ohneta 0:cbf811b45305 324 case FGStatus_Output:
ohneta 0:cbf811b45305 325 pc.printf("FGStatus_Output \n");
ohneta 0:cbf811b45305 326 pc.printf("Param:\n");
ohneta 0:cbf811b45305 327 pc.printf(" NON\n");
ohneta 0:cbf811b45305 328 break;
ohneta 0:cbf811b45305 329 case FGStatus_Frequency:
ohneta 0:cbf811b45305 330 pc.printf("FGStatus_Frequency \n");
ohneta 0:cbf811b45305 331 pc.printf("Param:\n");
ohneta 0:cbf811b45305 332 pc.printf(" NON\n");
ohneta 0:cbf811b45305 333 break;
ohneta 0:cbf811b45305 334 case FGStatus_Device:
ohneta 0:cbf811b45305 335 pc.printf("FGStatus_Device \n");
ohneta 0:cbf811b45305 336 pc.printf("Param:\n");
ohneta 0:cbf811b45305 337 pc.printf(" NON\n");
ohneta 0:cbf811b45305 338 break;
ohneta 0:cbf811b45305 339 }
ohneta 0:cbf811b45305 340 }
ohneta 0:cbf811b45305 341 }
ohneta 0:cbf811b45305 342
ohneta 0:cbf811b45305 343 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 344 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 345
ohneta 0:cbf811b45305 346 int main() {
ohneta 0:cbf811b45305 347 pc.baud(115200);
ohneta 0:cbf811b45305 348 pc.printf("\n");
ohneta 0:cbf811b45305 349 pc.printf("mbed function generator\n");
ohneta 0:cbf811b45305 350 pc.printf("--\n");
ohneta 0:cbf811b45305 351
ohneta 0:cbf811b45305 352 {
ohneta 0:cbf811b45305 353 gWaveformInfo.waveSize = WAVE_MASTER_BUFFER_SIZE;
ohneta 0:cbf811b45305 354 gWaveformInfo.bitPerData = 12;
ohneta 0:cbf811b45305 355 gWaveformInfo.blockSize = 16; // byte
ohneta 0:cbf811b45305 356 gWaveformInfo.blockMaxNum = gWaveformInfo.waveSize / gWaveformInfo.blockSize * ((gWaveformInfo.bitPerData + 7) / 8);
ohneta 0:cbf811b45305 357 }
ohneta 0:cbf811b45305 358
ohneta 0:cbf811b45305 359 initMasterWaveBuffer();
ohneta 0:cbf811b45305 360 masterToReadBufferByFreq(gMasterFrequency);
ohneta 0:cbf811b45305 361
ohneta 0:cbf811b45305 362 i2cSlave.frequency(100000);
ohneta 0:cbf811b45305 363 i2cSlave.address(0x62);
ohneta 0:cbf811b45305 364 i2cStart.rise(&i2cSlaveAction);
ohneta 0:cbf811b45305 365
ohneta 0:cbf811b45305 366 //upButton.rise(&clickedUpButton);
ohneta 0:cbf811b45305 367 //downButton.rise(&clickedDownButton);
ohneta 0:cbf811b45305 368
ohneta 0:cbf811b45305 369
ohneta 0:cbf811b45305 370 while (1) {
ohneta 0:cbf811b45305 371 for (int i = 0; i < gReadBufferLength; i++) {
ohneta 0:cbf811b45305 372 //aout.write_u16(gReadBuffer[i]);
ohneta 0:cbf811b45305 373 LPC_DAC->DACR = gReadBuffer[i]; // 1data output : MAX 3MHz = 333nS
ohneta 0:cbf811b45305 374 }
ohneta 0:cbf811b45305 375 }
ohneta 0:cbf811b45305 376
ohneta 0:cbf811b45305 377
ohneta 0:cbf811b45305 378 int waitus = 0;
ohneta 0:cbf811b45305 379 while (1) {
ohneta 0:cbf811b45305 380 for (int i = 0; i < gReadBufferLength; i++) {
ohneta 0:cbf811b45305 381 LPC_DAC->DACR = gReadBuffer[i]; // 1data output : MAX 3MHz = 333nS
ohneta 0:cbf811b45305 382 wait_us(waitus);
ohneta 0:cbf811b45305 383 }
ohneta 0:cbf811b45305 384 }
ohneta 0:cbf811b45305 385
ohneta 0:cbf811b45305 386 }
ohneta 0:cbf811b45305 387
ohneta 0:cbf811b45305 388 //-----------------------------------------------------------------------
ohneta 0:cbf811b45305 389 //-----------------------------------------------------------------------