Hallo zusammen,
ich arbeite mit einem MPC5554 Prozessor und habe dazu ein Beispiel C-Programm.
Auf diese Weise kann ich ein einzelnes Bit im Register MCR des DSPI Moduls A ändern. Die Syntax ist so weit in Ordnung, weil es dazu ein passendes h-file gibt.
Nun würde ich gerne direkt, ohne diese Syntax und zwar mit absoluten Adresse auf das Register zugreifen. Aus dem Datenblatt kann ich folgende Adresse lesen:
0xFFF9_0000 (DSPI A) | DSPIx_MCR | DSPI module configuration register | Size 32 bit
Das Bit, dass ich ändern möchte, ist das 32. (=31, weil 0 das 1. Bit ist) Bit des Registers MCR.
Meine Annahme ist nun, dass ich das Bit mit der Registeradresse 0xFFF90031 ändern muss. Das Klappt aber nicht so ganz.
Hier mein Programm dazu:
Weiß einer, warum sich das Bit nicht ändern?
Danke, Gruß Flo
ich arbeite mit einem MPC5554 Prozessor und habe dazu ein Beispiel C-Programm.
Code:
DSPI_A.MCR.R = 0x00000001;
DSPI_A.MCR.R = 0x00000000;
DSPI_A.MCR.R = 0x00000001;
DSPI_A.MCR.R = 0x00000000;
Auf diese Weise kann ich ein einzelnes Bit im Register MCR des DSPI Moduls A ändern. Die Syntax ist so weit in Ordnung, weil es dazu ein passendes h-file gibt.
Nun würde ich gerne direkt, ohne diese Syntax und zwar mit absoluten Adresse auf das Register zugreifen. Aus dem Datenblatt kann ich folgende Adresse lesen:
0xFFF9_0000 (DSPI A) | DSPIx_MCR | DSPI module configuration register | Size 32 bit
Das Bit, dass ich ändern möchte, ist das 32. (=31, weil 0 das 1. Bit ist) Bit des Registers MCR.
Meine Annahme ist nun, dass ich das Bit mit der Registeradresse 0xFFF90031 ändern muss. Das Klappt aber nicht so ganz.
Hier mein Programm dazu:
Code:
int main(void) {
diag_printf("\n\nSPI HALT register test\n\n");
int base_address = 0xFFF90000; // DPSI A start address of MPC5554
int offset = 0x00000000; // offset of MCR
int bit_halt_reg = 0x00000031; // bit 31 = HALT register
int result_address = 0;
int *p_address = NULL;
int value = 0;
result_address = base_address + offset + bit_halt_reg;
printf("base_address = %#10x\n", base_address);
printf("offset = %#10x\n", offset);
printf("bit_halt_reg = %#10x\n", bit_halt_reg);
printf("result_address = %#10x\n", result_address);
printf("value = %d\n", value);
p_address = result_address; // address with &var or direct address input
diag_printf("HALT register = %i\n", *p_address); // read HALT register
*p_address = value; // write HALT register
printf("new HALT register = %i\n", *p_address); // read HALT register again
while(1);
return 0;
}
Weiß einer, warum sich das Bit nicht ändern?
Danke, Gruß Flo