اطلاعیه

Collapse
No announcement yet.

تابع delay دقیق برای keil وجود دارد ؟

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

    تابع delay دقیق برای keil وجود دارد ؟

    سلام
    من نمی خواستم یه حلقه ی for برای تاخیر هام درست کنم خواستم ببینم ایا تابع تاخیری هست که به طور دقیق یه مقدار زمان مشخص تاخیر ایجاد کنه ؟ مثل delay_ms در کدویژن


    #2
    پاسخ : تابع delay دقیق برای keil وجود دارد ؟

    تا جایی که میدونم متاسفانه خیر . وجود نداره .
    دقیق ترین روش اینه که شما محاسبات مربوط به pll رو خودتون انجام بدید و با همون for تاخیر موردنظرتون رو ایجاد کنید .

    دیدگاه


      #3
      پاسخ : تابع delay دقیق برای keil وجود دارد ؟

      نوشته اصلی توسط علی آقایی فر
      سلام
      من نمی خواستم یه حلقه ی for برای تاخیر هام درست کنم خواستم ببینم ایا تابع تاخیری هست که به طور دقیق یه مقدار زمان مشخص تاخیر ایجاد کنه ؟ مثل delay_ms در کدویژن
      2تا راه دارید
      یکی اینکه با یه تایمر زمان دقیق رو ایجاد کنید .
      دیگری هم اینه که یه تیکه کد اسمبلی بنویسید که مثلا 10 تا tstate زمان بخواد (به instruction set مراجعه کنید ) و طبق اون زمان دلخواهتون رو استفاده کنید .

      تا جایی که میدونم قبلا یه هدر برای این تاخیر ها نوشته شده بود . تو شماره 2 مجله کویر اگه اشتباه نکنم .(من از اون استفاده نکردم برای همین نمیدونم چقدر دقیقه)

      دیدگاه


        #4
        پاسخ : تابع delay دقیق برای keil وجود دارد ؟

        من اون هدر فایل WAIT واسه سایت کویر رو دیده بودم. با FOR نوشته بودن. واسه برد خودشون تنظیم کرده بودن.

        دیدگاه


          #5
          پاسخ : تابع delay دقیق برای keil وجود دارد ؟

          من اون هدر فایل WAIT واسه سایت کویر رو دیده بودم. با FOR نوشته بودن. واسه برد خودشون تنظیم کرده بودن.

          دیدگاه


            #6
            پاسخ : تابع delay دقیق برای keil وجود دارد ؟

            من هم دیدم ولی ربطی به برد خودشون نداشت ها

            سورسش برای کریستال 18 مگاهرتز که برای پروگرام از طریق usb هست تنظیم کرده بودن
            لازم بود برای کریستا لهای مختلف مقدار اون رو تغییر بدیم خودمون .

            یعنی بهتره توابعشون رو اصلاح کنیم و در ورودی تابعی مثل delay_ms علاوه بر زمان یه ورودی دیگه داشته باشه به اسم فرکانس کریستال
            یعنی زمان و فرکانس رو می دیم و بر مبنای اون تاخیر ایجاد بشه.

            دیدگاه


              #7
              پاسخ : تابع delay دقیق برای keil وجود دارد ؟

              تو سورس های قدیمی nxp یک سورس هست که با یک کد اسمبلی wait میکنه فرکانس pll رو هم خودش حساب میکنه ولی از هدر های استاندارد خودش باید استفاده بشه.

              #ifndef __delay_h_included
              #define __delay_h_included

              /*
              * File : delay.h
              * Title : Delay Routines.
              *
              * Revised : 07/Sep/2008
              * Created : 25/Jan/2006
              * Version : 1.1.0
              * Editor Tabs : 3
              * Tool-Chain : arm-elf-gcc 4.0.1
              *
              * MCU : Philips LPC2xxx (32-Bits ARM7TDMI-S Core)
              *
              * Author : Boris Estudiez <devel@slicetex.com.ar>
              * Website : www.slicetex.com.ar
              * Licence : GPL
              *
              * Description : Inline functions and macros for accurate delays.
              *
              * Note[1] : No timers or interruptions used.
              * Note[2] : MAM should be Fully Enabled for CCLK > 20 MHz.
              *
              * History : Originally relased for my LPC-STXLIB library.
              *
              * Changelog :
              *
              * v1.1.0 : Fixed inline argument list and constants by
              * Andreas Pretzsch <andypre@gmx.de>
              *
              * (C) Copyright by slicetex electronics, 2001-2008.
              */

              #ifndef __DELAY_H__
              #define __DELAY_H__

              // ---------------------------------------------------------------------------
              // HEADERS
              // ---------------------------------------------------------------------------

              #include "target.h"

              // ---------------------------------------------------------------------------
              // CONFIGURATION
              //
              // Setup FOSC and PLL_MUL defines according to your system.
              //
              // For example, LPC2138, XTAL = 12000000 Hz and PLL_multiplier = 5.
              // CPU clock will be 60 MHz.
              // ---------------------------------------------------------------------------

              //#define FOSC (12000000) // Specify Oscilator Output Frequency.
              //#define PLL_MUL (4) // Specify PLL Multiplier.

              //#define CCLK (FOSC * PLL_MUL) // CPU Clock Frequency.

              //#define CCLK Fcclk

              // ---------------------------------------------------------------------------
              // CPU CYCLES DEFINES
              //
              // ARM7TDMI-S cycles per micro-second, mili-second, second, etc
              // Remember: 1 clock = 1 cpu_cycle on this architecture.
              // ---------------------------------------------------------------------------

              #define CPU_CLOCKS_PER_CYCLE (1)
              #define CPU_CYCLES_PER_SEC (CCLK/CPU_CLOCKS_PER_CYCLE)
              #define CPU_CYCLES_PER_US (CPU_CYCLES_PER_SEC/1000000.0)
              #define CPU_CYCLES_PER_MS (CPU_CYCLES_PER_SEC/1000.0)

              // ---------------------------------------------------------------------------
              // CONSTANTS AND COMPUTATIONS
              // ---------------------------------------------------------------------------

              // Define cycles per loop for each delay function:

              #define DELAY4_CYCLES_PER_LOOP (4)

              // Compute how many CPU clycles per US, MS and Second fix into one
              // delay loop for each delay function.

              #define DELAY4_LOOPS_PER_US (CPU_CYCLES_PER_US/DELAY4_CYCLES_PER_LOOP)
              #define DELAY4_LOOPS_PER_MS (CPU_CYCLES_PER_MS/DELAY4_CYCLES_PER_LOOP)
              #define DELAY4_LOOPS_PER_SEC (CPU_CYCLES_PER_SEC/DELAY4_CYCLES_PER_LOOP)

              // ---------------------------------------------------------------------------
              // MACROS
              // ---------------------------------------------------------------------------

              #define US_TICKS(us) ((unsigned int)((us) * (DELAY4_LOOPS_PER_US)))
              #define MS_TICKS(ms) ((unsigned int)((ms) * (DELAY4_LOOPS_PER_MS)))

              // ---------------------------------------------------------------------------
              // DelayUS() : Delay in Micro-Seconds.
              // Max Delay : MAX_UINT32_T/DELAY4_LOOPS_PER_US [micro-seconds]
              // Error : 2 cycles (at least) + MAMTIM cycles (if CCLK > 20 Mhz).
              // ---------------------------------------------------------------------------

              #define DelayUS(us) Delay4( ((unsigned int) ( (us) * (DELAY4_LOOPS_PER_US) )) )

              // ---------------------------------------------------------------------------
              // DelayMS() : Delay in Mili-Seconds.
              // Max Delay : MAX_UINT32_T/DELAY4_LOOPS_PER_MS [mili-seconds]
              // Error : 2 cycles (at least) + MAMTIM cycles (if CCLK > 20 Mhz).
              // ---------------------------------------------------------------------------

              #define _DelayMS(ms) Delay4( ((unsigned int) ( (ms) * (DELAY4_LOOPS_PER_MS) )) )

              // ---------------------------------------------------------------------------
              // DelayS() : Delay in Seconds.
              // Max Delay : MAX_UINT32_T/(DELAY4_LOOPS_PER_SEC) [seconds]
              // Error : 2 cycles (at least) + MAMTIM cycles (if CCLK > 20 Mhz).
              // ---------------------------------------------------------------------------

              #define _DelayS(s) Delay4( ((unsigned int) ( (s) * (DELAY4_LOOPS_PER_SEC) )) )

              // ---------------------------------------------------------------------------
              // INLINE FUNCTIONS
              // ---------------------------------------------------------------------------

              // ************************************************** *************************
              // Delay4(): Delay 4 cycles per loop.
              //
              // INPUT: loops = number of loops.
              //
              // Total Delay Cycles = 4 * loops - 2.
              // Max Delay Cycles = 4 * (2^32 - 1) - 2 = 17,179,869,179 (wow!!!)
              //
              // Example:
              // If CCLK = 60 Mhz, then 1 cycle (clock) = ~ 16.666 nS.
              // Max Delay Time = (Max Delay Cycles) * 16.666 nS = 286.319 Sec. = 4.77 Min.
              // ************************************************** *************************

              static __inline void Delay4(unsigned int loops)
              {
              loop:
              __asm
              {
              subs loops,loops,#1 //1 cycle
              bne loop //3 cycles (true), 1 cycle (false)
              }
              }


              // ---------------------------------------------------------------------------

              #endif

              // ---------------------------------------------------------------------------
              // END OF FILE
              // ---------------------------------------------------------------------------



              #endif//__delay_h_included

              دیدگاه

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