Skip to content

Commit 4364f6f

Browse files
committed
first working firmware
1 parent 1031a9c commit 4364f6f

File tree

9 files changed

+561
-148
lines changed

9 files changed

+561
-148
lines changed

src/27c.c

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
/*
2+
* 27c.c
3+
*
4+
* Created: 04.05.2019 19:01:09
5+
* Author: Peter Buchegger
6+
*/
7+
8+
9+
#include <stdint.h>
10+
#include <stdio.h>
11+
#include <util/delay.h>
12+
#include "COM/UART.h"
13+
#define _DEBUG
14+
#include "Debug.h"
15+
#include "System.h"
16+
17+
#include "io.h"
18+
#include "27c.h"
19+
20+
void setup_power(eprom_setting_t * setting)
21+
{
22+
printf("vpp: %c\n", '0'+setting->vpp_power);
23+
if(setting->vpp_power == VPP_12V5)
24+
{
25+
DEBUG_OUT("Set VPP to 12.5V.\n");
26+
set_low(vpp_21v_pin);
27+
set_high(vpp_12v5_pin);
28+
}
29+
else if(setting->vpp_power == VPP_21V)
30+
{
31+
DEBUG_OUT("Set VPP to 21V.\n");
32+
set_low(vpp_12v5_pin);
33+
set_high(vpp_21v_pin);
34+
} else {
35+
DEBUG_OUT("ERROR in VPP setting");
36+
}
37+
}
38+
39+
void setup_relay(eprom_setting_t * setting)
40+
{
41+
if(setting->sig_add11_vpp_activ == USE_ADD)
42+
{
43+
set_low(sig_add11_vpp_pin);
44+
}
45+
else
46+
{
47+
set_high(sig_add11_vpp_pin);
48+
}
49+
if(setting->sig_add13_vcc_activ == USE_ADD)
50+
{
51+
set_low(sig_add13_vcc_pin);
52+
}
53+
else
54+
{
55+
set_high(sig_add13_vcc_pin);
56+
}
57+
if(setting->sig_add15_vpp_activ == USE_ADD)
58+
{
59+
set_low(sig_add15_vpp_pin);
60+
}
61+
else
62+
{
63+
set_high(sig_add15_vpp_pin);
64+
}
65+
if(setting->sig_add17_vcc_activ == USE_ADD)
66+
{
67+
set_low(sig_add17_vcc_pin);
68+
}
69+
else
70+
{
71+
set_high(sig_add17_vcc_pin);
72+
}
73+
if(setting->sig_add19_vpp_activ == USE_ADD)
74+
{
75+
set_low(sig_add19_vpp_pin);
76+
}
77+
else
78+
{
79+
set_high(sig_add19_vpp_pin);
80+
}
81+
set_high(CE_pin);
82+
set_high(OE_pin);
83+
}
84+
85+
void read_data_start(eprom_setting_t * setting)
86+
{
87+
// set_low(E)
88+
set_low(CE_pin);
89+
90+
_delay_us(0.100);
91+
92+
// set_low(G)
93+
set_low(OE_pin);
94+
95+
_delay_us(0.050);
96+
}
97+
98+
uint32_t read_data(eprom_setting_t * setting, uint32_t address)
99+
{
100+
// set ADD
101+
set_pins_map(&address_map, address);
102+
103+
_delay_us(0.100);
104+
105+
// read DATA
106+
uint32_t data = get_status_map(&data_map);
107+
108+
return data;
109+
}
110+
111+
void read_data_end(eprom_setting_t * setting)
112+
{
113+
// set_high(E, G)
114+
set_high(CE_pin);
115+
set_high(OE_pin);
116+
}
117+
118+
void program_data_start(eprom_setting_t * setting)
119+
{
120+
set_high(sig_oe_vpp_pin);
121+
sleep(2);
122+
123+
// set VPP
124+
set_low(vpp_on_pin);
125+
}
126+
127+
void program_data(eprom_setting_t * setting, uint32_t address, uint8_t data)
128+
{
129+
// set ADD
130+
set_pins_map(&address_map, address);
131+
// set DATA
132+
set_output_map(&data_map);
133+
set_pins_map(&data_map, data);
134+
_delay_us(2);
135+
// set_low(E)
136+
set_low(CE_pin);
137+
// wait 50 us
138+
_delay_us(50);
139+
// set_high(E)
140+
set_high(CE_pin);
141+
_delay_us(2);
142+
sleep(2);
143+
}
144+
145+
void program_data_end(eprom_setting_t * setting)
146+
{
147+
// remove DATA
148+
set_pins_map(&data_map, 0);
149+
set_input_map(&data_map);
150+
// set_low(VPP)
151+
set_high(vpp_on_pin);
152+
set_low(sig_oe_vpp_pin);
153+
_delay_us(2);
154+
}

src/27c.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
2+
#ifndef h27C_H_
3+
#define h27C_H_
4+
5+
enum vpp_e
6+
{
7+
VPP_12V5,
8+
VPP_21V,
9+
};
10+
11+
enum add_or_v_e
12+
{
13+
USE_ADD,
14+
USE_v,
15+
};
16+
17+
typedef struct
18+
{
19+
uint8_t vpp_power; // vpp_e
20+
uint8_t sig_oe_vpp_activ; // add_or_v_e
21+
uint8_t sig_add11_vpp_activ; // add_or_v_e
22+
uint8_t sig_add13_vcc_activ; // add_or_v_e
23+
uint8_t sig_add15_vpp_activ; // add_or_v_e
24+
uint8_t sig_add17_vcc_activ; // add_or_v_e
25+
uint8_t sig_add19_vpp_activ; // add_or_v_e
26+
uint8_t address_pins_count;
27+
uint32_t max_data;
28+
uint8_t name[];
29+
} eprom_setting_t;
30+
31+
32+
void setup_power(eprom_setting_t * setting);
33+
void setup_relay(eprom_setting_t * setting);
34+
35+
void read_data_start(eprom_setting_t * setting);
36+
uint32_t read_data(eprom_setting_t * setting, uint32_t address);
37+
void read_data_end(eprom_setting_t * setting);
38+
39+
void program_data_start(eprom_setting_t * setting);
40+
void program_data(eprom_setting_t * setting, uint32_t address, uint8_t data);
41+
void program_data_end(eprom_setting_t * setting);
42+
43+
#endif

src/io.c

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -32,57 +32,56 @@ gpio_map_t address_map = {
3232
}
3333
};
3434

35-
gpio_t * vpp_12v5 = &gpio[ePORTA][1];
36-
gpio_t * vpp_21v = &gpio[ePORTC][0];
37-
gpio_t * vpp_on = &gpio[ePORTG][2];
35+
gpio_t * vpp_12v5_pin = &gpio[ePORTA][1];
36+
gpio_t * vpp_21v_pin = &gpio[ePORTC][0];
37+
gpio_t * vpp_on_pin = &gpio[ePORTG][2];
3838

39-
gpio_t * sig_oe_vpp = &gpio[ePORTE][5];
40-
gpio_t * sig_add11_vpp = &gpio[ePORTH][5];
41-
gpio_t * sig_add13_vpp = &gpio[ePORTB][4];
42-
gpio_t * sig_add15_vpp = &gpio[ePORTL][0];
43-
gpio_t * sig_add17_vpp = &gpio[ePORTB][6];
44-
gpio_t * sig_add19_vpp = &gpio[ePORTD][7];
39+
gpio_t * sig_oe_vpp_pin = &gpio[ePORTE][5];
40+
gpio_t * sig_add11_vpp_pin = &gpio[ePORTH][5];
41+
gpio_t * sig_add13_vcc_pin = &gpio[ePORTB][4];
42+
gpio_t * sig_add15_vpp_pin = &gpio[ePORTL][0];
43+
gpio_t * sig_add17_vcc_pin = &gpio[ePORTB][6];
44+
gpio_t * sig_add19_vpp_pin = &gpio[ePORTD][7];
4545

46-
gpio_t * CE = &gpio[ePORTC][5];
47-
gpio_t * OE = &gpio[ePORTE][3];
48-
gpio_t * PGM = &gpio[ePORTA][0];
46+
gpio_t * CE_pin = &gpio[ePORTC][5];
47+
gpio_t * OE_pin = &gpio[ePORTE][3];
48+
gpio_t * PGM_pin = &gpio[ePORTA][0];
4949

5050

5151
void reset_all(void)
5252
{
53-
set_output_map(&data_map);
53+
set_input_map(&data_map);
5454
set_output_map(&address_map);
5555

56-
set_output(vpp_on);
57-
set_output(vpp_12v5);
58-
set_output(vpp_21v);
56+
set_output(vpp_on_pin);
57+
set_output(vpp_12v5_pin);
58+
set_output(vpp_21v_pin);
5959

60-
set_output(sig_oe_vpp);
61-
set_output(sig_add11_vpp);
62-
set_output(sig_add13_vpp);
63-
set_output(sig_add15_vpp);
64-
set_output(sig_add17_vpp);
65-
set_output(sig_add19_vpp);
60+
set_output(sig_oe_vpp_pin);
61+
set_output(sig_add11_vpp_pin);
62+
set_output(sig_add13_vcc_pin);
63+
set_output(sig_add15_vpp_pin);
64+
set_output(sig_add17_vcc_pin);
65+
set_output(sig_add19_vpp_pin);
6666

67-
set_output(CE);
68-
set_output(OE);
69-
set_output(PGM);
67+
set_output(CE_pin);
68+
set_output(OE_pin);
69+
set_output(PGM_pin);
7070

71-
set_pins_map(&data_map, 0);
7271
set_pins_map(&address_map, 0);
7372

74-
set_low(vpp_on);
75-
set_low(vpp_12v5);
76-
set_low(vpp_21v);
73+
set_high(vpp_on_pin);
74+
set_low(vpp_12v5_pin);
75+
set_low(vpp_21v_pin);
7776

78-
set_low(sig_oe_vpp);
79-
set_low(sig_add11_vpp);
80-
set_low(sig_add13_vpp);
81-
set_low(sig_add15_vpp);
82-
set_low(sig_add17_vpp);
83-
set_low(sig_add19_vpp);
77+
set_low(sig_oe_vpp_pin);
78+
set_low(sig_add11_vpp_pin);
79+
set_low(sig_add13_vcc_pin);
80+
set_low(sig_add15_vpp_pin);
81+
set_low(sig_add17_vcc_pin);
82+
set_low(sig_add19_vpp_pin);
8483

85-
set_low(CE);
86-
set_low(OE);
87-
set_low(PGM);
84+
set_low(CE_pin);
85+
set_low(OE_pin);
86+
set_low(PGM_pin);
8887
}

src/io.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,20 @@ extern gpio_map_t data_map;
88

99
extern gpio_map_t address_map;
1010

11-
extern gpio_t * vpp_12v5;
12-
extern gpio_t * vpp_21v;
13-
extern gpio_t * vpp_on;
14-
15-
extern gpio_t * sig_oe_vpp;
16-
extern gpio_t * sig_add11_vpp;
17-
extern gpio_t * sig_add13_vpp;
18-
extern gpio_t * sig_add15_vpp;
19-
extern gpio_t * sig_add17_vpp;
20-
extern gpio_t * sig_add19_vpp;
21-
22-
extern gpio_t * CE;
23-
extern gpio_t * OE;
24-
extern gpio_t * PGM;
11+
extern gpio_t * vpp_12v5_pin;
12+
extern gpio_t * vpp_21v_pin;
13+
extern gpio_t * vpp_on_pin;
14+
15+
extern gpio_t * sig_oe_vpp_pin;
16+
extern gpio_t * sig_add11_vpp_pin;
17+
extern gpio_t * sig_add13_vcc_pin;
18+
extern gpio_t * sig_add15_vpp_pin;
19+
extern gpio_t * sig_add17_vcc_pin;
20+
extern gpio_t * sig_add19_vpp_pin;
21+
22+
extern gpio_t * CE_pin;
23+
extern gpio_t * OE_pin;
24+
extern gpio_t * PGM_pin;
2525

2626
void reset_all(void);
2727

0 commit comments

Comments
 (0)