> Some processor registers are not accesible from userspace:
> I don´t know why some of them are accesibles and the other not
That's the whole point of Supervisor and User mode, to stop the User code from wrecking anything.
The CPU Registers you can get to from User Mode are listed in "Table 3-1. ColdFire Core Programming Model". It also lists the Supervisor-only ones.
You can program the Coldfire CPUs to get to all memory "flat" and in the same way, but it runs really slowly. In order to get any performance you have to turn the Cache on. That involves setting up the CACR, ACR1 and ACR2. You want the RAM (and optionally the FLASH, unless you want to write to it) cached but you have to have the Peripheral Space uncached. The CPU doesn't do this automatically for you - you have to do this manually.
Ideally (and simply) you'd have three control registers defining cache modes and protections, with one mapping RAM, one mapping FLASH and the third mapping the Peripherals. A few more for other memory-mapped devices would be nice. But this CPU only has TWO such registers. So you use the CACR settings to default one of the three spaces and let ACR1 and ACR2 cover the other ones. These are usually enough, but it's a restriction we really didn't need.
It looks like ucLinux is using one of the ACRs to map the Peripherals, and has User access disabled. That is "the linux way".
If it makes things easier for you, then you can probably locate the code that sets it up that way and change it to allow user access. Or you can write a small Supervisor function that simple rewrites the ACRs to allow user access. This is harder than it should be as they're write-only, so you need to find what is normally being written to them if you want to change it. Does ucLinux support some sort of "mmap()" call that might do this already?
Tom