I am trying to configure one of the peripheral timers on the SC-589. It seems that writes to the config register do not work. For example:
* (volatile uint32_t *) REG_TIMER0_TMR2_CFG = 0x088C; // has no effect
The hardware reference says to verify the timer is not running before writing this register, which I did. the TIMER0_RUN register is all zeros.
I tried this both from the ARM and the SHARC1 core. Same results. I can watch the TIMER0 registers in the CCES debugger and they do not change. I can however change them from the CCES register browser and my changes take effect. I am using the SC589 EZ-BOARD via the ICE 1000.
Other register writes to the timer block do appear to work. If I first manually set the config register to 0x88C using the debugger, then this code works as expected:
* (volatile uint32_t *) REG_TIMER0_TMR2_PER = 0x12345678; // works as expected, debugger shows change, reads back correctly
It seems to just be the configuration registers.
Furthermore, if I try to read back a config register from the ARM, I get a data fault exception:
uint32_t rb = * (volatile uint32_t *) REG_TIMER0_TMR2_CFG; // generates data fault
A non-recoverable error or exception has occurred.
Description: Data Fault Exception - caused by attempting to access invalid data memory.
General Type: RunTimeError
Specific Type: ExceptAbrtData
Error Message: If this is a synchronous fault, address 0x310010a0 held in Data Fault Address Register (DFAR) is the problem address.
Error PC: 0xc1005124
From the SHARC, I can read back values set using the debugger, but still can't ever write to it.
This was tested after creating a very simple new bare metal project in CCES. It is right after reset, so the timer registers are almost all zeros.