Hi,
I am in the process of creating an SVD file for a ADuCM350 processor.
One of the registers contains 2 bits that are sticky, they keep their value unless a one is written to them to clear.
Here is the register.
... and the SVD description I have made using CMSIS Schema version 1.1
So when viewing the register in Peripherals->Register if one of these sticky bits are set and i attempt to write a one to the bit Ozone sees that i made no change to the value and Ozone does not write to the target
So if i want to change this value i need to explicitly write to the register using the Console.
I was hoping that using the <modifiedWriteValues> element in the SVD would help but maybe i have misinterpreted the meaning of this element in the SVD documentation.
This is particularly thorny because this register has two of these "sticky" flags and clearing one should not automatically clear the other if they are both set.
e.g. if this register contains 0x55 then selecting the VCCMPSMFLG value and writing one should write a 1 to that bit only (iow writing 0x55 would also clear the DVDDPSMFLG, prefer to write 0x51 in this example)
So one potential way to do this would be to write the appropriate value to any other bits that have <modifiedWriteValues> element in the SVD?
If you look through the specification for this device there are other registers with more than one field with this same behavior.
Another way this could be handled is via bitbanding but its not clear to me how to describe the necessary addresses to Ozone given the current state of the SVD schema.
The following app note describes bitbanding for Cortex-M3
infocenter.arm.com/help/topic/….dai0179b/AppsNote179.pdf
My work around, if i am debugging and want to fiddle with a peripheral register with (W1C) fields, is to use the console and make the necessary changes to the register instead of using the more convenient Registers window.
--Duane.
I am in the process of creating an SVD file for a ADuCM350 processor.
One of the registers contains 2 bits that are sticky, they keep their value unless a one is written to them to clear.
Here is the register.
... and the SVD description I have made using CMSIS Schema version 1.1
So when viewing the register in Peripherals->Register if one of these sticky bits are set and i attempt to write a one to the bit Ozone sees that i made no change to the value and Ozone does not write to the target
So if i want to change this value i need to explicitly write to the register using the Console.
I was hoping that using the <modifiedWriteValues> element in the SVD would help but maybe i have misinterpreted the meaning of this element in the SVD documentation.
This is particularly thorny because this register has two of these "sticky" flags and clearing one should not automatically clear the other if they are both set.
e.g. if this register contains 0x55 then selecting the VCCMPSMFLG value and writing one should write a 1 to that bit only (iow writing 0x55 would also clear the DVDDPSMFLG, prefer to write 0x51 in this example)
So one potential way to do this would be to write the appropriate value to any other bits that have <modifiedWriteValues> element in the SVD?
If you look through the specification for this device there are other registers with more than one field with this same behavior.
Another way this could be handled is via bitbanding but its not clear to me how to describe the necessary addresses to Ozone given the current state of the SVD schema.
The following app note describes bitbanding for Cortex-M3
infocenter.arm.com/help/topic/….dai0179b/AppsNote179.pdf
My work around, if i am debugging and want to fiddle with a peripheral register with (W1C) fields, is to use the console and make the necessary changes to the register instead of using the more convenient Registers window.
--Duane.