projects
/
romdev
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
06b78d4
)
It works ... jesus FUCKING christ, I just had been feeding the address bus shift...
author
John Tsiombikas
<nuclear@member.fsf.org>
Sun, 18 Oct 2020 04:46:45 +0000
(07:46 +0300)
committer
John Tsiombikas
<nuclear@member.fsf.org>
Sun, 18 Oct 2020 04:46:45 +0000
(07:46 +0300)
fw/src/main.c
patch
|
blob
|
history
diff --git
a/fw/src/main.c
b/fw/src/main.c
index
3977d78
..
0711dbc
100644
(file)
--- a/
fw/src/main.c
+++ b/
fw/src/main.c
@@
-3,6
+3,7
@@
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
+#include <util/delay.h>
#include "serial.h"
/* pin assignments
#include "serial.h"
/* pin assignments
@@
-33,6
+34,7
@@
static void start_prog(void);
static void end_prog(void);
static void write_ram(uint16_t addr, uint8_t val);
static uint8_t read_ram(uint16_t addr);
static void end_prog(void);
static void write_ram(uint16_t addr, uint8_t val);
static uint8_t read_ram(uint16_t addr);
+static void dbg_setup_read(uint16_t addr);
static void set_data_bus(unsigned char val);
static void release_data_bus(void);
static void set_addr_bus(uint16_t addr);
static void set_data_bus(unsigned char val);
static void release_data_bus(void);
static void set_addr_bus(uint16_t addr);
@@
-142,6
+144,25
@@
static void proc_cmd(char *input)
printf("OK %d\n", (int)data);
break;
printf("OK %d\n", (int)data);
break;
+ case 'R':
+ if(!progmode) {
+ puts("ERR not in programming mode");
+ break;
+ }
+ dbg_setup_read(addr);
+ printf("OK set up read from %x\n", (unsigned int)addr);
+ break;
+
+ case 'A':
+ if(!progmode) {
+ puts("ERR not in programming mode");
+ break;
+ }
+ addr = strtol(input + 1, &endp, 0);
+ set_addr_bus(addr);
+ printf("OK DBG address %x\n", (unsigned int)addr);
+ break;
+
case '?':
puts("OK command help");
puts(" e 0|1: turn echo on/off");
case '?':
puts("OK command help");
puts(" e 0|1: turn echo on/off");
@@
-151,6
+172,7
@@
static void proc_cmd(char *input)
puts(" w <data>: store data byte and increment address (0-255)");
puts(" r: read data byte and increment address");
puts(" ?: print command help");
puts(" w <data>: store data byte and increment address (0-255)");
puts(" r: read data byte and increment address");
puts(" ?: print command help");
+ printf("Currently in %s mode\n", progmode ? "programming" : "boot");
break;
default:
break;
default:
@@
-175,7
+197,7
@@
static void end_prog(void)
/* PGM low and return reset and SS high */
PORTB |= PB_SS;
PORTC &= ~PC_PGM;
/* PGM low and return reset and SS high */
PORTB |= PB_SS;
PORTC &= ~PC_PGM;
- PORTC |= PC_SYSRST;
+ PORTC |= PC_SYSRST | PC_CS | PC_OE;
progmode = 0;
}
progmode = 0;
}
@@
-204,6
+226,14
@@
static uint8_t read_ram(uint16_t addr)
return val;
}
return val;
}
+static void dbg_setup_read(uint16_t addr)
+{
+ set_addr_bus(addr);
+ PORTC |= PC_WE;
+ PORTC &= ~(PC_CS | PC_OE);
+}
+
+
static void set_data_bus(unsigned char val)
{
/* drive the data bus */
static void set_data_bus(unsigned char val)
{
/* drive the data bus */
@@
-217,15
+247,18
@@
static void release_data_bus(void)
{
DDRD = 0;
DDRB &= 0xfc;
{
DDRD = 0;
DDRB &= 0xfc;
+
+ PORTD = 0;
+ PORTB &= 0xfc;
}
static void set_addr_bus(uint16_t addr)
{
PORTB &= ~PB_SS;
}
static void set_addr_bus(uint16_t addr)
{
PORTB &= ~PB_SS;
- SPDR = (uint8_t)addr;
- while(!(SPSR & (1 << SPIF)));
SPDR = (uint8_t)(addr >> 8);
while(!(SPSR & (1 << SPIF)));
SPDR = (uint8_t)(addr >> 8);
while(!(SPSR & (1 << SPIF)));
+ SPDR = (uint8_t)addr;
+ while(!(SPSR & (1 << SPIF)));
PORTB |= PB_SS;
iodelay();
PORTB |= PB_SS;
iodelay();
@@
-235,7
+268,7
@@
static void set_addr_bus(uint16_t addr)
static void sys_reset(void)
{
PORTC &= ~PC_SYSRST;
static void sys_reset(void)
{
PORTC &= ~PC_SYSRST;
- iodelay();
+ _delay_ms(500);
PORTC |= PC_SYSRST;
}
PORTC |= PC_SYSRST;
}