به نام خدا : تو این مطلب از سری مطالب آموزش آرم سری lpc176x/5x ان شاء الله میخوایم درباره GPIO که مخفف عبارت General Purpose Input/Output هستش توضیحاتی مختصر!!! ^_^ بدیم.
آموزش آرم lpc1768 جلسه ۲ کنترل gpio
توجه : در مطلب زیر، متون صورتی رنگ، یعنی شک دارم در صحتش یا ترجمش رو درست نمیدونم و…
عناوین این مطلب :
- پیکربندی ابتدایی GPIO
- مشخصات GPIO
- ریجستر های GPIO میکروکنترلر LPC176x/5x
- ریجسترهای FIO0DIR تا FIO4DIR
- ریجسترهای FIO0SET تا FIO4SET
- ریجسترهای FIO0CLR تا FIO4CLR
- ریجسترهای FIO0PIN تا FIO4PIN
- ریجسترهای FIO0MASK تا FIO4MASK
پیکربندی ابتدایی GPIO
برای کار با GPIO چند تا مورد زیر رو باید مد نظر داشته باشید :
- Power : برا GPIO همیشه فعال هستش.(لذا نیاز به فعال کردنش نیست ^_^)
- نقش اول تمام پایه ها GPIO هستش که در مطلب قبل درباره نقش پایه ها صحت شد.(پایه مد نظر رو در حالت GPIO باید قرار بدید)
- Wake-up : پورت های ۰ و ۲ میتونن میکروکنترلر رو از مد Wake-up خارج کنن.( یه مدی که برا بحث کاهش مصرف جریان میکرو کنترلر هستش.)
- Interrupts : برا فعال کردن وقفه GPIO باید از ریجستر های IO0/2IntEnR یا IO0/2IntEnF استفاده کنیم، Interrupts are enabled in the NVIC using the appropriate Interrupt Set Enable register
مشخصات GPIO
Digital I/O ports
- ریجسترهای GPIO داخل peripheral AHB bus قرار گرفتن و با سرعت زمانی بالاتری(سریع تر!) میتونیم بهشون دسترسی داشته باشیم.
- به کمک ریجستر Mask میتونیم، پایه هایی رو از تغییرات و خونده شدن مصون کنیم و پایه هامون رو گروه بندی کنیم.
- تمام ریجسترهای GPIO به صورت ۸ تایی(byte) و ۱۶ تایی(half-word) و ۳۲ تایی(word) در دسترس هستن.(در ادامه یا در مطالب مربوط به پروژه عملی متوجه این موضوع میشید که داستانش چیه و یعنی چی)
- تغییر مقدار یه پورت(۳۲ تا پین) با یه دستور قابل انجام هستش.
- ریجستر های GPIO به وسیله GPDMA در دسترس هستند.
- وجود ریجسترهایی برای ۱ کردن و ۰ کردن پورت ها در یه دستور! ( بر خلاف میکرو کنترلر های AVR که یه ریجستر داشتیم به نام PORT و به کمکش مقدار هر پایه رو هم میتونستیم ۰ کنیم و هم ۱، تو آرم از این خبرا نیست، یه ریجستر داریم برا ۱ کردن و یه ریجستر داریم برا ۰ کردن ^_^ ، مزایای این امر چیه خودمم نمیدونم، کسی میدونه بگه )
- تمام ریجسترهای GPIO پشتیبانی میکنن Cortex-M3 bit-banding رو.
- GPIO registers are accessible by the GPDMA controller to allow DMA of data to or from GPIOs, synchronized to any DMA request.
- Direction control of individual port bits.
- تمام I/O ها به صورت پیشفرض ورودی هستند با مقاومت داخلی pullup بعد از ریست شدن.
ریجستر های GPIO میکروکنترلر LPC176x/5x
همونطور که در عکس زیر میبینید ۵ تا ریجستر داریم که در زیر کارشون رو مختصرا میگم :
FIODIR : تعیین ورودی یا خروجی بودن پایه.
FIOMASK : جلوگیری از تغییر و یا خونده شدن پایه های مد نظر.
FIOPIN : خوندن مقدار پایه، در حالتی که پایه ورودی هستش. ( این ریجستر کار ریجستر های FIOSET و FIOCLR رو هم میتونه انجام بده؛ این ریجستر عملیات تغییر مقدار پایه ها -۰و۱ کردن- رو هم انجام میده )
FIOSET : تنظیم پایه بر روی مقدار ۱، در حالتی که پایه خروجی هستش.
FIOCLR : تنظیم پایه بر روی مقدار ۰، در حالتی که پایه خروجی هستش.
[۱] ریست شدن میکرو، فقط در بیت های قابل دسترس که دیتا توشو نوشتیم تاثیر میزاره ( و مقدارشون رو ۰ میکنه ) و در بیت های رزرو شده ( reserved ) نه.
ریجسترهای FIO0DIR تا FIO4DIR
این ریجستر، قابلیت دسترسی ۳۲ تایی(word) به پایه های هر کدوم از پورت ها رو به ما میده.(یعنی همزمان ۳۲ تا پایه یه پورت رو ورودی/خروجی بودنشون رو تعیین میکنه)، البته به شرطی که این پایه ها نقششون روی GPIO تنظیم شده باشه.
توجه : پایه های P0.29 و P0.30 با +USB_D و -USB_D به اشتراک گزاشته شده اند؛ لذا باید جهت هر دو پایه یکسان باشد.
خب همون طور که در عکس بالا میبینید، ۴ تا ریجستر به نام های FIO0DIR تا FIO4DIR داریم، که همشون ۳۲ بیتی هستن(همون طور که تا الان گفتم، تمام ریجستر ها ۳۲ بیتی هستن)، و نحوه مقدار دهی بیت هاشون به صورت زیر هستش :
۰ : ورودی کردن پایه.
۱ : خروجی کردن پایه.
توجه ۰ : همون طور که در عکس اول مطلب دیدید(عکس ۱۰۲، شماره بالای عکس هستش ^_^)، این ریجستر، R/W هستش (یعنی هم میتونیم مقدارش رو تغییر بدیم و هم مقدارش رو بخونیم.)
توجه ۱ : یه نکته هم بگم، تو عکس بالا گفته شده، هر چند نیاز به گفتن نداره ولی خب میگیم، هر پورت ۳۲ تا پایه داره، ریجستر های فوق هم که ۳۲ بیتی هستن، لذا هر بیت این ریجستر ها برا همون پایه با همون شماره هستش، مثلا ریجستر FIO2DIR بیت ۲ امش رو اگه ۱ کنم یعنی : پورت۲ پایه ۲ امش رو من خروجی کردم؛ و مثلا اگه ریجستر FIO4DIR بیت ۳۲ امش رو من ۰ کنم یعنی : پورت۴ پایه ۳۲ امش رو من ورودی کردم.
توجه ۲ : یه سری ریجستر دیگه هستش برا دسترسی به صورت Half-Word و Byte (یعنی ۱۶ بیتی و ۸ بیتی) که برا راحتی و افزایش سرعت کار مناسب هستش که در ادامه معرفیشون میکنم. ( حالا برا خودم هم سواله که منظور از سریع بودن یعنی چی، چون تغییر هر ۳۲ تا بیت در یه کلاک انجام میشه تا جایی که من اطلاع دارم )
these additional registers allow easier and faster access to the physical port pins.
خب گفتیم هر ریجستر ۳۲ بیته، حالا ۴ * ۸ = ۳۲ لذا : برا دسترسی به ریجسترهای ۳۲ بیتی FIOxDIR (حرف x، شماره پورت هستش و عددی بین ۰ تا ۴ هستش) به صورت ۸ بیتی میایم از ریجستر های FIOxDIR0 تا FIOxDIR4 استفاده میکنیم :
ریجستر FIOxDIR0 دسترسی به بیت های ۰ تا ۷ پورت x رو به ما میده.
ریجستر FIOxDIR1 دسترسی به بیت های ۸ تا ۱۵ پورت x رو به ما میده.
ریجستر FIOxDIR2 دسترسی به بیت های ۱۶ تا ۲۳ پورت x رو به ما میده.
ریجستر FIOxDIR3 دسترسی به بیت های ۲۴ تا ۳۱ پورت x رو به ما میده.
خب حالا این از ریجسترهایی که قابلیت دسترسی به صورت ۸ بیتی رو به ما میده، دو تا ریجستر دیگه هم داریم که قابلیت دسترسی به صورت ۱۶ بیتی رو به ما میدن، از این دو ریجستر هم میتونیم در صورت نیاز استفاده کنیم :
ریجستر FIOxDIRL دسترسی به بیت های ۰ تا ۱۵ پورت x رو به ما میده.
ریجستر FIOxDIRH دسترسی به بیت های ۱۶ تا ۳۱ پورت x رو به ما میده.
ریجسترهای FIO0SET تا FIO4SET
این ریجستر همون طور که قبلا گفتم، اگه پایه ای نقش GPIO تنظیم شده باشه و پایه جهت خروجی تعیین شده باشه، به کمک این ریجسترها میتونیم مقدار اون پایه رو ۱ کنیم.
این رجیستر ها هم شبیه ریجستر های FIOxDIR هستن(از نظر کاربرد نه، کلا منظورم بود)، لذا دیگه از اینجا به بعد خبری از اون همه توضیحات که برا FIOxDIR دادم، دیگه نیست و فقط مختصرا توضیحاتی میدم.
توجه ۱ : با توجه به عکس ۱۰۲، این ریجستر، R/W هستش (یعنی هم میتونیم مقدارش رو تغییر بدیم و هم مقدارش رو بخونیم.)
توجه ۲ : دسترسی به پایه های مد نظر به کمک ریجستر FIOxSET مشروط به این هستش که اون پایه ها رو به وسیله ریجستر FIOxMASK از تغییرات و خونده شدن مصون نکرده باشید.(در حالت عادی پایه ها قابلین خوندن/نوشتن دارن مگه این که مقدار ریجستر FIOxMASK رو تغییر بدید.)
نحوه مقدار دهی : هر کدوم از بیت های این ریجسترها رو اگه ۱ کنیم، پایه متناظر با اون بیت، مقدارش ۱ میشه ( اگه بیتی از این ریجسترها رو ۰ کنیم اتفاقی نمیوفته )
توجه : x شماره پورت هستش و بین ۰ تا ۴ هستش.
دسترسی ۳۲ بیتی : به کمک ریجسترهای FIO0SET تا FIO4SET انجام میشه اینکار.
دسترسی ۱۶ بیتی : به کمک ریجسترهای FIOxSETL و FIOxSETH انجام میشه اینکار.
دسترسی ۸ بیتی : به کمک ریجسترهای FIOxSET0 تا FIOxSET3 انجام میشه اینکار.
ریجسترهای FIO0CLR تا FIO4CLR
این ریجستر برا پاک کردن (۰ کردن) مقدار پایه ها به کار میره.
توجه ۱ : با توجه به عکس ۱۰۲، این ریجستر، WO هستش ( یعنی فقط میتونیم مقدارش رو تغییر بدیم )
توجه ۲ : اگه هیچ کدوم از پایه ها خروجی نباشه ( تو دیتاشیت به اشتباه گفته ورودی!) و یا پایه ها نقشی غیر از GPIO داشته باشن، نوشتن در این ریجسترها، تاثیری در این پایه ها نمیزاره.
توجه ۳ : دسترسی به پایه های مد نظر به کمک ریجستر FIOxCLR مشروط به این هستش که اون پایه ها رو به وسیله ریجستر FIOxMASK از تغییرات و خونده شدن مصون نکرده باشید.(در حالت عادی پایه ها قابلین خوندن/نوشتن دارن مگه این که مقدار ریجستر FIOxMASK رو تغییر بدید.)
نحوه مقدار دهی : اگه به هر بیت از ریجسترهای این قسمت مقدار ۱ بدیم، پایه متناظر با اون بیت، مقدارش ۰ میشه ( اگه بیتی از این ریجسترها رو ۰ کنیم اتفاقی نمیوفته )
توجه : x شماره پورت هستش و بین ۰ تا ۴ هستش.
دسترسی ۳۲ بیتی : به کمک ریجسترهای FIO0CLR تا FIO4CLR انجام میشه اینکار.
دسترسی ۱۶ بیتی : به کمک ریجسترهای FIOxCLRL و FIOxCLRH انجام میشه اینکار.
دسترسی ۸ بیتی : به کمک ریجسترهای FIOxCLR0 تا FIOxCLR3 انجام میشه اینکار.
ریجسترهای FIO0PIN تا FIO4PIN
به کمک این ریجستر مقدار منطقی پایه های میکروکنترلر رو میتونیم بخونیم.
توجه ۱ : منظور از مقدار منطقی اینه که ۰ و ۱ به ما میده.
توجه ۲ : پایه مد نظر هر نقشی داشته باشه، GPIO (ورودی یا خروجی) یا UART یا PWM و… هر نقشی که داشته باشه، به کمک این ریجسترها میتونیم مقدار اون پایه رو بخونیم(مقدار پایه ها رو میخونیم، صرف نظر از این که چه نقشی دارن).
توجه ۳ : اگه پایه ای نقش Analog یا A/D داشته باشه، این ریجسترها نمیتونن مقدار اون پایه رو بخونن ( در این حالت مقدار خونده شده توسط این ریجستر ها قابل اعتماد/صحیح نیست ).
توجه ۴ : با توجه به عکس ۱۰۲، این ریجستر، R/W هستش ( یعنی هم میتونیم مقدارش رو تغییر بدیم و هم بخونیم )
توجه ۵ : با نوشتن در این ریجسترها، میتونیم همون کار ریجستر های FIOxSET و FIOxCLR رو به صورت همزمان انجام بدیم، یعنی اگه به بیت ۰ ریجستر FIO0PIN مقدار ۰ بدیم انگار پایه P0.0 رو مقدارش رو ۰ کردیم و اگه ۱ بدیم انگار پایه P0.0 رو ۱ کردیم(البته اگه پایه خروجی باشه و نقش تعیین شده GPIO باشه) >>> در آخر مطلب یه سری لینک پروژه میزارم، اونا رو ببینید و تست کنید.
توجه ۶ : دسترسی به پایه های مد نظر به کمک ریجستر FIOxCLR مشروط به این هستش که اون پایه ها رو به وسیله ریجستر FIOxMASK از تغییرات و خونده شدن مصون نکرده باشید.(در حالت عادی پایه ها قابلین خوندن/نوشتن دارن مگه این که مقدار ریجستر FIOxMASK رو تغییر بدید.)
توجه : x شماره پورت هستش و بین ۰ تا ۴ هستش.
دسترسی ۳۲ بیتی : به کمک ریجسترهای FIO0PIN تا FIO4PIN انجام میشه اینکار.
دسترسی ۱۶ بیتی : به کمک ریجسترهای FIOxPINL و FIOxPINH انجام میشه اینکار.
دسترسی ۸ بیتی : به کمک ریجسترهای FIOxPIN0 تا FIOxPIN3 انجام میشه اینکار.
ریجسترهای FIO0MASK تا FIO4MASK
این ریجستر استفاده میشه برا این کار که پایه های مد نظرمون رو از تغییرات مصون کنیم، تا اون پایه ها دیگه به وسیله ریجسترهای FIOxPIN و FIOxSET و FIOxCLR تغییر داده نشود(مقدار این ریجسترها روی پایه های مد نظر ما اعمال نشود)
توجه ۱ : ریجستر Mask همچنین فیلتر میکنه محتوای پایه های مد نظر ما رو وقتی میخوایم مقدار اون پایه ها رو به کمک FIOxPIN بخونیم ( یعنی اگه پایه ای رو Mask کنیم، دیگه مقدارش رو نمیشه به وسیله FIOxPIN خوند )
توجه ۲ : کلا اگه پایه ای Mask گزاری بشه، دیگه نه میشه مقدارش رو خوند و نه میشه تغییر داد، وسلام ^_^
نحوه مقدار دهی :
۰ : غیر فعال کردن Mask
۱ : فعال کردن Mask
توجه : x شماره پورت هستش و بین ۰ تا ۴ هستش.
دسترسی ۳۲ بیتی : به کمک ریجسترهای FIO0MASK تا FIO4MASK انجام میشه اینکار.
دسترسی ۱۶ بیتی : به کمک ریجسترهای FIOxMASKL و FIOxMASKH انجام میشه اینکار.
دسترسی ۸ بیتی : به کمک ریجسترهای FIOxMASK0 تا FIOxMASK3 انجام میشه اینکار.
برای دیدن عملکرد این ریجستر، پروژه زیر رو ببینید و تست کنید، پایه های P0.0 تا P0.7 رو خروجی کردم و داخل یه حلقه وایل گفتم که مقدار اینا رو طی یه زمانی بیا ۰ و ۱ کن (LED رو خاموش روشن کن)، حالا به کمک ریجستر Mask اومدیم پایه P0.0 رو از تغییرات مصون کردیم، همون طور که اگه پروژه رو در عمل تست کنید میبینید که پایه های P0.0 تا P0.7 اگه بهشون LED وصل کنی چشمک میزنن الا پایه P0.0 که چشمک نمیزه LED متصل بهش.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <lpc17xx.h> void delay_ms(unsigned int ms) { for( unsigned int i=0; i<ms; i++ ) for( unsigned int j=0; j<20000; j++ ); } int main() { LPC_PINCON -> PINSEL0 = 0x00000000; LPC_GPIO0 -> FIODIR0 = 0xff; LPC_GPIO0 -> FIOMASK0 = 0x01; while(1) { LPC_GPIO0->FIOSET0 = 0xff; delay_ms(100); LPC_GPIO0->FIOCLR0 = 0xff; delay_ms(100); } } |
پروژه ساده روشن کردن led با lpc1768
پروژه ساده روشن کردن سون سگمنت با lpc1768
چند نکته در باب کار با ریجستر های GPIO
اگه بخوایم مقدار پایه های ۸ تا ۱۵ رو تغییر بدیم، میتونیم از کد زیر استفاده کنیم :
1 |
FIO0PIN = 0x0000A500; |
خب ولی یه مشکل؟ اگه گفتی چیه؟ بله درسته، مقدار بقیه پایه ها(غیر از پایه های ۸تا۱۵) هم تغییر کرد و مقدارشون ۰ شد.
خب حالا چیکار کنیم که این مشکل رفع بشه؟ خب یه ریجستر در بالا تعریف کردیم، به اسم Mask، خب میایم اون پایه هایی که باهاشون کار نداریم رو فعلا تغییر/خوندن شون رو غیر فعال میکنیم و بعد از ریجستر Pin استفاده میکنیم، به صورت زیر :
1 2 |
FIO0MASK = 0xFFFF00FF; FIO0PIN = 0x0000A500; |
ای بابا، بازم یه مشکل دیگه، یعنی ما هر دفه برا تغییر یه ۸ تا بیت باید این همه کار رو سخت کنیم و بقیه بیت ها رو هم مقدار دهی کنیم و …؟ خب یه راه ساده تر هم هستش، از ریجستر های مدل ۱۶ بیتی به صورت زیر استفاده کنیم :
1 2 |
FIO0MASKL = 0x00FF; FIO0PINL = 0xA500; |
خب یعنی ساده تر از اینم نمیشه؟ خب یه راه دیگه هم هستش اونم این که از مد ۸ بیتی این ریجسترها به صورت زیر استفاده کنیم، در این حالت دیگه نیازی به استفاده از ریجستر Mask هم نداریم :
1 |
FIO0PIN1 = 0xA5; |
داداش یه موردی، اومدیم و مثلا پایه های ۰تا۷ همشون مورد نیازم نبود، مثلا من پایه های ۱تا۴ و پایه ۷ام مورد نیازم بود(و پایه های ۰ و ۵ و ۶) مورد نیازم نبود، اونوقت چی؟ خب خیلی ساده هستش، دوباره میایم و از ریجستر Mask استفاده میکنیم ^_^ کد زیر رو ببین ( که اومدم مقدار اون پایه هایی که نیاز داری رو ۱ کردم، و اون پایه هایی که نیاز نداری رو خوندن/نوشتن شون رو غیر فعال کردم تا از تغییرات مصون باشن، البته من برای مثال همه پایه های مورد نیازت رو ۱ میکنما، شما هر مقداری دوست داشتی بده یا ۰ یا ۱، هر طور نیاز داشتی مقدار دهی کن)، مقدار دهی ها رو به صورت باینری انجام میدم تا قابل فهم تر باشه ( توجه کنید که فرم اعداد باینری در نرم افزار کیل پشتیبانی نمیشه، و من فقط برای فهم ساده تر به صورت باینری مینویسم، شما اگه خواستید تو نرم افزار کیل از این کدها استفاده کنید عدد باینری رو به فرم هگزا دسیمال تبدیل کنید) :
1 2 |
FIO0MASK1 = 0b01100001; FIO0PIN1 = 0b10011110; |
حالا اگه خاستیم led متصل به پایه P0.7 روشن خاموش کنیم چیکار کنیم؟ طوری که مقدار بقیه پایه ها تغییر نکنه؟
خب خیلی ساده هستش، کد زیر رو ببین :
1 2 |
FIO0MASK1 = 0xFE; // 0b11111110 FIO0PIN1 = 0x01; // 0b00000001 |
اعمال تغییرات توسط FIOSET/FIOCLR در مقابل FIOPIN
استفاده از ریجستر های FIOSET/FIOCLR برا ۰ و ۱ کردن پایه، به کاربر سادگی کار رو ارائه میده، که فقط پایه هایی مقدارشون تغییر میکنه توسط این رجیستر که مقدار اون بیت از اون رجیستر ۱ باشه؛ در مقابل رجیستر FIOPIN که اون بیت هایی که مقارشون ۱ باشه باعث ۱ شدن اون پایه ها میشه، این به کنار، اون بیت هایی هم که مقدارشون ۰ باشه هم باعث میشن که اون پایه ها مقدارشون ۰ بشه، یعنی تو این رجیستر هم ۰ و ۱ تاثیر گزار هستن، هر چند که در این حالت میتونیم از محدودیت رو به کمک ریجسترهای Mask برطرف کنیم
GPIO interrupt registers ( ریجستر های وقفه GPIO )
خب امیدوارم مطلب مفید بوده باشه براتون، مشکلی بود بگید.
هزینه مطلب : دعا برا نابودی تمام ظالمان عالم، چه آمریکا و چه اسرائیل و چه آل سعود، دعا برا سلامتی رهبر انقلاب و علمای اسلام، یه فاتحه هم برا اموات خودم و خودتون.
تا مطلب بعد یا علی.
بروزرسانی در تاریخ یکشنبه – ۲۶ دی ۱۳۹۵
نوشتن کتابخونه GPIO با توابع زیر، نسخه۳ :
1 2 3 4 |
void digitalWrite( unsigned char pin, unsigned char status ); char digitalRead( unsigned char pin ); void pinMode( unsigned char pin, char inputResistor, unsigned char status ); void pinFunction( uint8_t v_pinNumber_u8, uint8_t v_pinFunction_u8 ); |
مهمان
سلام جناب مهندس
ممنون از تدریس قشنگتون
بنظر شما stm بهتره یا lpc ?
بدجور دو دلم . lpc1768 رو با شما شروع کردم و خوشم اومده ولی میبینم خیلیها دارن stm کار میکنن.
ممنون میشم یه لطفی بکنین و راهنماییم کنین.
پیشاپیش ممنون
مهمان
سلام، تو مورد 6 قسمت اول که گفتین برخلاف avr دو تا رجیستر برای صفر و یک کردن پورتها داریم این دو تا رجیستر ارتباطشون چجوریه؟
ینی حالت دوصفریا دو یک ممکنه رخ بده؟
نویسنده این مطلب
سلام
تو ادامش گفتم دیگه :
یه ریجستر داریم برا ۱ کردن و یه ریجستر داریم برا ۰ کردن.
======
ولی تو avr یه رجیستر داشتیم به نام مثلا PORTA که 0 بهش میدادی بیت مد نظر 0 و 1 میدادی – بیت مد نظر 1 میشد
مهمان
سلام، اولا مطالب سایتتون عاالیه

دوما، من میخام یک کاراکتر چند بیتی رو با ی برد بفرستم، و با آرم دیگه همون کاراکتر رو دریافت کنم
ممنون میشم یکم راهنمایی کیند
نویسنده این مطلب
سلام-اگه میخواید بیسیم بفرستید برید یه ماژولی طبق نیازتون انتخاب و …
اگه میخواید با سیم بفرستید که UART232 برا برد زیر 10 متر و 485 برا زیر 100 متر مناسبه.
مهمان
سلام. خسته نباشید.
من که نفهمیدم چرا داخل حلقه وایل و قبل از اون مقادیر رجیسترها را هشت بیتی تعیین کردید. مگه داریم. مگه میشه.
این کار به نظرم کلا خطاست و باعث ایجاد رفتار نامشخص در بیت های با ارزش بالاتر می شود.
نظر شما چیه؟
نویسنده این مطلب
سلام
تا جایی که یادمه – تو lpc به 2 روش میشد مقدار دهی کرد پایه ها رو – یه 16 بیتی و یه 2 تا 8 بیتی – تا جایی که یادمه البته.
مهمان
ممنون از اموزش ببخشید تابع DELAY میشه توضیح بدید
نویسنده این مطلب
چیشو توضیح بدم – تابع ایجاد تاخیر زمانی هستش دیگه
مهمان
سلام ممنون از مطالب خوبت
من تازه شروع کردم
توی keilکه برم رو کامپایل میکنم ارور زیر رو میده لطفا کمکم کن
Rebuild target ‘Target 1’
assembling startup_LPC17xx.s…
compiling armtes2.c…
armtes2.c(22): warning: #1-D: last line of file ends without a newline
}
armtes2.c: 1 warning, 0 errors
linking…
.\Objects\armtest2.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
Finished: 2 information, 0 warning and 1 error messages.
“.\Objects\armtest2.axf” – 1 Error(s), 1 Warning(s).
Target not created.
Build Time Elapsed: 00:00:01
نویسنده این مطلب
اولی که هشداره و میگه خط آخر باید خالی باشه –
بعدش خطا میده و میگه SystemInit رو تعریف نکردی که برا این کار باید فایل system_LPC17xx.c و startup_LPC17xx.s رو به پروژت اضافه کرده باشی – این دو تا فایلو تو پروژه هایی که تا الان گزاشتم باید باشه – بگرد پیداکن – تو پوشه پروژت کپی کن.
مهمان
سلام و خسته نباشید خدمت بزرگوار اول یه در خواستی اگر ممکن هست آموزش های cmsis رو هم بزارید و یا مناع آموزشی معرفی کنید
سوالم اینه که من set , clr مقدار پایه رو صفر و یک میکنم پس PINMODE هم که داره آپ و دان میکنه اگر من پول دان کنم و مقدارش رو یک کنم تکلیفش چی میشه ؟؟
مهمان
آموزشتون عاااااالیه… مخصوصا همراه کردن چن تا پروژه با آموزش ها محشره!
خیلی خیلی ممنونم، آرزو میکنم همیشه موفق و سربلند باشین.
راستی من با کابل پرینتری پروگرم کردم میکرو رو و ی چیزی بگم شاید بعضیا ندونن، اونم اینکه موقع پروگرم کردن بدون jtag باید توی تنظیمات target آدرس شروع رو ۰x2000 بزارین وگرنه بوت لودر میپره
مهمان
سلام
ممنون از اموزش هاتون
کتابخانه ی gpio که قرار دادید باید کجا استفاده کنیم؟ برای پروتئس است؟
نویسنده این مطلب
سلام – نه – برای کیل هستش
مهمان
سلام
واقعا عاااااالی توضیح دادین دستتون درد نکنه
فقط یه سوال؟
شما میدونین lpc1768در پروتیوس در ورژن خاصی وجودداره یا نه؟درورژن ۸که نبود
نویسنده این مطلب
سلام
تو ۸٫۵ هم نیستش
کلا همون بهتر که نیستش – عملی کار کنید – پروتئوس زیاد جالب نیست کار کردن باهاش.
مهمان
ممنون
مهمان
ریجستر FIOxDIRU دسترسی به بیت های ۱۶ تا ۳۱ پورت x رو به ما میده.
بجای U از H استفاده کنبد
نویسنده این مطلب
بله درسته – مننون از شما.
مهمان
az
|=
estefade ko vaghti mikhay paye haye dige taghyir nakone
نویسنده سایت
سلام
دمت گرم…انصافا خیلی کامل توضیح دادی .رجیسترها رو شیر فهم میکنه…
چند تا سوال کوچیک:
برنامه ها رو با چه کامپایلری می نویسید؟
برای پروگرام کردن از بوت لودر استفاده می کنید؟اگر نه با چه روشی؟
با تشکر فراوون.
نویسنده این مطلب
سلام
keil
بوت لودر من استفاده کردم فقط led چشمک زن جواب میده – حالا یا میکرو مشکل داره یا برد من یا…
از j-link برا پروگرام کردن استفاده میکنم – پروتکولش رو هم نمیدونم فعلا برام هم فعلا مهم نیست