IAR中內嵌彙編指令

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 */
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章