Hi,
i am using the CC430F6137 (ez430 Chronos). I have noticed the OPERR Flag is set all the time. The reason for this is that the SimpliciTi code uses the auto-read feature of the radio:
uint8_t mrfiRadioInterfaceReadReg(uint8_t addr)
{
/....
if( (addr <= 0x2E) || (addr == 0x3E))
{
/* Write cmd: read the Configuration register */
RF1AINSTR1B = (0x80 | addr);
}
else
{
/* Write cmd: read the Status register */
RF1AINSTR1B = (0xC0 | addr);
}
/* Read out the register value */
regValue = RF1ADOUT1B; //auto read
/...
}
The OPERR Flag is set once the register value is read. This happens always if the configuration of the GDO2 register is requested by mrfiRadioInterfaceCmdStrobe(uint8_t addr):
gdoState = MRFI_RADIO_REG_READ(IOCFG2);
I have not found any error in the code. The OPERR flag is not set anymore if the auto-read feature is not used:
if( (addr <= 0x2E) || (addr == 0x3E))
{
/* Write cmd: read the Configuration register */
RF1AINSTRB = (0x80 | addr);
}
else
{
/* Write cmd: read the Status register */
RF1AINSTRB = (0xC0 | addr);
}
RF1ADINB = 0; //dummy write
/* Read out the register value */
regValue = RF1ADOUTB;
I dont have any other CC430 chip, so this might just affect the CC430F6137 chip.
Anyways my question is if it is a big deal if the OPERR flag is set anyways?
edit: same problem in the void mrfiRadioInterfaceReadRxFifo(uint8_t * pData, uint8_t len) function:
/* Write cmd: SNGLRXRD */
RF1AINSTR1B = 0xBF;
/* Read byte from FIFO */
pData = RF1ADOUT1B; //auto read register
The OPERR flag is set too