Hallo,
ich habe Problem mit SPI. Es hat vor ein paar Tagen noch funktioniert,
nun geht aber nichts mehr. Wenn ich 8Bit senden will, wird nichts
gesendet (Mit LogicAna und Oszi getestet) und der MCU bleibt in der
while schleife.
Hier der Code:
1 | void SPI_INIT(void) {
|
2 | SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // SPI ENABLE, Master
|
3 | DDRB = (1 << DDB1) | (1 << DDB2) | (1 << DDB7); // CLK, MOSI und MISO als Ausgang
|
4 | }
|
5 |
|
6 |
|
7 |
|
8 | uint8_t SPI_Transfer(uint8_t sByte)
|
9 | {
|
10 | SPDR = sByte;
|
11 | while(!(SPSR & (1<<SPIF)));
|
12 | return SPDR;
|
13 | }
|
Zuerst habe ich versucht es wieder mit gesamtem Code zum laufen zu
bekommen. Dann hab ich alles außer der SPI_INIT() und einem aufruf in
der while(1) von SPI_Transfer(0x01); versucht. (Aktueller Stand)
1 | #include ....
|
2 |
|
3 |
|
4 | int main(void) {
|
5 |
|
6 | SPI_INIT();
|
7 |
|
8 | while(1) {
|
9 | PORTC &= ~(1 << PC5);
|
10 | SPI_Transfer(0b00000101);
|
11 | PORTC |= 1 << PC5;
|
12 | }
|
13 | return(0);
|
14 | }
|
Erkennt jemand einen Fehler in der SPI_INIT? die Transfer Funktion
sollte so auf jeden fall in Ordnung sein... (ist kopiert)
Kann es sein, dass beim compilieren irgendwas weg optimiert wird?
Aktuell nutze ich als Parameter -Os (gcc version 5.3.0 (GCC)) unter Arch
Linux und als IDE CodeBlocks die aktuelle Version.
Hab das ganze auch auf einem andern Atmega64M1 laufen lassen, selbe
Ergebnis.