Skip to content

Commit c4afbd1

Browse files
More bugfixes..
1 parent b70a20f commit c4afbd1

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

simavr/sim/avr_spi.c

+7-5
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ static void avr_spi_bitbang_switch_mode(avr_spi_t * p, uint8_t master)
6363
irq = avr_io_getirq( p->bit_bang.avr,
6464
AVR_IOCTL_IOPORT_GETIRQ(p->p_miso.port),
6565
IOPORT_IRQ_DIRECTION_ALL );
66-
irq_val = irq->value & (1 << p->p_miso.pin);
66+
irq_val = irq->value & ~(1 << p->p_miso.pin);
6767
avr_raise_irq(irq, irq_val);
6868
p->bit_bang.clk_generate = 1;
6969
} else {
@@ -74,17 +74,17 @@ static void avr_spi_bitbang_switch_mode(avr_spi_t * p, uint8_t master)
7474
irq = avr_io_getirq( p->bit_bang.avr,
7575
AVR_IOCTL_IOPORT_GETIRQ(p->bit_bang.p_clk.port),
7676
IOPORT_IRQ_DIRECTION_ALL );
77-
irq_val = irq->value & (1 << p->bit_bang.p_clk.pin);
77+
irq_val = irq->value & ~(1 << p->bit_bang.p_clk.pin);
7878
avr_raise_irq(irq, irq_val);
7979
irq = avr_io_getirq( p->bit_bang.avr,
8080
AVR_IOCTL_IOPORT_GETIRQ(p->p_mosi.port),
8181
IOPORT_IRQ_DIRECTION_ALL );
82-
irq_val = irq->value & (1 << p->p_mosi.pin);
82+
irq_val = irq->value & ~(1 << p->p_mosi.pin);
8383
avr_raise_irq(irq, irq_val);
8484
irq = avr_io_getirq( p->bit_bang.avr,
8585
AVR_IOCTL_IOPORT_GETIRQ(p->p_ss.port),
8686
IOPORT_IRQ_DIRECTION_ALL );
87-
irq_val = irq->value & (1 << p->p_ss.pin);
87+
irq_val = irq->value & ~(1 << p->p_ss.pin);
8888
avr_raise_irq(irq, irq_val);
8989
p->bit_bang.clk_generate = 0;
9090
}
@@ -135,6 +135,7 @@ static void avr_spi_write(struct avr_t * avr, avr_io_addr_t addr, uint8_t v, voi
135135
avr_core_watch_write(avr, addr, v);
136136
avr_bitbang_stop(&(p->bit_bang));
137137
avr_bitbang_reset(avr, &(p->bit_bang));
138+
p->bit_bang.data = p->output_data_register;
138139
if (avr_regbit_get(avr, p->spe)) {
139140
p->bit_bang.clk_phase = avr_regbit_get(avr, p->cpha);
140141
p->bit_bang.clk_pol = avr_regbit_get(avr, p->cpol);
@@ -180,7 +181,8 @@ static void avr_spi_ss_hook(struct avr_irq_t * irq, uint32_t value, void * param
180181
avr_bitbang_stop(&(p->bit_bang));
181182
avr_bitbang_reset(p->bit_bang.avr, &(p->bit_bang));
182183
} else {
183-
avr_bitbang_start(&(p->bit_bang));
184+
if (avr_regbit_get(p->bit_bang.avr, p->spe))
185+
avr_bitbang_start(&(p->bit_bang));
184186
}
185187
}
186188
}

0 commit comments

Comments
 (0)