IAR中內嵌彙編指令方式如下:
volatile char UART1_SR;
#pragma required=UART1_SR
char sFlag = 0;
int main(void)
{
while (!sFlag)
{
asm(" ldr r2,[pc,#0] \n" /* r2 = address of sFlag */
" b .+8 \n" /* jump over constant */
" DCD sFlag \n" /* address of sFlag */
" ldr r3,[pc,#0] \n" /* r3 = address of UART1_SR */
" b .+8 \n" /* jump over constant */
" DCD UART1_SR \n" /* address of UART1_SR */
" ldr r0,[r3] \n" /* r0 = UART1_SR */
" str r0,[r2]"); /* sFlag = r0 */
}
}
Keil內嵌彙編指令方式:
/*************************************************************/
static __inline void cpu_arm920_cache_clean_invalidate_all(void)
{
__asm{
mov r1, #0
mov r1, #7 << 5 /* 8 segments */
cache_clean_loop1:
orr r3, r1, #63UL << 26 /* 64 entries */
cache_clean_loop2:
mcr p15, 0, r3, c7, c14, 2 /* clean & invalidate D index */
subs r3, r3, #1 << 26
bcs cache_clean_loop2 /* entries 64 to 0 */
subs r1, r1, #1 << 5
bcs cache_clean_loop1 /* segments 7 to 0 */
mcr p15, 0, r1, c7, c5, 0 /* invalidate I cache */
mcr p15, 0, r1, c7, c10, 4 /* drain WB */
}
}