1 | #include <xpcc/architecture.hpp>
|
2 |
|
3 | GPIO__OUTPUT(LedOrange, D, 13); // User LED 3
|
4 | GPIO__OUTPUT(LedGreen, D, 12); // User LED 4
|
5 | GPIO__OUTPUT(LedRed, D, 14); // User LED 5
|
6 | GPIO__OUTPUT(LedBlue, D, 15); // User LED 6
|
7 |
|
8 | GPIO__OUTPUT(LightSwitch, E, 4); // Enable
|
9 | GPIO__OUTPUT(ReadWrite, C, 13); // R/W
|
10 | GPIO__OUTPUT(BiPolarMood, E, 6); // Rs
|
11 |
|
12 | GPIO__IO(DB0, E, 5); //PIN E5 ist Input/Output PIN und unter DB0 erreichbar
|
13 | GPIO__IO(DB1, E, 3);
|
14 | GPIO__IO(DB2, B, 8);
|
15 | GPIO__IO(DB3, B, 7);
|
16 | GPIO__IO(DB4, B, 4);
|
17 | GPIO__IO(DB5, B, 5);
|
18 | GPIO__IO(DB6, D, 7);
|
19 | GPIO__IO(DB7, D, 6);
|
20 |
|
21 |
|
22 | using namespace xpcc::stm32;
|
23 |
|
24 | static bool
|
25 | initClock()
|
26 | {
|
27 | // use external 8MHz crystal
|
28 | if (!Clock::enableHse(Clock::HSE_CRYSTAL)) {
|
29 | return false;
|
30 | }
|
31 |
|
32 | Clock::enablePll(Clock::PLL_HSE, 4, 168);
|
33 | return Clock::switchToPll();
|
34 | }
|
35 |
|
36 | void checkbusy ()
|
37 | {
|
38 | LightSwitch::setOutput(xpcc::gpio::LOW);
|
39 | BiPolarMood::setOutput(xpcc::gpio::LOW);
|
40 | ReadWrite::setOutput(xpcc::gpio::LOW);
|
41 |
|
42 |
|
43 | DB7::setInput(); //DB7 ist Input PIN (lese BusyFlag)
|
44 |
|
45 | ReadWrite::setOutput(xpcc::gpio::HIGH); //READ
|
46 | xpcc::delay_ms(20);
|
47 |
|
48 | BiPolarMood::setOutput(xpcc::gpio::LOW);
|
49 | xpcc::delay_ms(20);
|
50 |
|
51 | if(DB7::read())
|
52 | {
|
53 | LedBlue::setOutput(xpcc::gpio::HIGH);
|
54 | xpcc::delay_ms(1000);
|
55 | }
|
56 |
|
57 | while (DB7::read()) // 0b.1000.0000 0x80
|
58 | {
|
59 | LedOrange::setOutput(xpcc::gpio::HIGH);
|
60 |
|
61 | LightSwitch::setOutput(xpcc::gpio::HIGH);
|
62 | asm volatile ("nop");
|
63 | asm volatile ("nop");
|
64 | LightSwitch::setOutput(xpcc::gpio::LOW);
|
65 |
|
66 | LedBlue::setOutput(xpcc::gpio::LOW);
|
67 | }
|
68 |
|
69 | LedOrange::setOutput(xpcc::gpio::LOW);
|
70 |
|
71 | DB7::setOutput(xpcc::gpio::LOW);
|
72 |
|
73 | }
|
74 |
|
75 | // ----------------------------------------------------------------------------
|
76 | MAIN_FUNCTION
|
77 | {
|
78 | initClock();
|
79 |
|
80 | LedOrange::setOutput(xpcc::gpio::HIGH);
|
81 | LedGreen::setOutput(xpcc::gpio::HIGH);
|
82 | LedRed::setOutput(xpcc::gpio::HIGH);
|
83 | LedBlue::setOutput(xpcc::gpio::HIGH);
|
84 |
|
85 | xpcc::delay_ms(1000); //1 Sekunde warten
|
86 |
|
87 | LedOrange::setOutput(xpcc::gpio::LOW);
|
88 | LedGreen::setOutput(xpcc::gpio::LOW);
|
89 | LedRed::setOutput(xpcc::gpio::LOW);
|
90 | LedBlue::setOutput(xpcc::gpio::LOW);
|
91 |
|
92 |
|
93 | checkbusy();
|
94 |
|
95 |
|
96 | //SEND 8bit-Mode (0x30); 0b.0011.0000
|
97 |
|
98 | DB0::setOutput(xpcc::gpio::LOW);
|
99 | DB1::setOutput(xpcc::gpio::LOW);
|
100 | DB2::setOutput(xpcc::gpio::LOW);
|
101 | DB3::setOutput(xpcc::gpio::LOW);
|
102 | DB4::setOutput(xpcc::gpio::HIGH);
|
103 | DB5::setOutput(xpcc::gpio::HIGH);
|
104 | DB6::setOutput(xpcc::gpio::LOW);
|
105 | DB7::setOutput(xpcc::gpio::LOW);
|
106 |
|
107 | LedRed::setOutput(xpcc::gpio::HIGH);
|
108 | xpcc::delay_ms(1000);
|
109 |
|
110 | ReadWrite::setOutput(xpcc::gpio::LOW); //WRITE
|
111 | xpcc::delay_ms(200);
|
112 | BiPolarMood::setOutput(xpcc::gpio::LOW);
|
113 | xpcc::delay_ms(200);
|
114 |
|
115 | LightSwitch::setOutput(xpcc::gpio::HIGH); //Zeit fürs Display um Kommando an DB0-DB7 einzulesen
|
116 | asm volatile ("nop");
|
117 | asm volatile ("nop");
|
118 | LightSwitch::setOutput(xpcc::gpio::LOW);
|
119 |
|
120 |
|
121 | DB0::setOutput(xpcc::gpio::LOW);
|
122 | DB1::setOutput(xpcc::gpio::LOW);
|
123 | DB2::setOutput(xpcc::gpio::LOW);
|
124 | DB3::setOutput(xpcc::gpio::LOW);
|
125 | DB4::setOutput(xpcc::gpio::LOW);
|
126 | DB5::setOutput(xpcc::gpio::LOW);
|
127 | DB6::setOutput(xpcc::gpio::LOW);
|
128 | DB7::setOutput(xpcc::gpio::LOW);
|
129 |
|
130 | while (1)
|
131 | {
|
132 | LedGreen::setOutput(xpcc::gpio::HIGH);
|
133 |
|
134 | LedOrange::setOutput(xpcc::gpio::LOW);
|
135 | LedRed::setOutput(xpcc::gpio::LOW);
|
136 | LedBlue::setOutput(xpcc::gpio::LOW);
|
137 | }
|
138 |
|
139 | return 0;
|
140 | }
|