Registrlar - Mikrokontroller

|
Mikrokontroller
|
bet | 2/5 | Sana | 31.01.2024 | Hajmi | 434,94 Kb. | | #149521 |
Bog'liq Zamonaviy mikrokontrollerlarni dasturlash
Gap shundaki, hamma narsa - umuman, hamma narsa - mikrokontrollerning barcha periferik qurilmalari va uning barcha sozlamalari bilan aloqa faqat ikkita operatsiya yordamida amalga oshiriladi:
Mikrokontroller ichidagi hamma narsa, albatta, ma'lum bir manzilga joylashtiriladi. Ushbu manzillar registrlar deb ataladi (ularni protsessor registrlari bilan adashtirmang - protsessor registrlari protsessor operatsiyalarni bajaradigan ma'lumotlarni o'z ichiga oladi; biz gaplashayotgan registrlar turli xil apparat birliklarining holatiga ma'lum bir tarzda xaritalangan ba'zi maxsus ma'lumotlarni o'z ichiga oladi. mikrokontroller).
Shunday qilib, masalan, agar biz mikrokontrollerning A portining uchinchi qismida (PA2, raqamlash noldan boshlanadi) "1" paydo bo'lishini xohlasak, biz manzilda joylashgan registrning uchinchi bitiga "1" yozishimiz kerak. 0x4002014. Va agar bu oyoq kirish sifatida tuzilgan bo'lsa va biz, aksincha, undagi qiymat nima ekanligini bilmoqchi bo'lsak, biz 0x40020010 manzilidagi registrning uchinchi bitini o'qishimiz kerak.
Ha, kontrollerga ushbu pin kirish yoki chiqish ekanligini ko'rsatish uchun siz 0x40020000 manzilidagi tegishli bitlarga mos qiymatlarni yozishingiz kerak.
Bu mikrokontrollerning ishlashini tushunishda muhim nuqta: protsessor yadrosi javobgar bo'lgan hisoblash operatsiyalari bo'lmagan mutlaqo hamma narsa u yoki bu registrni yozish yoki o'qish orqali amalga oshiriladi. Dasturingizda qaysi kutubxonalar ustun bo'lishidan qat'i nazar, oxir-oqibat hammasi registrlarga tushadi.
Albatta, raqamli manzillar bilan ishlash juda noqulay, shuning uchun Cortex-M yadrosidagi har bir mikrokontroller uchun CMSIS (Cortex Microcontroller Software Interface Standard) kutubxonasi mavjud bo'lib, uning biz uchun eng muhim komponenti registrlarni tavsiflovchi sarlavha faylidir. ma'lum bir kontrollerda mavjud va ularni nisbatan odam o'qiy oladigan nomlar qiladi.
CMSIS yordamida yuqorida tavsiflangan PA oyoq operatsiyalari quyidagicha ko'rinadi:
int pin_num = 2; /* PA2*/
GPIOA->MODER &= ~(0b11 << (pin_num*2)); /* сбросили биты настройки ножки PA2 на всякий случай */
GPIOA->MODER |= 0b01 << (pin_num*2); /* установили биты настройки ножки PA2 в 01 — выход */
GPIOA->ODR |= 1 << pin_num; /* установили ножку PA2 в 1 */
GPIOA->MODER &= ~(0b11 << (pin_num*2)); /* сбросили биты настройки ножки PA2, теперь это вход */
uint32_t pa2_value = GPIOA->IDR & (1 << pin_num); /* прочитали состояние ножки PA2 */
Barcha registr nomlari va ulardagi maydon qiymatlari mikrokontroller dasturchisining Injili - Yo'naltiruvchi qo'llanma deb hisoblanishi mumkin bo'lgan hujjatda tasvirlangan (albatta, bu har bir kontroller oilasi uchun noyobdir, havola STM32L1 ga mos keladigan RM0038 ga berilgan. oila). Shuni ta'kidlaymanki, RM0038 ning 900 dan ortiq sahifalari unchalik katta ma'lumot emas, siz 1500-2000 sahifali qo'llanmalarga ega kontrollerlarni osongina topishingiz mumkin. Ushbu qo'llanmaning kamida uchdan bir qismini yoddan eslaydigan odam bo'lishi dargumon, ammo uni tezda boshqarish qobiliyati yaxshi dasturchi uchun majburiy sifatdir.
Albatta, bu kod faqat shartli ravishda inson tomonidan o'qilishi mumkin. Manzillar o'rniga harf nomlaridan foydalanish kodning xatolik darajasini tubdan kamaytiradi va uning o'qilishini oshiradi, lekin baribir ko'pchilik "oddiy" kod deb ataydigan koddan ancha uzoqdir.
Buni anglagan holda, kontroller ishlab chiqaruvchilari registrlarga qo'ng'iroqlar to'plamini funktsiyalarga yig'adigan yordamchi kutubxonalarni chiqarishni boshladilar - masalan, agar registrlar bilan to'g'ridan-to'g'ri ishlayotganda, har qanday generatorni yoqish uchun siz ikkita amalni bajarishingiz kerak bo'lsa (aylanuvchi bitni o'rnating). generatorni 1 ga qo'ying va generator rejimga kirganligini ko'rsatadigan bayroq 1 ga o'rnatilganda kuting), keyin generatorni bunday kutubxonada yoqish funktsiyasida ular birlashtiriladi.
STM32 holatida asosiy kutubxona standart periferik kutubxona deb ataladi, shuningdek, StdPeriphLib nomi bilan ham tanilgan, SPL sifatida ham tanilgan. Bunga qo'shimcha ravishda, ST tomonidan ishlab chiqarilgan LL kutubxonasi va bir qator uchinchi tomon kutubxonalari mavjud - masalan, LibOpenCM3 . Uchinchi tomon kutubxonalari ko'pincha boshqa ishlab chiqaruvchilarning kontrollerlarini qo'llab-quvvatlaydi, ammo STM32 keng tarqalganligi sababli ular odatda birinchi o'rinda turadi.
Shunday qilib, SPL dan foydalanganda, biz LEDni yoqish uchun qilgan ro'yxatga olish qo'ng'iroqlari GPIO_Init va GPIO_Write funktsiyalariga qo'ng'iroqlarga aylanadi.
Biroq, professional ishlab chiquvchilar orasida SPLga bo'lgan munosabat noaniq ekanligini sezmaslik mumkin emas.
Bir tomondan, SPL sizga loyihaning "skeleti" ni tezroq chizish imkonini beradi, ayniqsa STM32 CubeMX kabi grafik boshqaruvchi konfiguratsiya vositalaridan foydalanganda . Bunday holda, kod STM32 oilasining turli kontrollerlari o'rtasida juda yaxshi uzatiladi (ular siz foydalanadigan bir xil periferik qurilmalar va imkoniyatlarga ega bo'lgan darajada).
Boshqa tomondan, amaliyot shuni ko'rsatadiki, murakkab loyihada "agar biror narsa to'g'ri ishlamasa nima qilish kerak" degan savol yo'q - "hamma narsa to'g'ri ishlamasa nima qilish kerak" degan savol mavjud. SPL-da, har qanday kutubxonada bo'lgani kabi, xatolar bo'lishi mumkin; Bundan tashqari, SPL ishlab chiquvchilari mantig'i sizning muayyan harakatlar paytida boshqaruvchiga nima bo'lishi kerakligi haqidagi fikringizga to'g'ri kelmasligi mumkin - natijada, agar topsangiz. Bunday vaziyatda siz hali ham SPL manba kodini ochishingiz va u erda ro'yxatga olish darajasida nima sodir bo'layotganini ko'rishingiz kerak bo'ladi. Amalda, bu ba'zan noldan kerak bo'lgan funksionallikni yozishdan kamroq vaqt talab qilishi mumkin.
Bundan tashqari, ma'lum bir chip ishlab chiqaruvchisi tomonidan chiqarilgan kutubxonalar, garchi ular sizga ushbu ishlab chiqaruvchining chiplari o'rtasida ma'lum chegaralar ichida ko'chib o'tishga imkon bersa ham, siz SPL uchun yozilgan kod bilan, masalan, STM32L1 dan ATSAMD21 ga o'ta olmaysiz. istayman.
SPL har doim ham kodni o'qishga yordam bermaydi - uning yordamida yozilgan dasturlarda siz ko'pincha faqat SPL qo'ng'iroqlaridan iborat yarim sahifa o'lchamidagi varaqlarni ko'rishingiz mumkin.
Nihoyat, SPL faqat bitta muammoni hal qiladi - apparatdan abstraktsiya va registrlar bilan ishlash. Biroq, loyiha davom etar ekan, siz yana bir nechta narsaga duch kelasiz, masalan:
|
| |