Jaecko
05.01.2012, 16:05
Moin.
An einem Projekt hab ich grad das Problem, dass 3 Geräte am SPI nicht richtig wollen.
Ein MCP2515 (CAN, 5V) und ein W5100 (Ethernet, Vcc = 3.3V, Pins sind 5V-kompatibel) laufen; hängt man noch ne SD-Karte
hin (bidirektionaler Pegelwandler 3.3V <=> 5V) geht nix mehr. Die SD-Karte kann nicht initialisiert werden, die LAN-Kommunikation bricht ab.
Da ich im Moment weder mit nem Oszi noch mit nem Logikanalyzer was find, "hoffe" ich, dass sich irgendwo ein Softwarefehler eingeschlichen hat. Eine der in Frage kommenden Quellen wäre die untere Funktion.
Sollte doch theoretisch so klappen?
void MyFunc1(volatile ui8_t *port, ui8_t pin)
{
*port |= (1 << pin);
}
void MyFunc2(volatile ui8_t *port, ui8_t pin)
{
*port &=~ (1 << pin);
}
// Aufruf:
MyFunc1(&PORTA, 4);
...
MyFunc2(&PORTA, 4);
mfG
An einem Projekt hab ich grad das Problem, dass 3 Geräte am SPI nicht richtig wollen.
Ein MCP2515 (CAN, 5V) und ein W5100 (Ethernet, Vcc = 3.3V, Pins sind 5V-kompatibel) laufen; hängt man noch ne SD-Karte
hin (bidirektionaler Pegelwandler 3.3V <=> 5V) geht nix mehr. Die SD-Karte kann nicht initialisiert werden, die LAN-Kommunikation bricht ab.
Da ich im Moment weder mit nem Oszi noch mit nem Logikanalyzer was find, "hoffe" ich, dass sich irgendwo ein Softwarefehler eingeschlichen hat. Eine der in Frage kommenden Quellen wäre die untere Funktion.
Sollte doch theoretisch so klappen?
void MyFunc1(volatile ui8_t *port, ui8_t pin)
{
*port |= (1 << pin);
}
void MyFunc2(volatile ui8_t *port, ui8_t pin)
{
*port &=~ (1 << pin);
}
// Aufruf:
MyFunc1(&PORTA, 4);
...
MyFunc2(&PORTA, 4);
mfG