Using a Memory Copy block to read/write a single bit gives an error, and workaround not working?

5 次查看(过去 30 天)
Hi, I am trying to read data from and write data to an ePWM register. I can read the whole register, but when I try to read half (EPwm2Regs.TBPHS.half.TBPHS) or just a single bit (e.g., EPwm2Regs.TBCTL.bit.PHSDIR), I get a compiling error:
error: taking the address of a bit field is not allowed
As a workaround, I can read a whole register (EPwm2Regs.TBCTL), and then extract a single bit (PHSDIR = bit 13).
However, if I try to write to a single bit or half, I also get the same error.
I tried to use a similar approach: reading the whole register, changing a particular bit and then writing a new value to the same register, but this does not work.
1) Do I need to do anything else to enable writing using the Memory Copy block?
2) Is it possible to write to only one bit or half register? In Texas Instruments help files this seems to work
My setup for writing a phase offset looks like this
Memory copy destination (&EPwm2Regs.TBPHS)
Application
I am trying to write to the upper part of the TBPHS register a new value, but it seems the memory copy block cannot overwrite the existing value. I used a similar approach to write to a single bit, but it didn't work either.
ePWM2 block settings
  1 个评论
Walter Roberson
Walter Roberson 2023-10-17
From what I have seen, these days very few devices have hardware bit-addressing -- and the few that do only seem to have it for a small range of addresses (that is, they might have special peripheral I/O commands that allow setting individual bits for I/O registers... but not for general memory)
The TMS320C28x does not appear to have any bit-addressing capabilities

请先登录,再进行评论。

回答(1 个)

Antonin
Antonin 2023-10-17
编辑:Antonin 2023-10-17
Hi Mike,
A workaround is to use the .all notation to have access to the whole register, you can then use bit manipulations to access the bit you want. Getting the address of .all will work
So in the Memory Copy block to access EPwm2Regs.TBCTL.bit.PHSDIR use the source code symbol with &EPwm2Regs.TBCTL.all and use a mask and shift to access the bit you want. The same trick applies for both read and write operations.
I hope it helps,
Antonin.

产品


版本

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by