ধরা যাক, আপনি আপনার ঘরে বসে একটি বই পড়ছেন। এমন সময় কলিং বেল বেজে উঠলো। আপনি কী করবেন? বইয়ের কোন লাইন পড়ছিলেন সেটা মনে রাখবেন, পড়া বন্ধ রেখে দরজা খুলবেন, তারপর ফিরে এসে আবার যতদূর পড়েছিলেন তার পর থেকে পড়া শুরু করবেন তাই তো? এই কলিংবেলটি হচ্ছে ইন্টারাপট। যদি কলিংবেল না থাকতো তখন কী হত? আপনাকে একটু পরপর পড়া থামিয়ে দরজা খুলে খুলে চেক করতে হত কেউ এসেছে কিনা। এতে প্রচুর পরিমান সময় আর শ্রম নষ্ট হত।
মাইক্রোকন্ট্রোলারের ইন্টারাপট অপশনটাও ঠিক এভাবেই কাজ করে। ধরা যাক মাইক্রোকন্ট্রোলার সিরিয়াল পোর্টের মাধ্যমে ডেটা গ্রহন করছে। হঠাৎ বাইরে থেকে একটি বাটন প্রেস করা হল। বাটন প্রেস করলে একটি এলইডি জ্বলার কথা। এখন মাইক্রোকন্ট্রোলার কী করবে? সিরিয়াল পোর্টে ডাটা গ্রহন কিছুক্ষন বন্ধ রেখে এলইডি জ্বালিয়ে আবার মূল প্রোগ্রামে ফিরে আসবে।অর্থ্যাত সিরিয়াল মনিটরে ডেটা গ্রহন শুরু করবে। মাইক্রোকন্ট্রোলার আবার শুরু থেকে মূল প্রোগ্রাম এক্সিকিউট করা শুরু করবে না। বাটন প্রেস করার আগে যতটুকু করে গিয়েছিল তার ঠিক পর থেকে শুরু করবে।
ইন্টারাপটের একটি বাস্তব উদাহরন দেখা যাবে এখনকার মোবাইল ফোনগুলোতে। মোবাইলে গান শুনতে শুনতে হঠাত একটা ফোন আসলে গান থেমে যায়। তারপর কল রিসিভ করে কথা শেষ করলে গানটি ঠিক তার পর থেকেই শুরু হয় যেখানে থেমেছিল।
এভিআর মাইক্রোকন্ট্রোলারের রয়েছে খুবই সমৃদ্ধ ইন্টারাপট স্ট্রাকচার। প্রোগ্রামের মূল ফাংশন থেকে আলাদা একটি ফাংশনের মধ্যে ইন্টারাপট কাজ করে। ফাংশনটিকে বলা হয় ইন্টারাপট সাবরুটিন(ISR)।
এভি আর মাইক্রোকন্ট্রোলারের ইন্টারাপ্ট নিচের সিকোয়েন্স অনুযায়ী কাজ করে।:-
১)পেরিফেরাল ভিভাইস (যেমন বাটন) প্রসেসরকে ইন্টারাপ্ট করে।
২) প্রোগ্রামের মূল ফাংশনের বর্তমান ইন্সট্রাকশনের এক্সিকিউশন শেষ হয়।
৩)পরবর্তি ইন্সট্রাকশনের অ্যাড্রেস হার্ডওয়্যার অথবা সফটওয়্যার স্ট্যাকে সংরক্ষিত থাকে।
৪)ISR(ইন্টারাপট সাবরুটিন) এর অ্যাডরেস প্রোগ্রাম কাউন্টারে লোড করা হয়।
৫)প্রসেসর ISR এক্সিকিউট করে।
৬)RETI(Return from interrupt instruction) ISR এক্সিকিউশনের সমাপ্তি নির্দেশ করে।
৭) মূল প্রসেসর ৩ নং ধাপে সংরক্ষিত অ্যাড্রেস ভ্যালু প্রোগ্রাম কাউন্টারে লোড করে এবং মূল ফাংশনের কাজ আবার শুরু হয়।
প্রকারভেদঃ
ইন্টারাপ্ট ২ প্রকার। ১)এক্সটার্নাল ইন্টারাপট ২)ইন্টারনাল ইন্টারাপট
১)এক্সটার্নাল ইন্টারাপ্ট: হার্ডওয়্যার ইন্টারাপট নামেও পরিচিত। এর মানে হল মাইক্রোকন্ট্রোলারে যদি বাইরে থেকে ইন্টারাপ্ট দেওয়া হয় তাহলে এটি হবে এক্সটার্নাল ইন্টারাপ্ট। আমাদের মাইক্রোকন্ট্রোলারে মোট তিনটি ইন্টারাপ্ট পিন রয়েছে। Pin16 (INT0), Pin17 (INT1) and Pin3 (INT2)। এই পিনগুলোতে যদি কোনো এক্সটারন্যাল ডিভাইস বা বাটন দিয়ে সিগন্যাল দেওয়া হয়, তাহলে পিনগুলোতে ইন্টারাপট সিগন্যাল পৌছাবে। হাই থেকে লো অথবা লো থেকে হাই, পালসের এই উভয় পরিবর্তনের সময়ই ইন্টারাপ্ট ঘটতে পারে।
২)ইন্টারনাল ইন্টারাপ্টঃ এটি সফটওয়্যার ইন্টারাপ্ট নামেও পরিচিত। যেমনঃ আপনি যদি টাইমার ব্যবহার করেন তাহলে আপনি সবসময় চেক করতে পারবেন এর গননা শেষ হয়েছে নাকি হয়নি। অর্থ্যাৎ, টাইমারের একটি ইন্টারাপট আছে। যতবার টাইমারের গননা শেষ হবে ততবার সেটি একটি ইন্টারাপট কোডের মাধ্যমে গননার সমাপ্তি ঘোষনা করবে। বিভিন্ন পেরিফেরাল যেমন এডিসি, টাইমার, ইউএসএআরটি ইত্যাদির ইন্টারাপ্ট জেনারেট করতে সক্ষম।
এক্সটার্নাল ইন্টারাপ্ট রেজিস্টারঃ
আমাদের আলোচ্য মাইক্রোকন্ট্রোলারের রেজিস্টারগুলো নিম্নরূপ।
a) MCU Control Register (MCUCR): MCUCR রেজিস্টরটি মোট আটটি বিটের সমন্বয়ে গঠিত।
ISC11 এবং ISC10 (bit 3 এবং 2) INT1 এর জন্য। ISC01 এবং ISC00 (bit 1 এবং 0) INT0 এর জন্য।
b)MCU Control and Status Register (MCUCSR):
Bit 6 – ISC2: Interrupt Sense Control 2
ISC2 এর ভ্যালু 1 হলে rising edge এ এবং ISC2 এর ভ্যালু ০ হলে falling edge এ ইন্টারাপট কার্যকর হবে।
c)General Interrupt Control Register (GICR):
Bit 7 – INT1: External Interrupt 1 কার্যকর হবে।
Bit 6 – INT0: External Interrupt ০ কার্যকর হবে।
Bit 5 – INT2: External Interrupt 2 কার্যকর হবে।
আসুন, এবার প্রোগ্রাম দেখি।
কোডটি AVR Studio তে লিখুন এবং সিমুলেট করুন। মনে রাখবেন, ইন্টারাপট পিন হচ্ছে পিন নং ১৬ এবং ১৭। অর্থ্যাত PD2 এবং PD3।
]]>