اطلاعیه

Collapse
No announcement yet.

آموزش DSP های سری TI با زبان ساده

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

    آموزش DSP های سری TI با زبان ساده

    با سلام و خسته نباشید
    چند وقت پیش در قسمت
    http://www.eca.ir/forum2/index.php?topic=79877
    آموزش نرم افزار Allegro را نوشتم که مورد استقبال قرار گرفته است از این رو تصمیم بر آن گرفتم که آموزش DSP های شرکت TI را هم به صورت تصویری بنویسم.

    معرفی تراشه های DSP

    پردازنده های DSP شبیه یک میکروکنترلر (مانند ARM) کار می کنند و کد نویسی آنها به زبان C و اسمبلی است با این تفاوت که جهت پردازش سیگنال های دیجیتال بهینه تر شده اند. سرعت این پردازنده ها بسیار زیاد می باشد. اولین سری DSP ساخت شرکت Texas Instruments در اواخر دهه ی 1970 با سرعت 10MHz وارد بازار شد. قدرت این پردازنده در حل یک تحلیل فوریه FFT به قدری بود که 20 سال بعد پردازنده ی پنتیوم با سرعت 200MHz می توانست این کار را انجام دهد.

    می توان علاوه بر پردازش سیگنال با این نوع پردازنده، از آن به عنوان یک میکروکنترلر پرسرعت استفاده نمود (سرعت این پردازنده ها با نسخه های موجود در بازار بیش از 150 مگاهرتز تا چند گیگاهرتز است. بعضی از سری های این پردازنده می توانند تا 8 برابر فرکانس کاریشان کار نمایند مثلا اگر فرکانس آنها 1GHz باشد، سرعت اجرای دستورات 8GIPS میلیارد دستور خواهد بود).

    معمولا پردازش سیگنال با FPGA و DSP انجام می شود. اما به دلیل قیمت بسیار بالای FPGA در پردازش های سبک از DSP استفاده می شود. برای مقایسه یک DSP با قیمت 100 هزار تومان می تواند کاری را انجام دهد که یک FPGA با قیمت 2 میلیون تومان آن را انجام می دهد. البته FPGA به دلیل پردازش موازی قابلیت های بسیاری به طراح می دهد ولی برای پردازش های سبک DSP بهترین است.

    کار کردن با این تراشه ها کمی سخت است (ولی سخت تر از FPGA نیست) زیرا:

    1) پایه های این تراشه ها بسیار آسیب پذیرند و با اتصال کوتاه شدن یا اضافه ی ولتاژ (معمولا بیش از 3.3 ولت) آسیب می بینند
    2) نرم افزار مورد استفاده ی آنها Code Composer Studio است که یک نرم افزار حرفه ای است و کار کردن با آن سخت است
    3) منابع آموزشی خوبی برای آنها وجود ندارد و حتی در کلاس های خصوصی نیز فقط تئوری کار با کامپایلر گفته می شود نه کار با پردازنده
    4) برای شروع یادگیری مستندات (فایلهای PDF) بسیاری وجود دارد و این باعث گیج شدن برنامه نویس می شود
    5) به نظر من شخصی که DSP کار می کند باید به یک میکروکنترلر تسلط داشته باشد. چون نه کتاب خوبی برای این پردازنده ها وجود دارد و نه در اینترنت مطلب خوبی. از این گذشته سایت تگزاس اینسترومنت ایران را تحریم کرده! و باید با فیل....... وارد این سایت بشیم تا مستندات را دانلود کنیم!

    6) إ¾إ¾إ¾پروگرمر JTAG این پردازنده ها در دو مدل XDS510 و XDS560 ساخته می شوند که مدل اصل آنها 6 میلیون و مدل چینی XDS510 حدود 500 هزارتومان (قیمت های سال 93) قیمت دارند. البته می توان از طریق پورت Serial یا USB مستقیما بدون نیاز به پروگرمر این تراشه ها را برنامه ریزی کرد ولی داشتن یک پروگرمر JTAG برای تحلیل خط به خط برنامه به حل مشکلات برنامه کمک می کند (البته افراد حرفه ای نیاز به این نوع پروگرمر های گران قیمت ندارند).

    اما آموزشی که در این سایت قرار داده می شود، مشکلات فوق را تا حدی حل کرده است و در کمتر سایت اینترنتی آموزشی به این شکل برای DSP قرار داده می شود و حکم سرنخ را برای آنهایی که می خواهند یادگیری DSP را شروع کنند، دارد.

    لازم به ذکر است که پس از یادگیری این پردازنده به دلیل اینکه با زبان C برای آن برنامه می نویسیم، برنامه نویسی بسیار راحت شده و درد سرهای کد VHDL یا Verilog در FPGA و زمان طولانی سنتز را نخواهد داشت.میکروکنترلر هایی با عنوان OMAP ساخت شرکت TI هستند که جزء کم مصرف ترین میکروکنترلر ها هستند و برنامه نویسی آنها در Code Composer Studio انجام می شود. این میکروکنترلر ها در اکثر گوشی های همراه بکار می روند.

    امروز اینترنت کمی مشکل داشت با برطرف شدن مشکل عکس ها و آموزش را قرار می دهم
    { خلاف قوانین - پاک شد }
    برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
    آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
    آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

    #2
    پاسخ : آموزش DSP های سری TI با زبان ساده

    آموزشی که در این سایت قرار میگیرد با نرم افزار Code Composer Studio V3.3 است. و برای پردازنده های DSP سری 2000 شرکت TI مخصوصا TMS320F2812. ورژن 5 این نرم افزار هم ساخته شده است که کمی تغییر کرده است ولی برای کار کردن با این ورژن نیازی به تغییرات زیاد در کد های نوشته شده نیست که اگر وقت کنم (مانند همین ایام نوروز) آموزش آن را هم مینویسم همچنین آموزش سری 5000 از DSP های TI.
    خب بریم سر اصل مطلب
    قبل از شروع آموزش باید یک فایل را از سایت www.ti.com دانلود کنید. بدون داشتن این فایل بسیار سخت است که با DSP کار کنید. کافی است که وارد این سایت بشوید و عبارت زیر را جستجو کنید:
    281x C/C++ Header Files and Peripheral Examples

    بعد از جستجو باید یک فایل Zip را دانلود کنید و بعد از باز کزدن آن باید شکلی شبیه شکل زیر باشد:
    [img height=252 width=261]http://www.lpcarm.ir/images/DSP000.png[/img]
    در این فایل Zip یک فایل PDF و یک فایل اجرایی قرار دارد. فایل اجرایی را نصب کنید. پس از نصب به پوشه ی نصب شده بروید معمولا C:/tidcs در این پوشه چند فایل وجود دارد:
    DSP281x_common: شامل توابع نوشته شده و نام رجیستر های بخش های مختلف DSP است

    DSP281x_headers: شامل کتابخانه های موجود برای پوشه ی خط بالا است

    DSP281x_examples: شامل مثال هایی برای کار با بخش های مختلف DSP است

    doc: راهنمای کار با توابع فوق است. خب نام این پوشه ها را خوب بخاطر بسپارید.


    ابتدا این نرم افزار را نصب کنید. نصب این نرم افزار بسیار ساده است و نیازی به Crack ندارد (به زودی فایل نصب این نرم افزار را در اینترنت پلود می کنم)
    بعد از نصب دو آیکون طبق شکل زیر بر روی صفحه ی دسکتاپ دیده می شود:
    [img height=146 width=73]http://www.lpcarm.ir/images/DSP001.png[/img]
    ابتدا باید وارد Setup CCStudio v3.3 بشوید تا مدل DSP را انتخاب کنید. این فایل را باز کنید
    در صفحه ی باز شده طبق شکل زیر در قسمت Family مدل C28xx را انتخاب کرده و در قسمت Platform گزینه ی Simulator را انتخاب کنید. سایر گزینه ها برای پروگرمر JTAG می باشند. سپس F28xx Simulator Tutorial را انتخاب کرده (می توانید برای مدل 2812 گزینه ی F2812 Device Simulator را انتخاب نمایید) و در پایین صفحه بر روی Add کلیک کنید
    [img height=365 width=561]http://www.lpcarm.ir/images/DSP002.png[/img]
    سپس طبق شکل زیر بر روی کلید Save and Quit کلیک کرده و yes را فشار دهید تا نرم افزار CCS اجرا شود.
    [img height=365 width=561]http://www.lpcarm.ir/images/DSP003.png[/img]
    هنگام اجرای نرم افزار شکل زیر دیده می شود:
    [img height=350 width=600]http://www.lpcarm.ir/images/DSP004.png[/img]
    بعد از با شدن نرم افزار وارد منوی Project شده و New را انتخاب کنید.
    [img height=91 width=256]http://www.lpcarm.ir/images/DSP005.png[/img]
    در صفحه ی باز شده محل ذخیره ی پروژه را طبق شکل زیر تنظیم کنید و روی ok کلیک کنید.
    [img height=261 width=441]http://www.lpcarm.ir/images/DSP006.png[/img]
    سپس برای تنظیم پروژه وارد منوی Project و سپس Build Options بشوید.
    [img height=338 width=220]http://www.lpcarm.ir/images/DSP007.png[/img]
    در صفحه ی باز شده وارد Compiler>Advanced شده و تیک Large Memory Model که در حالتی استفاده می شود که حجم کد شما بیش از 64KB باشد را بردارید.
    [img height=485 width=427]http://www.lpcarm.ir/images/DSP008.png[/img]
    سپس وارد Compiler>Preprocessor شده و در قسمت Include Search Path باید آدرس زیر را وارد کنید
    Proj_dir)\DSP281x_headers\include,$(Proj_dir)\DSP2 81x_Common\include)$
    این دو آدرس همان فایل هایی که در اول آموزش از سایت ti.com دانلود کردید یعنی دو پوشه ی
    DSP281x_common

    DSP281x_headers
    که باید این دو پوشه را در محل ذخیره ی پروژه کپی کنید و در نهایت در صفحه ی زیر کلید ok را بزنید.
    [img height=485 width=427]http://www.lpcarm.ir/images/DSP009.png[/img]
    بعد از انجام این کار باید یک کتابخانه را به برنامه اضافه نمایید. این کتابخانه دستورات از قبل نوشته شده ای می باشد که برای زبان C اضافه کردن آن الزامی است. این کتابخانه در مسیر زیر قرار دارد:
    C:\CCStudio_v3.3\C2000\cgtools\lib\rts2800.lib
    آن را مطابق شکل زیر با راست کلیک کردن در سمت چپ و انتخاب گزینه ی Add Files به پروژه اضافه نمایید.
    [img height=268 width=303]http://www.lpcarm.ir/images/DSP010.png[/img]
    [img height=271 width=419]http://www.lpcarm.ir/images/DSP011.png[/img]
    نکته: بجای انجام این کار می توانستید وارد منوی Project>Build Options بشوید
    [img height=338 width=220]http://www.lpcarm.ir/images/DSP007.png[/img]
    و طبق شکل زیر وارد Linker>Libraries شده و در قسمت Incl. Libraries نام rts2800.lib را تایپ کنید.
    [img height=485 width=427]http://www.lpcarm.ir/images/DSP012.png[/img]
    همچنین وارد Linker>Basic شده و اندازه ی حافظه ی Stack را وارد نمایید (این حافظه متغیر های محلی و آدرس توابع وقفه را در خود نگه داری می کند). در صورت عدم تنظیم مقدار پیش فرض آن 0x400 است
    [img height=485 width=427]http://www.lpcarm.ir/images/DSP013.png[/img]
    مطابق شکل زیر با راست کلیک کردن در سمت چپ و انتخاب گزینه ی Add Files باید فایل های موجود در پوشه ی Source در دو پوشه ی

    DSP281x_common

    DSP281x_headers
    را به برنامه اضافه نمایید.
    [img height=268 width=303]http://www.lpcarm.ir/images/DSP010.png[/img]
    شکل زیر آدرس این پوشه را در پوشه ی DSP281x_Common نشان می دهد.
    [img height=297 width=427]http://www.lpcarm.ir/images/DSP014.png[/img]
    فقط باید دقت کنید مطابق شکل زیر در قسمت File Of Types گزینه ی All Files انتخاب شده باشد. تمام این فایل ها را به پروژه اضافه کنید.
    [img height=301 width=428]http://www.lpcarm.ir/images/DSP015.png[/img]
    بعد از اضافه شدن این فایل ها باید دو فایل با نام DSP281x_SWPrioritized را حذف کنید. طبق شکل زیر
    [img height=399 width=343]http://www.lpcarm.ir/images/DSP016.png[/img]
    حال باید فایل Command را به پروژه اضافه کنیم. در ادامه در مورد این فایل بیشتر توضیح می دهم. در پوشه ی cmd در دو پوشه ی
    DSP281x_common

    DSP281x_headers
    این فایل وجود دارد. طبق شکل های زیر دو فایل زیر را به پروژه اضافه کنید:
    F2812_EzDSP_RAM_lnk.cmd

    DSP281x_Headers_nonBIOS.cmd
    [img height=382 width=430]http://www.lpcarm.ir/images/DSP017.png[/img]
    در شکل بالا فایل F2812_XintBoot.cmd مخصوص خواندن کد های برنامه از حافظه ی خارجی و فایل F2812.cmd مخصوص خواندن کد های نوشته شده در حافظه ی دائم برنامه و فایل F2812_EzDSO_RAM_lnk.cmd مخصوص خواندن کد های نوشته شده در حافظه ی RAM است. یعنی DSP می تواند کد های برنامه را از حافظه ی RAM بخواند و اجرا کند یا از حافظه ی Flash داخلی یا از حافظه ی Flash خارجی که ما فعلا اجرای کدها را از RAM انتخاب می کنیم. در این مورد بیشتر توضیح خواهم داد.
    [img height=301 width=428]http://www.lpcarm.ir/images/DSP018.png[/img]
    شکل زیر قسمتی از محتویات فایل DSP281x_Headers_nonBIOS.cmd را نشان می دهد.
    [img height=319 width=519]http://www.lpcarm.ir/images/DSP019.png[/img]
    در شکل فوق آدرس GPIOMUX که برابر 0x70C0 به طول 32 بایت (20 هگز) و GPIODAT که برابر 0x70E0 به طول 32 بایت است را بخاطر بسپارید که بعدا به درد می خورد.
    در کل در فایل DSP281x_Headers_nonBIOS.cmd آدرس تمامی رجیستر های DSP مشخص شده است (مانند رجیستر های ADC، SCI (UART)، SPI و غیره
    در فایل F2812_EzDSP_RAM_lnk.cmd همانطور که در بالا گفته شد محل ذخیره ی برنامه در حافظه ی DSP مشخص می شود که بعدا در مورد آن صحبت می کنم.
    حال تنظیم نرم افزار CCS به پایان رسیده است و می توانیم در این نرم افزار کد بنویسیم. برای این کار وارد منوی File و New بشوید.
    [img height=142 width=105]http://www.lpcarm.ir/images/DSP020.png[/img]
    سپس وارد منوی File شده و Save را انتخاب کنید و فایل را طبق شکل زیر با نام main.c ذخیره کنید.
    [img height=301 width=428]http://www.lpcarm.ir/images/DSP021.png[/img]
    در سمت چپ نرم افزار کلید راست کرده و با انتخاب add Flies فایل Main.c را به برنامه اضافه نمایید.
    [img height=268 width=303]http://www.lpcarm.ir/images/DSP010.png[/img]
    سپس کد تصویر زیر (که در فایل پیوست موجود است) را در این فایل کپی کنید.
    [img height=495 width=416]http://www.lpcarm.ir/images/DSP022.png[/img]
    فایل را ذخیره کنید. سپس وارد منوی Project>Save بشوید تا پروژه هم ذخیره شود.
    [img height=158 width=224]http://www.lpcarm.ir/images/DSP023.png[/img]
    حال نوبت که کامپایل برنامه رسیده است. وارد منوی Project بشوید و Build را کلیک کنید (دقت کنید با هربار انتخاب Build فقط فایل های تغییر کرده کامپایل می شوند در حالی که با انتخاب Build All تمامی فایل ها از اول کامپایل می شوند. بدیهی است که سرعت Build بسیار بیشتر از Build All است (البته در مرحله ی اول مانند هم هستند)).
    [img height=273 width=224]http://www.lpcarm.ir/images/DSP024.png[/img]
    بعد از کامپایل 3 هشدار دیده می شود که به دلیل ننوشتن سه خط در فایل cmd ایجاد شده است که این هشدار ها مشکلی ایجاد نمی کنند:
    [img height=52 width=348]http://www.lpcarm.ir/images/DSP025.png[/img]
    در این قسمت شما موفق شدید یک LED را با DSP روشن و خاموش نمایید که باید برنامه ی Main را در ادامه توضیح بدهم.

    { خلاف قوانین - پاک شد }
    برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
    آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
    آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

    دیدگاه


      #3
      پاسخ : آموزش DSP های سری TI با زبان ساده

      اگر یادتان باشد در اول آموزش گفتم که مستندات زیادی برای کار با DSP وجود دارند. قبل از توضیح برنامه اشاره ای به این مستندات می کنم. تصویر زیر قسمتی از دیتاشیت DSP مدل 2812 است. نام دقیق این دیتاشیت TMS320F2812 Data Manual است.
      [img height=684 width=563]http://www.lpcarm.ir/images/DSP026.png[/img]
      در تصویر فوق لیست مستندات مربوطه ارائه شده است. مثلا برای کارکردن با SPI در این پردازنده باید رجیستر های SPI را مقدار دهی نماییم. این رجیستر ها همانطور که در شکل بالا نشان داده است، در فایل SPRU059.PDF هستند که می توان این فایل را از سایت www.ti.com دانلود نمود یا اینکه در محل نصب نرم افزار به آدرس پیش فرض C:\CCStudio_v3.3\docs\PDF رفته و این فایل را باز کنیم. یکی از فایل های بسیار مهمی که برای کار با DSP لازم است و به نوعی با همه ی قسمت ها در ارتباط است، فایل SPRU078.PDF می باشد. این فایل در واقع رجیستر های کنترل کل DSP را توضیح داده است و نام آن System Control and Interrupts می باشد. در این فایل طریقه ی کنترل IO ها هم گفته شده است. در مورد این فایل کمی توضیح می دهم.
      [img height=270 width=447]http://www.lpcarm.ir/images/DSP027.png[/img]
      در شکل بالا فایل SPRU078 را در پوشه ی نصب نرم افزار مشاهده می کنید.
      در شکل زیر قسمتی از فایل SPRU078 یعنی صفحه ی 92 آن دیده می شود:
      [img height=577 width=537]http://www.lpcarm.ir/images/DSP028.png[/img]
      اگر یادتان باشد گفتم که آدرس 0x70C0 مربوط به GPIOMUX و آدرس 0x70E0 مربوط به GPIODAT است. حال این سوال مطرح است که از کجا آین آدرس ها آمده اند. این آدرس ها را دیتاشیت DSP مشخص کرده است. یک بار دیگر به شکل بالا نگاه کنید. در قسمت GPIO MUX Registers نوشته شده است:
      EALLOW Protected
      و در قسمت GPIO Data Registers نوشته شده است Not EALLOW Protected. این به این معنی است که برای مقدار دهی به رجیستر های GPIOMUX باید حتما دستور اسمبلی EALLOW نوشته شود. در برنامه ی زبان C در شکل زیر در خط 14 برنامه این دستور نوشته شده است و با نوشتن دستور اسمبلی EDIS دستور EALLOW را غیر فعال می کنیم
      دستور EALLOW به صورت زیر در زبان C تعریف شده است:
      ;("define EALLOW #asm(" EALLOW#
      ;("define EDIS #asm(" EDIS#
      در این صفحه برای مقدار دهی رجیستر های ADC یا وقفه های خارجی یا ... لازم نیست دستور اسمبلی EALLOW اجرا شود.
      [img height=495 width=416]http://www.lpcarm.ir/images/DSP022.png[/img]
      در شکل بالا در خط 10 برنامه دستور DINT وقفه ها را غیر فعال می کند (مانند cli در میکروکنترلر) (و دستور EINT وقفه ها را فعال می کند.)
      حال اجازه دهید در مورد دو رجیستر GPIOMUX و GPIODAT توضیح دهم این رجیستر ها در 4 خط از برنامه ی فوق بکار رفته اند و به صورت زیر نوشته شده اند:
      GpioMuxRegs.GPADIR.all=0xffff
      دستور فوق کل پایه های پورت A را خروجی می کند
      GpioMuxRegs.GPAMUX.all=0
      دستور فوق کل پایه های پورت A را به صورت IO انتخاب می کند. پایه های پورت A می توانند در حالت دیگری هم استفاده شوند
      GpioDataRegs.GPASET.all=0xffff
      این دستور تمامی پایه های پورت A را یک می کند
      GpioDataRegs.GPACLEAR.all=0xffff
      این دستور تمامی پایه های پورت A را صفر می کند
      ما در AVR برای خروجی کردن پایه ها می نوشتیم DDR یا برای صفر و یک کردن پایه ها می نوشتیم PORT اما در اینجا رجیستر کنترل IO ها بیشتر است و به صورت تخصصی تر بکار رفته اند. اجازه دهید فایل DSP281x_GPIO.h را بررسی کنیم. این فایل را طبق شکل زیر از پوشه ی Include پیدا کنید و آن را باز کنید.
      [img height=355 width=257]http://www.lpcarm.ir/images/DSP029.png[/img]
      در شکل زیر قسمتی از این فایل را مشاهده می کنید
      [img height=458 width=365]http://www.lpcarm.ir/images/DSP030.png[/img]
      همانطور که می بینید رجیستر GPAMUX هم به صورت بیتی و هم به صورت دو بایتی تعریف شده است و در انتها ی این فایل این رجیستر به صورت شکل زیر تعریف شده است:
      [img height=224 width=544]http://www.lpcarm.ir/images/DSP031.png[/img]
      یعتی برای دسترسی به رجیستر GPAMUX باید ابتدا بنویسیم
      GpioMuxRegs و بعد ار نوشتن آن یک نقطه "." قرار دهیم و بعد از آن هم در نرم افزار CCS پنجره ای باز می شود و می توانیم یکی از رجیستر های Mux را انتخاب کنیم که یکی از این رجیستر ها GPADIR و دیگری GPAMUX است. تا به اینجا متن به صورت شکل زیر تبدیل می شود:
      GpioMuxRegs.GPAMUX
      حال برای دسترسی به تمامی رجیستر 16 بیتی GPAMUX باید یک نقطه "." قرار داده و سپس all را بنویسیم. مانند شکل زیر
      GpioMuxRegs.GPAMUX.all
      و یا برای دسترسی بیتی این رجیستر (مثلا پورت A.0) کافی است بنویسیم (با توجه به دو شکل بالاتر):
      GpioMuxRegs.GPAMUX.PWM1_GPIOA0=value
      که بجای Value باید عدد نوشته شود. اگر صفر بنویسیم این پایه IO و اگز 1 بنویسیم این پایه در حالت PWM1 کار خواهد نمود. سایر رجیستر ها در DSP نیز به این شکل مقدار دهی می شوند.



      البته در سایر میکروکنترلر ها مانند AVR هم می توانیم ای کار را انجام دهیم. مثلا برای DDRA در AVR باید اینگونه بنویسیم. مثلا فرض کنید 4 پایه ی اول پورت A به موتور پله ای وصل شود و 2 پایه ی بعدی کنترل رله باشد و پایه ی بعدی کلید ON و پایه ی بعدی کلید OFF باشد. در این صورت داریم:
      typedef struct
      }
      ;char Motor:4
      ;char Relay:2
      ;char ON_K:1
      ;char OFF_K:1
      ;DDRA_BITS{

      (define DDRA_REG ((DDRA_BITS*)0x3A#
      در خط بالا عدد 0x3A آدرس DDRA در کل حافظه می باشد که از انتهای دیتاشیت AVR بدست آمده است. حال برای مقدار دهی به DDRA به این روش داریم:
      ;DDRA_REG->Motor=0xF
      ;DDRA_REG->Relay=0b11
      ;DDRA_REG->ON_K=0
      ;DDRA_REG->OFF_K=0
      در خط فوق پایه های موتور و رله خروجی و پایه های کلید ها ورودی می شوند.


      در برنامه ی DSP فوق تابع delay با اجرای 600000 دستور تاخیری را ایجاد می نماید.
      همچنین تابع InitSysCtrl فرکانس سیستم و PLL را تنظیم می کند. این تابع را در جستجوی CCS که به نام Find In File است جستجو کنید تا پیدا شود. برای DSP سه منبع مهم کلاک وجود دارد یکی کلاک CPU است که می تواند از خروجی PLL گرفته شود. دیگری LOPCLK و دیگری HIPCLK است. کلاک LOPCLK برای ماژول هایی با سرعت پایین مانند SCI یا همان UART و SPI و دیگری برای ادوات پرسرعت مانند CAN یا USB یا .... مقدار تنظیمی این کلاک ها را در فایل SPRU078 جستجو نمایید.

      تابع InitPieCtrl جهت فعال کردن کلاک قسمت های مختلف DSP و تابع InitPieVectTable جهت تنظیم بردار های وقفه در DSP استفاده می شوند. دو رجیستر IER و IFR که در فایل SPRU078 توضیح داده شده اند برای کنترل وقفه های می باشند که صفر شده اند.

      خب توضیح برنامه تمام شد. حا برویم سراغ فایل F2812_EzDSP_RAM_lnk.cmd که گفتم محل ذخیره شدن کد های برنامه را در حافظه ی RAM مشخص می کند. شکل زیر قسمتی از این فایل را نشان می دهد.
      [img height=276 width=542]http://www.lpcarm.ir/images/DSP033.png[/img]
      در شکل بالا شروع کد (BEGIN) آدرس 0x3F8000 به طول 2 بایت، آدرس RESET در 0x3F8004 (این آدرس در فایل اصلی 0x3FFFC0 می باشد که غلط است (دلیلش را میگویم) و من خودم آن را تغییر داده ام) به طول 2 بایت و آدرس RAMH0 از 3F8008 به طول حدود 4KB می باشد (باید 8 تا از آن کم کنیم یعنی FF7 که در شکل اشتباها FFE است). در فایل TMS320F2812 Data Manual.PDF فضای حافظه ی داخلی DSP مدل 2812 را به صورت زیر کشیده است:
      [img height=752 width=410]http://www.lpcarm.ir/images/DSP034.png[/img]
      همانطور که مشاهده می کنید آدرس شروع RAMH0 برابر 0x3F8000 و آدرس شروع RAMM0 برابر 0x000000 می باشد. در آدرس 0x3FF000 کد 4 کیلو بایتی وجود دارد که توسط شرکت TI در این حافظه قرار دارد. این کد کد Boot است و با روشن شدن DSP این کد اجرا می شود و DSP را در یکی از شش حالت زیر قرار می دهد:
      [img height=291 width=784]http://www.lpcarm.ir/images/DSP043.png[/img]
      مد های Boot در DSP بستگی به چهار پایه ی GPIOF4، GPIOF12، FPIOF3 و GPIOF2 دارد که در شکل بالا دیده می شود. در حالتی که فقط پایه ی GPIOF3 در موقع روشن شدن DSP یک باشد، کد از حافظه ی RAMH0 شروع به اجرا می شود. به همین دلیل RESET را در فضای RAMH0 انتقال داده ام.
      در شکل بالا در حالت اول در شکل بالا برنامه از Flash داخلی اجرا می شود، در حالت دوم برنامه از حافظه ی EEPROM خارجی اجرا می شود، در حالت سوم BOOT از طریق UART است، حالت چهارم Boot از طریقRAMH0، حالت پنجم BOOT از حافظه ی OTP)One Time Programmable) که فقط یک بار قابل برنامه ریزی است و حالت ششم Boot از طریق پایه های پورت B. البته یک حالت هفتم هم وجود دارد و آن External Flash می باشد و آن هنگامی است که پایه ی MP/MC از DSP یک شود یعنی مد میکروپروسسور انتخاب شود. در این حالت DSP توانایی آدرس دهی حدود 2MB حافظه را دارد.
      خب حال باید چگونه برنامه را شبیه سازی نماییم. برای شبیه سازی DSP مدل 280x مانند TMS320F28027 می توان از نرم افزار Proteus که یک نرم افزار بسیار عالی است استفاده کرد (در انتها برنامه ای جهت کار با این مدل ها قرار می دهم که با نرم افزار Proteus کار می کند)
      حال برای شبیه سازی مدل 281x مانند TMS320F2812 فقط می توان از نرم افزار CCS استفاده نمود. برای این کار ابتدا وارد منوی File شده و Load Program را انتخاب نمایید.
      [img height=201 width=239]http://www.lpcarm.ir/images/DSP035.png[/img]
      و سپس آدرس فایل Blink_LED.out (که در پوشه ی Debug) قرار دارد را بدهید. (برای مدل های 280x که با نرم افزار پروتئوس شبیه سازی می شوند باید پسوند این فایل را از out به cof تغییر دهید با یک Rename ساده)
      [img height=301 width=428]http://www.lpcarm.ir/images/DSP036.png[/img]
      سپس صفحه ای مانند شکل زیر باز می شود:
      [img height=210 width=304]http://www.lpcarm.ir/images/DSP037.png[/img]
      در صفحه ی فوق کد کامپایل شده به زبان اسمبلی را نشان می دهد. این صفحه را ببندید و فایل Main.c را باز کنید و در قسمت نشان داده شده در شکل زیر راست کلیک کرده و Toggle Software Breakpoint را انتخاب نمایید.
      [img height=561 width=605]http://www.lpcarm.ir/images/DSP038.png[/img]
      سپس در سمت چپ صفحه گزینه ی نشان داده شده را بزنید (یا کلید F5)
      [img height=205 width=147]http://www.lpcarm.ir/images/DSP039.png[/img]
      بعد از آن باید فلش زرد رنگی کنار Breakpoint باشد. مطابق شکل زیر:
      [img height=299 width=287]http://www.lpcarm.ir/images/DSP040.png[/img]
      حال با فشردن کلید F10 و F11 می توان برنامه را خط به خط اجرا نمود. فرق این دو کلید با هم در این است که کلید F11 وارد توابع می شود ولی کلید F10 تابع را اجرا کرده و آن را د می کند.
      اگر در پنجره ی Setup نرم افزار CCS در قسمت Platform گزینه ی XDS510 یا XDS560 را انتخاب کرده باشید (مانند شکل زیر)
      [img height=365 width=561]http://www.lpcarm.ir/images/DSP002.png[/img]

      [img height=134 width=104]http://www.lpcarm.ir/images/DSP041.png[/img]
      در این صورت اگر وارد منوی GEL بشوید، میتوانید تمامی رجیستر ها را ببینید و آن ها را به صورت Realtime تغییر دهید. ولی در حالت simulator مانند شکل زیر این منو فقط دو گزینه دارد.
      [img height=138 width=244]http://www.lpcarm.ir/images/DSP042.png[/img]
      در شکل های زیر پایه های این مدل DSP یعنی 2812 وجود دارد. همانطور که مشاهده می کنید هر پورت حداکثر 16 پایه (و کمتر) دارد.
      [img height=442 width=343]http://www.lpcarm.ir/images/DSP044.png[/img]
      پایه های JTAG، نوسان ساز و ADC
      [img height=355 width=500]http://www.lpcarm.ir/images/DSP045.png[/img]
      پایه های پورت A و B
      [img height=336 width=494]http://www.lpcarm.ir/images/DSP046.png[/img]
      پایه های پورت D-E-F-G
      [img height=552 width=247]http://www.lpcarm.ir/images/DSP047.png[/img]
      پایه های مخصوص Flash خارجی (آدرس 19 بیتی و داده ی 16 بیتی)
      [img height=454 width=259]http://www.lpcarm.ir/images/DSP048.png[/img]
      پایه های تغذیه

      { خلاف قوانین - پاک شد }
      برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
      آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
      آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

      دیدگاه


        #4
        پاسخ : آموزش DSP های سری TI با زبان ساده

        تمام کد های زیر به صورت عملی تست شده اند و به درستی کار می کنند.
        دانلود سورس کد Blink_LED مخصوص سری 281x
        دانلود شماتیک برد eZDSP پر فروش ترین برد شرکت Texas Instruments
        دانلود سورس کد Blink_LED مخصوص سری 280x قابل شبیه سازی با پروتئوس
        دو فایل rar فوق را پس از خارج کردن از حالت فشرده دورن درایو C کپی کنید یعنی دو آدرس زیر
        C:/Blink_LED
        C:/Blink_LED2

        دانلود برنامه ی ارتباط با پورت سریال از طریق ماژول SCI-A با سرعت 300bps و فرکانس 30MHz ورودی

        دانلود برنامه ی خواندن کد ها از MMC به صورت SPI و ارسال آن از طریق ماژول SCI-A با سرعت 1200bps و فرکانس 30MHz ورودی

        اگر کدها دانلود نشد به دلیل مشکل پلود است که فردا ان شاء الله حلش میکنم
        { خلاف قوانین - پاک شد }
        برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
        آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
        آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

        دیدگاه


          #5
          پاسخ : آموزش DSP های سری TI با زبان ساده

          در ابتدا تشکر بابات آموزش
          تگزاس یه جورایی شده اتوپیایه من حالا شاید خیلی مبنایه فنی نداشته باشه .
          وقتی با freescale کار میکردم متوجه شدم که تگزاس حداقل از نظر داکیومنت و کل چیز که تو متلب گزاشته
          یه سر و گردن از بقیه قویتره .
          حالا 2 تا سوال:
          شما گفتی کد رو رم میریزیم ؟؟!! یعنی چی پس اون فلش چیه ؟؟
          بعد رم با پاور میپره ! ... یا چی؟
          متلب کلی فانکشن خفن داره (حتما بهتر از من میدونید )که اگر خودت بخواهی بنویس (اصلن فکرشم مو به تنت
          سیخ میکنه ) بعد تگزاس کلی تول باکس و لایبرری داره .شما این قسمت رو راه انداختی ؟یعنی داخل متلب
          بنویسی بریزی رو dsp .
          از جمله ی رفتگان این راه دراز
          باز آمده ای کو که به ما گوید راز
          هان بر سر این دو راهه از روی نیاز
          چیزی نگذاری که نمی آیی باز

          دیدگاه


            #6
            پاسخ : آموزش DSP های سری TI با زبان ساده

            در ابتدا تشکر بابات آموزش
            تگزاس یه جورایی شده اتوپیایه من حالا شاید خیلی مبنایه فنی نداشته باشه .
            وقتی با freescale کار میکردم متوجه شدم که تگزاس حداقل از نظر داکیومنت و کل چیز که تو متلب گزاشته
            یه سر و گردن از بقیه قویتره .
            حالا 2 تا سوال:
            شما گفتی کد رو رم میریزیم ؟؟!! یعنی چی پس اون فلش چیه ؟؟
            بعد رم با پاور میپره ! ... یا چی؟
            متلب کلی فانکشن خفن داره (حتما بهتر از من میدونید )که اگر خودت بخواهی بنویس (اصلن فکرشم مو به تنت
            سیخ میکنه ) بعد تگزاس کلی تول باکس و لایبرری داره .شما این قسمت رو راه انداختی ؟یعنی داخل متلب
            بنویسی بریزی رو dsp .
            بسیار متشکرم
            ریختن کد بر روی RAM DSP به این معنی است که موقتا برای تست این کار را انجام می دهیم
            RAM با قطع برق پاک می شود
            این کار را انجام شده است تا دفعات کمتری Flash پاک شود. همچنین در DSP قسمتی به نام
            OTP داریم که فقط یکبار قابل برنامه ریزی است و قبل از برنامه ریزی آن باید برنامه ی آن قسمت را
            در RAM اجرا کرده و بعد از تست نهایی به Flash یا OTP (one time programmable) منتقل کنیم

            در مورد MATLAB باید بگم که کدش بهینه نیست و حجمش زیاد و سرعتش کم است
            و ابتدا الگوریتم های پردازشی را با آن پیاده کرده
            و برای بهینه سازی و Realtime کردن کد آن را برای DSP می نویسیم
            { خلاف قوانین - پاک شد }
            برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
            آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
            آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

            دیدگاه


              #7
              پاسخ : آموزش DSP های سری TI با زبان ساده

              نوشته اصلی توسط محمد رضا بیگی

              این کار را انجام شده است تا دفعات کمتری Flash پاک شود.
              بیشتر پروسورها محدودیت flash بالایی داند (بطور مثال 100000) محدودیت فلش این پروسور اینقدر پایین هست که ...؟
              همچنین در DSP قسمتی به نام
              OTP داریم که فقط یکبار قابل برنامه ریزی است
              :eek: بعد فلسفش چیه ؟چرا؟
              در مورد MATLAB باید بگم که کدش بهینه نیست و حجمش زیاد و سرعتش کم است
              و ابتدا الگوریتم های پردازشی را با آن پیاده کرده
              و برای بهینه سازی و Realtime کردن کد آن را برای DSP می نویسیم
              چطور ؟بطور مثال تول باکس های کنترل موتور "وکتور کونترل سنسور لس" رو چطور پورت کنیم؟

              از جمله ی رفتگان این راه دراز
              باز آمده ای کو که به ما گوید راز
              هان بر سر این دو راهه از روی نیاز
              چیزی نگذاری که نمی آیی باز

              دیدگاه


                #8
                پاسخ : آموزش DSP های سری TI با زبان ساده

                حاجی خدا خیرت بده بابت آموزش مفید و کامل.
                اگه ممکنه کمی هم راجع به سخت افزار و نحوه راه اندازی و پروگرام کردن توضیح بدین. بنظرم اگه اول یه مدار سخت افزار نمونه گذاشته بشه تا علاقمندان بسازن و بعد یکی یکی امکانات نرم افزار روش تست بشه مفیدتره.
                در کل فکر میکنم اگه یه برنامه نمونه مثل همین Blink_LED و سخت افزار مورد نیازش توضیح داده بشه و مدار راه بیفته، باقی راه رو دوستان میتونن همراهی کنن و موضوعات مطرح شده رو عملا تست کنن.
                پلود CCS هم یادتون نره لطفا. تا همینجاش هم از شما عقبیم.
                باز هم تشکر.
                کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                دیدگاه


                  #9
                  پاسخ : آموزش DSP های سری TI با زبان ساده

                  یشتر پروسورها محدودیت flash بالایی داند (بطور مثال 100000) محدودیت فلش این پروسور اینقدر پایین هست که ...؟
                  درسته بیشتر منظورم حافظه ی OTP بود

                  :eek: بعد فلسفش چیه ؟چرا؟
                  حافظه ی Flash با فناوری ترانزیستور با گیت شناور ساخته می شود و با قرار گرفتن در معرض اشعه ی
                  X یا گاما احتمال پاک شدنش زیاد است زیرا الکترون های داخلی آن تخلیه می شود و لذا حافظه ی OTP
                  به دلیل اینکه با آنتی فیوز ساخته می شود، مشکل را حل کرده است. همچنین برای تولید انبوه یک کارخانه
                  بهتر است قسمتی از برنامه بر روی این حافظه پروگرام شود (مانند برنامه ی Boot)

                  چطور ؟بطور مثال تول باکس های کنترل موتور "وکتور کونترل سنسور لس" رو چطور پورت کنیم؟
                  الان دقیقفا یادم نیست اما در اینترنت جستجوی ساده ای در سایت های زبان اصلی انجام دهید تا نحوه ی پردازش با MATLAB و انتقال آن به DSP را بیابید
                  { خلاف قوانین - پاک شد }
                  برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
                  آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
                  آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

                  دیدگاه


                    #10
                    پاسخ : آموزش DSP های سری TI با زبان ساده

                    حاجی خدا خیرت بده بابت آموزش مفید و کامل.
                    اگه ممکنه کمی هم راجع به سخت افزار و نحوه راه اندازی و پروگرام کردن توضیح بدین. بنظرم اگه اول یه مدار سخت افزار نمونه گذاشته بشه تا علاقمندان بسازن و بعد یکی یکی امکانات نرم افزار روش تست بشه مفیدتره.
                    در کل فکر میکنم اگه یه برنامه نمونه مثل همین Blink_LED و سخت افزار مورد نیازش توضیح داده بشه و مدار راه بیفته، باقی راه رو دوستان میتونن همراهی کنن و موضوعات مطرح شده رو عملا تست کنن.
                    پلود CCS هم یادتون نره لطفا. تا همینجاش هم از شما عقبیم.
                    باز هم تشکر.
                    در پیوست های بالا نقشه ی کامل برد ezdsp پر فروش ترین برد شرکت ti قرار داده شده است اما با این حال در اسرع وقت نقشه ها را قرار می دهم.
                    تا کنون چند قسمت از این نرم افزار را پلود کرده ام
                    { خلاف قوانین - پاک شد }
                    برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
                    آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
                    آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

                    دیدگاه


                      #11
                      پاسخ : آموزش DSP های سری TI با زبان ساده

                      نوشته اصلی توسط محمد رضا بیگی
                      درسته بیشتر منظورم حافظه ی OTP بود
                      حافظه ی Flash با فناوری ترانزیستور با گیت شناور ساخته می شود و با قرار گرفتن در معرض اشعه ی
                      X یا گاما احتمال پاک شدنش زیاد است زیرا الکترون های داخلی آن تخلیه می شود و لذا حافظه ی OTP
                      به دلیل اینکه با آنتی فیوز ساخته می شود، مشکل را حل کرده است. همچنین برای تولید انبوه یک کارخانه
                      بهتر است قسمتی از برنامه بر روی این حافظه پروگرام شود (مانند برنامه ی Boot)
                      الان دقیقفا یادم نیست اما در اینترنت جستجوی ساده ای در سایت های زبان اصلی انجام دهید تا نحوه ی پردازش با MATLAB و انتقال آن به DSP را بیابید
                      بعد اگر برنامت modifi احتیاج داشت چه گلی باید بسر گرفت؟
                      از جمله ی رفتگان این راه دراز
                      باز آمده ای کو که به ما گوید راز
                      هان بر سر این دو راهه از روی نیاز
                      چیزی نگذاری که نمی آیی باز

                      دیدگاه


                        #12
                        پاسخ : آموزش DSP های سری TI با زبان ساده

                        بعد اگر برنامت modifi احتیاج داشت چه گلی باید بسر گرفت؟
                        قبلا عرض کردم باید ابتدا در RAM برنامه ی OTP را تست نمود و سپس به OTP انتقال داد در غیر این صورت دیگر قسمت OTP دیگر به درد نمی خورد
                        { خلاف قوانین - پاک شد }
                        برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
                        آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
                        آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

                        دیدگاه


                          #13
                          پاسخ : آموزش DSP های سری TI با زبان ساده

                          سلام خدمت همگی
                          جناب بیگی ممنون از آموزش مفید و با حوصلتون..
                          برای پروگرام کردن DSPها به جز استفاده از امولاتورهای گرون قیمت چه راهی وجود داره؟ یعنی چه جوری میشه با پورت سریال یا USB چیپ رو برنامه ریزی کرد؟ و اینکه برای من که تجربه اول کار با DSP هست استفاده از امولاتور برای دیباگ کردن چه قدر ضروریه (من 5 سالی هست که با FPGA کار میکنم و در کار با FPGA به ندرت نیاز به دیباگ کردن برنامه موقع اجرا داشتم)؟


                          دیدگاه


                            #14
                            پاسخ : آموزش DSP های سری TI با زبان ساده

                            سلام خدمت همگی
                            جناب بیگی ممنون از آموزش مفید و با حوصلتون..
                            برای پروگرام کردن DSPها به جز استفاده از امولاتورهای گرون قیمت چه راهی وجود داره؟ یعنی چه جوری میشه با پورت سریال یا USB چیپ رو برنامه ریزی کرد؟ و اینکه برای من که تجربه اول کار با DSP هست استفاده از امولاتور برای دیباگ کردن چه قدر ضروریه (من 5 سالی هست که با FPGA کار میکنم و در کار با FPGA به ندرت نیاز به دیباگ کردن برنامه موقع اجرا داشتم)؟
                            تراشه های DSP می توانند از UART یا از USB نیز بدون نیاز به پروگرمر برنامه ریزی شوند و همانطور که قبلا گفته شد برنامه ریزی این تراشه ها برای افراد حرفه ای بدون نیاز به امولاتور های گران قیمت انجام می شود
                            { خلاف قوانین - پاک شد }
                            برد آموزشی ARM: http://www.eca.ir/forum2/index.php?topic=91977
                            آموزش DSP: http://www.eca.ir/forum2/index.php?topic=91940
                            آموزش Allegro: http://www.eca.ir/forum2/index.php?topic=79877

                            دیدگاه


                              #15
                              پاسخ : آموزش DSP های سری TI با زبان ساده

                              سلام
                              ممکنه در مورد اینکه چجور یه وقفه رو فعال کنیم توضیح بدین؟
                              مثلا می خوایم وقفه ی اتمام دریافت رو برای SCIA فعال کنیم و توی روتینش یه کاری بکنیم

                              دیدگاه

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