I'm planning to start a new project which I think could be a real killer application: a complete CNC motion controller with multiple built in servo axes for brushless motors. I already sell a P1 based motion controller and P1 based single axis servos. But I don't sell many of the servos because wiring and parameter tuning is very complicated. Most users don't care much about safety and use cheap chinese servos. I DO a sell a lot of motion controllers but technical support is painful because so many things can go wrong... For this and some other reasons I'd like to integrate everything into a single box.
The P1 was not powerful enough for this and the P2 has been unavailable for a long time. So I started a few experiments with ARM controllers. Those chips are quite powerful buit some details are implemented in such an awfully bad way that renders all the rest pretty useless. First, you can't use every pin for any purpose. For most of the pins you have only two choices: a) use it as GPIO or b) assign it to some dedicated peripheral unit. So you run out of pins very quickly allthough you have 128 IOs or something. And the worst thing is you have to decide what pin to use for what before doing the PCB layout. Changing a serial protocol from UART to SPI means you have to use different pinouts. Some peripherals have conflicting pinouts, so although the data sheet advertises 6 UARTs you can only use 3 of them because of pin and DMA channel conflicts, or clock speed limitations or other restrictions.
And the timers are so complicated! Registers are only 16 bit wide. So you have to program different clocks and prescalers because 16 bit roll over in less than 1ms at 150MHz. Why?! A god damn timer in a god damned 32 bit processor has to be 32 bits wide! All the gates saved are wasted again by all the workarounds you need.
You can't even use an input pin for two different purposes at the same time. If you want to count pulses from an encoder and additionally trigger an interrupt for each pulse you have to use two pins. In theory, the PIO controller could assign an interrupt to any pin but not if that pin is assigned to a peripheryal function (timer/counter) How brain damaged is this?! It actually takes more resources to limit use of signals in this way instead of routing a signal source to all of the possible sinks. I mean an output has to be multiplexed if there are more than one possible source. But an input can be connected to multiple loads that use that signal without extra cost. Those unnecessary and stupid limitations have caused me a lot of grey hairs.
To sum it up, I WANT THE PROPPELLER BACK!
Now, I have to find out if the P2 fits my needs. Unfortunatelly, I haven't followed all the discussions and I haven't found any good documentation (I have to admit I haven't searched very hard recently). Is there a data sheet that already covers smart pins? I hope some of you guys can help me finding out if the P2 is the right choice for this project.