جلسه چهاردهم: راه اندازی پروتکل UASRT با DMA

40,000 ریال

DMA يا دسترسي مستقيم به حافظه واحدي است که امروزه در ميکروکنترلر ها مورد استفاده قرار می گیرد. ولي هميشه هم به صورت يک واحد مستقل طراحي نشده و به عنوان بخشي از يک واحد ديگر در نظر گرفته شده است.

توضیحات

DMA یا دسترسی مستقیم به حافظه واحدی است که امروزه در میکروکنترلر ها مورد استفاده قرار می گیرد. ولی همیشه هم به صورت یک واحد مستقل طراحی نشده و به عنوان بخشی از یک واحد دیگر در نظر گرفته شده است. مثلا dma در spi و یا dma در usart .

با یه مثال ساده :
فرض کنیم در یه پروژه قرار است میکرو با کامپیوتر ارتباط برقرار کند و در هر ارتباط یک بسته داده ی ۱۰ بایتی ردوبدل می شود و میکرو هم باید بقیه کار رو هم انجام بدهد!

یکی از روش ها این است که پورت سریال را در حالت وقفه قرار بدهیم که با دریافت هر کارکتر میکرو دچار وقفه شود و کاراکتر دریافتی رو ذخیره کند و بعد دوباره به کاراش ادامه دهد، و وقتی ۱۰ تا بایت رو گرفت ، دستورات مربوطه رو انجام دهد. پس میکرو حداقل ۱۰ بار دچار وقفه می شود.

شاید برای این حجم داده اتفاق خاصی پیش نیاید و اصلا هم مهم نباشد، ولی اگه حجم داده ۱۰۰۰ بایت و یا ۱۰۰۰۰ بایت بشود میکرو ناچار به زدن کلاک بیشتری می شود و CPU نیاز به انجام کار بیشتری است ولی با استفاده از DMA میکرو می تواند به بقیه کارهای خود برسد و هر زمان که نیاز به استفاده از UART باشد CPU داده ها را از DMA دریافت کرده و از طریق پروتکل UART ارسال و یا دریافت می کند.

برای این حالت استفاده از dma پیشنهاد می شود، به صورتیکه بعد از تنظیم dma به جای اینکه بایت به بایت میکرو دچار وقفه شود، بعداز اینکه کل بایت ها گرفته شد ، dma به میکرو اطلاع میدهد ( از طریق وقفه ) و میکرو دستورات مورد نیاز رو روی داده انجام می دهد. و بجای ۱۰۰۰۰ بار وقفه تنها یک با دچار وقفه می شود.