اطلاعیه

Collapse
No announcement yet.

ارتباط با باس ISA

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

    ارتباط با باس ISA

    سلام.
    من می خوام یه برنامه بنویسم که باهاش با باسISA روی مادربورد ارتباط برقرار کنم. روی این باس، می خوام یه اینترفیس قرار بدم تا با اون بتونم یه سری لامپ رو روشن و خاموش کنم.
    حالا چیزی که من بهش نیاز دارم برنامه نرم افزاری این پروژشت. اونم با اسمبلی :angry: :cry2: :cry2: :cry2:

    منتها اصلاً نمی دونم باید از کجا شروع کنم. اگه میشه کمک کنید. مثلاً بگید آیا این باس ها آدرس خاصی واسه دسترسی دارن یا اینکه میشه به تک تک پین های باس جدا دسترسی پیدا کرد یا نه؟ منظورم اینه که مثلاً بگیم آدرس فلان رو اختصاص بده به لامپ شماره 2. وقتی می خوایم اون رو روشن کنیم اون پین رو 1 کنیم و از این حرفا.
    خلاصه که کلاً خیلی کمک می خوام :cry2: :cry2:
    دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

    #2
    پاسخ : ارتباط با باس ISA

    خب به احتمال زیاد داری برای پورت ISA تحت داس برنامه نویسی میکنی.
    باس آیزا یه باس عمومیه که درارای پایه های آدرس و داده هست بدین معنی که آدرس و داده رو با دستور های outport در C میخونی یا مینویسی. در اسمبلی هم خیلی کار سخت تری نداری. شما روی مدارت یک تشخیص دهنده آدرس داری که هر وقت اون آدرس روی باس قرار گرفت داده ها رو برداره. فضای آدرس محدوده و مثلا شما نمیتونید از فضای آدرس پورتهای دیگه مثل پورت سریال استفاده کنید.
    برای شروع میتونی از کتاب مدارهای واسط 8086 نوشته مزیدی استفاده کنی.

    دیدگاه


      #3
      پاسخ : ارتباط با باس ISA

      نوشته اصلی توسط mojalan
      خب به احتمال زیاد داری برای پورت ISA تحت داس برنامه نویسی میکنی.
      باس آیزا یه باس عمومیه که درارای پایه های آدرس و داده هست بدین معنی که آدرس و داده رو با دستور های outport در C میخونی یا مینویسی. در اسمبلی هم خیلی کار سخت تری نداری. شما روی مدارت یک تشخیص دهنده آدرس داری که هر وقت اون آدرس روی باس قرار گرفت داده ها رو برداره. فضای آدرس محدوده و مثلا شما نمیتونید از فضای آدرس پورتهای دیگه مثل پورت سریال استفاده کنید.
      برای شروع میتونی از کتاب مدارهای واسط 8086 نوشته مزیدی استفاده کنی.
      یعنی میتونی هر آدرس از اون باس رو به یکی از بخش های روی برد اختصاص بدی و بعد برای کار با اون بخش اطلاعات رو برای اون آدرس بفرستی؟
      آدرساش چطوریه؟
      دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

      دیدگاه


        #4
        پاسخ : ارتباط با باس ISA

        سلام

        یعنی میتونی هر آدرس از اون باس رو به یکی از بخش های روی برد اختصاص بدی و بعد برای کار با اون بخش اطلاعات رو برای اون آدرس بفرستی؟
        آدرساش چطوریه؟
        بله این کار به سادگی انجام پذیره
        یه سری آدرس IO برا همین منظور در نظر گرفته شده که از آدرس 300hex شروع شده و به 31Fhex ختم میشه
        نکته مهم اینجاست که این ادرسها تو قسمت IO هستن و برا خوندن یا نوشتن دیتا تو این آدرسها از 2 دستور اسمبلی IN و OUT استفاده میشه
        برا دیکود کردن آدرس باید از خطوط آدرس A0 تا A9 استفاده بشه و همینطور سیگنالهای IOR و IOW و AEN رو هم
        باید به دیکودرت (مثلا 74138) متصل کنی.
        ضمنا اگه 32 آدرس برات کافی نیست میتونی از آدرسهای بالاتر از A9 یعنی A10 تا َA19 هم استفاده کنی که در این صورت کلی آدرس IO در اختیار داری

        همونطور که خودتم میدونی باس ISA از 2 اسلات تشکیل شده. اسلات اول از یه باس 8 بیت بعلاوه سیگنالهای آدرس و سیگنالهای دیگه بهره میبره و اسلات کوچکتر که بعدا به اون اضافه شده 8 بیت بالای دیتا و سیگنالهای
        مربوط به حالت 16 بیت رو تو خودش جا داده
        اگه سرعت باس 8 بیتی برات کافی نیست میتونی از 16 بیت دیتا هم استفاده کنی
        من قدیم قدیما هم کارت 8 بیت و هم 16 بیتشو ساختم نرم افزارشم با اسمبلی و هم (روم به دیوار! ) با پاسکال نوشتم اگه چیزی یادم مونده باشه خوشحال میشم کمکت کنم :bye

        دیدگاه


          #5
          پاسخ : ارتباط با باس ISA

          فقط یک مسئله و اونم اینه که دو تا سرعت متفاوت برای دسترسی روی باس isa هست که روی بعضی بایوس ها میشه تغییرش داد. 4 و 6 مگا هرتز. که چون هر دسترسی حداقل 4 سیکل زمان میبره حداکثر سرعت تئوری میشه 1 تا 1.5 میلیون نمونه در ثانیه که با استفاده از باس 16 بیتی میشه حداکثر 3 مگا بایت بر ثانیه.

          ضمنا در خیلی از سیستمها آدرس IO فقط 10 بیت اش استفاده میشه. یعنی آدرس 0x13FF با 0x03FF هیچ فرقی نداره اما یک سری جاهای دیگه یکی از بیتهای بالایی (اگه اشتباه نکنم بیت 13 امی) اگر استفاده بشه یک رنج آدرس 1024 بایتی اضافه میده. گرچه شما میتونی از آدرس های حافظه هم استفاده کنی. فقط بجای پین های IOWR و IORD از پین های MEMRD و MEMWR استفاده کن و از آدرس های رزرو حافظه مثلا سگمنت D000 و E000 البته به شرطی که از EMS مثلا EMM386 استفاده نکنی.

          دیدگاه

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