Lost IOWR

We have been making a controller for years based on a RCM3200 RabbitCore that uses external IO.
Suddenly no external I/O is and there is no IOWR signal.
We tried multiple boards (ours) and multiple Rabbit modules.
We dropped back to a Rabbit demo application kit with a Rabbit mother board and LCD to get our hardware out of the issue and still no IOWR signal
We eliminated all of our code and dropped to a loop that never gets to our init functions. We see two prefect IORD pulses but IOWR just stays high.
The reads appear to work properly and the write puts the data on the bus just no IOWR pulse.
Any ideas how we lost external IOWR or how to get it back?

#define PORTA_AUX_IO // required to enable auxiliary I/O bus

main()
{
char k;

for(;:wink:
{
WrPortE(0x03c, &k, 0x0aa); /* send command data out LCD data port*/
k = RdPortE(0x039); // read port
k = RdPortE(0x039); // read port
}

InitMain(); // init variables, first screen, and HTML
TheStateMachines(); //go do everything
}

Simply defining PORTA_AUX_IO does not enable the external I/O bus. You must set up at least one IBxCR register to define the I/O address range, wait states, strobe and bus to use for the port. There is also a bit in each IBxCR register that can allow or prevent writes to the address range. This setup is required even if you do not enable a strobe pin for the port. Section 10 of the Rabbit 3000 users manual covers the IBxCR registers.

You also must enable the Aux I/O bus in the SPCR (Slave Port Control Register). This is covered in section 13.2 of the manual.

I added the following code:
WrPortI(IB0CR,0,0x088); //3 waits, Write allowed, Low going strobe
WrPortI(SPCR,0,0x08C); //no slave, External I/O
And the IOWR pulses are back and everything is working again.
We have about 100 of these in the field that are working without these 2 lines of important configuration that we have built over the last 4 years. Looks like updates for all to make sure they all keep working.
Thank you.:smiley:

Good to hear that fixed it. I’m surprised that it was working without an IBxCR register setup. The SPCR may get set by the #define, I had included it just to cover all the bases. But IBxCR is definitely not as there is no way to know which one you want to use. Puzzling, but good that it’s fixed. Best of luck on your application.