e62b9c47fcb8cced0ca9003d359ab77bee2cdd5b
[SCSI2SD-V6.git] / software / SCSI2SD / src / main.c
1 //      Copyright (C) 2014 Michael McMaster <michael@codesrc.com>\r
2 //\r
3 //      This file is part of SCSI2SD.\r
4 //\r
5 //      SCSI2SD is free software: you can redistribute it and/or modify\r
6 //      it under the terms of the GNU General Public License as published by\r
7 //      the Free Software Foundation, either version 3 of the License, or\r
8 //      (at your option) any later version.\r
9 //\r
10 //      SCSI2SD is distributed in the hope that it will be useful,\r
11 //      but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 //      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 //      GNU General Public License for more details.\r
14 //\r
15 //      You should have received a copy of the GNU General Public License\r
16 //      along with SCSI2SD.  If not, see <http://www.gnu.org/licenses/>.\r
17 #pragma GCC push_options\r
18 #pragma GCC optimize("-flto")\r
19 \r
20 #include "device.h"\r
21 #include "scsi.h"\r
22 #include "scsiPhy.h"\r
23 #include "config.h"\r
24 #include "disk.h"\r
25 #include "led.h"\r
26 #include "time.h"\r
27 #include "trace.h"\r
28 \r
29 const char* Notice = "Copyright (C) 2014 Michael McMaster <michael@codesrc.com>";\r
30 \r
31 uint8_t testData[512];\r
32 \r
33 int main()\r
34 {\r
35         timeInit();\r
36         ledInit();\r
37         traceInit();\r
38 \r
39         // Enable global interrupts.\r
40         // Needed for RST and ATN interrupt handlers.\r
41         CyGlobalIntEnable;\r
42 \r
43         // Set interrupt handlers.\r
44         scsiPhyInit();\r
45 \r
46         configInit();\r
47         debugInit();\r
48 \r
49         scsiInit();\r
50         scsiDiskInit();\r
51 \r
52         uint32_t lastSDPoll = getTime_ms();\r
53         sdPoll();\r
54 \r
55 \r
56 \r
57 \r
58         while (1)\r
59         {\r
60                 scsiDev.watchdogTick++;\r
61 \r
62                 scsiPoll();\r
63                 scsiDiskPoll();\r
64                 configPoll();\r
65 \r
66                 if (unlikely(scsiDev.phase == BUS_FREE))\r
67                 {\r
68                         if (unlikely(elapsedTime_ms(lastSDPoll) > 200))\r
69                         {\r
70                                 lastSDPoll = getTime_ms();\r
71                                 sdPoll();\r
72                         }\r
73                         else\r
74                         {\r
75                                 // Wait for our 1ms timer to save some power.\r
76                                 __WFI();\r
77                         }\r
78                 }\r
79         }\r
80         return 0;\r
81 }\r
82 \r
83 #pragma GCC pop_options\r