test program for Silicon Laboratories Inc. Si5351A-B-GT I2C-PROGRAMMABLE ANY-FREQUENCY CMOS CLOCK GENERATOR

Dependencies:   Si5351A

Committer:
kenjiArai
Date:
Thu Jan 05 13:23:11 2017 +0000
Revision:
2:73d79424daa5
Parent:
1:2b29f68043f7
Child:
3:92f31b23fb0b
0,1,2 function/interval :1sec -> variable (enter by key)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:d68f1e7f7f49 1 /*
kenjiArai 0:d68f1e7f7f49 2 * mbed Application program / Si5351A sample program
kenjiArai 0:d68f1e7f7f49 3 * tested on:
kenjiArai 0:d68f1e7f7f49 4 * ST Nucleo-F411RE & F401RE
kenjiArai 0:d68f1e7f7f49 5 * LPC1114FN28
kenjiArai 0:d68f1e7f7f49 6 *
kenjiArai 0:d68f1e7f7f49 7 * Copyright (c) 2016,'17 Kenji Arai / JH1PJL
kenjiArai 0:d68f1e7f7f49 8 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:d68f1e7f7f49 9 * http://mbed.org/users/kenjiArai/
kenjiArai 0:d68f1e7f7f49 10 * Created: December 28th, 2016
kenjiArai 2:73d79424daa5 11 * Revised: January 5th, 2017
kenjiArai 0:d68f1e7f7f49 12 *
kenjiArai 0:d68f1e7f7f49 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
kenjiArai 0:d68f1e7f7f49 14 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
kenjiArai 0:d68f1e7f7f49 15 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
kenjiArai 0:d68f1e7f7f49 16 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:d68f1e7f7f49 17 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
kenjiArai 0:d68f1e7f7f49 18 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
kenjiArai 0:d68f1e7f7f49 19 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:d68f1e7f7f49 20 */
kenjiArai 0:d68f1e7f7f49 21
kenjiArai 0:d68f1e7f7f49 22 // Include --------------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 23 #include "mbed.h"
kenjiArai 0:d68f1e7f7f49 24 #include "si5351a.h"
kenjiArai 0:d68f1e7f7f49 25 #include "si5351a_check.h"
kenjiArai 0:d68f1e7f7f49 26
kenjiArai 0:d68f1e7f7f49 27 // Definition -----------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 28
kenjiArai 0:d68f1e7f7f49 29 // Object ---------------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 30 Serial pc(USBTX, USBRX);
kenjiArai 0:d68f1e7f7f49 31 //I2C i2c(dp5, dp27); // communication with Si5351A
kenjiArai 0:d68f1e7f7f49 32 I2C i2c(I2C_SDA, I2C_SCL); // communication with Si5351A
kenjiArai 0:d68f1e7f7f49 33 SI5351A clk(i2c, 25000000UL); // base clock = 25.0MHz
kenjiArai 0:d68f1e7f7f49 34
kenjiArai 0:d68f1e7f7f49 35 //------------------------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 36 // Control Program
kenjiArai 0:d68f1e7f7f49 37 //------------------------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 38 int main()
kenjiArai 0:d68f1e7f7f49 39 {
kenjiArai 0:d68f1e7f7f49 40 while (true){ test_si5351();}
kenjiArai 0:d68f1e7f7f49 41 }
kenjiArai 0:d68f1e7f7f49 42
kenjiArai 0:d68f1e7f7f49 43 // Help Massage
kenjiArai 0:d68f1e7f7f49 44 void msg_hlp (void)
kenjiArai 0:d68f1e7f7f49 45 {
kenjiArai 0:d68f1e7f7f49 46 PRINTF(opening_msg);
kenjiArai 0:d68f1e7f7f49 47 put_rn();
kenjiArai 0:d68f1e7f7f49 48 PRINTF("0 - Check CLK0 output between 50KHz to 90MHz");
kenjiArai 0:d68f1e7f7f49 49 put_rn();
kenjiArai 0:d68f1e7f7f49 50 PRINTF("1 - Check CLK1 (same as #1)");
kenjiArai 0:d68f1e7f7f49 51 put_rn();
kenjiArai 0:d68f1e7f7f49 52 PRINTF("2 - Check CLK2 (same as #1)");
kenjiArai 0:d68f1e7f7f49 53 put_rn();
kenjiArai 0:d68f1e7f7f49 54 PRINTF("3 - Example CLK0:120.00MHz, CLK1:12.00MHz, CLK2:13.56MHz");
kenjiArai 0:d68f1e7f7f49 55 put_rn();
kenjiArai 0:d68f1e7f7f49 56 PRINTF("4 - Set desired freq. into CLK0");
kenjiArai 0:d68f1e7f7f49 57 put_rn();
kenjiArai 0:d68f1e7f7f49 58 PRINTF("5 - Set desired freq. into CLK0 & CLK1");
kenjiArai 0:d68f1e7f7f49 59 put_rn();
kenjiArai 0:d68f1e7f7f49 60 PRINTF("6 - Set desired freq. into CLK0, CLK1 & CLK2");
kenjiArai 0:d68f1e7f7f49 61 put_rn();
kenjiArai 0:d68f1e7f7f49 62 PRINTF("7 - CLK0: set desired center freq. then shift +/- range");
kenjiArai 0:d68f1e7f7f49 63 put_rn();
kenjiArai 0:d68f1e7f7f49 64 PRINTF("a - All clear registers");
kenjiArai 0:d68f1e7f7f49 65 put_rn();
kenjiArai 0:d68f1e7f7f49 66 PRINTF("c - Show current configration");
kenjiArai 0:d68f1e7f7f49 67 put_rn();
kenjiArai 0:d68f1e7f7f49 68 PRINTF("r - Show current resisters");
kenjiArai 0:d68f1e7f7f49 69 put_rn();
kenjiArai 0:d68f1e7f7f49 70 PRINTF("x - Go to special command");
kenjiArai 0:d68f1e7f7f49 71 put_rn();
kenjiArai 0:d68f1e7f7f49 72 PRINTF("Hit any key then return to prompt screen");
kenjiArai 0:d68f1e7f7f49 73 put_rn();
kenjiArai 0:d68f1e7f7f49 74 PRINTF("Reset mbed board -> please hit key <Alt>+<B>");
kenjiArai 0:d68f1e7f7f49 75 put_rn();
kenjiArai 0:d68f1e7f7f49 76 }
kenjiArai 0:d68f1e7f7f49 77
kenjiArai 0:d68f1e7f7f49 78 // ---------- Program starts here! ---------------------------------------------
kenjiArai 0:d68f1e7f7f49 79 void test_si5351(void)
kenjiArai 0:d68f1e7f7f49 80 {
kenjiArai 0:d68f1e7f7f49 81 char *ptr;
kenjiArai 0:d68f1e7f7f49 82 int32_t f;
kenjiArai 0:d68f1e7f7f49 83
kenjiArai 0:d68f1e7f7f49 84 BAUD(BAUD_RATE);
kenjiArai 0:d68f1e7f7f49 85 put_rn();
kenjiArai 0:d68f1e7f7f49 86 put_rn();
kenjiArai 0:d68f1e7f7f49 87 PRINTF("%s [Help:'?' key]", opening_msg);
kenjiArai 0:d68f1e7f7f49 88 put_rn();
kenjiArai 0:d68f1e7f7f49 89 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 90 for (;;) {
kenjiArai 0:d68f1e7f7f49 91 put_r();
kenjiArai 0:d68f1e7f7f49 92 PUTC('>');
kenjiArai 0:d68f1e7f7f49 93 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 94 get_line(ptr, sizeof(linebuf));
kenjiArai 0:d68f1e7f7f49 95 put_r();
kenjiArai 0:d68f1e7f7f49 96 switch (*ptr++) {
kenjiArai 0:d68f1e7f7f49 97 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 98 // test0
kenjiArai 0:d68f1e7f7f49 99 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 100 case '0' :
kenjiArai 0:d68f1e7f7f49 101 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 102 test(0);
kenjiArai 0:d68f1e7f7f49 103 //put_rn();
kenjiArai 0:d68f1e7f7f49 104 break;
kenjiArai 0:d68f1e7f7f49 105 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 106 // test1
kenjiArai 0:d68f1e7f7f49 107 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 108 case '1' :
kenjiArai 0:d68f1e7f7f49 109 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 110 test(1);
kenjiArai 0:d68f1e7f7f49 111 //put_rn();
kenjiArai 0:d68f1e7f7f49 112 break;
kenjiArai 0:d68f1e7f7f49 113 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 114 // test2
kenjiArai 0:d68f1e7f7f49 115 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 116 case '2' :
kenjiArai 0:d68f1e7f7f49 117 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 118 test(2);
kenjiArai 0:d68f1e7f7f49 119 //put_rn();
kenjiArai 0:d68f1e7f7f49 120 break;
kenjiArai 0:d68f1e7f7f49 121 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 122 // test3
kenjiArai 0:d68f1e7f7f49 123 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 124 case '3' :
kenjiArai 0:d68f1e7f7f49 125 clk.debug_example_clock();
kenjiArai 0:d68f1e7f7f49 126 //clk.debug_reg_print();
kenjiArai 0:d68f1e7f7f49 127 //put_rn();
kenjiArai 0:d68f1e7f7f49 128 break;
kenjiArai 0:d68f1e7f7f49 129 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 130 // test4
kenjiArai 0:d68f1e7f7f49 131 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 132 case '4' :
kenjiArai 0:d68f1e7f7f49 133 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 134 PRINTF("CLK0 %s", msg0);
kenjiArai 0:d68f1e7f7f49 135 put_rn();
kenjiArai 0:d68f1e7f7f49 136 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 137 get_line(ptr, buf_size);
kenjiArai 0:d68f1e7f7f49 138 put_r();
kenjiArai 0:d68f1e7f7f49 139 if (xatoi(&ptr,&f)){
kenjiArai 0:d68f1e7f7f49 140 if (f < 0){ break;}
kenjiArai 0:d68f1e7f7f49 141 PRINTF("CLK0:%u [Hz]", clk.set_frequency(0, f));
kenjiArai 0:d68f1e7f7f49 142 } else {
kenjiArai 0:d68f1e7f7f49 143 PUTC('?');
kenjiArai 0:d68f1e7f7f49 144 }
kenjiArai 0:d68f1e7f7f49 145 put_rn();
kenjiArai 0:d68f1e7f7f49 146 break;
kenjiArai 0:d68f1e7f7f49 147 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 148 // test5
kenjiArai 0:d68f1e7f7f49 149 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 150 case '5' :
kenjiArai 0:d68f1e7f7f49 151 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 152 PRINTF("CLK0 %s", msg0);
kenjiArai 0:d68f1e7f7f49 153 put_rn();
kenjiArai 0:d68f1e7f7f49 154 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 155 get_line(ptr, buf_size);
kenjiArai 0:d68f1e7f7f49 156 put_r();
kenjiArai 0:d68f1e7f7f49 157 if (xatoi(&ptr,&f)){
kenjiArai 0:d68f1e7f7f49 158 if (f < 0){ break;}
kenjiArai 0:d68f1e7f7f49 159 PRINTF("CLK0:%u [Hz]", clk.set_frequency(0, f));
kenjiArai 0:d68f1e7f7f49 160 } else {
kenjiArai 0:d68f1e7f7f49 161 PUTC('?');
kenjiArai 0:d68f1e7f7f49 162 }
kenjiArai 0:d68f1e7f7f49 163 put_rn();
kenjiArai 0:d68f1e7f7f49 164 PRINTF("CLK1 %s", msg0);
kenjiArai 0:d68f1e7f7f49 165 put_rn();
kenjiArai 0:d68f1e7f7f49 166 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 167 get_line(ptr, buf_size);
kenjiArai 0:d68f1e7f7f49 168 put_r();
kenjiArai 0:d68f1e7f7f49 169 if (xatoi(&ptr,&f)){
kenjiArai 0:d68f1e7f7f49 170 if (f < 0){ break;}
kenjiArai 0:d68f1e7f7f49 171 PRINTF("CLK1:%u [Hz]", clk.set_frequency(1, f));
kenjiArai 0:d68f1e7f7f49 172 } else {
kenjiArai 0:d68f1e7f7f49 173 PUTC('?');
kenjiArai 0:d68f1e7f7f49 174 }
kenjiArai 0:d68f1e7f7f49 175 put_rn();
kenjiArai 0:d68f1e7f7f49 176 break;
kenjiArai 0:d68f1e7f7f49 177 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 178 // test6
kenjiArai 0:d68f1e7f7f49 179 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 180 case '6' :
kenjiArai 0:d68f1e7f7f49 181 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 182 PRINTF("CLK0 %s", msg0);
kenjiArai 0:d68f1e7f7f49 183 put_rn();
kenjiArai 0:d68f1e7f7f49 184 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 185 get_line(ptr, buf_size);
kenjiArai 0:d68f1e7f7f49 186 put_r();
kenjiArai 0:d68f1e7f7f49 187 if (xatoi(&ptr,&f)){
kenjiArai 0:d68f1e7f7f49 188 if (f < 0){ break;}
kenjiArai 0:d68f1e7f7f49 189 PRINTF("CLK0:%u [Hz]", clk.set_frequency(0, f));
kenjiArai 0:d68f1e7f7f49 190 } else {
kenjiArai 0:d68f1e7f7f49 191 PUTC('?');
kenjiArai 0:d68f1e7f7f49 192 }
kenjiArai 0:d68f1e7f7f49 193 put_rn();
kenjiArai 0:d68f1e7f7f49 194 PRINTF("CLK1 %s", msg0);
kenjiArai 0:d68f1e7f7f49 195 put_rn();
kenjiArai 0:d68f1e7f7f49 196 PRINTF(
kenjiArai 0:d68f1e7f7f49 197 "If you set CLK1 over 100MHz, you cannt set CLK2 anymore");
kenjiArai 0:d68f1e7f7f49 198 put_rn();
kenjiArai 0:d68f1e7f7f49 199 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 200 get_line(ptr, buf_size);
kenjiArai 0:d68f1e7f7f49 201 put_r();
kenjiArai 0:d68f1e7f7f49 202 if (xatoi(&ptr,&f)){
kenjiArai 0:d68f1e7f7f49 203 if (f < 0){ break;}
kenjiArai 0:d68f1e7f7f49 204 PRINTF("CLK1:%u [Hz]", clk.set_frequency(1, f));
kenjiArai 0:d68f1e7f7f49 205 } else {
kenjiArai 0:d68f1e7f7f49 206 PUTC('?');
kenjiArai 0:d68f1e7f7f49 207 }
kenjiArai 0:d68f1e7f7f49 208 put_rn();
kenjiArai 0:d68f1e7f7f49 209 PRINTF("CLK2 %s", msg0);
kenjiArai 0:d68f1e7f7f49 210 put_rn();
kenjiArai 0:d68f1e7f7f49 211 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 212 get_line(ptr, buf_size);
kenjiArai 0:d68f1e7f7f49 213 put_r();
kenjiArai 0:d68f1e7f7f49 214 if (xatoi(&ptr,&f)){
kenjiArai 0:d68f1e7f7f49 215 if (f < 0){ break;}
kenjiArai 0:d68f1e7f7f49 216 PRINTF("CLK2:%u [Hz]", clk.set_frequency(2, f));
kenjiArai 0:d68f1e7f7f49 217 } else {
kenjiArai 0:d68f1e7f7f49 218 PUTC('?');
kenjiArai 0:d68f1e7f7f49 219 }
kenjiArai 0:d68f1e7f7f49 220 put_rn();
kenjiArai 0:d68f1e7f7f49 221 break;
kenjiArai 0:d68f1e7f7f49 222 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 223 // test7 CLK0: set desired center freq. then shift +/- range
kenjiArai 0:d68f1e7f7f49 224 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 225 case '7' :
kenjiArai 0:d68f1e7f7f49 226 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 227 PRINTF("CLK0 %s", msg0);
kenjiArai 0:d68f1e7f7f49 228 put_rn();
kenjiArai 0:d68f1e7f7f49 229 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 230 get_line(ptr, buf_size);
kenjiArai 0:d68f1e7f7f49 231 put_r();
kenjiArai 0:d68f1e7f7f49 232 if (xatoi(&ptr,&f)){
kenjiArai 0:d68f1e7f7f49 233 if (f < 0){ break;}
kenjiArai 0:d68f1e7f7f49 234 PRINTF("CLK0:%u [Hz]", clk.set_frequency(0, f));
kenjiArai 0:d68f1e7f7f49 235 } else {
kenjiArai 0:d68f1e7f7f49 236 PUTC('?');
kenjiArai 0:d68f1e7f7f49 237 }
kenjiArai 0:d68f1e7f7f49 238 put_rn();
kenjiArai 0:d68f1e7f7f49 239 PRINTF("Please enter sift command [Help: ?]");
kenjiArai 0:d68f1e7f7f49 240 put_rn();
kenjiArai 0:d68f1e7f7f49 241 while (true){
kenjiArai 0:d68f1e7f7f49 242 PRINTF("[S]>");
kenjiArai 0:d68f1e7f7f49 243 ptr = linebuf;
kenjiArai 0:d68f1e7f7f49 244 get_line(ptr, buf_size);
kenjiArai 0:d68f1e7f7f49 245 put_r();
kenjiArai 0:d68f1e7f7f49 246 switch(*ptr) {
kenjiArai 0:d68f1e7f7f49 247 case 'p' :
kenjiArai 0:d68f1e7f7f49 248 PRINTF("Shift to %u [Hz]", clk.shift_freq(0, 10));
kenjiArai 0:d68f1e7f7f49 249 put_rn();
kenjiArai 0:d68f1e7f7f49 250 break;
kenjiArai 0:d68f1e7f7f49 251 case 'm' :
kenjiArai 0:d68f1e7f7f49 252 PRINTF("Shift to %u [Hz]", clk.shift_freq(0, -10));
kenjiArai 0:d68f1e7f7f49 253 put_rn();
kenjiArai 0:d68f1e7f7f49 254 break;
kenjiArai 0:d68f1e7f7f49 255 case 's' :
kenjiArai 0:d68f1e7f7f49 256 ptr++;
kenjiArai 0:d68f1e7f7f49 257 xatoi(&ptr,&f);
kenjiArai 0:d68f1e7f7f49 258 PRINTF("offset=%d\r\n", f);
kenjiArai 0:d68f1e7f7f49 259 PRINTF("Shift to %u [Hz]", clk.shift_freq(0, f));
kenjiArai 0:d68f1e7f7f49 260 put_rn();
kenjiArai 0:d68f1e7f7f49 261 break;
kenjiArai 0:d68f1e7f7f49 262 case '?' :
kenjiArai 0:d68f1e7f7f49 263 PRINTF("p -> +10Hz");
kenjiArai 0:d68f1e7f7f49 264 put_rn();
kenjiArai 0:d68f1e7f7f49 265 PRINTF("m -> -10Hz");
kenjiArai 0:d68f1e7f7f49 266 put_rn();
kenjiArai 0:d68f1e7f7f49 267 PRINTF("s -> Shift +/-x Hz (example -100)");
kenjiArai 0:d68f1e7f7f49 268 put_rn();
kenjiArai 0:d68f1e7f7f49 269 PRINTF("? -> You know this");
kenjiArai 0:d68f1e7f7f49 270 put_rn();
kenjiArai 0:d68f1e7f7f49 271 PRINTF("e -> Exit");
kenjiArai 0:d68f1e7f7f49 272 put_rn();
kenjiArai 0:d68f1e7f7f49 273 break;
kenjiArai 0:d68f1e7f7f49 274 case 'e' :
kenjiArai 0:d68f1e7f7f49 275 break;
kenjiArai 0:d68f1e7f7f49 276 default:
kenjiArai 0:d68f1e7f7f49 277 PUTC('?');
kenjiArai 0:d68f1e7f7f49 278 put_rn();
kenjiArai 0:d68f1e7f7f49 279 }
kenjiArai 0:d68f1e7f7f49 280 if (*ptr == 'e'){
kenjiArai 0:d68f1e7f7f49 281 break;
kenjiArai 0:d68f1e7f7f49 282 }
kenjiArai 0:d68f1e7f7f49 283 }
kenjiArai 0:d68f1e7f7f49 284 break;
kenjiArai 0:d68f1e7f7f49 285 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 286 // All clear alll registers
kenjiArai 0:d68f1e7f7f49 287 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 288 case 'a' :
kenjiArai 0:d68f1e7f7f49 289 clk.all_reset();
kenjiArai 0:d68f1e7f7f49 290 PRINTF("Cleared all of registers!\r\n");
kenjiArai 0:d68f1e7f7f49 291 break;
kenjiArai 0:d68f1e7f7f49 292 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 293 // Show configration
kenjiArai 0:d68f1e7f7f49 294 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 295 case 'c' :
kenjiArai 0:d68f1e7f7f49 296 clk.debug_current_config();
kenjiArai 0:d68f1e7f7f49 297 //put_rn();
kenjiArai 0:d68f1e7f7f49 298 break;
kenjiArai 0:d68f1e7f7f49 299 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 300 // Show resisters
kenjiArai 0:d68f1e7f7f49 301 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 302 case 'r' :
kenjiArai 0:d68f1e7f7f49 303 clk.debug_reg_print();
kenjiArai 0:d68f1e7f7f49 304 //put_rn();
kenjiArai 0:d68f1e7f7f49 305 break;
kenjiArai 0:d68f1e7f7f49 306 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 307 // Go to special command
kenjiArai 0:d68f1e7f7f49 308 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 309 case 'x' :
kenjiArai 0:d68f1e7f7f49 310 special_command();
kenjiArai 0:d68f1e7f7f49 311 break;
kenjiArai 0:d68f1e7f7f49 312 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 313 // help
kenjiArai 0:d68f1e7f7f49 314 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 315 case '?' :
kenjiArai 0:d68f1e7f7f49 316 msg_hlp();
kenjiArai 0:d68f1e7f7f49 317 break;
kenjiArai 0:d68f1e7f7f49 318 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 319 // no support
kenjiArai 0:d68f1e7f7f49 320 //--------------------------------------------------------------
kenjiArai 0:d68f1e7f7f49 321 default:
kenjiArai 0:d68f1e7f7f49 322 PUTC('?');
kenjiArai 0:d68f1e7f7f49 323 put_rn();
kenjiArai 0:d68f1e7f7f49 324 break;
kenjiArai 0:d68f1e7f7f49 325 }
kenjiArai 0:d68f1e7f7f49 326 }
kenjiArai 0:d68f1e7f7f49 327 }
kenjiArai 0:d68f1e7f7f49 328
kenjiArai 1:2b29f68043f7 329
kenjiArai 1:2b29f68043f7 330 #if defined(INCREMENT)
kenjiArai 1:2b29f68043f7 331 void test(uint8_t channel)
kenjiArai 1:2b29f68043f7 332 {
kenjiArai 1:2b29f68043f7 333 uint32_t f_set = 4000; // 4KHz
kenjiArai 1:2b29f68043f7 334 double f = 0;
kenjiArai 1:2b29f68043f7 335 uint32_t flg = 0;
kenjiArai 2:73d79424daa5 336 char *ptr;
kenjiArai 2:73d79424daa5 337 int32_t seconds = 1;
kenjiArai 2:73d79424daa5 338
kenjiArai 1:2b29f68043f7 339 clk.all_reset();
kenjiArai 1:2b29f68043f7 340 f = clk.set_frequency(channel, f_set);
kenjiArai 1:2b29f68043f7 341 clk.debug_reg_print();
kenjiArai 1:2b29f68043f7 342 PRINTF("CLK%u = %10.6f MHz\r\n", channel, f / 1000000.0f);
kenjiArai 2:73d79424daa5 343 PRINTF("Please enter interval time[sec] -> ");
kenjiArai 2:73d79424daa5 344 ptr = linebuf;
kenjiArai 2:73d79424daa5 345 get_line(ptr, buf_size);
kenjiArai 2:73d79424daa5 346 put_r();
kenjiArai 2:73d79424daa5 347 xatoi(&ptr,&seconds);
kenjiArai 2:73d79424daa5 348 if (seconds <= 0){ seconds = 1;}
kenjiArai 2:73d79424daa5 349 if (seconds > 1000){ seconds = 1000;}
kenjiArai 2:73d79424daa5 350 PRINTF("%u[sec]\r\n", seconds);
kenjiArai 1:2b29f68043f7 351 while(true){
kenjiArai 1:2b29f68043f7 352 f = clk.set_frequency(channel, f_set);
kenjiArai 1:2b29f68043f7 353 PRINTF("CLK%u = %10.6f MHz\r\n", channel, f / 1000000.0f);
kenjiArai 1:2b29f68043f7 354 if (flg){
kenjiArai 1:2b29f68043f7 355 f_set = f * 0.95f;
kenjiArai 1:2b29f68043f7 356 if (f_set < 5000){
kenjiArai 1:2b29f68043f7 357 flg = 0;
kenjiArai 1:2b29f68043f7 358 }
kenjiArai 1:2b29f68043f7 359 } else {
kenjiArai 1:2b29f68043f7 360 f_set = f * 1.05f;
kenjiArai 1:2b29f68043f7 361 if (f_set > 190000000){
kenjiArai 1:2b29f68043f7 362 flg = 1;
kenjiArai 1:2b29f68043f7 363 }
kenjiArai 1:2b29f68043f7 364 }
kenjiArai 1:2b29f68043f7 365 if (READABLE()) {
kenjiArai 1:2b29f68043f7 366 GETC();
kenjiArai 1:2b29f68043f7 367 return;
kenjiArai 1:2b29f68043f7 368 }
kenjiArai 2:73d79424daa5 369 wait((float)seconds);
kenjiArai 1:2b29f68043f7 370 }
kenjiArai 1:2b29f68043f7 371 }
kenjiArai 1:2b29f68043f7 372 #endif
kenjiArai 1:2b29f68043f7 373
kenjiArai 1:2b29f68043f7 374 #if defined(TABLE_LOOK)
kenjiArai 1:2b29f68043f7 375 void test(uint8_t channel)
kenjiArai 1:2b29f68043f7 376 {
kenjiArai 1:2b29f68043f7 377 uint32_t f_set = 0;
kenjiArai 1:2b29f68043f7 378 uint32_t i,j;
kenjiArai 1:2b29f68043f7 379 double f = 0;
kenjiArai 2:73d79424daa5 380 char *ptr;
kenjiArai 2:73d79424daa5 381 int32_t seconds = 1;
kenjiArai 2:73d79424daa5 382
kenjiArai 1:2b29f68043f7 383 clk.all_reset();
kenjiArai 2:73d79424daa5 384 PRINTF("Please enter interval time[sec] -> ");
kenjiArai 2:73d79424daa5 385 ptr = linebuf;
kenjiArai 2:73d79424daa5 386 get_line(ptr, buf_size);
kenjiArai 2:73d79424daa5 387 put_r();
kenjiArai 2:73d79424daa5 388 xatoi(&ptr,&seconds);
kenjiArai 2:73d79424daa5 389 if (seconds <= 0){ seconds = 1;}
kenjiArai 2:73d79424daa5 390 if (seconds > 1000){ seconds = 1000;}
kenjiArai 2:73d79424daa5 391 PRINTF("%u[sec]\r\n", seconds);
kenjiArai 1:2b29f68043f7 392 while(true){
kenjiArai 1:2b29f68043f7 393 for (i = 0; ; i++){
kenjiArai 1:2b29f68043f7 394 f_set = freq_tbl[i];
kenjiArai 1:2b29f68043f7 395 if (f_set == 0){
kenjiArai 1:2b29f68043f7 396 break;
kenjiArai 1:2b29f68043f7 397 }
kenjiArai 1:2b29f68043f7 398 f = clk.set_frequency(channel, f_set);
kenjiArai 1:2b29f68043f7 399 PRINTF("CLK%u = %10.6f MHz\r\n", channel, f / 1000000.0f);
kenjiArai 1:2b29f68043f7 400 if (READABLE()) {
kenjiArai 1:2b29f68043f7 401 GETC();
kenjiArai 1:2b29f68043f7 402 return;
kenjiArai 1:2b29f68043f7 403 }
kenjiArai 2:73d79424daa5 404 wait((float)seconds);
kenjiArai 1:2b29f68043f7 405 }
kenjiArai 1:2b29f68043f7 406 for (j = i - 2; j > 0 ; j--){
kenjiArai 1:2b29f68043f7 407 f_set = freq_tbl[j];
kenjiArai 1:2b29f68043f7 408 f = clk.set_frequency(channel, f_set);
kenjiArai 1:2b29f68043f7 409 PRINTF("CLK%u = %10.6f MHz\r\n", channel, f / 1000000.0f);
kenjiArai 1:2b29f68043f7 410 if (READABLE()) {
kenjiArai 1:2b29f68043f7 411 GETC();
kenjiArai 1:2b29f68043f7 412 return;
kenjiArai 1:2b29f68043f7 413 }
kenjiArai 2:73d79424daa5 414 wait((float)seconds);
kenjiArai 1:2b29f68043f7 415 }
kenjiArai 1:2b29f68043f7 416 }
kenjiArai 1:2b29f68043f7 417 }
kenjiArai 1:2b29f68043f7 418 #endif
kenjiArai 1:2b29f68043f7 419
kenjiArai 1:2b29f68043f7 420 void special_command(void)
kenjiArai 1:2b29f68043f7 421 {
kenjiArai 1:2b29f68043f7 422 PRINTF("Not impliment yet");
kenjiArai 1:2b29f68043f7 423 put_rn();
kenjiArai 1:2b29f68043f7 424 }
kenjiArai 1:2b29f68043f7 425
kenjiArai 0:d68f1e7f7f49 426 // Put \r\n
kenjiArai 0:d68f1e7f7f49 427 void put_rn ( void )
kenjiArai 0:d68f1e7f7f49 428 {
kenjiArai 0:d68f1e7f7f49 429 PUTC('\r');
kenjiArai 0:d68f1e7f7f49 430 PUTC('\n');
kenjiArai 0:d68f1e7f7f49 431 }
kenjiArai 0:d68f1e7f7f49 432
kenjiArai 0:d68f1e7f7f49 433 // Put \r
kenjiArai 0:d68f1e7f7f49 434 void put_r ( void )
kenjiArai 0:d68f1e7f7f49 435 {
kenjiArai 0:d68f1e7f7f49 436 PUTC('\r');
kenjiArai 0:d68f1e7f7f49 437 }
kenjiArai 0:d68f1e7f7f49 438
kenjiArai 0:d68f1e7f7f49 439 // Change string -> integer
kenjiArai 0:d68f1e7f7f49 440 int xatoi (char **str, int32_t *res)
kenjiArai 0:d68f1e7f7f49 441 {
kenjiArai 0:d68f1e7f7f49 442 uint32_t val;
kenjiArai 0:d68f1e7f7f49 443 int8_t c, radix, s = 0;
kenjiArai 0:d68f1e7f7f49 444
kenjiArai 0:d68f1e7f7f49 445 while ((c = **str) == ' ') (*str)++;
kenjiArai 0:d68f1e7f7f49 446 if (c == '-') {
kenjiArai 0:d68f1e7f7f49 447 s = 1;
kenjiArai 0:d68f1e7f7f49 448 c = *(++(*str));
kenjiArai 0:d68f1e7f7f49 449 }
kenjiArai 0:d68f1e7f7f49 450 if (c == '+') {
kenjiArai 0:d68f1e7f7f49 451 c = *(++(*str));
kenjiArai 0:d68f1e7f7f49 452 }
kenjiArai 0:d68f1e7f7f49 453 if (c == '0') {
kenjiArai 0:d68f1e7f7f49 454 c = *(++(*str));
kenjiArai 0:d68f1e7f7f49 455 if (c <= ' ') {
kenjiArai 0:d68f1e7f7f49 456 *res = 0;
kenjiArai 0:d68f1e7f7f49 457 return 1;
kenjiArai 0:d68f1e7f7f49 458 }
kenjiArai 0:d68f1e7f7f49 459 if (c == 'x') {
kenjiArai 0:d68f1e7f7f49 460 radix = 16;
kenjiArai 0:d68f1e7f7f49 461 c = *(++(*str));
kenjiArai 0:d68f1e7f7f49 462 } else {
kenjiArai 0:d68f1e7f7f49 463 if (c == 'b') {
kenjiArai 0:d68f1e7f7f49 464 radix = 2;
kenjiArai 0:d68f1e7f7f49 465 c = *(++(*str));
kenjiArai 0:d68f1e7f7f49 466 } else {
kenjiArai 0:d68f1e7f7f49 467 if ((c >= '0')&&(c <= '9')) {
kenjiArai 0:d68f1e7f7f49 468 radix = 8;
kenjiArai 0:d68f1e7f7f49 469 } else {
kenjiArai 0:d68f1e7f7f49 470 return 0;
kenjiArai 0:d68f1e7f7f49 471 }
kenjiArai 0:d68f1e7f7f49 472 }
kenjiArai 0:d68f1e7f7f49 473 }
kenjiArai 0:d68f1e7f7f49 474 } else {
kenjiArai 0:d68f1e7f7f49 475 if ((c < '1')||(c > '9')) {
kenjiArai 0:d68f1e7f7f49 476 return 0;
kenjiArai 0:d68f1e7f7f49 477 }
kenjiArai 0:d68f1e7f7f49 478 radix = 10;
kenjiArai 0:d68f1e7f7f49 479 }
kenjiArai 0:d68f1e7f7f49 480 val = 0;
kenjiArai 0:d68f1e7f7f49 481 while (c > ' ') {
kenjiArai 0:d68f1e7f7f49 482 if (c >= 'a') c -= 0x20;
kenjiArai 0:d68f1e7f7f49 483 c -= '0';
kenjiArai 0:d68f1e7f7f49 484 if (c >= 17) {
kenjiArai 0:d68f1e7f7f49 485 c -= 7;
kenjiArai 0:d68f1e7f7f49 486 if (c <= 9) return 0;
kenjiArai 0:d68f1e7f7f49 487 }
kenjiArai 0:d68f1e7f7f49 488 if (c >= radix) return 0;
kenjiArai 0:d68f1e7f7f49 489 val = val * radix + c;
kenjiArai 0:d68f1e7f7f49 490 c = *(++(*str));
kenjiArai 0:d68f1e7f7f49 491 }
kenjiArai 0:d68f1e7f7f49 492 if (s) val = -val;
kenjiArai 0:d68f1e7f7f49 493 *res = val;
kenjiArai 0:d68f1e7f7f49 494 return 1;
kenjiArai 0:d68f1e7f7f49 495 }
kenjiArai 0:d68f1e7f7f49 496
kenjiArai 0:d68f1e7f7f49 497 // Get key input data
kenjiArai 0:d68f1e7f7f49 498 void get_line (char *buff, int len)
kenjiArai 0:d68f1e7f7f49 499 {
kenjiArai 0:d68f1e7f7f49 500 char c;
kenjiArai 0:d68f1e7f7f49 501 int idx = 0;
kenjiArai 0:d68f1e7f7f49 502
kenjiArai 0:d68f1e7f7f49 503 for (;;) {
kenjiArai 0:d68f1e7f7f49 504 c = GETC();
kenjiArai 0:d68f1e7f7f49 505 if (c == '\r') {
kenjiArai 0:d68f1e7f7f49 506 buff[idx++] = c;
kenjiArai 0:d68f1e7f7f49 507 break;
kenjiArai 0:d68f1e7f7f49 508 }
kenjiArai 0:d68f1e7f7f49 509 if ((c == '\b') && idx) {
kenjiArai 0:d68f1e7f7f49 510 idx--;
kenjiArai 0:d68f1e7f7f49 511 PUTC(c);
kenjiArai 0:d68f1e7f7f49 512 PUTC(' ');
kenjiArai 0:d68f1e7f7f49 513 PUTC(c);
kenjiArai 0:d68f1e7f7f49 514 }
kenjiArai 0:d68f1e7f7f49 515 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 0:d68f1e7f7f49 516 buff[idx++] = c;
kenjiArai 0:d68f1e7f7f49 517 PUTC(c);
kenjiArai 0:d68f1e7f7f49 518 }
kenjiArai 0:d68f1e7f7f49 519 }
kenjiArai 0:d68f1e7f7f49 520 buff[idx] = 0;
kenjiArai 0:d68f1e7f7f49 521 PUTC('\n');
kenjiArai 0:d68f1e7f7f49 522 }