كيف تقرأ القيمة من منفذ GPIO من متحكم الذراع؟

StackOverflow https://stackoverflow.com/questions/1810368

  •  05-07-2019
  •  | 
  •  

سؤال

كيف تحصل على قيمة منفذ متحكم الذراع في متغير 32 بت.

أنا أستخدم Microcontroller LPC2378.

هل كانت مفيدة؟

المحلول

تحتاج إلى الوصول إلى سجلات GPIO تمامًا كما لو كنت أي سجلات وظيفية خاصة أخرى في الشريحة. تُظهر مستندات LPC2378 هذه التفاصيل:

#define GPIO_BASE  0xE0028000
#define IOPIN0     (GPIO_BASE + 0x00) // Port 0 value
#define IOSET0     (GPIO_BASE + 0x04) // Port 0 set 
#define IODIR0     (GPIO_BASE + 0x08) // Port 0 direction
#define IOCLR0     (GPIO_BASE + 0x0C) // Port 0 clear
#define IOPIN1     (GPIO_BASE + 0x10) // Port 1 value
#define IOSET1     (GPIO_BASE + 0x14) // Port 1 set
#define IODIR1     (GPIO_BASE + 0x18) // Port 1 direction
#define IOCLR1     (GPIO_BASE + 0x1C) // Port 1 clear

أحب استخدام هذا الماكرو للوصول إلى سجلات الذاكرة:

#define mmioReg(a) (*(volatile unsigned long *)(a))

ثم يبدو الرمز لقراءة المنفذ هكذا:

unsigned long port0 = mmioReg(IOPIN0); // Read port 0
unsigned long port1 = mmioReg(IOPIN1); // Read port 1

نفس الماكرو يعمل للوصول إلى سجلات المجموعة/clear/الاتجاه. أمثلة:

mmioReg(IOSET1) = (1UL << 3);   // set bit 3 of port 1
mmioReg(IOCLR0) = (1UL << 2);   // clear bit 2 of port 0
mmioReg(IODIR0) |= (1UL << 4);  // make bit 4 of port 0 an output
mmioReg(IODIR1) &= ~(1UL << 7); // make bit 7 of port 1 an input

في نظام حقيقي ، عادةً ما أكتب بعض وحدات الماكرو أو الوظائف لتلك العمليات ، لخفض الأرقام السحرية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top