Hallo,
ich habe für mein Technikerprojekt erstmal ein kleines
Programm geschrieben um mich in den Controller einzuarbeiten.
Es soll über PortA PIN 6,7 ein Software I2C nachgebildet werden.
Jetzt hab ich das Problem das ich wenn ich das ACK abfrage die SDA nicht
auf
High geht und somit kein ACK gelesen werden kann.
1 | char SW_I2C_ACK(void)
|
2 | {
|
3 | unsigned char Temp,x;
|
4 | GPIO_PORTA_DATA_R |= 0x80; //SDA High
|
5 | Delay_us(10);
|
6 | Temp = GPIO_PORTA_DATA_R; //Port sichern
|
7 | GPIO_PORTA_DATA_R |= 0x40; //SCL High
|
8 | GPIO_PORTA_DIR_R ^= 0x80; // SDA INPUT
|
9 | Delay_us(20);
|
10 | x=GPIO_PORTA_DATA_R;
|
11 | if ((x & 0x80)==0) // Überprüfen SDA Low (ACK)
|
12 | {
|
13 | GPIO_PORTA_DIR_R ^= 0x80; // SDA OUTPUT
|
14 | GPIO_PORTA_DATA_R = Temp; // PORT wieder zurückschreiben
|
15 | Delay_us(10);
|
16 | return 0x01;
|
17 | }
|
18 | else
|
19 | {
|
20 | GPIO_PORTA_DIR_R ^= 0x80; // SDA OUTPUT
|
21 | GPIO_PORTA_DATA_R = Temp; // PORT wieder zurückschreiben
|
22 | Delay_us(10);
|
23 | return 0x00;
|
24 | }
|
25 |
|
26 | }
|
Habe das gefühl das zwar das sezten von GPIOs übers DATA Register geht
aber das einlesen will net immer funktionieren.
Hat jemand erfahrung mit dem Controller?