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

موضوع: درخواست تحلیل کد به زبان سی برای

  1. #1
    کاربر دائمی
    تاریخ عضویت
    Nov 2011
    نوشته ها
    427
    تشکر
    218
    تشکر شده 128 بار در 102 پست

    Icon16 درخواست تحلیل کد به زبان c برای lpc arm

    با سلام

    من میخواستم بعضی قسمت های این کد که رتگی میکنم رو یکی از دوستان واسم توضیح بدند. خیلی ممنون میشم
    کد:
    #include <LPC21xx.H> /* LPC21xx definitions */ void PWM0_isr(void) __irq آبا __irq معنی خاصی داره؟ { PWMIR |= 0x00000001; /* Clear match0 interrupt */ چرا رجیستر PWMIR رو با اوت عدد OR میکته؟ VICVectAddr = 0x00000000; این خط چه کار میکنه؟ } void poll_ADC (void) { /* Get ADC Value and set PWM */ unsigned int val; static unsigned int oldval; ADCR |= 0x01000000; /* Start A/D Conversion */ do { val = ADDR; /* Read A/D Data Register */ } while ((val & 0x80000000) == 0); /* Wait for end of A/D Conversion */ دستور while دقیقا چه چیزی رو چک میکنه و ترجمه عیارت داخلش چطور میشه؟ ADCR &= ~0x01000000; /* Stop A/D Conversion */ val = (val >> 6) & 0x03FF; /* Extract AIN0 Value */ if ((val != oldval)) { PWMMR2 = val; PWMLER = 0x4; /* Enable Shadow latch */ oldval = val; } } void init_PWM (void) { VICVectAddr8 = (unsigned)PWM0_isr; /* Set the PWM ISR vector address */ VICVectCntl8 = 0x00000028; /* Set channel */ VICIntEnable = 0x00000100; /* Enable the interrupt */ PINSEL0 |= 0x00028008; /* Enable P0.7 and P0.1 as PWM output */ این دستور چطور 2تا پینی که توضیح داده رو خروجی میکنه؟ PWMPR = 0x00000000; /* Load prescaler */ PWMPCR = 0x00000C0C; /* PWM channel 2 & 3 double edge control, output enabled */ PWMMCR = 0x00000003; /* On match with timer reset the counter */ PWMMR0 = 0x400; /* set cycle rate to sixteen ticks */ PWMMR1 = 0; /* set rising edge of PWM2 to 100 ticks */ PWMMR2 = 0x200; /* set falling edge of PWM2 to 200 ticks */ PWMMR3 = 0x400; /* set rising edge of PWM3 to 100 ticks */ PWMLER = 0xF; /* enable shadow latch for match 1 - 3 */ PWMTCR = 0x00000002; /* Reset counter and prescaler */ PWMTCR = 0x00000009; /* enable counter and PWM, release counter from reset */ } int main (void) { IODIR1 = 0x00FF0000; /* P1.16..23 defined as Outputs */ ADCR = 0x01200401; /* Setup A/D: 10-bit AIN0 @ 3MHz */ init_PWM(); while (1) { /* Loop forever */ poll_ADC(); } }
    من دلیل این چند مورد که نوشتم رو متوجه نمیشم در برنامه های ARM
    پیشاپیش از راهنماییتان ممنون
    ویرایش توسط alamdar : 26-10-2012 در ساعت 17:34

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

  3. #2
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    سلام
    or میشه تا قبلا اگه بیتهای دیگه مقداری داشتند تغییر نکنه
    VICvectAddدر pdf های آموزش آقای تروشه هست.
    while ((val & 0x80000000) == 0) همان طور که نوشته چک میشه تا وقتی عملیات تبدیل انجام شد خواندن از رجیستر انجام میشه
    در مورد pinsell هم به صورت باینری خودتون یکی یکی پایه ها رو قرار بدید همین عدد بدست میاد ....

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

  1. پاسخ: 7
    آخرين نوشته: 23-04-2013, 00:43
  2. کسی میتونه این مدارو درست کنه
    توسط Parsa-m در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 1
    آخرين نوشته: 12-02-2013, 22:38
  3. روسی کسی هست بلد باشه؟
    توسط AnonyJavad در انجمن گفت و گوي آزاد
    پاسخ: 2
    آخرين نوشته: 30-11-2012, 17:11
  4. درخواست یک نوع آی سی دیکودر
    توسط khoshkharam در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 1
    آخرين نوشته: 15-11-2009, 15:22

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

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