اطلاعیه

Collapse
No announcement yet.

ایجاد وقفه بوسیله پایه ریست

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ایجاد وقفه بوسیله پایه ریست

    سلام
    من الان که داشتم بخش ریست میکروهای SAM7 را مطالعه می کردم به یک موضوع جالب بر خوردم گفتم شاید برای دیگران هم جالب باشد. همانطور که می دانید در این سری میکروها می شود پایه ریست خارجی را غیرفعال و دیگر میکرو بوسیله این پایه ریست نمی شود. حالا اگر پایه ریست را غیرفعال کنید (URSTEN=0) با یک کردن بیت URSTIEN وقفه فعال می شود در ضمن این وقفه در PID یک (SYS) اتفاق می افتد.
    اینم یک برنامه ساده برای راه اندازی این وقفه.
    کد:
    #include <Atmel/ioat91sam7s64.h>
    #include <intrinsics.h>
    #define LED1ON		AT91C_BASE_PIOA->PIO_CODR=(1<<0);
    #define LED1OFF		AT91C_BASE_PIOA->PIO_SODR=(1<<0);
    #define LED2ON		AT91C_BASE_PIOA->PIO_CODR=(1<<1);
    #define LED2OFF		AT91C_BASE_PIOA->PIO_SODR=(1<<1);
    void delay (void);
    //-----------------------------------------------------
    void sys_irq_handler(void)
    {
    unsigned int dummy;
    dummy=AT91C_BASE_RSTC->RSTC_RSR;
    dummy=dummy;
    LED2ON;
    delay();
    LED2OFF;
    delay();
    }
    //------------------------------------------------------
    void main()
    {
    //--------------------start up--------------------------
    AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15)
    AT91C_BASE_RSTC->RSTC_RMR=0xA5000010;
    //--------------------speed up--------------------------
    AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
    AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC; 
    AT91C_BASE_PMC->PMC_MCKR = 0x3;
    AT91C_BASE_PMC->PMC_SCER = 0x1;
    //-----------------------------------------------------
    AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_PIOA ); // AT91C_ID_PIOA=2 
    //-----------------------------------------------------
    AT91C_BASE_PIOA->PIO_PER=(1<<0|1<<1);
    AT91C_BASE_PIOA->PIO_OER=(1<<0|1<<1);
    LED1OFF;
    LED2OFF;
    AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (unsigned int) sys_irq_handler;
    AT91C_BASE_AIC->AIC_SMR[AT91C_ID_SYS] = 0x3;
    AT91C_BASE_AIC->AIC_ICCR = (1<<AT91C_ID_SYS);
    AT91C_BASE_AIC->AIC_IECR = (1<<AT91C_ID_SYS);
    __enable_interrupt();
    while (1)
     {
     LED1ON;
     delay();
     LED1OFF;
     delay(); 
     }
    }
    //--------------------------------------------------------
    void delay (void)
    {
    unsigned int i,j;
    for (i=0;i<0xfffff;i++)
     {
     j=AT91C_BASE_PMC->PMC_SCSR;
     j=j;
     }
    }

    #2
    پاسخ : ایجاد وقفه بوسیله پایه ریست

    سلام خسته نباشید من بلاخره تو بدترین موقعیت (منظورم موقع امتحانا پایان ترم) اومدم آرم کار کنم ولی ی مشکلی هست من نمیفهمم اینا یعنی چی :
    AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15)
    AT91C_BASE_RSTC->RSTC_RMR=0xA5000010;
    //--------------------speed up--------------------------
    AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
    AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
    AT91C_BASE_PMC->PMC_MCKR = 0x3;
    AT91C_BASE_PMC->PMC_SCER = 0x1;
    //-----------------------------------------------------
    AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_PIOA ); // AT91C_ID_PIOA=2

    گیر اصلیم هم با این هست :
    WDTC_WDMR = AT91C_WDTC_WDDIS;
    این رجیستر واچ داگ هست ؟ الان داره چیکار میکنه ؟

    ویرایش .با تشکر ی چیزایی اینجا پیدا کردم .:
    http://www.eca.ir/forum2/index.php?topic=48880.0;nowap
    "اللهم صل علی محمد و آل محمد و عجل فرجهم"

    دیدگاه

    لطفا صبر کنید...
    X