main.cpp


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
}