Hallo, ich versuche gerade das IAR Beispiel in ASM umzuschreiben im grunde ist das kein Thema.. nur verstehe ich nicht, das das zum teil soll
1 | #pragma vector=USI_START_VECTOR
|
2 | __interrupt void USI_Start_Condition_ISR(void) |
3 | {
|
4 | unsigned char tmpUSISR; // |
5 | Temporary variable to store volatile |
6 | tmpUSISR = USISR; // |
7 | Not necessary, but prevents warnings |
8 | -- Ist klar |
9 | |
10 | // Set default starting conditions for new TWI package
|
11 | USI_TWI_Overflow_State = USI_SLAVE_CHECK_ADDRESS; |
12 | -- Wird hier schon die angesprochene Adresse eingelesen?? |
13 | |
14 | |
15 | DDR_USI &= ~(1<<PORT_USI_SDA); // |
16 | Set SDA as input |
17 | -- Wieso nocheinmal als Input?? |
18 | |
19 | while ( (PIN_USI & (1<<PORT_USI_SCL)) & !(tmpUSISR & (1<<USIPF)) |
20 | ); // Wait for SCL to go low to ensure the "Start Condition" has |
21 | completed. |
22 | -- !(tmpUSISR & (1<<USIPF)) was soll sich daran aendern??? |
23 | |
24 | -- Ist klar |
25 | // If
|
26 | a Stop condition arises then leave the interrupt to prevent waiting |
27 | forever. |
28 | USICR = (1<<USISIE)|(1<<USIOIE)| // |
29 | Enable Overflow and Start Condition Interrupt. (Keep StartCondInt to |
30 | detect RESTART) |
31 | (1<<USIWM1)|(1<<USIWM0)| // |
32 | Set USI in Two-wire mode. |
33 | (1<<USICS1)|(0<<USICS0)|(0<<USICLK)| // |
34 | Shift Register Clock Source = External, positive edge |
35 | (0<<USITC); |
36 | -- Clear FLAGS heisst Bit setzen?? |
37 | USISR = |
38 | (1<<USI_START_COND_INT)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)| // |
39 | Clear flags |
40 | (0x0<<USICNT0); // |
41 | Set USI to sample 8 bits i.e. count 16 external pin toggles. |
42 | }
|
Danke schonmal für euere Antworten