Hallo,
ich habe einen AVR32UC3C0512C, der einen IR-Protokollstack über einen 
8-Bit Parallelbus anspricht. Im späteren Verlauf des Projektes wird der 
µController gewechselt (kleineres Package) bei dem die Pins dann zwar am 
selben Port hängen, aber wild verstreut (reicht von Pin 4 bis Pin 27). 
Nachdem die Kommunikation und alle Routinen grundsätzlich funktionieren, 
würde ich gerne die Geschwindigkeit der Lese- und Schreibroutinen 
erhöhen. Derzeit bin ich bei Übertragungsraten von 2,7 MBit/s von 
(theoretisch) maximalen 4 MBit/s. Nachfolgend der Code, den es zu 
optimieren gilt:
1  | /* IPMS Controllerpins definieren */
  | 
2  | #define GPIO_IPMS_DB0  AVR32_PIN_PD11
  | 
3  | #define GPIO_IPMS_DB1  AVR32_PIN_PD12
  | 
4  | #define GPIO_IPMS_DB2  AVR32_PIN_PD13
  | 
5  | #define GPIO_IPMS_DB3  AVR32_PIN_PD14
  | 
6  | #define GPIO_IPMS_DB4  AVR32_PIN_PD15
  | 
7  | #define GPIO_IPMS_DB5  AVR32_PIN_PD16
  | 
8  | #define GPIO_IPMS_DB6  AVR32_PIN_PD17
  | 
9  | #define GPIO_IPMS_DB7  AVR32_PIN_PD18
  | 
10  | 
  | 
11  | ...
  | 
12  | 
  | 
13  | uint8_t ipms_read_reg(uint8_t address)
  | 
14  | {
 | 
15  |   uint8_t data = 0;
  | 
16  |   uint32_t temp_bitmask = 0;
  | 
17  | 
  | 
18  |   ...
  | 
19  | 
  | 
20  |   /* Pinzustände abfragen */
  | 
21  |   temp_bitmask = AVR32_GPIO.port[IPMS_DB_PORT].pvr;
  | 
22  | 
  | 
23  |   /* Byte wieder zurecht biegen */
  | 
24  |   if(temp_bitmask & (1 << (GPIO_IPMS_DB0 & 0x1F)))  data |= 1;
  | 
25  |   if(temp_bitmask & (1 << (GPIO_IPMS_DB1 & 0x1F)))  data |= 2;
  | 
26  |   if(temp_bitmask & (1 << (GPIO_IPMS_DB2 & 0x1F)))  data |= 4;
  | 
27  |   if(temp_bitmask & (1 << (GPIO_IPMS_DB3 & 0x1F)))  data |= 8;
  | 
28  |   if(temp_bitmask & (1 << (GPIO_IPMS_DB4 & 0x1F)))  data |= 16;
  | 
29  |   if(temp_bitmask & (1 << (GPIO_IPMS_DB5 & 0x1F)))  data |= 32;
  | 
30  |   if(temp_bitmask & (1 << (GPIO_IPMS_DB6 & 0x1F)))  data |= 64;
  | 
31  |   if(temp_bitmask & (1 << (GPIO_IPMS_DB7 & 0x1F)))  data |= 128;
  | 
32  | 
  | 
33  |   ...
  | 
34  | }
  | 
Wie kann ich hier Taktzyklen einsparen? Vor lauter Programmierarbeit, 
habe ich gerade keine Ideen mehr :) Vielleicht liegt es auch daran, dass 
es schon spät ist.....oder früh.
Gute Nacht und vielen Dank im voraus für eure Mühen