কোনও এভিআরের ইউআরটি পোল করার উপায় নেই?


10

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


1
স্থানান্তর শুরু করার জন্য কেন আপনার পোলিং করতে হবে? যাইহোক, সংক্রমণ সমাপ্তির জন্য বাধাও রয়েছে are আমি খুব এভিআর মধ্যে নই, কিন্তু এই বলা যেতে পারে "টেক্সাস খালি" বা "হিসাবে FIFO খালি" বা FIFO থ্রেশহোল্ড "বা অনুরূপ।
। ইউজিন Sh

উত্তর:


20

আরআরসিসি এবং টিএক্সসি (আরএক্স এবং টিএক্স সম্পূর্ণ) এভিআর-তে উভয়ের জন্য বাধা ভেক্টর রয়েছে। আপনি না চাইলে এগুলির জন্য আপনার কখনই পোলিং করতে হবে না।

এভিআরফ্রিক্সের একটি দুর্দান্ত পোস্ট রয়েছে এবং এটি প্রস্তুতকারকেরও রয়েছে


3
আমি সবাই হয়ে যাব "কেন অ্যাপনোট লিঙ্কটি মাইক্রোচিপকে দেখায়, এটি একটি অত্মল পণ্য!" আমি বিশ্বাস করতে পারি না আমি কখনও শুনিনি যে মাইক্রোচিপ আটল কিনেছে, আপনি 5 বছরের জন্য মাইক্রোকন্ট্রোলারদের থেকে দূরে সরে গেছেন ...
জ্যাক ফারা’র

2
@ জ্যাকফারাঘর এনএক্সপি + ফ্রিস্কেল + কোয়ালকম। এনালগ + + লে। তারিখে + ফেয়ারচাইল্ড। ইনফেনিয়ন + + আইআর। বিগত 1-2 বছরের মধ্যে এই সব। আপনার সবচেয়ে খারাপ / কেবল প্রতিদ্বন্দ্বী সন্ধান করুন তারপরে তাদের সাথে একত্রীকরণ করুন, বেশ কিছুটা।
লুন্ডিন

1
@ লন্ডিন কোয়ালকম এনএক্সপি ঘটেনি, এবং সক্রিয় জনগণের বিবেচনায় আর নেই বলে মনে হয় না । এটি এখনও ছিল, বা অন্য কিছু হতে পারে - এমন এক সময় পরে ছিল যখন এটি ডায়মলগ ছিল যারা আটমেলকে কিনেছিল।
ক্রিস স্ট্রাটন

2

বিঘ্নিত রুটিন ডেটা একটি বাফারে সঞ্চয় করে (পুট এবং পয়েন্টার সহ একটি বিজ্ঞপ্তি বাফার দুর্দান্তভাবে কাজ করে)। বাফারে ডেটা আছে কি নেই তা দেখার জন্য প্রধান লুপটি পরীক্ষা করে এবং এটি উপস্থিত থাকে out প্রধান লুপটি অন্যান্য কাজ করতে পারে তবে বাধা বাফার ওভারফ্লো হওয়ার আগে (যখন পুটটি গেটটি মিলবে) এর আগে ডেটা পরীক্ষা করে মুছে ফেলা দরকার।

এটি সংকলন করবে না তবে এটি পদ্ধতিটি চিত্রিত করে।

char circ_buf[BUFFER_SIZE];
int get_index, put_index;

void initialize(void) {
    get_index = 0;
    put_index = 0;
}

isr serial_port_interrupt(void) {                       // interrupt
    circ_buf[put_index++] = SERIAL_PORT_REGISTER;
    if(put_index==get_index) error("buffer overflow");  // oops
    if(put_index==BUFFER_SIZE) put_index = 0;           // circular buffer
}

void background routine(void) {
    while(put_index!=get_index) {                       // or if()
        ch = circ_buf[get_index++];
        // do something with ch
        if(get_index==BUFFER_SIZE) get_index = 0;
        }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.