NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3142 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 8 از 8

موضوع: خارج شدن از وقفه پورت سریال

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2010
    نام
    علیرضا تاجیک
    نوشته ها
    28
    تشکر
    12
    تشکر شده 1 بار در 1 پست

    پیش فرض خارج شدن از وقفه پورت سریال

    سلام به همگی
    من پورت یرسال راه اندازی کردم، وقتی وقفه اتفاق میافته و برنامه های تحت وقفه اجرا میشه دیگه از وقفه خارج نمیشه و به Main برنمیگرده که مابقی برنامه اجرا بشه
    لطفا راهنمایی کنید که کجای کار اشکال داره

    کد:
    #include <lpc17xx.h> 
    #include <stdio.h>
    #include "lpc17xx_pinsel.h"
    #include "lpc17xx_gpio.h"
    #include "lpc17xx_uart.h"
    #include "lpc17xx_pwm.h"
    #include "lpc17xx_clkpwr.h"
    #include "debug_frmwrk.h"
    
    int u0 = 0;
    uint8_t input0;
    
    
    void Delay (uint32_t Time)
    {
        uint32_t i;
        
        i = 0;
        while (Time--) {
            for (i = 0; i < 5000; i++);
        }
    }
    
    void UART2_IRQHandler(void)
    {
        input0 = UART_ReceiveByte(LPC_UART2);
        GPIO_SetValue(2,0x00001000);
        Delay (2000);
        GPIO_ClearValue( 2,0x00018000 );
        u0=1;
    }
    
    int main(void)
    {
        unsigned char u0;
        
        PINSEL_CFG_Type PinCfg2;
    //*********************************************************UART2 Configuration structure variable
        UART_CFG_Type UARTConfigStruct2;                        
    //*********************************************************UART2 FIFO configuration Structure variable
        UART_FIFO_CFG_Type UARTFIFOConfigStruct2;
    //*********************************************************Initialize UART2 Pin Connect : P0.10 , P0.11 ( pins 48 & 49 Of Micro )
        PinCfg2.Funcnum = 1; 
        PinCfg2.OpenDrain = 0;
        PinCfg2.Pinmode = 0;
        PinCfg2.Pinnum = 10;
        PinCfg2.Portnum = 0;
        PINSEL_ConfigPin(&PinCfg2);
        PinCfg2.Pinnum = 11;
        PINSEL_ConfigPin(&PinCfg2);
        
        UARTConfigStruct2.Baud_rate = 38400;
        UARTConfigStruct2.Databits = UART_DATABIT_8;
        UARTConfigStruct2.Parity = UART_PARITY_NONE;
        UARTConfigStruct2.Stopbits = UART_STOPBIT_1;
    
        CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART2, ENABLE);
    //*********************************************************Initialize UART2 peripheral with given to corresponding parameter
        UART_Init(LPC_UART2,&UARTConfigStruct2);
        UART_FIFOConfigStructInit(&UARTFIFOConfigStruct2);
    //*********************************************************Initialize FIFO for UART2 peripheral
        UART_FIFOConfig(LPC_UART2, &UARTFIFOConfigStruct2);
        UART_IntConfig(LPC_UART2, UART_INTCFG_RBR, ENABLE);
    //*********************************************************Enable Interrupt for UART2 channel
        NVIC_EnableIRQ(UART2_IRQn);
    //*********************************************************Enable UART2 Transmit
        UART_TxCmd(LPC_UART2, ENABLE);
    
    //*********************************************************
        GPIO_SetDir(2 ,0x00001800 ,1 );
    
        UARTPuts_(LPC_UART2, "In the name of God");
    
        while (UART_CheckBusy(LPC_UART2));
        UARTPuts_(LPC_UART2, "Enter a char:");
    
            while (1)
            {
                if (u0==1)
                {
                    GPIO_SetValue( 2,0x00000800 );
                    Delay (5000);
                    FIO_ClearValue( 2,0x00018000 );
                    u0 = 0;
                }
        }
    }

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    پیش فرض

    سلام
    مهندس رجیستر IIR رو که مثلا واسه uart0 میشه LPC_UART0->IIR رو باید بخونی تا وقفه فعلی پاک شه
    و برنامه بتونه از وقفه فعلی خارج شه و واحد وقفه اماده برای وقفه بعدی شه
    همچنین با خوندن این رجیستر میتونی خطا رو هم تشخیص بدی و امکانات دیگه...

  4. تشکرها از این نوشته :


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2010
    نام
    علیرضا تاجیک
    نوشته ها
    28
    تشکر
    12
    تشکر شده 1 بار در 1 پست

    پیش فرض

    نقل قول نوشته اصلی توسط pirozy نمایش پست ها
    سلام
    مهندس رجیستر IIR رو که مثلا واسه uart0 میشه LPC_UART0->IIR رو باید بخونی تا وقفه فعلی پاک شه
    و برنامه بتونه از وقفه فعلی خارج شه و واحد وقفه اماده برای وقفه بعدی شه
    همچنین با خوندن این رجیستر میتونی خطا رو هم تشخیص بدی و امکانات دیگه...
    ممنون از شما
    میشه یه مثال بزنید، آخه من با رجیستر های 1768 کار نکردم

  6. #4
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    پیش فرض

    بفرما
    کد:
    
    
    کد:
    unsigned int INTRUPT_ID = 0;
    char REC_BYTE = '\0';
    void UART0_IRQHandler(void)
    {
        INTRUPT_ID = LPC_UART0->IIR >>1;
        INTRUPT_ID = INTRUPT_ID & 7;
        if(INTRUPT_ID==2)
        {
            REC_BYTE = LPC_UART0->RBR;
       }
    }

    همون طور که مشخصه با شیفت کردن بیت صفر نادیده گرفته میشه
    و بعد با and کردن بیتهای یک تا سه رو استخراج می کنه و بعد چک میکنه که بیتهای مذکور
    2 بود (که طبق یوزر مانول عدد 2 مربوط به این هست که یه بایت از پورت سریال با موفقیت دریافت و اماده هست) و بعد میخونه و تو متغییر REC_BYTE
    قرار میده

    ویرایش توسط pirozy : 22-08-2015 در ساعت 00:40

  7. تشکرها از این نوشته :


  8. #5
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2010
    نام
    علیرضا تاجیک
    نوشته ها
    28
    تشکر
    12
    تشکر شده 1 بار در 1 پست

    پیش فرض

    نقل قول نوشته اصلی توسط pirozy نمایش پست ها
    بفرما
    کد:
    
    
    کد:
    unsigned int INTRUPT_ID = 0;
    char REC_BYTE = '\0';
    void UART0_IRQHandler(void)
    {
        INTRUPT_ID = LPC_UART0->IIR >>1;
        INTRUPT_ID = INTRUPT_ID & 7;
        if(INTRUPT_ID==2)
        {
            REC_BYTE = LPC_UART0->RBR;
       }
    }

    همون طور که مشخصه با شیفت کردن بیت صفر نادیده گرفته میشه
    و بعد با and کردن بیتهای یک تا سه رو استخراج می کنه و بعد چک میکنه که بیتهای مذکور
    2 بود (که طبق یوزر مانول عدد 2 مربوط به این هست که یه بایت از پورت سریال با موفقیت دریافت و اماده هست) و بعد میخونه و تو متغییر REC_BYTE
    قرار میده

    ممنون از راهنمایی
    ولی متاسفانه جواب نداد
    نمیدونم چرا اینطوری شد، هر جور به برنامه های دیگه هم دقت میکنم مثل همین چیزی هست که من نوشتم
    با این تفاوت که برای اون ها کار میکنه ولی برای من نه!!!
    من پروژه خودم اینجا قرار میدم تا اگر توستان تمایل به کمک داشتن راحت تر باشن
    دانلود فایل Download Keil Project zip از آپلود آی آر
    ممنون
    ویرایش توسط infernal1990 : 22-08-2015 در ساعت 03:06

  9. #6
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    پیش فرض

    این و امتحان کن

    فايل هاي پيوست شده فايل هاي پيوست شده

  10. تشکرها از این نوشته :


  11. #7
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2010
    نام
    علیرضا تاجیک
    نوشته ها
    28
    تشکر
    12
    تشکر شده 1 بار در 1 پست

    پیش فرض

    نقل قول نوشته اصلی توسط pirozy نمایش پست ها
    این و امتحان کن

    ممنون از وقتی که قرار دادید ولی جواب نداد!!!
    نمیدونم چرا از وقفه خارج نمیشه!!!
    واقعا در عجبم

  12. #8
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2010
    نام
    علیرضا تاجیک
    نوشته ها
    28
    تشکر
    12
    تشکر شده 1 بار در 1 پست

    پیش فرض

    من همه مدل برنامه دیباگ کردم، قطعا و یقیناً مشکل اصلی من این هست که وقتی برنامه وارد وقفه میشه و عملیات های خواسته انجام میده، توی مرحله آخر که باید مقدار u0 از صفر به یک تغییر بده این اتفاق نمیافته و به همین دلیل هم برنامه از وقفه خارج نمیشه!!!
    لطفا راهنمایی کنید

موضوعات مشابه

  1. پاسخ: 9
    آخرين نوشته: 17-08-2016, 18:43
  2. [خبر] نرم افزار ترمینال برای پورت سریال
    توسط sina_kalani در انجمن دانلود نرم افزارهای برق و الکترونیک
    پاسخ: 1
    آخرين نوشته: 09-12-2013, 09:28
  3. خرابی خود به خود پورت سریال!
    توسط mzarkoob در انجمن LPC series (NXP)
    پاسخ: 18
    آخرين نوشته: 07-12-2011, 00:32
  4. پورت سریال
    توسط safavism در انجمن AVR
    پاسخ: 7
    آخرين نوشته: 22-08-2011, 15:33

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •