Hallo Zusammen,
Die Funktionsweise einer Soft-SPI Lösung in GCC ist mir vertraut und
soll
hier auch nicht thematisiert werden.
1 | unsigned char soft_spi_read_byte (void)
|
2 | {
|
3 | int a;
|
4 | unsigned char Byte = 0;
|
5 | for (a=8; a>0; a--) //das Byte wird Bitweise nacheinander Empangen MSB First
|
6 | {
|
7 | Soft_SPI_PORT &=~(1<<SPI_Clock); //erzeugt ein Clock Impuls (Low)
|
8 | if (bit_is_set(Soft_SPI_PIN,SPI_DI) > 0) //Lesen des Pegels von soft_spi_DI
|
9 | {
|
10 | Byte |= (1<<(a-1));
|
11 | }
|
12 | else
|
13 | {
|
14 | Byte &=~(1<<(a-1));
|
15 | }
|
16 | Soft_SPI_PORT |=(1<<SPI_Clock); //setzt Clock Impuls wieder auf (High)
|
17 | }
|
18 |
|
19 | return (Byte);
|
20 | }
|
21 |
|
22 |
|
23 |
|
24 | void soft_spi_write_byte (unsigned char Byte)
|
25 | {
|
26 | int a;
|
27 | for (a=8; a>0; a--) //das Byte wird Bitweise nacheinander Gesendet MSB First
|
28 | {
|
29 | if (bit_is_set(Byte,(a-1))>0) //Ist Bit a in Byte gesetzt
|
30 | {
|
31 | Soft_SPI_PORT |= (1<<SPI_DO); //Set Output High
|
32 | }
|
33 | else
|
34 | {
|
35 | Soft_SPI_PORT &= ~(1<<SPI_DO); //Set Output Low
|
36 | }
|
37 | Soft_SPI_PORT &= ~(1<<SPI_Clock); //erzeugt ein Clock Impuls (LOW)
|
38 |
|
39 | Soft_SPI_PORT |= (1<<SPI_Clock); //setzt Clock Impuls wieder auf (High)
|
40 | }
|
41 | Soft_SPI_PORT |= (1<<SPI_DO); //setzt Output wieder auf High
|
42 |
|
43 | }
|
44 |
|
45 | P.S. MACROS nicht angegeben.
|
usw.
Jedoch läuft die Clock mit einer ziemlich hohen Fequenz, was ich nicht
möchte. Daher meine Frage wie würde euer Konzept aussehen wenn Ihr die
Clock Frequenz bei 10kHz ohne nop's auslegen müsstet. Wurde es mit einem
freien Timer (8 und 16 Bit Timer Frei) funktionieren
Keine Lösung Hardware SPI (Diese Schittstelle ist Belegt und ich möchte
Sie auch nicht Teilen)
Gruß
GundelGaukeley