1 /*********************************************************************
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #pragma config USERID = 12546
34 #pragma config FMIIEN = OFF
35 #pragma config FETHIO = OFF
36 #pragma config PGL1WAY = OFF
37 #pragma config PMDL1WAY = OFF
38 #pragma config IOL1WAY = OFF
39 #pragma config FUSBIDIO = OFF
40
41
42 #pragma config FPLLIDIV = DIV_3
43 #pragma config FPLLRNG = RANGE_5_10_MHZ
44 #pragma config FPLLICLK = PLL_POSC
45 #pragma config FPLLMULT = MUL_50
46 #pragma config FPLLODIV = DIV_2
47 #pragma config UPLLFSEL = FREQ_24MHZ
48
49
50 #pragma config FNOSC = SPLL
51 #pragma config DMTINTV = WIN_127_128
52 #pragma config FSOSCEN = ON
53 #pragma config IESO = OFF
54 #pragma config POSCMOD = EC
55 #pragma config OSCIOFNC = OFF
56 #pragma config FCKSM = CSDCMD
57 #pragma config WDTPS = PS1048576
58 #pragma config WDTSPGM = STOP
59 #pragma config FWDTEN = OFF
60 #pragma config WINDIS = NORMAL
61 #pragma config FWDTWINSZ = WINSZ_25
62 #pragma config DMTCNT = DMT31
63 #pragma config FDMTEN = OFF
64
65
66 #pragma config DEBUG = OFF
67 #pragma config JTAGEN = OFF
68 #pragma config ICESEL = ICS_PGx2
69 #pragma config TRCEN = OFF
70 #pragma config BOOTISA = MIPS32
71 #pragma config FECCCON = OFF_UNLOCKED
72 #pragma config FSLEEP = OFF
73 #pragma config DBGPER = PG_ALL
74 #pragma config SMCLR = MCLR_NORM
75 #pragma config SOSCGAIN = GAIN_2X
76 #pragma config SOSCBOOST = ON
77 #pragma config POSCGAIN = GAIN_2X
78 #pragma config POSCBOOST = OFF
79 #pragma config EJTAGBEN = NORMAL
80 #pragma config CP = OFF
81
82 #include <xc.h>
83
84 #include <sys/attribs.h>
85 #include <sys/kmem.h>
86 #include <stdint.h>
87 #include <stdio.h>
88 #include <stdlib.h>
89 #include <string.h>
90 #include <stdbool.h>
91 #include <math.h>
92 #include "MainBrain.h"
93
94 bool boardInfo = false;
95 volatile uint32_t Last_Memory[10];
96 bool IO_Locked = false;
97 bool getBoardInfo = false;
98 volatile bool inMotion = false;
99 bool test_result;
100 bool full_access;
101 bool screen_available = true;
102 uint32_t lastError;
103 char myStr[20] = "null";
104 char ConnectedStr[10] = {"Connected"};
105 char ReadyStr[10] = {"Ready... "};
106 char OfflineStr[11] = {"Offline..."};
107 char FullSpeed[7] = {"12Mb/s"};
108 char HiSpeed[8] = {"480Mb/s"};
109 char DACtitleStr[14] = {"DAC Utilities"};
110 char cmdStr[4] = {"cmd"};
111 char memStr[4] = {"mem"};
112 char brdStr[4] = {"brd"};
113 char scopeTitleStr[6] = {"Scope"};
114 int8_t dev_data = 0;
115 uint8_t screen;
116 bool NeedsRefresh = true;
117 uint8_t default_Display_Brightness = 1;
118 bool Level2MenuActive = false;
119 uint8_t CurrentLevel = HOMELEVEL;
120 uint8_t FlashConfigData[100];
121 uint8_t BuildPList = 0;
122 bool requestDirective = false;
123 uint8_t PeripheralList[7] = {0};
124 uint8_t current_board_address;
125 uint16_t myArray[480];
126 int test1 = 0;
127 bool updated = false;
128 uint16_t adc_data = 0;
129 int myi = 0;
130 float ADC_Volts;
131 uint8_t buf[10];
132 bool screenTouched = false;
133 bool Message = false;
134 uint8_t old_screen = 0;
135
136 uint8_t peripheral_info[7][24] = {0};
137
138 int main(void)
139 {
140 while(CLKSTATbits.POSCRDY == 0);
141
142 SystemSetup();
143
144
145
146 LED_Port(0x1);
147
148 PMP_init();
149
150
151 LED_Port(0x2);
152
153
154 REN70V05_Init();
155
156
157 LED_Port(0x3);
158
159
160
161
162
163 LED_Port(0x4);
164
165
166
167
168 Flash_Init();
169
170
171 LED_Port(0x5);
172
173
174 TMR4_init();
175
176
177 LED_Port(0x7);
178
179
180 I2C_init();
181
182
183 LED_Port(0x8);
184
185 TMR1_init();
186
187
188 LED_Port(0x9);
189
190 ADC_init();
191
192
193 LED_Port(0xa);
194
195 Display_init();
196
197
198 LED_Port(0xb);
199
200 SetDisplayBrightness();
201
202
203 Display_CLRSCN(0xffff);
204
205
206 Display_DISPON();
207
208
209 TMR6_init();
210
211
212 LED_Port(0xc);
213
214
215 TMR3_init();
216
217
218 Beep();
219
220
221 __builtin_enable_interrupts();
222
223
224
225 LED_Port(0x0);
226
227
228 ShowSplashScreen(0);
229
230
231 screen = HOME_SCREEN;
232
233 uint8_t a = 5;
234
235
236
237 REN70V05_WR(0x400, 0);
238 current_board_address = 1;
239 requestDirective = 1;
240
241
242 while(1)
243 {
244
245
246 PORTCbits.RC15 = !PORTCbits.RC15;
247
248
249 if(Message == 1)
250 {
251
252 old_screen = screen;
253
254
255 MessageBox(myStr, 5);
256 CurrentLevel = HOMELEVEL;
257 NeedsRefresh = true;
258
259
260 NeedsRefresh = true;
261
262
263 Message = 0;
264 }
265
266
267 if(requestDirective == 1)
268 {
269
270
271 IO_Locked = true;
272
273
274 Directive(current_board_address);
275
276 hchar = 10;
277 vchar = 180;
278
279 Binary2ASCIIHex(REN70V05_RD(0x419));
280 WriteChar(hchar, vchar, d_hex[1], black, white);
281 WriteChar(hchar, vchar, d_hex[0], black, white);
282
283
284 requestDirective = 0;
285 }
286
287 if(getBoardInfo == true)
288 {
289
290 if(IO_Locked == false)
291 {
292
293 for(int i=0;i<26;i++)
294 {
295 peripheral_info[current_board_address][i] = REN70V05_RD((current_board_address * 0x400) + i);
296 }
297
298 }
299
300 getBoardInfo == false;
301 }
302
303
304 switch(screen)
305 {
306 case HOME_SCREEN:
307 if(NeedsRefresh == true)
308 {
309 ShowSplashScreen(0);
310 NeedsRefresh = false;
311 CurrentLevel = HOMELEVEL;
312 }
313 break;
314 case INFO_SCREEN:
315 if(NeedsRefresh == true)
316 {
317 DrawScreen(INFO_SCREEN, HeaderString);
318 CurrentLevel = HOMELEVEL;
319 NeedsRefresh = false;
320 }
321 break;
322 case BOARD_SCREEN:
323 if(NeedsRefresh == true)
324 {
325 DrawScreen(BOARD_SCREEN, HeaderString);
326 CurrentLevel = HOMELEVEL;
327 NeedsRefresh = false;
328 }
329 break;
330
331 }
332
333
334 if((scn_pos_x > 0) && (scn_pos_x < 480) && (scn_pos_y > 0) && (scn_pos_y < 320))
335 {
336 hchar = 10;
337 vchar = 60;
338
339 if(screenTouched == false)
340 {
341 screen = INFO_SCREEN;
342 NeedsRefresh = true;
343 screenTouched = true;
344 }
345
346 vchar = 15;
347 hchar = 350;
348 Binary2ASCIIBCD(scn_pos_x);
349 WriteChar(hchar, vchar, d2, black, 0x04D3);
350 WriteChar(hchar, vchar, d1, black, 0x04D3);
351 WriteChar(hchar, vchar, d0, black, 0x04D3);
352
353 WriteChar(hchar, vchar, ',', black, 0x04D3);
354
355 Binary2ASCIIBCD(scn_pos_y);
356 WriteChar(hchar, vchar, d2, black, 0x04D3);
357 WriteChar(hchar, vchar, d1, black, 0x04D3);
358 WriteChar(hchar, vchar, d0, black, 0x04D3);
359 }
360 }
361 }
362
363 void SystemSetup(void)
364 {
365
366 __builtin_disable_interrupts();
367
368
369 SYSKEY = 0xAA996655;
370 SYSKEY = 0x556699AA;
371
372
373 USB_init();
374
375
376 INTCONbits.MVEC = 1;
377
378 unsigned int cp0;
379
380 ANSELA = 0;
381 ANSELB = 0;
382 ANSELC = 0;
383 ANSELD = 0;
384 ANSELE = 0;
385 ANSELF = 0;
386 ANSELG = 0;
387
388
389 TRISAbits.TRISA1 = 0;
390
391
392 TRISAbits.TRISA7 = 1;
393
394
395 TRISFbits.TRISF3 = 0;
396 TRISFbits.TRISF2 = 0;
397 TRISFbits.TRISF8 = 0;
398 TRISAbits.TRISA6 = 0;
399 TRISAbits.TRISA14 = 0;
400 TRISAbits.TRISA15 = 0;
401 TRISDbits.TRISD10 = 0;
402 TRISDbits.TRISD11 = 0;
403
404
405 TRISCbits.TRISC13 = 1;
406
407
408
409 TRISCbits.TRISC15 = 0;
410
411
412
413 TRISGbits.TRISG13 = 1;
414
415
416
417 TRISGbits.TRISG6 = 0;
418
419
420
421 TRISAbits.TRISA7 = 1;
422
423
424
425 TRISDbits.TRISD15 = 0;
426 PORTDbits.RD15 = 0;
427
428
429 TRISFbits.TRISF13 = 0;
430 PORTFbits.RF13 = 0;
431
432 TRISDbits.TRISD14 = 0;
433
434 PORTDbits.RD14 = 0;
435
436
437
438
439 IPC31bits.CNGIP = 7;
440 IPC31bits.CNGIS = 2;
441
442 CNCONGbits.ON = 1;
443 CNCONGbits.EDGEDETECT = 1;
444 CNNEGbits.CNNEG13 = 1;
445 IEC3bits.CNGIE = 1;
446
447
448 IFS3bits.CNGIF = 0;
449
450
451
452 RPD4R = 0x0b;
453
454
455
456
457 USBCRCONbits.USBIDOVEN = 1;
458 USBCRCONbits.USBIDVAL = 1;
459
460 PRISS = 0x76543210;
461
462
463
464 PB1DIVbits.PBDIV = 0;
465
466
467 PB2DIVbits.PBDIV = 1;
468 PB2DIVbits.ON = 1;
469 while (!PB2DIVbits.PBDIVRDY);
470
471
472 PB3DIVbits.PBDIV = 0;
473 PB3DIVbits.ON = 1;
474 while (!PB3DIVbits.PBDIVRDY);
475
476
477 PB4DIVbits.PBDIV = 1;
478 PB4DIVbits.ON = 1;
479 while (!PB4DIVbits.PBDIVRDY);
480
481
482 PB5DIVbits.PBDIV = 1;
483 PB5DIVbits.ON = 1;
484 while (!PB5DIVbits.PBDIVRDY);
485
486
487 PB7DIVbits.PBDIV = 0;
488 PB7DIVbits.ON = 1;
489 while (!PB7DIVbits.PBDIVRDY);
490
491
492 PB8DIVbits.PBDIV = 1;
493 PB8DIVbits.ON = 1;
494 while (!PB8DIVbits.PBDIVRDY);
495
496
497 PRECONbits.PFMSECEN = 0;
498 PRECONbits.PREFEN = 3;
499 PRECONbits.PFMWS = 2;
500
501 CFGCONbits.USBSSEN = 1;
502
503
504 cp0 = _mfc0(16, 0);
505 cp0 &= ~0x07;
506 cp0 |= 0b011;
507 _mtc0(16, 0, cp0);
508
509 while(CLKSTATbits.DIVSPLLRDY == 0);
510
511
512 RTCC_init();
513
514
515
516 SetFreqPOSC(57);
517
518
519 SYSKEY = 0x33333333;
520 }
521
522 void LED_Port(int8_t led_port_data)
523 {
524
525
526
527
528
529
530
531
532
533
534 uint32_t temp = led_port_data;
535
536
537 temp = led_port_data & 0x01;
538 PORTFbits.RF3 = temp;
539
540
541 temp = led_port_data & 0x02;
542 temp = temp >> 1;
543 PORTFbits.RF2 = temp;
544
545
546 temp = led_port_data & 0x04;
547 temp = temp >> 2;
548 PORTFbits.RF8 = temp;
549
550
551 temp = led_port_data & 0x08;
552 temp = temp >> 3;
553 PORTAbits.RA6 = temp;
554
555
556 temp = led_port_data & 0x10;
557 temp = temp >> 4;
558 PORTAbits.RA14 = temp;
559
560
561 temp = led_port_data & 0x20;
562 temp = temp >> 5;
563 PORTAbits.RA15 = temp;
564
565
566 temp = led_port_data & 0x40;
567 temp = temp >> 6;
568 PORTDbits.RD10 = temp;
569
570
571 temp = led_port_data & 0x80;
572 temp = temp >> 7;
573 PORTDbits.RD11 = temp;
574 }
575
576 void GetTime(void)
577 {
578
579
580
581
582
583
584 Binary2ASCIIBCD(RTCTIMEbits.HR10);
585 WriteChar(hchar, vchar, d0, black, 0x04D3);
586
587 Binary2ASCIIBCD(RTCTIMEbits.HR01);
588 WriteChar(hchar, vchar, d0, black, 0x04D3);
589
590
591 WriteChar(hchar, vchar, ':', black, 0x04D3);
592
593 Binary2ASCIIBCD(RTCTIMEbits.MIN10);
594 WriteChar(hchar, vchar, d0, black, 0x04D3);
595
596 Binary2ASCIIBCD(RTCTIMEbits.MIN01);
597 WriteChar(hchar, vchar, d0, black, 0x04D3);
598
599
600 WriteChar(hchar, vchar, ':', black, 0x04D3);
601
602 Binary2ASCIIBCD(RTCTIMEbits.SEC10);
603 WriteChar(hchar, vchar, d0, black, 0x04D3);
604
605 Binary2ASCIIBCD(RTCTIMEbits.SEC01);
606 WriteChar(hchar, vchar, d0, black, 0x04D3);
607
608
609
610 }
611
612 void SystemReset(void)
613 {
614
615 SYSKEY = 0x00000000;
616
617 SYSKEY = 0xAA996655;
618
619 SYSKEY = 0x556699AA;
620
621
622
623 RSWRSTSET = 1;
624
625 int dummy = RSWRST;
626
627 while(1);
628 }
629
630
631
632
633
634
635
636
637
638
639
640
641
642 void Directive(uint8_t badd)
643 {
644
645 TMR3 = 0;
646
647
648 LED_Port(0);
649
650
651
652
653 SetPeripheralAddress(badd);
654
655
656 T3CONSET = 1 << 15;
657 }
658
659
660
661
662
663 void BuildPeripheralList(void)
664 {
665
666 PR3 = 0;
667
668
669 T3CONbits.TCKPS = 7;
670
671
672 T3CONSET = 1 << 15;
673
674
675 REN70V05_WR(0, EP[1].rx_buffer[2]);
676 int i = 0;
677 <=7;i++)
678
679
680 SetPeripheralAddress(EP[1].rx_buffer[1]);
681
682
683 while((!IFS0bits.T3IF) && (PORTGbits.RG13));
684
685
686
687 if(!PORTGbits.RG13)
688 {
689 PeripheralList[i] = 1;
690 }
691 else
692 {
693
694 PeripheralList[i] = 0;
695 }
696
697
698 SetPeripheralAddress(0);
699
700
701 T3CONCLR = 1 << 15;
702
703 }
704
705 void SetPeripheralAddress(uint8_t padd)
706 {
707 if (padd >= 7)
708 {
709 padd = 7;
710 }
711
712
713 if ((padd & 0x01) != 0)
714 {
715 PORTDbits.RD15 = 1;
716 }
717 else
718 {
719 PORTDbits.RD15 = 0;
720 }
721
722
723 if ((padd & 0x02) != 0)
724 {
725 PORTFbits.RF13 = 1;
726 }
727 else
728 {
729 PORTFbits.RF13 = 0;
730 }
731
732
733 if ((padd & 0x04) != 0)
734 {
735 PORTDbits.RD14 = 1;
736 }
737 else
738 {
739 PORTDbits.RD14 = 0;
740 }
741 }
742
743 void Clock(uint8_t ClockData)
744 {
745
746
747
748
749
750
751
752
753
754
755 if(ClockData == 46)
756 {
757 Display_Rect(hchar, hchar + 10, vchar, vchar + 10, black);
758 }
759
760 if(ClockData == 48)
761 {
762
763 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, black);
764
765 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, black);
766
767 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
768
769 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, black);
770
771 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, black);
772
773 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, black);
774
775 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, white);
776
777 }
778
779 if(ClockData == 49)
780 {
781
782 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, white);
783
784 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, black);
785
786 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
787
788 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, white);
789
790 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, white);
791
792 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, white);
793
794 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, white);
795
796 }
797
798 if(ClockData == 50)
799 {
800
801 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, black);
802
803 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, black);
804
805 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, white);
806
807 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, black);
808
809 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, black);
810
811 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, white);
812
813 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, black);
814
815 }
816
817 if(ClockData == 51)
818 {
819
820 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, black);
821
822 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, black);
823
824 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
825
826 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, black);
827
828 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, white);
829
830 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, white);
831
832 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, black);
833
834 }
835
836 if(ClockData == 52)
837 {
838
839 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, white);
840
841 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, black);
842
843 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
844
845 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, white);
846
847 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, white);
848
849 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, black);
850
851 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, black);
852
853 }
854
855 if(ClockData == 53)
856 {
857
858 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, black);
859
860 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, white);
861
862 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
863
864 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, black);
865
866 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, white);
867
868 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, black);
869
870 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, black);
871
872 }
873
874 if(ClockData == 54)
875 {
876
877 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, white);
878
879 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, white);
880
881 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
882
883 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, black);
884
885 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, black);
886
887 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, black);
888
889 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, black);
890
891 }
892
893 if(ClockData == 55)
894 {
895
896 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, black);
897
898 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, black);
899
900 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
901
902 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, white);
903
904 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, white);
905
906 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, white);
907
908 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, white);
909
910 }
911
912 if(ClockData == 56)
913 {
914
915 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, black);
916
917 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, black);
918
919 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
920
921 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, black);
922
923 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, black);
924
925 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, black);
926
927 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, black);
928
929 }
930
931 if(ClockData == 57)
932 {
933
934 Display_Rect(hchar + 10, hchar + 50, vchar, vchar + 10, black);
935
936 Display_Rect(hchar + 50, hchar + 60, vchar, vchar + 50, black);
937
938 Display_Rect(hchar + 50, hchar + 60, vchar + 60, vchar + 110, black);
939
940 Display_Rect(hchar + 10, hchar + 50, vchar + 100, vchar + 110, white);
941
942 Display_Rect(hchar, hchar + 10, vchar + 60, vchar + 110, white);
943
944 Display_Rect(hchar, hchar + 10, vchar, vchar + 50, black);
945
946 Display_Rect(hchar + 10, hchar + 50, vchar + 50, vchar + 60, black);
947 }
948 }
949
950 void DMM(uint8_t data, uint16_t xchar, uint16_t ychar)
951 {
952 switch(data)
953 {
954 case 46:
955 Display_Rect(xchar + 50, xchar + 60, ychar + 100, ychar + 110, black);
956 break;
957
958 case 48:
959 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, black);
960 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, black);
961 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
962 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, black);
963 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, black);
964 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, black);
965 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, white);
966 break;
967
968 case 49:
969 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, white);
970 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, black);
971 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
972 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, white);
973 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, white);
974 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, white);
975 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, white);
976 break;
977
978 case 50:
979 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, black);
980 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, black);
981 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, white);
982 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, black);
983 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, black);
984 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, white);
985 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, black);
986 break;
987
988 case 51:
989 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, black);
990 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, black);
991 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
992 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, black);
993 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, white);
994 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, white);
995 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, black);
996 break;
997
998 case 52:
999 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, white);
1000 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, black);
1001 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
1002 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, white);
1003 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, white);
1004 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, black);
1005 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, black);
1006 break;
1007
1008 case 53:
1009 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, black);
1010 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, white);
1011 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
1012 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, black);
1013 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, white);
1014 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, black);
1015 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, black);
1016 break;
1017
1018 case 54:
1019 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, white);
1020 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, white);
1021 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
1022 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, black);
1023 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, black);
1024 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, black);
1025 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, black);
1026 break;
1027
1028 case 55:
1029 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, black);
1030 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, black);
1031 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
1032 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, white);
1033 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, white);
1034 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, white);
1035 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, white);
1036 break;
1037
1038 case 56:
1039 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, black);
1040 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, black);
1041 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
1042 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, black);
1043 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, black);
1044 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, black);
1045 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, black);
1046 break;
1047
1048 case 57:
1049 Display_Rect(xchar + 10, xchar + 50, ychar, ychar + 10, black);
1050 Display_Rect(xchar + 50, xchar + 60, ychar, ychar + 50, black);
1051 Display_Rect(xchar + 50, xchar + 60, ychar + 60, ychar + 110, black);
1052 Display_Rect(xchar + 10, xchar + 50, ychar + 100, ychar + 110, white);
1053 Display_Rect(xchar, xchar + 10, ychar + 60, ychar + 110, white);
1054 Display_Rect(xchar, xchar + 10, ychar, ychar + 50, black);
1055 Display_Rect(xchar + 10, xchar + 50, ychar + 50, ychar + 60, black);
1056 break;
1057
1058 default:
1059
1060 break;
1061 }
1062 }
1063
1064 void SetDisplayBrightness(void)
1065 {
1066 Flash_RD(0);
1067 default_Display_Brightness = data_flash;
1068
1069
1070 if(data_flash == 0xff)
1071 {
1072 default_Display_Brightness = 5;
1073 }
1074 Backlight_Control(default_Display_Brightness);
1075 }
1076
1077 void Beep(void)
1078 {
1079
1080
1081
1082
1083 for(int i=0;i<700;i++)
1084 {
1085 PORTAbits.RA1 = 1;
1086 Delay32(0, 0xb000);
1087 PORTAbits.RA1 = 0;
1088 Delay32(0, 0x7000);
1089 }
1090 }
1091
1092 bool SetFreqPOSC(uint8_t f)
1093 {
1094
1095
1096 SPLLCONbits.PLLMULT = f;
1097
1098
1099
1100 while(CLKSTATbits.POSCRDY == 0);
1101
1102
1103
1104 while(CLKSTATbits.DIVSPLLRDY == 0);
1105
1106 return true;
1107 }
1108
1109 void __attribute__((nomips16)) _general_exception_handler(void)
1110 {
1111 unsigned int exccode = (_CP0_GET_CAUSE() & 0x7C) >> 2;
1112
1113 LED_Port(exccode);
1114
1115 while(1)
1116 {
1117 Beep();
1118 }
1119 }
1120
1121 void __attribute__((vector(_CHANGE_NOTICE_G_VECTOR), interrupt(ipl7srs), nomips16)) CNG_handler()
1122 {
1123
1124 if(CNFGbits.CNFG13)
1125 {
1126 T3CONbits.ON = 0;
1127
1128
1129 PORTFbits.RF2 = 1;
1130
1131 SetPeripheralAddress(0);
1132
1133
1134 IO_Locked = false;
1135
1136 CNFGbits.CNFG13 = 0;
1137 }
1138
1139 IFS3bits.CNGIF = 0;
1140 }