We don't use it, but it should be very powerfull in many cases.
To use it in C, you have to cast your the address of the object into 'long integer', then to convert the resulting integer in bit address, then to cast it again into pointer. Finally you can use this pointer (*) to operate on the bit.
The reference manual says:
RefMan :
The following example shows how to map bit 2 of the byte located at SRAM address
0x20000300 in the alias region:
0x22006008 = 0x22000000 + (0x300*32) + (2*4).
Writing to address 0x22006008 has the same effect as a read-modify-write operation on bit
2 of the byte at SRAM address 0x20000300.
I will suggest:
#define WRITEBIT(byte, ofs, val) (*((unsigned char*) (0x22000000 + ( (((long) (&(byte) ))-0x20000000)*32) + ((ofs)*4))) = (val))
unsigned char c1;
WRITEBIT(c1,3,0); //would clear bit 3 of c1
I didn't test it but I hope it works (if I didn't miss a parenthesis).