I want to store the value of Program Counter(pc) to a memory location.
I did this,
LDR R1, =[0x20000000]
STR R15, [R1,#0]
I got an error saying, "Error: r15(pc) not allowed here -- `str R15,[R1,#0]'.
How should I get over this error?
Are you assembling Thumb2? Storing pc using STR is undefined in Thumb mode.
There should be all fine with these instructions unless as daith noted you are assembling Thumb/2.
"We can also specify the PC as the destination register for the result of normal data processingoperations such as ADD or SUB, but this is generally deprecated or unsupported in Thumb. Anadditional type of branch instruction can be implemented using either a load (LDR) with the PCas the target, load multiple (LDM), or stack-pop (POP) instruction with PC in the list of registers tobe loaded."
On a digression side: if you were on armv8 you won't be able to reference PC directly..
Is there any way change the thumb mode?
You can change processor operating state by using special instructions, for example, ARM state and Thumb state using the BX and BLX instructions (ARMv7). T-bit in Program Status Register corresponds for instruction set.