Only for mbed LPC1768, mbed LPC1114FN28, Nucleo-F401 and Nucleo-F411. No way to change pin assign.

Dependencies:   freq_counter TextLCD

Fork of 5MHzOSC by fuyuno sakura

Please refer following page.
http://developer.mbed.org/users/kenjiArai/notebook/simple-frequency-counter/
/users/kenjiArai/notebook/frequency-counters/

Committer:
kenjiArai
Date:
Sun May 17 04:20:22 2015 +0000
Revision:
8:651bfebc5f39
Parent:
7:0c09d29c4cf3
Child:
9:0b84a8ce225a
F4x1RE  -> added high speed output mode for PA8 and PC9

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 5:af9fa3d0731c 1 /*
kenjiArai 5:af9fa3d0731c 2 * mbed Application program / Frequency Counter
kenjiArai 5:af9fa3d0731c 3 *
kenjiArai 8:651bfebc5f39 4 * Copyright (c) 2014-2015 Kenji Arai / JH1PJL
kenjiArai 5:af9fa3d0731c 5 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 5:af9fa3d0731c 6 * http://mbed.org/users/kenjiArai/
kenjiArai 5:af9fa3d0731c 7 * Created: October 18th, 2014
kenjiArai 8:651bfebc5f39 8 * Revised: May 17th, 2015
kenjiArai 5:af9fa3d0731c 9 *
kenjiArai 5:af9fa3d0731c 10 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 5:af9fa3d0731c 11 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 5:af9fa3d0731c 12 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 5:af9fa3d0731c 13 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 5:af9fa3d0731c 14 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 5:af9fa3d0731c 15 */
mio 0:c988614df67a 16
kenjiArai 6:44c2bcbdd77b 17 #define USE_COM // use Communication with PC(UART)
kenjiArai 8:651bfebc5f39 18 //#define USE_TEXT_LCD // use Text LCD/I2C Interface
kenjiArai 8:651bfebc5f39 19 //#define USE_GRAP_LCD // use Grafic LCD/SPI interface
kenjiArai 6:44c2bcbdd77b 20
kenjiArai 5:af9fa3d0731c 21 // Include ---------------------------------------------------------------------------------------
mio 0:c988614df67a 22 #include "mbed.h"
kenjiArai 6:44c2bcbdd77b 23 #include "freq_counter.h"
kenjiArai 6:44c2bcbdd77b 24 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 25 #include "TextLCD.h" // Std. lib./ LCD control
kenjiArai 6:44c2bcbdd77b 26 #endif
kenjiArai 6:44c2bcbdd77b 27 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 28 #include "ST7565_SPI_LCD.h"
kenjiArai 6:44c2bcbdd77b 29 #endif
mio 0:c988614df67a 30
kenjiArai 5:af9fa3d0731c 31 // Definition ------------------------------------------------------------------------------------
kenjiArai 5:af9fa3d0731c 32 #ifdef USE_COM
kenjiArai 5:af9fa3d0731c 33 #define BAUD(x) pc.baud(x)
kenjiArai 5:af9fa3d0731c 34 #define GETC(x) pc.getc(x)
kenjiArai 5:af9fa3d0731c 35 #define PUTC(x) pc.putc(x)
kenjiArai 5:af9fa3d0731c 36 #define PRINTF(...) pc.printf(__VA_ARGS__)
kenjiArai 5:af9fa3d0731c 37 #define READABLE(x) pc.readable(x)
kenjiArai 5:af9fa3d0731c 38 #else
kenjiArai 5:af9fa3d0731c 39 #define BAUD(x) {;}
kenjiArai 5:af9fa3d0731c 40 #define GETC(x) {;}
kenjiArai 5:af9fa3d0731c 41 #define PUTC(x) {;}
kenjiArai 5:af9fa3d0731c 42 #define PRINTF(...) {;}
kenjiArai 5:af9fa3d0731c 43 #define READABLE(x) {;}
kenjiArai 5:af9fa3d0731c 44 #endif
mio 1:2a347c40b1da 45
kenjiArai 6:44c2bcbdd77b 46 #if defined(TARGET_LPC1768)
kenjiArai 8:651bfebc5f39 47
kenjiArai 5:af9fa3d0731c 48 // LPC1768 Frequency example
kenjiArai 5:af9fa3d0731c 49 // Outout mbed's "PWM6" pin to 96MHZ/19 = 5.052MHz (Approx)
kenjiArai 7:0c09d29c4cf3 50 #define CLK_REFRENCE() PWM6_SETCLK(19)
kenjiArai 5:af9fa3d0731c 51 // Outout mbed's "PWM6" pin to 96MHZ/96 = 1.000MHz (Approx)
kenjiArai 7:0c09d29c4cf3 52 //#define CLK_REFRENCE() PWM6_SETCLK(96)
kenjiArai 8:651bfebc5f39 53
kenjiArai 7:0c09d29c4cf3 54 #elif defined(TARGET_LPC1114)
kenjiArai 8:651bfebc5f39 55
kenjiArai 7:0c09d29c4cf3 56 #define led_not_zero temp_ram
kenjiArai 7:0c09d29c4cf3 57 #define led_01 temp_ram
kenjiArai 7:0c09d29c4cf3 58 #define led_10 temp_ram
kenjiArai 7:0c09d29c4cf3 59 #define CLK_REFRENCE() clock_out()
kenjiArai 7:0c09d29c4cf3 60 #warning "Don't forget LPC1114 runs with internal clock. Measurement data is not accurate!!"
kenjiArai 8:651bfebc5f39 61
kenjiArai 6:44c2bcbdd77b 62 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 8:651bfebc5f39 63
kenjiArai 6:44c2bcbdd77b 64 #define led_not_zero temp_ram
kenjiArai 6:44c2bcbdd77b 65 #define led_01 temp_ram
kenjiArai 6:44c2bcbdd77b 66 #define led_10 temp_ram
kenjiArai 7:0c09d29c4cf3 67 #define CLK_REFRENCE() port_mco1_mco2_set()
kenjiArai 8:651bfebc5f39 68
kenjiArai 6:44c2bcbdd77b 69 #else
kenjiArai 6:44c2bcbdd77b 70 #error "No support for this CPU"
kenjiArai 6:44c2bcbdd77b 71 #endif
kenjiArai 6:44c2bcbdd77b 72
kenjiArai 5:af9fa3d0731c 73 // Object ----------------------------------------------------------------------------------------
kenjiArai 6:44c2bcbdd77b 74 #if defined(TARGET_LPC1768)
kenjiArai 6:44c2bcbdd77b 75
kenjiArai 5:af9fa3d0731c 76 DigitalOut led_gate(LED1);
kenjiArai 5:af9fa3d0731c 77 DigitalOut led_not_zero(LED2);
kenjiArai 5:af9fa3d0731c 78 DigitalOut led_01(LED3);
kenjiArai 5:af9fa3d0731c 79 DigitalOut led_10(LED4);
kenjiArai 5:af9fa3d0731c 80 DigitalIn sw_01(p19);
kenjiArai 5:af9fa3d0731c 81 DigitalIn sw_10(p20);
kenjiArai 5:af9fa3d0731c 82 Serial pc(USBTX, USBRX);
kenjiArai 5:af9fa3d0731c 83 I2C i2cBus(p9, p10); // SDA, SCL
kenjiArai 6:44c2bcbdd77b 84 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 85 TextLCD_I2C_N lcd(&i2cBus, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A)
kenjiArai 6:44c2bcbdd77b 86 #endif
kenjiArai 6:44c2bcbdd77b 87 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 88 ST7565 glcd(p5, p7, p19, p8, p20, ST7565::AD12864SPI); // mosi, sck, reset, a0, ncs
kenjiArai 6:44c2bcbdd77b 89 #endif
kenjiArai 5:af9fa3d0731c 90 PwmOut fmclck(p21); // for RESERVE pin21 as PWM1[6]
kenjiArai 5:af9fa3d0731c 91 F_COUNTER fc(p30);
mio 0:c988614df67a 92
kenjiArai 7:0c09d29c4cf3 93 #elif defined(TARGET_LPC1114)
kenjiArai 7:0c09d29c4cf3 94
kenjiArai 7:0c09d29c4cf3 95 DigitalOut led_gate(LED2);
kenjiArai 7:0c09d29c4cf3 96 DigitalIn sw_01(dp25);
kenjiArai 7:0c09d29c4cf3 97 DigitalIn sw_10(dp26);
kenjiArai 7:0c09d29c4cf3 98 Serial pc(dp16,dp15); // Communication with Host
kenjiArai 7:0c09d29c4cf3 99 I2C i2cBus(dp5,dp27); // SDA, SCL
kenjiArai 7:0c09d29c4cf3 100 #if defined(USE_TEXT_LCD)
kenjiArai 7:0c09d29c4cf3 101 TextLCD_I2C_N lcd(&i2cBus, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A)
kenjiArai 7:0c09d29c4cf3 102 #endif
kenjiArai 7:0c09d29c4cf3 103 #if defined(USE_GRAP_LCD)
kenjiArai 7:0c09d29c4cf3 104 ST7565 glcd(dp2, dp6, dp10, dp4, dp9, ST7565::AQM1248A); // mosi, sck, reset, a0, ncs
kenjiArai 7:0c09d29c4cf3 105 #endif
kenjiArai 7:0c09d29c4cf3 106 F_COUNTER fc(dp14);
kenjiArai 7:0c09d29c4cf3 107 // dp24 uses for CLOCKOUT -> Clock output for checking
kenjiArai 7:0c09d29c4cf3 108
kenjiArai 6:44c2bcbdd77b 109 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 6:44c2bcbdd77b 110
kenjiArai 6:44c2bcbdd77b 111 DigitalOut led_gate(LED1);
kenjiArai 6:44c2bcbdd77b 112 DigitalIn sw_01(PC_0);
kenjiArai 6:44c2bcbdd77b 113 DigitalIn sw_10(PC_1);
kenjiArai 6:44c2bcbdd77b 114 Serial pc(USBTX, USBRX);
kenjiArai 6:44c2bcbdd77b 115 I2C i2cBus(PB_9,PB_8); // SDA, SCL
kenjiArai 6:44c2bcbdd77b 116 #if defined(USE_TEXT_LCD)
kenjiArai 6:44c2bcbdd77b 117 TextLCD_I2C_N lcd(&i2cBus, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A)
kenjiArai 6:44c2bcbdd77b 118 #endif
kenjiArai 6:44c2bcbdd77b 119 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 120 ST7565 glcd(PB_5, PB_3, PA_10, PB_10, PA_9, ST7565::AD12864SPI); // mosi, sck, reset, a0, ncs
kenjiArai 6:44c2bcbdd77b 121 #endif
kenjiArai 6:44c2bcbdd77b 122 F_COUNTER fc(PA_0);
kenjiArai 6:44c2bcbdd77b 123 // PA8 & PC9 uses for MCO_1 % MCO_2 -> Clock output for checking
kenjiArai 6:44c2bcbdd77b 124
kenjiArai 6:44c2bcbdd77b 125 #else
kenjiArai 6:44c2bcbdd77b 126 #error "No support for this CPU"
kenjiArai 6:44c2bcbdd77b 127 #endif
kenjiArai 6:44c2bcbdd77b 128
kenjiArai 5:af9fa3d0731c 129 // RAM -------------------------------------------------------------------------------------------
kenjiArai 5:af9fa3d0731c 130 float freqency;
kenjiArai 6:44c2bcbdd77b 131 double t_gate;
kenjiArai 5:af9fa3d0731c 132 uint8_t sw;
kenjiArai 5:af9fa3d0731c 133
kenjiArai 6:44c2bcbdd77b 134 uint32_t temp_ram; // dummy ram (please keep it!)
kenjiArai 6:44c2bcbdd77b 135
kenjiArai 5:af9fa3d0731c 136 // ROM / Constant data ---------------------------------------------------------------------------
mio 1:2a347c40b1da 137
kenjiArai 5:af9fa3d0731c 138 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 8:651bfebc5f39 139 void read_sw_and_set_gate_time(void);
kenjiArai 8:651bfebc5f39 140 #if defined(TARGET_LPC1768)
kenjiArai 8:651bfebc5f39 141 void PWM6_SETCLK(int div);
kenjiArai 8:651bfebc5f39 142 #endif
kenjiArai 8:651bfebc5f39 143 #if defined(TARGET_LPC1114)
kenjiArai 8:651bfebc5f39 144 void clock_out(void);
kenjiArai 8:651bfebc5f39 145 #endif
kenjiArai 8:651bfebc5f39 146 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 8:651bfebc5f39 147 void port_mco1_mco2_set(void);
kenjiArai 8:651bfebc5f39 148 #endif
kenjiArai 5:af9fa3d0731c 149
kenjiArai 5:af9fa3d0731c 150 //-------------------------------------------------------------------------------------------------
kenjiArai 5:af9fa3d0731c 151 // Control Program
kenjiArai 5:af9fa3d0731c 152 //-------------------------------------------------------------------------------------------------
kenjiArai 5:af9fa3d0731c 153 int main()
kenjiArai 5:af9fa3d0731c 154 {
kenjiArai 6:44c2bcbdd77b 155 PRINTF("\r\nFrequency Counter by JH1PJL created on "__DATE__"\r\n");
kenjiArai 5:af9fa3d0731c 156 t_gate = 1.0;
kenjiArai 5:af9fa3d0731c 157 // Initialize LCD
kenjiArai 6:44c2bcbdd77b 158 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 159 lcd.locate(0, 0); // 1st line top
kenjiArai 5:af9fa3d0731c 160 // 12345678
kenjiArai 5:af9fa3d0731c 161 lcd.printf("Fre-Cntr");
kenjiArai 5:af9fa3d0731c 162 lcd.locate(0, 1); // 2nd line top
kenjiArai 5:af9fa3d0731c 163 // 12345678
kenjiArai 5:af9fa3d0731c 164 lcd.puts(" JH1PJL ");
kenjiArai 5:af9fa3d0731c 165 lcd.setContrast(0x16);
kenjiArai 6:44c2bcbdd77b 166 #endif
kenjiArai 6:44c2bcbdd77b 167 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 168 glcd.cls();
kenjiArai 6:44c2bcbdd77b 169 glcd.locate(0, 0);
kenjiArai 6:44c2bcbdd77b 170 glcd.printf("--- Frequency Counter --\r\n");
kenjiArai 6:44c2bcbdd77b 171 glcd.printf(" Kenji Arai / JH1PJL\r\n" );
kenjiArai 6:44c2bcbdd77b 172 glcd.printf(" \r\n");
kenjiArai 6:44c2bcbdd77b 173 #if defined(TARGET_LPC1768)
kenjiArai 7:0c09d29c4cf3 174 glcd.set_contrast(0x06);
kenjiArai 6:44c2bcbdd77b 175 glcd.printf(" Input: P30 PWM out: P21\r\n" );
kenjiArai 6:44c2bcbdd77b 176 glcd.printf(" LED1:Gate LED2:signal \r\n" );
kenjiArai 7:0c09d29c4cf3 177 #elif defined(TARGET_LPC1114)
kenjiArai 7:0c09d29c4cf3 178 glcd.set_contrast(0x01);
kenjiArai 7:0c09d29c4cf3 179 glcd.printf(" LED2:Gate " );
kenjiArai 6:44c2bcbdd77b 180 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 7:0c09d29c4cf3 181 glcd.set_contrast(0x06);
kenjiArai 6:44c2bcbdd77b 182 glcd.printf(" Input: PA0 PWM out: PA8\r\n" );
kenjiArai 6:44c2bcbdd77b 183 glcd.printf(" LED1:Gate \r\n" );
kenjiArai 6:44c2bcbdd77b 184 #else
kenjiArai 6:44c2bcbdd77b 185 #error "No support for this CPU"
kenjiArai 6:44c2bcbdd77b 186 #endif
kenjiArai 6:44c2bcbdd77b 187 #endif // defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 188 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 189 wait(5.0);
kenjiArai 5:af9fa3d0731c 190 lcd.locate(0, 1); // 2nd line top
kenjiArai 5:af9fa3d0731c 191 // 12345678
kenjiArai 5:af9fa3d0731c 192 lcd.puts(" ");
kenjiArai 6:44c2bcbdd77b 193 #endif
kenjiArai 7:0c09d29c4cf3 194 // Set Internalclock for reference
kenjiArai 7:0c09d29c4cf3 195 CLK_REFRENCE();
kenjiArai 5:af9fa3d0731c 196 freqency = 0;
kenjiArai 5:af9fa3d0731c 197 while(true) {
kenjiArai 5:af9fa3d0731c 198 led_gate = 1;
kenjiArai 5:af9fa3d0731c 199 freqency = (float)fc.read_frequency(t_gate);
kenjiArai 5:af9fa3d0731c 200 led_gate = 0;
kenjiArai 5:af9fa3d0731c 201 wait(1.1 - t_gate);
kenjiArai 5:af9fa3d0731c 202 if (freqency == 0) {
kenjiArai 5:af9fa3d0731c 203 led_not_zero = 1;
kenjiArai 5:af9fa3d0731c 204 } else {
kenjiArai 5:af9fa3d0731c 205 led_not_zero = 0;
kenjiArai 5:af9fa3d0731c 206 }
kenjiArai 5:af9fa3d0731c 207 read_sw_and_set_gate_time();
kenjiArai 6:44c2bcbdd77b 208 PRINTF("f= %9.0f [Hz], gate= %4.3f [Sec]\r\n", freqency/t_gate, t_gate);
kenjiArai 6:44c2bcbdd77b 209 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 210 lcd.locate(0, 0); // 1st line top
kenjiArai 5:af9fa3d0731c 211 lcd.printf("%8.0f", freqency);
kenjiArai 5:af9fa3d0731c 212 lcd.locate(0, 1); // 2nd line top
kenjiArai 6:44c2bcbdd77b 213 #endif
kenjiArai 6:44c2bcbdd77b 214 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 215 glcd.locate(0, 10);
kenjiArai 6:44c2bcbdd77b 216 glcd.printf(" \r\n");
kenjiArai 6:44c2bcbdd77b 217 glcd.locate(10, 10);
kenjiArai 6:44c2bcbdd77b 218 glcd.printf("%8.0f Hz", freqency);
kenjiArai 6:44c2bcbdd77b 219 glcd.locate(10, 20);
kenjiArai 6:44c2bcbdd77b 220 #endif
kenjiArai 5:af9fa3d0731c 221 switch (sw) {
kenjiArai 5:af9fa3d0731c 222 case 0:
kenjiArai 6:44c2bcbdd77b 223 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 224 // 12345678
kenjiArai 5:af9fa3d0731c 225 lcd.printf("x1000 Hz");
kenjiArai 6:44c2bcbdd77b 226 #endif
kenjiArai 6:44c2bcbdd77b 227 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 228 glcd.printf(" x1000 ");
kenjiArai 6:44c2bcbdd77b 229 #endif
kenjiArai 5:af9fa3d0731c 230 break;
kenjiArai 5:af9fa3d0731c 231 case 1:
kenjiArai 6:44c2bcbdd77b 232 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 233 // 12345678
kenjiArai 5:af9fa3d0731c 234 lcd.printf("x100 Hz");
kenjiArai 6:44c2bcbdd77b 235 #endif
kenjiArai 6:44c2bcbdd77b 236 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 237 glcd.printf(" x100 ");
kenjiArai 6:44c2bcbdd77b 238 #endif
kenjiArai 5:af9fa3d0731c 239 break;
kenjiArai 5:af9fa3d0731c 240 case 2:
kenjiArai 6:44c2bcbdd77b 241 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 242 // 12345678
kenjiArai 5:af9fa3d0731c 243 lcd.printf("x10 Hz");
kenjiArai 6:44c2bcbdd77b 244 #endif
kenjiArai 6:44c2bcbdd77b 245 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 246 glcd.printf("x10 ");
kenjiArai 6:44c2bcbdd77b 247 #endif
kenjiArai 5:af9fa3d0731c 248 break;
kenjiArai 5:af9fa3d0731c 249 case 3:
kenjiArai 5:af9fa3d0731c 250 default:
kenjiArai 6:44c2bcbdd77b 251 #if defined(USE_TEXT_LCD)
kenjiArai 5:af9fa3d0731c 252 // 12345678
kenjiArai 5:af9fa3d0731c 253 lcd.printf("x1 Hz");
kenjiArai 6:44c2bcbdd77b 254 #endif
kenjiArai 6:44c2bcbdd77b 255 #if defined(USE_GRAP_LCD)
kenjiArai 6:44c2bcbdd77b 256 glcd.printf(" x1 ");
kenjiArai 6:44c2bcbdd77b 257 #endif
kenjiArai 5:af9fa3d0731c 258 break;
kenjiArai 5:af9fa3d0731c 259 }
mio 1:2a347c40b1da 260 }
mio 1:2a347c40b1da 261 }
kenjiArai 8:651bfebc5f39 262
kenjiArai 8:651bfebc5f39 263 void read_sw_and_set_gate_time(void)
kenjiArai 8:651bfebc5f39 264 {
kenjiArai 8:651bfebc5f39 265 if (sw_10) {
kenjiArai 8:651bfebc5f39 266 led_10 = 1;
kenjiArai 8:651bfebc5f39 267 sw = 2;
kenjiArai 8:651bfebc5f39 268 } else {
kenjiArai 8:651bfebc5f39 269 led_10 = 0;
kenjiArai 8:651bfebc5f39 270 sw = 0;
kenjiArai 8:651bfebc5f39 271 }
kenjiArai 8:651bfebc5f39 272 if (sw_01) {
kenjiArai 8:651bfebc5f39 273 led_01 = 1;
kenjiArai 8:651bfebc5f39 274 sw += 1;
kenjiArai 8:651bfebc5f39 275 } else {
kenjiArai 8:651bfebc5f39 276 led_01 = 0;
kenjiArai 8:651bfebc5f39 277 }
kenjiArai 8:651bfebc5f39 278 switch (sw) {
kenjiArai 8:651bfebc5f39 279 case 0:
kenjiArai 8:651bfebc5f39 280 t_gate = 0.001;
kenjiArai 8:651bfebc5f39 281 break;
kenjiArai 8:651bfebc5f39 282 case 1:
kenjiArai 8:651bfebc5f39 283 t_gate = 0.01;
kenjiArai 8:651bfebc5f39 284 break;
kenjiArai 8:651bfebc5f39 285 case 2:
kenjiArai 8:651bfebc5f39 286 t_gate = 0.1;
kenjiArai 8:651bfebc5f39 287 break;
kenjiArai 8:651bfebc5f39 288 case 3:
kenjiArai 8:651bfebc5f39 289 default:
kenjiArai 8:651bfebc5f39 290 t_gate = 1.0;
kenjiArai 8:651bfebc5f39 291 break;
kenjiArai 8:651bfebc5f39 292 }
kenjiArai 8:651bfebc5f39 293 }
kenjiArai 8:651bfebc5f39 294
kenjiArai 8:651bfebc5f39 295 #if defined(TARGET_LPC1768)
kenjiArai 8:651bfebc5f39 296
kenjiArai 8:651bfebc5f39 297 // Clock Output From pin21(PWM6)
kenjiArai 8:651bfebc5f39 298 // Set Clock Freq with div.
kenjiArai 8:651bfebc5f39 299 // if mbed is running at 96MHz, div is set 96 to Get 1MHz.
kenjiArai 8:651bfebc5f39 300 void PWM6_SETCLK(int div)
kenjiArai 8:651bfebc5f39 301 {
kenjiArai 8:651bfebc5f39 302 LPC_PWM1->TCR = (1 << 1); // 1)Reset counter, disable PWM
kenjiArai 8:651bfebc5f39 303 LPC_SC->PCLKSEL0 &= ~(0x3 << 12);
kenjiArai 8:651bfebc5f39 304 LPC_SC->PCLKSEL0 |= (1 << 12); // 2)Set peripheral clock divider to /1, i.e. system clock
kenjiArai 8:651bfebc5f39 305 LPC_PWM1->MR0 = div - 1; // 3)Match Register 0 is shared period counter for all PWM1
kenjiArai 8:651bfebc5f39 306 LPC_PWM1->MR6 = (div + 1)>> 1; //
kenjiArai 8:651bfebc5f39 307 LPC_PWM1->LER |= 1; // 4)Start updating at next period start
kenjiArai 8:651bfebc5f39 308 LPC_PWM1->TCR = (1 << 0) || (1 << 3); // 5)Enable counter and PWM
kenjiArai 8:651bfebc5f39 309 }
kenjiArai 8:651bfebc5f39 310
kenjiArai 8:651bfebc5f39 311 #elif defined(TARGET_LPC1114)
kenjiArai 8:651bfebc5f39 312
kenjiArai 8:651bfebc5f39 313 // CLOCKOUT from pin24(dp18)
kenjiArai 8:651bfebc5f39 314 // Freq = 48MHz/4 = 12MHz
kenjiArai 8:651bfebc5f39 315 void clock_out(void)
kenjiArai 8:651bfebc5f39 316 {
kenjiArai 8:651bfebc5f39 317 LPC_SYSCON->CLKOUTCLKSEL = 3; // System clock
kenjiArai 8:651bfebc5f39 318 LPC_SYSCON->CLKOUTDIV = 4; // div 1/4
kenjiArai 8:651bfebc5f39 319 LPC_IOCON->PIO0_1 = 1; // select CLKOUT to P0_1(pin24)/dp18
kenjiArai 8:651bfebc5f39 320 LPC_SYSCON->CLKOUTUEN = 1; // enable output
kenjiArai 8:651bfebc5f39 321 }
kenjiArai 8:651bfebc5f39 322
kenjiArai 8:651bfebc5f39 323 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 8:651bfebc5f39 324
kenjiArai 8:651bfebc5f39 325 void port_mco1_mco2_set(void)
kenjiArai 8:651bfebc5f39 326 {
kenjiArai 8:651bfebc5f39 327 uint32_t temp = 0x00;
kenjiArai 8:651bfebc5f39 328
kenjiArai 8:651bfebc5f39 329 // PA8 -> MCO_1
kenjiArai 8:651bfebc5f39 330 temp = ((uint32_t)(GPIO_AF0_MCO) << (((uint32_t)8 & (uint32_t)0x07) * 4)) ;
kenjiArai 8:651bfebc5f39 331 GPIOA->AFR[8 >> 3] &= ~((uint32_t)0xf << ((uint32_t)(8 & (uint32_t)0x07) * 4)) ;
kenjiArai 8:651bfebc5f39 332 GPIOA->AFR[8 >> 3] |= temp;
kenjiArai 8:651bfebc5f39 333 GPIOA->MODER &= ~(GPIO_MODER_MODER0 << (8 * 2));
kenjiArai 8:651bfebc5f39 334 GPIOA->MODER |= (0x2 << (8 * 2));
kenjiArai 8:651bfebc5f39 335 GPIOA->OSPEEDR |= (0x03 << (8 * 2)); // High speed
kenjiArai 8:651bfebc5f39 336 // PC9 -> MCO_2
kenjiArai 8:651bfebc5f39 337 temp = ((uint32_t)(GPIO_AF0_MCO) << (((uint32_t)9 & (uint32_t)0x07) * 4)) ;
kenjiArai 8:651bfebc5f39 338 GPIOC->AFR[9 >> 3] &= ~((uint32_t)0xf << ((uint32_t)(9 & (uint32_t)0x07) * 4)) ;
kenjiArai 8:651bfebc5f39 339 GPIOC->AFR[9 >> 3] |= temp;
kenjiArai 8:651bfebc5f39 340 GPIOC->MODER &= ~(GPIO_MODER_MODER0 << (9 * 2));
kenjiArai 8:651bfebc5f39 341 GPIOC->MODER |= (0x2 << (9 * 2));
kenjiArai 8:651bfebc5f39 342 GPIOC->OSPEEDR |= (0x03 << (9 * 2)); // High speed
kenjiArai 8:651bfebc5f39 343 // Select output clock source
kenjiArai 8:651bfebc5f39 344 RCC->CFGR &= 0x009fffff;
kenjiArai 8:651bfebc5f39 345 #if 0
kenjiArai 8:651bfebc5f39 346 // MC0_1 output HSE 1/4, MCO_2 output SYSCLK 1/4
kenjiArai 8:651bfebc5f39 347 // MCO2 MCO2PRE MCO1PRE MCO1
kenjiArai 8:651bfebc5f39 348 RCC->CFGR |= (0x0 << 30) + (0x6 << 27) + (0x6 << 24) + (0x3 << 22);
kenjiArai 8:651bfebc5f39 349 #else
kenjiArai 8:651bfebc5f39 350 // MC0_1 output HSE 1/1, MCO_2 output SYSCLK 1/2
kenjiArai 8:651bfebc5f39 351 // MCO2 MCO2PRE MCO1PRE MCO1
kenjiArai 8:651bfebc5f39 352 RCC->CFGR |= (0x0 << 30) + (0x4 << 27) + (0x0 << 24) + (0x3 << 22);
kenjiArai 8:651bfebc5f39 353 #endif
kenjiArai 8:651bfebc5f39 354 }
kenjiArai 8:651bfebc5f39 355
kenjiArai 8:651bfebc5f39 356 #else
kenjiArai 8:651bfebc5f39 357 #error "No support for this CPU"
kenjiArai 8:651bfebc5f39 358 #endif