সুচিপত্র:

অংশ 2 - জিপিআইও আর্ম সমাবেশ - আরজিবি - ফাংশন কল - সুইচ: 6 টি ধাপ
অংশ 2 - জিপিআইও আর্ম সমাবেশ - আরজিবি - ফাংশন কল - সুইচ: 6 টি ধাপ

ভিডিও: অংশ 2 - জিপিআইও আর্ম সমাবেশ - আরজিবি - ফাংশন কল - সুইচ: 6 টি ধাপ

ভিডিও: অংশ 2 - জিপিআইও আর্ম সমাবেশ - আরজিবি - ফাংশন কল - সুইচ: 6 টি ধাপ
ভিডিও: VL53L1X সময়ের ফ্লাইট 400 সেমি লেজার দূরত্ব সেন্সর - আরডুইনো এবং বিক্ষোভ সফ্টওয়্যার 2024, জুলাই
Anonim
অংশ 2 - জিপিআইও আর্ম সমাবেশ - আরজিবি - ফাংশন কল - সুইচ
অংশ 2 - জিপিআইও আর্ম সমাবেশ - আরজিবি - ফাংশন কল - সুইচ

পার্ট 1 এ, আমরা শিখেছি কিভাবে C / C ++ এর পরিবর্তে অ্যাসেম্বলি ব্যবহার করে টেক্সাস ইন্সট্রুমেন্টস থেকে MSP432 লঞ্চপ্যাড ডেভেলপমেন্ট বোর্ডে একটি লাল LED টগল করতে হয়।

এই নির্দেশনায়, আমরা অনুরূপ কিছু করব - একটি RGB LED নিয়ন্ত্রণ করুন যা একই বোর্ডেও রয়েছে।

চলার পথে, আমরা আশা করি আমাদের এআরএম সমাবেশ সম্পর্কে আমাদের জ্ঞান আরও বাড়বে, এবং কেবল কিছু এলইডি জ্বালিয়ে মজা করবে না।

ধাপ 1: আসুন ডানদিকে ঝাঁপ দাও

সত্যিই, প্রথম ভিডিও সব বলে। বেশি কিছু যোগ করার নেই।

এটির মূল বিষয় হল এই ধারণাটি বাড়িয়ে তোলা যে MSP432 এ প্রতিটি I/O পোর্টে "রেজিস্টার" ঠিকানাগুলির একটি ব্লক রয়েছে, যার ফলে প্রতিটিতে বেশ কয়েকটি বিট থাকে।

তদ্ব্যতীত, বিটগুলি একটি অস্থায়ী পদ্ধতিতে গোষ্ঠীভুক্ত করা হয়। অর্থাৎ, প্রতিটি নিবন্ধক ঠিকানার বিট 0 একই বহিরাগত I/O পিন উল্লেখ করে।

আমরা এই ধারণাটি পুনরাবৃত্তি করেছি যে এই পোর্টের জন্য বেশ কয়েকটি রেজিস্টার ঠিকানা লাগে, এমনকি একটি বিট বা পিন দিয়ে কিছু করতে।

কিন্তু এই ক্ষেত্রে, যেহেতু আমরা একটি RGB LED নিয়ে কাজ করছি, তাই আমাদের প্রতিটি রেজিস্টার ঠিকানার জন্য তিনটি বিট নিয়ে কাজ করতে হবে।

আমরা জোর দিয়েছি যে আমাদের বেশ কয়েকটি রেজিস্টার দরকার: DIR রেজিস্টার, SEL0 রেজিস্টার, SEL1 রেজিস্টার এবং OUTPUT রেজিস্টার। এবং প্রতিবার তিনটি বিট।

ধাপ 2: কোড উন্নত করুন - একটি ফাংশন যোগ করুন

Image
Image

আপনি উপরের ধাপে দেখেছেন, প্রধান প্রোগ্রাম লুপের অনেকগুলি পুনরাবৃত্তি কোড ছিল, যথা, যখন আমরা LEDs বন্ধ করি।

সুতরাং আমরা প্রোগ্রামে একটি ফাংশন যোগ করতে পারি। যখনই আমরা LEDs বন্ধ করতে চাই তখনও আমাদের সেই ফাংশনটি কল করতে হবে, কিন্তু এটি কিছু কোডকে একক বিবৃতিতে ভেঙে ফেলতে পারে।

আমাদের এলইডি-অফ কোড যদি আরো অনেক নির্দেশনার সাথে জড়িত থাকত, তাহলে এটি একটি বাস্তব মেমরি-সেভার হত।

এম্বেডেড প্রোগ্রামিং এবং মাইক্রো-কন্ট্রোলারের অংশ প্রোগ্রামের আকার সম্পর্কে অনেক বেশি সচেতন।

ভিডিওটি ব্যাখ্যা করে।

মূলত, আমরা আমাদের মূল কোডে একটি শাখা বিবৃতি যোগ করি, এবং আমাদের কোডের আরেকটি ব্লক রয়েছে যেটি হল আমরা যে শাখাটি শাখা করছি। এবং তারপর একবার আমরা সম্পন্ন করা হয়, বা ফাংশন শেষে, আমরা প্রধান কর্মসূচির মধ্যে পরবর্তী বিবৃতি ফিরে শাখা।

ধাপ 3: একটি ব্যস্ত-লুপ বিলম্ব যোগ করুন

কোডের ঘোষণাপত্র বিভাগে, কাঙ্ক্ষিত সময়ের জন্য টুইক করা সহজ করার জন্য একটি ধ্রুবক যোগ করুন:

; একটি আধা-কোলন (';') পরে কোন শব্দ একটি মন্তব্য শুরু করে।

; এই অংশে কোড একটি মান একটি নাম বরাদ্দ করে।; আপনি '.equ' ব্যবহার করতে পারতেন কিন্তু সেগুলো একটু ভিন্ন।; '.equ' (আমি মনে করি) পরিবর্তন করা যাবে না, যেখানে '.set' মানে আপনি পারবেন; আপনি চাইলে কোডে পরে 'DLYCNT' এর মান পরিবর্তন করুন।; 'DLYCNT' বিলম্ব সাবরুটিনে কাউন্টডাউন মান হিসাবে ব্যবহার করা হবে। DLYCNT। সেট 0x30000

একটি নতুন বিলম্ব ফাংশন যোগ করুন:

বিলম্ব:.asmfunc; 'বিলম্ব' সাবরুটিন বা ফাংশনের শুরু।

MOV R5, #DLYCNT; লোড কোর সিপিইউ রেজিস্টার R5 'DLYCNT' এর জন্য নির্ধারিত মান সহ। dlyloop; এই চিহ্ন বিলম্ব লুপ শুরু। সমাবেশকারী ঠিকানা নির্ধারণ করে। SUB R5, #0x1; কোর সিপিইউ রেজিস্টার R5 এ বর্তমান মান থেকে 1 বিয়োগ করুন। CMP R5, #0x0; R5 থেকে 0. এর বর্তমান মান তুলনা করুন। BGT dlyloop; R5- এর মান 0 হলে লেবেল (ঠিকানা) 'dlyloop'। BX LR; যদি আমরা এখানে পৌঁছাই, মানে R5 মান ছিল 0. সাবরুটিন থেকে ফেরত।.endasmfunc; সাবরুটিনের শেষ চিহ্ন।

তারপরে মূল অংশে, মূল লুপের মধ্যে, বিলম্ব ফাংশনটি আহ্বান করুন বা কল করুন:

; এটি মূল কোড বা প্রধান ফাংশনের একটি কোড ফ্র্যাগমেন্ট (ফাইল 'main.asm' দেখুন)।

; এটি 'প্রধান' এর একটি লুপ, এবং দেখায় যে আমরা কীভাবে নতুন 'বিলম্ব' ফাংশনটি কল করি বা ব্যবহার করি।; '#REDON' এবং '#GRNON' এছাড়াও ঘোষণা (ধ্রুবক) ('main.asm' এর শীর্ষ দেখুন)।; RGB LED এর নির্দিষ্ট রঙ সেট করার জন্য এগুলি একটি সহজ উপায়। MOV R0, #REDON; লাল STRB R0, [R4]; কোর রেজিস্টার R4 আগে একটি GPIO আউটপুট ঠিকানা দিয়ে সেট করা হয়েছিল। R4 দ্বারা নির্ধারিত ঠিকানায় R0 তে কী আছে তা লিখুন। BL বিলম্ব; নতুন 'বিলম্ব' ফাংশনে শাখা। BL ledsoff; প্রাক-বিদ্যমান 'ledsoff' ফাংশনের শাখা। বিএল বিলম্ব; এবং তাই। BL বিলম্ব BL ledsoff BL বিলম্ব

ভিডিওটি বিস্তারিতভাবে যায়।

ধাপ 4: এআরএম আর্কিটেকচার পদ্ধতি কল স্ট্যান্ডার্ড (AAPCS)

কিছু পরিচয় করিয়ে দেওয়ার জন্য সম্ভবত এটি একটি ভাল সময়। এটি একটি সমাবেশ-ভাষা সম্মেলন। এআরএম আর্কিটেকচারের জন্য প্রক্রিয়া কল মান হিসাবেও পরিচিত।

এখানে অনেক কিছু আছে, কিন্তু এটি শুধু একটি মান। এটি আমাদের সমাবেশ প্রোগ্রামিং শেখার থেকে বিরত রাখে না, এবং আমরা যখন আমরা যা শিখছি কিছু ধারণা নিয়ে স্বাচ্ছন্দ্যবোধ করি তখন আমরা সেই মানদণ্ডের টুকরোগুলো গ্রহণ করতে পারি।

অন্যথায়, আমরা মনে করতে পারি যে আমরা একটি বিশাল জলের পায়ের পাতার মোজাবিশেষ থেকে পান করছি। খুব বেশি তথ্য।

কোর রেজিস্টার

যেহেতু আমরা MSP432 এর মূল রেজিস্টারগুলির সাথে পরিচিত হয়েছি, আসুন এখন এই মানগুলির কিছু গ্রহণ করার চেষ্টা করি। যখন আমরা পরবর্তী ফাংশনটি লিখব তখন আমরা এটি মেনে চলব (একটি LED চালু / বন্ধ)।

1) আমরা একটি ফাংশন পরামিতি হিসাবে R0 ব্যবহার করার কথা। যদি আমরা ফাংশন (সাবরুটিন) এর মধ্যে একটি মান পাস করতে চাই, তাহলে আমাদের R0 ব্যবহার করতে হবে।

2) আমরা লিংক রেজিস্টারটি তার উদ্দেশ্যপ্রণোদিত উদ্দেশ্যে ব্যবহার করতে যাচ্ছি - এতে ঠিকানা রয়েছে যা নির্দেশ করে যে সাবরুটিন সম্পূর্ণ হওয়ার পরে কোথায় ফিরে যেতে হবে।

আপনি দেখতে পাবেন কিভাবে আমরা এগুলো প্রয়োগ করি।

ধাপ 5: প্যারামিটার সহ ফাংশন - নেস্টেড ফাংশন

আমরা আমাদের কোড পরিষ্কার করতে পারি এবং মেমরির পরিমাণ কমাতে পারি যা এটি পুনরাবৃত্তি বিভাগগুলিকে একক ফাংশনে একত্রিত করে। প্রধান লুপ বডির মধ্যে একমাত্র পার্থক্য হল যে আমাদের একটি প্যারামিটার প্রয়োজন যাতে আমরা RGB LED এর বিভিন্ন রং দেখতে পারি।

বিস্তারিত জানতে ভিডিওটি দেখুন। (দৈর্ঘ্যের জন্য দু sorryখিত)

ধাপ 6: GPIO ইনপুট - সুইচ যোগ করুন

আসুন এটিকে আরও আকর্ষণীয় করে তুলি। আমাদের সমাবেশ প্রোগ্রামে কিছু সুইচ-নিয়ন্ত্রণ যোগ করার সময় এসেছে।

এই নির্দেশাবলীর ছবিগুলি দেখায় যে কিভাবে দুটি অন-বোর্ড সুইচ MSP432 এর সাথে সংযুক্ত।

মূলত: সুইচ 1 (SW1 বা S1) P1.1 এর সাথে সংযুক্ত, এবং সুইচ 2 (SW2 বা S2) P1.4 এর সাথে সংযুক্ত।

এটি জিনিসগুলিকে একটু আকর্ষণীয় করে তোলে শুধু আমরা আউটপুটের পরিবর্তে ইনপুট নিয়ে কাজ করছি, কিন্তু এই কারণে যে এই দুটি সুইচ দখল করে বা একই রেজিস্টার ঠিকানা ব্লকের দুটি বিট গ্রহণ করে যেমন একক লাল LED যা একটি আউটপুট।

আমরা এই নির্দেশনায় একক লাল LED টগলিংয়ের সাথে মোকাবিলা করেছি, তাই সুইচগুলি পরিচালনা করতে আমাদের কেবল কোড যুক্ত করতে হবে।

পোর্ট 1 নিবন্ধন ঠিকানা ব্লক

মনে রাখবেন যে আমরা এইগুলিকে পূর্ববর্তী নির্দেশনায় অন্তর্ভুক্ত করেছি, কিন্তু আমাদের একটি নতুন অন্তর্ভুক্ত করতে হবে:

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

ইনপুট হিসাবে পোর্টগুলি ব্যবহার করার সময়, MSP432 এর অভ্যন্তরীণ পুল-আপ বা পুল-ডাউন প্রতিরোধক ব্যবহার করা ভাল।

যেহেতু লঞ্চপ্যাড ডেভেলপমেন্ট বোর্ড দুটি সুইচকে গ্রাউন্ডে (LOW চাপলে) সংযুক্ত করেছে, এর মানে হল যে আমাদের টান UP প্রতিরোধক ব্যবহার করা উচিত যাতে আমরা একটি উচ্চ উচ্চতা নিশ্চিত করতে পারি যখন তারা চাপানো হয় না।

টান আপ / টান ডাউন প্রতিরোধক

এই দুটি সুইচ ইনপুটগুলিকে পুল-আপ প্রতিরোধকগুলির সাথে সংযুক্ত করতে দুটি ভিন্ন পোর্ট 1 রেজিস্টার ঠিকানা লাগে।

1) পোর্ট 1 রেসিস্টর-এনাবল রেজিস্টার (0x40004C06) ব্যবহার করুন শুধু ইঙ্গিত দিতে যে আপনি প্রতিরোধক চান (সেই দুই বিটের জন্য), 2) এবং তারপর পোর্ট 1 আউটপুট রেজিস্টার (0x40004C02) ব্যবহার করে প্রতিরোধকগুলিকে পুল-আপ বা পুল-ডাউন হিসাবে সেট করুন এটি বিভ্রান্তিকর মনে হতে পারে যে আমরা ইনপুটগুলিতে একটি আউটপুট রেজিস্টার ব্যবহার করছি। আউটপুট রেজিস্টারে প্রায় দ্বৈত উদ্দেশ্য রয়েছে।

সুতরাং, অন্যভাবে পুনরায় বলার জন্য, আউটপুট রেজিস্টার একটি আউটপুট (যেমন একক লাল LED) এ একটি উচ্চ বা নিম্ন পাঠাতে পারে, এবং / অথবা এটি ইনপুটগুলির জন্য পুল-আপ বা পুল-ডাউন প্রতিরোধক সেট করতে ব্যবহৃত হয়, কিন্তু শুধুমাত্র যদি সেই বৈশিষ্ট্যটি রেজিস্টার-এনাবল রেজিস্টারের মাধ্যমে সক্ষম করা হয়।

উপরে উল্লেখযোগ্য-কোন আউটপুট বিটে LOW বা HIGH পাঠানোর/সেট করার সময়, আপনাকে একই সাথে ইনপুট বিটের পুল-আপ/পুল-ডাউন অবস্থা বজায় রাখতে হবে।

(ভিডিওটি ব্যাখ্যা করার চেষ্টা করেছে)

একটি পোর্ট ইনপুট বিট পড়া

  • GPIO কার্যকারিতার জন্য SEL0 / SEL1 সেট করুন
  • সুইচ বিটের ইনপুট হিসেবে DIR রেজিস্টার সেট করুন, কিন্তু LED এর আউটপুট হিসেবে (একই সাথে একই বাইটে)
  • প্রতিরোধক সক্ষম করুন
  • তাদের পুল-আপ প্রতিরোধক হিসাবে সেট করুন
  • বন্দর পড়ুন
  • আপনি আপনার প্রয়োজনীয় বিটগুলি বিচ্ছিন্ন করার জন্য পড়া মান ফিল্টার করতে চান (1 এবং 2 সুইচ করুন)

প্রস্তাবিত: