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