From: Erich W. <ew....@na...> - 2010-10-02 20:41:20
|
Hello, I'm adding external periphery to SPI of an atmega32 controller. a. bit-bang mode when bitbanging clock and setting mosi / reading miso, everything works fine. ==> my wiring and the external chip are ok. b. using the builtin subsystem. I set mosi and clk to output, and the select pin (PORTC.2) as well. HOWEVER, I found it impossible to set SPCR to the desired values: > hex ok > $53 SPCR c! ok > SPCR c@ . 43 ok The bit $10, which is apparently not set, ist the MSTR bit. That fits the symtoms I'm seeing: "spirw" (available in core/words/spirw.asm) never returns, because SPIF in register SPSR is never set. No wonder, if we are not in master mode to begin with. The bit-bang version never looks at SPSR and SPCR. I found in the datasheet that the behaviour depends on whether /SS is input and externally driven low or not while setting SPCR. However, switching /SS to output does not change the situation. This is the same in amforth 3.4 (where I found my old test), 3.8 or trunk. Ideas? Cheers, Erich |