This file defines macros for accessing system registers on AVR32 devices.
Definition in file macro.h.
This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
Defines | |
| #define | CLEARBIT(sregister, bitname) |
| define which clears a bit in system registers | |
| #define | CLRBIT(sregister, bitname) CLEARBIT(sregister, bitname) |
| #define | GETBITS(sregister, return_value) READBITS(sregister, return_value) |
| #define | READBITS(sregister, return_value) |
| define to read a given system registers | |
| #define | SETBIT(sregister, bitname) |
| define which sets a bit in system registers | |
| #define | TGLBIT(sregister, bitname) TOGGLEBIT(sregister, bitname) |
| #define | TOGGLEBIT(sregister, bitname) |
| define which toggles a bit in system registers | |
| #define CLEARBIT | ( | sregister, | |||
| bitname | ) |
Value:
__asm__( "st.w sp++, r7\n" \ "mfsr r7, %0\n" \ "cbr r7, %1\n" \ "mtsr %0, r7\n" \ "ld.w r7, --sp\n" \ : \ :"X"(sregister), "g"(bitname) )
First store the r7 register on the stack and increment the pointer. Then load the system register
| sregister,clear | the bit | |
| bitname,store | the system register and load value from stack to r7 and deincrement. |
| #define CLRBIT | ( | sregister, | |||
| bitname | ) | CLEARBIT(sregister, bitname) |
| #define GETBITS | ( | sregister, | |||
| return_value | ) | READBITS(sregister, return_value) |
| #define READBITS | ( | sregister, | |||
| return_value | ) |
Value:
__asm__ __volatile__( "st.w sp++, r6\n" \ "mfsr r6, %1\n" \ "st.w %0, r6\n" \ "ld.w r6, --sp\n" \ : "=g"(return_value) \ :"X"(sregister) )
Store r6 register on stack and increment pointer. Then load the system register
| sregister | and store this value in the | |
| return_value | before loading value from stack and deincrement r7. |
| #define SETBIT | ( | sregister, | |||
| bitname | ) |
Value:
__asm__( "st.w sp++, r7\n" \ "mfsr r7, %0\n" \ "sbr r7, %1\n" \ "mtsr %0, r7\n" \ "ld.w r7, --sp\n" \ : \ :"X"(sregister), "g"(bitname) )
First store the r7 register on the stack and increment the pointer. Then load the system register
| sregister,set | the bit | |
| bitname,store | the system register and load value from stack to r7 and deincrement. |
| #define TGLBIT | ( | sregister, | |||
| bitname | ) | TOGGLEBIT(sregister, bitname) |
| #define TOGGLEBIT | ( | sregister, | |||
| bitname | ) |
Value:
__asm__( "st.w sp++, r7\n" \ "st.w sp++, r6\n" \ "mfsr r7, %0\n" \ "mov r6, 0\n" \ "sbr r6, %1\n" \ "eor r7, r6\n" \ "mtsr %0, r7\n" \ "ld.w r6, --sp\n" \ "ld.w r7, --sp\n" \ : \ :"X"(sregister), "g"(bitname) )
First store the r7 register on the stack and increment the pointer. Then load the system register
| sregister,toggle | the bit | |
| bitname | by using an exclusive or, store the system register and load value from stack to r7 and deincrement. |
1.5.1