সুচিপত্র:

জিপিআইও আর্ম এসেম্বলি - টিআই রোবটিকস সিস্টেম লার্নিং কিট - ল্যাব 6: 3 ধাপ
জিপিআইও আর্ম এসেম্বলি - টিআই রোবটিকস সিস্টেম লার্নিং কিট - ল্যাব 6: 3 ধাপ

ভিডিও: জিপিআইও আর্ম এসেম্বলি - টিআই রোবটিকস সিস্টেম লার্নিং কিট - ল্যাব 6: 3 ধাপ

ভিডিও: জিপিআইও আর্ম এসেম্বলি - টিআই রোবটিকস সিস্টেম লার্নিং কিট - ল্যাব 6: 3 ধাপ
ভিডিও: Choice of Microcontrollers 2024, জুলাই
Anonim
জিপিআইও আর্ম এসেম্বলি - টিআই রোবটিকস সিস্টেম লার্নিং কিট - ল্যাব 6
জিপিআইও আর্ম এসেম্বলি - টিআই রোবটিকস সিস্টেম লার্নিং কিট - ল্যাব 6

হ্যালো, টেক্সাস ইন্সট্রুমেন্টস TI-RSLK (MSP432 মাইক্রোকন্ট্রোলার ব্যবহার করে) ব্যবহার করে ARM অ্যাসেম্বলি শেখার পূর্ববর্তী নির্দেশনায়, আপনি যদি T. I করছেন তাহলে ওরফে ল্যাব 3। অবশ্যই, আমরা কিছু মৌলিক নির্দেশনা দিয়েছি যেমন একটি রেজিস্টারে লেখা, এবং শর্তাধীন লুপিং। আমরা Eclipse IDE ব্যবহার করে মৃত্যুদন্ড কার্যকর করেছি।

আমাদের পরিচালিত কিশোর প্রোগ্রামগুলি বাইরের বিশ্বের সাথে যোগাযোগের জন্য কিছুই করেনি।

একধরনের বিরক্তিকর.

আসুন ইনপুট/আউটপুট পোর্ট সম্পর্কে বিশেষ করে ডিজিটাল জিপিআইও পিনগুলি সম্পর্কে কিছুটা শিখে আজ এটিকে কিছুটা পরিবর্তন করার চেষ্টা করি।

এটি এমন হয় যে এই এমএসপি 432 একটি উন্নয়ন বোর্ডে আসে ইতিমধ্যে দুটি পুশ-বোতাম সুইচ, একটি আরজিবি এলইডি এবং একটি লাল এলইডি, যা কিছু জিপিআইও পোর্টের সাথে আবদ্ধ।

এর মানে হল যে আমরা সমাবেশের মাধ্যমে এই পিনগুলি সেটআপ এবং ম্যানিপুলেট করতে শিখি, আমরা সেই প্রভাবগুলি দৃশ্যত দেখতে পারি।

শুধু ডিবাগারের মধ্য দিয়ে যাওয়ার চেয়ে অনেক বেশি আকর্ষণীয়।

(আমরা এখনও ধাপে যাচ্ছি - এটি আমাদের 'বিলম্ব' ফাংশন হবে):-D

ধাপ 1: আসুন RAM থেকে লেখার / পড়ার চেষ্টা করি

জিপিআইও অ্যাক্সেস এবং নিয়ন্ত্রণে যাওয়ার আগে আমাদের একটি ছোট পদক্ষেপ নেওয়া উচিত।

একটি স্ট্যান্ডার্ড মেমরি ঠিকানায় পড়া এবং লেখা দিয়ে শুরু করা যাক। আমরা আগের নির্দেশাবলী থেকে জানি (সেখানে ছবিগুলি দেখুন) যে RAM 0x2000 0000 এ শুরু হয়, তাই আসুন সেই ঠিকানাটি ব্যবহার করি।

আমরা একটি কোর রেজিস্টার (R0) এবং 0x2000 0000 এর মধ্যে ডেটা সরাতে যাচ্ছি।

আমরা একটি প্রাথমিক ফাইল কাঠামো বা একটি সমাবেশ প্রোগ্রামের বিষয়বস্তু দিয়ে শুরু করি। টিআই এর কোড কম্পোজার স্টুডিও (CCS), এবং কিছু নমুনা প্রকল্প ব্যবহার করে একটি সমাবেশ প্রকল্প তৈরি করতে এই নির্দেশাবলী পড়ুন।

। থাম্ব

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -------------------------------------------------------; (আমাদের কোড এখানে যাবে); ------------------------------------------ ---------------------------------------.endasmfunc.end

আমি উপরের বিভাগে নতুন কিছু যোগ করতে চাই, যদি কিছু ঘোষণা (নির্দেশনা) থাকে। এটি পরে পরিষ্কার হবে।

ACONST। সেট 0x20000000; আমরা এটি আরও নিচে ব্যবহার করব (এটি একটি ধ্রুবক)

; স্পষ্টতই, '0x' নির্দেশ করে যা অনুসরণ করে একটি হেক্স মান।

সুতরাং আমাদের প্রারম্ভিক ফাইলের বিষয়বস্তু এখন এর মত দেখতে:

। থাম্ব

.text.align 2 ACONST.set 0x20000000; আমরা এটি আরও নিচে ব্যবহার করব (এটি একটি ধ্রুবক); স্পষ্টতই, '0x' নির্দেশ করে যা অনুসরণ করে একটি হেক্স মান।.global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (আমাদের কোড এখানে যাবে); ------------------------------------------ ---------------------------------------.endasmfunc.end

এখন যেহেতু আমাদের উপরে আছে, আসুন ড্যাশড লাইনের মধ্যে কোড যোগ করি।

আমরা একটি RAM অবস্থানে লেখা দিয়ে শুরু করি। প্রথমে আমরা ডেটা প্যাটার্ন, একটি মান প্রতিষ্ঠা করব, যা আমরা র‍্যামে লিখব। আমরা একটি মূল রেজিস্টার ব্যবহার করি সেই মান বা ডেটা প্রতিষ্ঠার জন্য।

দ্রষ্টব্য: মনে রাখবেন যে কোডটিতে, যে কোন রেখার একটি আধা-কোলন (';') মানে এটি সেই আধা-কোলনের পরে একটি মন্তব্য।

;-----------------------------------------------------------------------------------------------

; লেখা; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; কোর রেজিস্টার R0 তে ডেটা থাকবে যা আমরা RAM অবস্থানে লিখতে চাই।; স্পষ্টতই, '0x' নির্দেশ করে যা অনুসরণ করে একটি হেক্স মান।

পরবর্তীতে, চলুন দেখে নেই যে বিবৃতিগুলি কাজ করে না।

; MOV MOV একটি RAM অবস্থানে ডেটা লেখার জন্য ব্যবহারযোগ্য নয়।

; MOV শুধুমাত্র নিবন্ধনের মধ্যে অবিলম্বে তথ্য জন্য, অথবা এক নিবন্ধন থেকে অন্য নিবন্ধন; অর্থাৎ, MOV R1, R0।; STR অবশ্যই STR ব্যবহার করবে।; STR R0, = ACONST; অভিব্যক্তিতে খারাপ শব্দ ('='); STR R0, 0x20000000; দোকান নির্দেশের জন্য অবৈধ ঠিকানা মোড; STR R0, ACONST; দোকান নির্দেশের জন্য অবৈধ ঠিকানা মোড

খুব বেশি ব্যাখ্যা না করে, আমরা উপরের সেই 'ACONST' ব্যবহার করার চেষ্টা করেছি। মূলত, এটি 0x20000000 এর মতো আক্ষরিক মান ব্যবহার করার পরিবর্তে একটি স্ট্যান্ড-ইন বা ধ্রুবক।

আমরা উপরের ব্যবহার করে RAM অবস্থানে লিখতে লিখতে পারিনি। আসুন অন্য কিছু চেষ্টা করি।

; মনে হচ্ছে আমাদের অবশ্যই র location্যামের অবস্থান সহ অন্য একটি রেজিস্টার ব্যবহার করতে হবে

; সেই RAM অবস্থানে MOV R1, #0x20000000 এ সঞ্চয় করার জন্য আদেশ; R1 এ RAM এর অবস্থান (এর বিষয়বস্তু নয়, অবস্থান) সেট করুন।; স্পষ্টতই, '0x' নির্দেশ করে যা অনুসরণ করে একটি হেক্স মান। STR R0, [R1]; R1 ব্যবহার করে R0 (0x55) র‍্যামে (0x20000000) লিখুন।; আমরা আরেকটি রেজিস্টার (R1) ব্যবহার করি যার RAM অবস্থান ঠিকানা আছে; সেই র‍্যাম লোকেশনে লেখার জন্য।

উপরের কাজ করার আরেকটি উপায়, কিন্তু আক্ষরিক ঠিকানার পরিবর্তে 'ACONST' ব্যবহার করা:

; আসুন উপরেরগুলি আবার করি, তবে আসুন একটি আক্ষরিক RAM অবস্থানের মানের পরিবর্তে একটি প্রতীক ব্যবহার করি।

; আমরা 0x20000000 এর জন্য স্ট্যান্ড-ইন হিসাবে 'ACONST' ব্যবহার করতে চাই।; আমাদের তাৎক্ষণিক মূল্য বোঝাতে '#' করতে হবে, তাই (উপরে দেখুন), আমাদের '.set' নির্দেশ ব্যবহার করতে হয়েছিল।; এটি প্রমাণ করার জন্য, R0 তে ডেটা প্যাটার্ন পরিবর্তন করা যাক। MOV R0, #0xAA; ঠিক আছে আমরা আক্ষরিক ঠিকানা মান MOV R1, #ACONST STR R0, [R1] এর পরিবর্তে প্রতীক ব্যবহার করে RAM লিখতে প্রস্তুত

ভিডিওটি মেমোরির অবস্থান থেকে পড়ার পাশাপাশি আরও কিছু বিশদে যায়।

আপনি সংযুক্ত উৎস.asm ফাইলটিও দেখতে পারেন।

ধাপ 2: কিছু প্রাথমিক বন্দর তথ্য

Image
Image
কিছু প্রাথমিক বন্দর তথ্য
কিছু প্রাথমিক বন্দর তথ্য
কিছু প্রাথমিক বন্দর তথ্য
কিছু প্রাথমিক বন্দর তথ্য

এখন যেহেতু র‍্যামের অবস্থান থেকে কীভাবে লিখতে / পড়তে হয় সে সম্পর্কে আমাদের ভালো ধারণা আছে, এটি আমাদের কীভাবে জিপিআইও পিন নিয়ন্ত্রণ এবং ব্যবহার করতে হবে তা আরও ভালভাবে বুঝতে সাহায্য করবে

তাহলে কিভাবে আমরা GPIO পিনের সাথে যোগাযোগ করব? এই মাইক্রোকন্ট্রোলার এবং এর এআরএম নির্দেশাবলীর উপর আমাদের পূর্ববর্তী দৃষ্টিভঙ্গি থেকে, আমরা জানি যে এর অভ্যন্তরীণ রেজিস্টারগুলি কীভাবে মোকাবেলা করতে হয় এবং আমরা জানি কিভাবে মেমরির (RAM) ঠিকানাগুলির সাথে যোগাযোগ করতে হয়। কিন্তু জিপিআইও পিন?

এটি এমন হয় যে সেই পিনগুলি মেমরি-ম্যাপ করা হয়, তাই আমরা তাদের মেমরির ঠিকানার মতোই আচরণ করতে পারি।

এর মানে হল আমাদের জানতে হবে সেই ঠিকানাগুলো কি।

নিচে পোর্ট শুরুর ঠিকানা আছে। যাইহোক, এমএসপি 432 এর জন্য, একটি "পোর্ট" পিনের একটি সংগ্রহ, এবং কেবল একটি পিন নয়। আপনি যদি রাস্পবেরি পাই এর সাথে পরিচিত হন, আমি বিশ্বাস করি যে এটি এখানকার পরিস্থিতির চেয়ে ভিন্ন।

উপরের ছবিতে নীল চেনাশোনা দুটি সুইচ এবং LEDs এর জন্য বোর্ডে লেখা দেখায়। নীল রেখাগুলি প্রকৃত LEDs নির্দেশ করে। আমাদের হেডার জাম্পার স্পর্শ করতে হবে না।

আমি নীচে বোল্ডে আমরা যে পোর্টগুলি নিয়ে উদ্বিগ্ন তা তৈরি করেছি।

  • GPIO P1: 0x4000 4C00 + 0 (এমনকি ঠিকানা)
  • GPIO P2: 0x4000 4C00 + 1 (বিজোড় ঠিকানা)
  • GPIO P3: 0x4000 4C00 + 20 (এমনকি ঠিকানা)
  • GPIO P4: 0x4000 4C00 + 21 (বিজোড় ঠিকানা)
  • GPIO P5: 0x4000 4C00 + 40 (এমনকি ঠিকানা)
  • GPIO P6: 0x4000 4C00 + 41 (বিজোড় ঠিকানা)
  • GPIO P7: 0x4000 4C00 + 60 (এমনকি ঠিকানা)
  • GPIO P8: 0x4000 4C00 + 61 (বিজোড় ঠিকানা)
  • GPIO P9: 0x4000 4C00 + 80 (এমনকি ঠিকানা)
  • GPIO P10: 0x4000 4C00 + 81 (বিজোড় ঠিকানা)

আমরা এখনো শেষ করিনি। আমাদের আরো তথ্যের প্রয়োজন।

একটি বন্দর নিয়ন্ত্রণ করার জন্য, আমাদের বেশ কয়েকটি ঠিকানা প্রয়োজন। এই কারণেই উপরের তালিকায় আমরা "এমনকি ঠিকানা" বা "বিজোড় ঠিকানা" দেখি।

I/O নিবন্ধন ঠিকানা ব্লক

আমাদের অন্যান্য ঠিকানার প্রয়োজন হবে, যেমন:

  • পোর্ট 1 ইনপুট রেজিস্টার ঠিকানা = 0x40004C00
  • পোর্ট 1 আউটপুট রেজিস্টার ঠিকানা = 0x40004C02
  • পোর্ট 1 দিকনির্দেশ নিবন্ধন ঠিকানা = 0x40004C04
  • পোর্ট 1 নির্বাচন করুন 0 নিবন্ধন ঠিকানা = 0x40004C0A
  • পোর্ট 1 নির্বাচন করুন 1 নিবন্ধন ঠিকানা = 0x40004C0C

এবং আমাদের অন্যদের প্রয়োজন হতে পারে।

ঠিক আছে, আমরা এখন একক লাল LED নিয়ন্ত্রণ করতে GPIO রেজিস্টার ঠিকানাগুলির পরিসর জানি।

একটি খুব গুরুত্বপূর্ণ নোট: MSP432 লঞ্চপ্যাড বোর্ডে প্রতিটি I/O পোর্ট বেশ কয়েকটি (সাধারণত 8) পিন বা লাইনের একটি সংগ্রহ এবং প্রত্যেকটি পৃথকভাবে ইনপুট বা আউটপুট হিসাবে সেট করা যেতে পারে।

এর অর্থ, উদাহরণস্বরূপ, যদি আপনি "পোর্ট 1 দিকনির্দেশ নিবন্ধন ঠিকানা" এর জন্য মান নির্ধারণ করছেন, তাহলে আপনি সেই ঠিকানায় কোন বিট (বা বিট) সেট করছেন বা পরিবর্তন করছেন তা নিয়ে উদ্বিগ্ন হতে হবে। এই বিষয়ে পরে।

জিপিআইও পোর্ট প্রোগ্রামিং সিকোয়েন্স

শেষ পর্যন্ত যে অংশটি আমাদের দরকার, তা হল একটি প্রক্রিয়া বা অ্যালগরিদম ব্যবহার করা, যা LED নিয়ন্ত্রণ করে।

এককালীন সূচনা:

  • স্বাভাবিক GPIO কার্যকারিতার জন্য P1.0 (P1SEL1REG: P1SEL0REG Register) <--- 0x00, 0x00 কনফিগার করুন।
  • P1DIRREG এর দিকনির্দেশ রেজিস্টার বিট 1 কে আউটপুট বা উচ্চ হিসাবে সেট করুন।

লুপ:

লাল LED চালু করতে P1OUTREG রেজিস্টারের বিট 0 তে হাই লিখুন

  • একটি বিলম্ব ফাংশন কল করুন
  • লাল LED বন্ধ করতে P1OUTREG রেজিস্টারের বিট 0 তে কম লিখুন
  • একটি বিলম্ব ফাংশন কল করুন
  • পুনরাবৃত্তি লুপ

কোন ইনপুট / আউটপুট ফাংশন (SEL0 এবং SEL1 কনফিগার করুন)

লঞ্চপ্যাডের অনেক পিনের একাধিক ব্যবহার রয়েছে। উদাহরণ, একই পিন হতে পারে স্ট্যান্ডার্ড ডিজিটাল জিপিআইও, অথবা এটি ইউএআরটি, বা আই 2 সি সিরিয়াল যোগাযোগেও ব্যবহার করা যেতে পারে।

সেই পিনের জন্য কোন নির্দিষ্ট ফাংশন ব্যবহার করার জন্য, আপনাকে সেই ফাংশনটি নির্বাচন করতে হবে। আপনাকে পিনের ফাংশন কনফিগার করতে হবে।

এই ধাপের জন্য উপরে একটি চিত্র রয়েছে যা এই ধারণাটিকে চাক্ষুষ আকারে ব্যাখ্যা করার চেষ্টা করে।

SEL0 এবং SEL1 ঠিকানাগুলি একটি জোড়া সংমিশ্রণ তৈরি করে যা কিছু ধরণের ফাংশন / বৈশিষ্ট্য নির্বাচন হিসাবে কাজ করে।

আমাদের উদ্দেশ্যে, আমরা বিট 0. এর জন্য স্ট্যান্ডার্ড ডিজিটাল জিপিআইও চাই। এর মানে হল যে আমরা SEL0 এবং SEL1 এর জন্য একটি বিট 0 প্রয়োজন।

পোর্ট প্রোগ্রামিং ক্রম (আবার)

1. P1 SEL 0 রেজিস্টারে 0x00 লিখুন (ঠিকানা 0x40004C0A)। এটি বিট 0 এর জন্য একটি নিম্ন সেট করে

2. P1 SEL 1 রেজিস্টারে 0x00 লিখুন (ঠিকানা 0x40004C0C)। এটি GPIO এর জন্য সেটিং বিট 0 এর জন্য একটি LOW সেট করে।

3. P1 DIR রেজিস্টারে 0x01 লিখুন (ঠিকানা 0x40004C04)। এটি বিট 0 এর জন্য একটি উচ্চ সেট করে, যার অর্থ আউটপুট।

4. P1 OUTPUT রেজিস্টারে 0x01 লিখে ঠিকানা চালু করুন (ঠিকানা 0x40004C02)

5. কিছু ধরণের বিলম্ব করুন (অথবা ডিবাগ করার সময় একক ধাপের মাধ্যমে)

6. P1 OUTPUT রেজিস্টারে 0x00 লিখে ঠিকানাটি বন্ধ করুন (ঠিকানা 0x40004C02)

7. কিছু ধরণের বিলম্ব করুন (অথবা ডিবাগ করার সময় একক ধাপের মাধ্যমে)

8. ধাপ 4 থেকে 7 পুনরাবৃত্তি করুন।

এই পদক্ষেপের জন্য সংশ্লিষ্ট ভিডিওটি আমাদের একটি লাইভ ডেমোতে সমগ্র প্রক্রিয়ার মাধ্যমে নিয়ে যায়, যেহেতু আমরা একক ধাপের মাধ্যমে এবং প্রতিটি সমাবেশের নির্দেশনার মাধ্যমে কথা বলি এবং LED ক্রিয়া দেখাই। দয়া করে ভিডিওটির দৈর্ঘ্য ক্ষমা করুন।

ধাপ 3: আপনি কি ভিডিওতে একটি ত্রুটি ধরতে পেরেছেন?

এলইডি প্রোগ্রামিং এবং আলো জ্বালানোর পুরো প্রক্রিয়ার মধ্য দিয়ে যে ভিডিওটি চলেছে, সেখানে মূল লুপে একটি অতিরিক্ত ধাপ ছিল, যা এককালীন আরম্ভের দিকে সরানো যেত।

এই নির্দেশনা দিয়ে যেতে সময় নেওয়ার জন্য আপনাকে ধন্যবাদ।

পরেরটি আমরা এখানে কি শুরু করেছি তা প্রসারিত করে।

প্রস্তাবিত: