I/U portining aloqa dasturi
Operatsion tizimdan foydalanilganda, past darajadagi qurilma drayveri kodi odatda I/U portlari bilan o'zaro ishlaydi va foydalanuvchi ilovalari ushbu qurilma drayverlarini OC API yordamida chaqiradi. Aksariyat C/C++ kompilyatorlari qurilma drayverini kodini ishlab chiqish uchun inline assembly tilidan foydalanish imkonini beradi. Afsuski, montaj tilidan foydalanish kod boshqa protsessorga o'tkazilmasligini anglatadi. Shuningdek, u boshqa ishlab chiquvchilar uchun kodni tushunishni qiyinlashtiradi.
X86 protsessorlarida ma'lumotlarni kiritish-chiqarish portlariga uzatish uchun ikkita maxsus mashina ko'rsatmalaridan foydalanish kerak. IN buyrug'i kiritish-chiqarish portidan ma'lumotlarni o'qiydi, OUT ko'rsatmasi esa kiritish/chiqarish portiga ma'lumotlarni yozadi. Ushbu ko'rsatmalar uchun X86 16 bitliI/ U manzillar registri (DX) operandlardan biri, ma’lumotlar qiymatini o‘z ichiga olgan 8 bitli registr (AL) esa boshqa operanddir. Bu I/U o'qish va yozish shinalari davrlarini yaratadigan ikkita ko'rsatma. C/C++ da inline X86 assembly tili kodiga misol 2.1 -misolda ko'rsatilgan . _asm kalit so'zi assembler tiliga ishora qiladi.
// X86 I/U kiritish tartibi // X86 I/U chiqish tartibi I/
__asm{ __asm{
mov dx,IO_address mov dx,IO_address
al,dx mov al,IO_data da
mov IO_data,al out dx, al
} }
2.1. Kirish-chiqarish portini kiritish va chiqarish uchun o'rnatilgan C/C++ X86 montaj tili ko'rsatmalari
Ko'pgina protsessorlarda ushbu kiritish-chiqarish ko'rsatmalari ham imtiyozlarga ega va ularni sozlash orqali apparatda ushlab turish mumkin.Protsessor rejimi biti foydalanuvchilarni kiritish/chiqarish uchun OS API qoʻngʻiroqlarini ishlatish oʻrniga toʻgʻridan-toʻgʻri kiritish/chiqarishni amalga oshirishni oldini olish uchun. An'anaviy Windows ish stoli operatsion tizimlari I/U ko'rsatmalarini imtiyozli qilish uchun ushbu rejim bitidan foydalanadi, lekin ko'plab o'rnatilgan operatsion tizimlar, jumladan Windows Embedded CE, bunday qilmaydi. Ba'zi RISC protsessorlari kiritish-chiqarish qurilmalari uchun xotirada maxsus manzillar diapazonini saqlab qo'yadi (kirish/chiqish xotirasiga ko'rsatilgan) va undan so'ng ma'lumotlarni kiritish-chiqarish qurilmalariga uzatish uchun oddiy Yuklash va saqlash ko'rsatmalaridan foydalanadi. Xaritalangan I/U port maʼlumotlarini keshlash oʻchirib qoʻyilishi kerak. C# to'g'ridan-to'g'ri assembler tilini kiritishga ruxsat bermaydi, lekin u P/invoke deb nomlangan protsedura yordamida dinamik bog'lanish kutubxonasida (DLL) C/C++ protseduralarini chaqirishi mumkin.
Qurilma drayveri kodini ishlab chiqish uchun ko'pchilik C/C++ kompilyatorlarida I/U portlaridan o'qish va yozish mumkin bo'lgan maxsus funksiya chaqiruvlari mavjud. Windows Embedded CE da CE yordamidaDevice Driver Kit (CEDDK), ikkita shunday C funksiyasi 8-bitli I/U portlari uchun taqdim etiladi. WRITE_PORT_UCHAR(I/U manzili, ma'lumotlar) funksiyasi kirish/chiqish portiga ma'lumotlar qiymatini yozadi. READ_PORT_UCHAR(I/U manzili) funksiyasi I/U portidan o‘qilgan ma’lumotlar qiymatini qaytaradi. CEDDK.h sarlavha fayli manba kod faylida talab qilinadi va kod CEDDK.lib kutubxonasiga bog'langan bo'lishi kerak.
Ushbu funktsiya chaqiruvlari odatda faqat past darajadagi I/U qurilma drayverlarida topiladi. Ushbu yondashuv yordamida kod boshqa protsessorlarga oson ko'chiriladi va o'qish va tushunish osonroq bo'ladi (ayniqsa, protsessorning assembler tilini bilmaganlar uchun). C# da bunday funksiyalar mavjud emas, lekin u *.dll kutubxonasida aniqlangan C/C++ funksiyalarini [DLLIMPORT] P/invoke maxsus moslamasi yordamida chaqirishi mumkin.
Ikkinchi avlod mikroprotsessorli avtobusga misol
ISA kabi birinchi avlod avtobuslarining o'tkazish qobiliyati va xotira manzili cheklovlari aniq bo'lgach, bir nechta yangi avtobus standartlari taklif qilindi. 1990-yillarning boshida Intel PCI (Periferik komponentlar o'zaro bog'lanishi) avtobusini taqdim etdi. Ushbu avtobus eng ko'p ishlatiladigan standartga aylandi va bugungi kunda PCI tashkiloti PCI standartini ishlab chiqmoqda.Maxsus qiziqish guruhi . PCI sinxron shina bo'lib, barcha ma'lumotlarni uzatish PCI avtobusining chastotasiga qarab amalga oshiriladi. Dastlab, PCI avtobus chastotasi 33 MGts edi. Yangi PCI-X tizimlari 66, 133, 266 va 533 MGts chastotada bo'lishi mumkin. Ushbu yuqori chastotalarni saqlab turish uchun PCI avtobus signal liniyalarining uzunligi, yuki va empedansini diqqat bilan nazorat qilish kerak. Bitta PCI avtobusiga faqat bir nechta qurilmalar ulanishi mumkin. Talaba prototipi panelidagi qurilmalarni uzun ulanish simlari bilan ulashda PCI signallari to'g'ri ishlash uchun juda tezdir. PCI 5V va 3.3V mantiqiy darajalarni qo'llab-quvvatlaydi. PC/104-Plus - bu ba'zi o'rnatilgan qurilmalarda ishlatiladigan PCI platasining raf versiyasi.
PCI 32-bitli manzil va ma'lumotlar multipleks shinasi, AD[31:0] dan foydalanadi. PCI shinasi siklida birinchi soat siklida AD qatorlari ma'lumotlarni o'z ichiga oladi. Bu konnektorlarda talab qilinadigan pinlar sonini kamaytiradi va xarajatlarni kamaytiradi. Bu, shuningdek, maqsadli qurilmalarda butun avtobus tsikli uchun manzil va avtobus buyrug'i qiymatlarini saqlash uchun registr va qaysi soat sodir bo'layotganini biladigan davlat mashinasi bo'lishi kerak (faqat kerak bo'lgan ISA maqsadlari uchun oddiy avtobus interfeysidan farqli o'laroq) kombinatsiyalangan mantiq (ya'ni, klapanlar)).
PCI shuningdek, ma'lumotlar paketini yo'naltirishni qo'llab-quvvatlaydi. PCI paketida boshlang'ich manzil birinchi soat davomida (manzil bosqichi) yuboriladi va ma'lumotlar har bir yangi soatda ketma-ket manzillardan (ma'lumotlar bosqichi) uzatiladi.
PCI ramka signali (FRAME) yangi manzil bosqichi haqida xabar beradi. Faqat bitta boshlang'ich manzil yuboriladi, shuning uchun maqsadli interfeys apparati saqlangan manzil qiymatini oshirishi kerak.
Ma'lumotlar tashabbuskor va maqsad o'rtasida yuboriladi. Initsiator manzil bosqichida PCI buyrug'i/bayt faollashtirish signallarini (C/BE[3:0]) boshqarib, uzatish turini (Xotirani o'qish, Xotiraga yozish, kiritish/chiqarishni o'qish, kiritish/chiqarish va h.k.) sifatida boshqaradi. 2.2 -jadvalda ko'rsatilgan . Ma'lumotlar bosqichida C/BE[3:0] signallari qaysi ma'lumotlar baytlari haqiqiyligini ko'rsatish uchun bayt faollashtirish vazifasini bajaradi. Har ikkala tashabbuskor ham, maqsad ham ma'lumotlar uzatishga bo'sh holatlarni (sekinlashtirish uchun qo'shimcha soatlarni qo'shish) kiritishi mumkin, bunda PCI tashabbuskori tayyor (IRDY) va maqsadli tayyor (TRDY) signallari kuzatilmaydi.
2.2-jadval. Manzil bosqichida C/BE liniyalarida yuborilgan PCI avtobus buyruqlari
|
|
Dostları ilə paylaş: |