আপনার কাছে যদি এখান থেকে ডেটাশিটের ৩১ অনুচ্ছেদটি পড়ে থাকে তবে আপনার জন্য বিষয়গুলি আরও পরিষ্কার হতে পারে।
আমি যা জানি তার একটি সংক্ষিপ্তসার এখানে:
পিআইও সমান্তরাল ইনপুট / আউটপুট বোঝায় এবং একসাথে একাধিক রেজিস্টার পোর্টগুলি পড়তে এবং লিখতে কার্যকারিতা সরবরাহ করে। যেখানে ডেটাশিটে একটি রেজিস্টার উল্লেখ করা হয়েছে, উদাহরণস্বরূপ PIO_OWER, আরডুইনো লাইব্রেরিতে REG_PIO এই ফর্ম্যাটে তাদের অ্যাক্সেসের জন্য ম্যাক্রোগুলি রয়েছে? _OWER কোথায়? উপলব্ধ বিভিন্ন বন্দরগুলির জন্য হয় এ, বি, সি বা ডি হয়।
আমি এখনও পিনগুলিতে ইনপুট / আউটপুট সেট করতে ধীর আরডুইনো পিনমোড () ফাংশনটি ব্যবহার করতে চাইছি কারণ এটি সংক্ষিপ্ত আকার ভিত্তিক রেজিস্ট্রি কলগুলির চেয়ে বেশি পাঠযোগ্য করে তোলে যেমন REG_PIOC_OWER = 0xdeadbeef, তবে তারপরে পিনগুলি সেট করতে সরাসরি রেজিস্টারগুলি ব্যবহার করে কর্মক্ষমতা / সিঙ্ক্রোনাইজেশন। এখনও, আমি ইনপুট দিয়ে কিছুই করি নি, তাই আমার উদাহরণগুলি সমস্ত আউটপুট ভিত্তিক।
বেসিক ব্যবহারের জন্য, আপনি আউটপুট লাইনগুলি উচ্চতর সেট করতে REG_PIO? __SODR এবং REG_PIO? _CODR সেগুলি কম সেট করতে ব্যবহার করবেন? উদাহরণস্বরূপ REG_PIOC_SODR = 0x00000002 PORTC এ বিট 1 নির্ধারণ করবে (শূন্য থেকে সংখ্যাযুক্ত) (এটি ডিউজড পিনের কারণে 33) উচ্চ। পিওআরটিসি-র অন্যান্য সমস্ত পিন অপরিবর্তিত রয়েছে। REG_POIC_CODR = 0x00000002 PORTC কমতে বিট 1 সেট করবে। আবার অন্য সমস্ত পিন অপরিবর্তিত থাকবে।
যেহেতু এটি এখনও অনুকূল নয়, বা আপনি যদি সমান্তরাল ডেটা নিয়ে কাজ করছেন তবে সিঙ্ক্রোনাইজড রয়েছে, এমন একটি রেজিস্টার রয়েছে যা আপনাকে একটি কলের সাথে একটি পোর্টের সমস্ত 32 বিট লিখতে দেয়। এগুলি REG_PIO? _ODSR, সুতরাং REG_PIOC_ODSR = 0x00000002 এখন পিওআরটিসি উচ্চে বিট 1 নির্ধারণ করবে এবং পিওআরটিসি-তে সমস্ত অন্যান্য বিটগুলি একক সিপিইউ নির্দেশে তাত্ক্ষণিকভাবে কম সেট হবে।
কারণ আপনি কখনই এমন পরিস্থিতিতে পড়তে পারবেন না যে একই সময়ে আপনাকে কোনও বন্দরের সমস্ত 32 বিট সেট করতে হবে, আপনাকে পিনের বর্তমান মান সংরক্ষণ করতে হবে, আপনি যেগুলির মুখোশটি কাটাতে একটি অ্যান্ড ক্রিয়াকলাপ সম্পাদন করতে হবে আপনি পরিবর্তন করতে চান, একটি ওআর অপারেশন করুন যা আপনি উচ্চ সেট করতে চান সেট করতে তারপরে আপনার লেখার কাজটি আবার সম্পাদন করুন এবং এটি অনুকূল নয়। এটি কাটিয়ে উঠতে, সিপিইউ নিজেই আপনার জন্য মাস্কিং সম্পাদন করবে। ওডাব্লুএসআর (আউটপুট লেখার স্থিতি রেজিস্ট্রার) নামে একটি নিবন্ধ রয়েছে যা আপনি ওডিএসআরগুলিতে যে কোনও বিট লিখেন যা ওডাব্লুএসআর সেট বিটের সাথে মেলে না।
সুতরাং, এখন আমরা যদি REG_PIOC_OWER = 0x00000002 (এটি OWSR এর বিট 1 সেট করে) এবং REG_PIOC_OWDR = 0xffffffdd (এটি OWSR এর বিট 1 বাদে সমস্ত বিট সাফ করে) এবং তারপরে আবার REG_PIOC_ODSR = 0x00000002 কল করি তবে এবার কেবল বিট পরিবর্তন হবে পিওরটিসি এর 1 এবং অন্যান্য সমস্ত বিট অপরিবর্তিত রয়েছে। সত্য যে দিতে মনোযোগ Ower সম্ভব কোনো বিট 1 সেট করা হয় মান আপনি লিখতে এবং OWDR নিষ্ক্রিয় কোনো বিট 1 সেট করা হয় মান আপনি লিখতে হবে। যদিও আমি এটি পড়ার সময় এটি বুঝতে পেরেছি, তবুও আমি আমার প্রথম পরীক্ষার কোডটি লিখতে গিয়ে একটি কোড ভুল করতে সক্ষম হয়েছি যে ভেবেছিলাম যে ওডব্লিউডিআর বিটগুলি অক্ষম করে ফেলেছে যা আমার লেখা মানকে 1-এ সেট করা হয়নি ।
আমি আশা করি এটি আপনাকে কমপক্ষে ডিউড সিপিইউয়ের পিআইও বোঝার জন্য কিছুটা শুরু করে দিয়েছে। একটি পঠন এবং একটি নাটক আছে এবং আপনার যদি আরও কিছু প্রশ্ন থাকে, আমি তাদের উত্তর দেওয়ার চেষ্টা করব।
সম্পাদনা: আরও একটি জিনিস ...
আপনি কীভাবে জানবেন যে পোর্টগুলির কোন বিটগুলি বকেয়া ডিজিটাল লাইনের সাথে সামঞ্জস্য করে? এটি পরীক্ষা করে দেখুন: যথাযথ পিনআউট