راه اندازی پورت سریال با استفاده از Handshaking

هدف پروژه :

هدف از انجام این پروژه آموزش نحوه استفاده از پورت سریال با استفاده از سیگنال های Handshaking  می باشد  . استفاده از این سیگنال ها موجب می شود تا امکان توقف ارسال اطلاعات بدون از دست دادن داده فراهم گردد ، برای مثال جهت بر قراری ارتباط با حافظه های سرعت پایین بسیار مفید می باشند .

شرح پروژه :

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

سخت افزار مورد استفاده :

برای راه اندازی پروژه می بایست برد آموزشی شرکت نامینیک را از طریق پورت سریال با استفاده از یک کابل رابط DB9 به کانکتور روی برد که با J3 نامگذاری شده است متصل نمایید .

مبانی پورت های سریال :

قبل از ارسال هر بایت داده، پورت سریال یک بیت “شروع ” را ارسال می دارد. بیت فوق صرفا” شامل یک بیت با مقدار صفر است .پس از ارسال هر بایت، یک بیت ” پایان ” ارسال می گردد. ارسال بیت فوق بمنزله خاتمه ارسال یک بایت خواهد بود. برای کنترل خطاء ممکن است ازیک بیت اضافه با نام Parity نیز استفاده گردد.

پورت های سریال Communication(COM) port  نیز نامیده شده و بصورت دوطرفه می باشند. ویژگی فوق این امکان را برای هر دستگاه فراهم کرده تا قادر به ارسال و دریافت اطلاعات باشند. دستگاههای سریال از پین های متفاوت برای ارسال و دریافت داده استفاده می نمایند. استفاده از پین های یکسان باعث ارتباطات از نوع half duplex  خواهد شد و این بدان معنی است که اطلاعات قادر به حرکت صرفا در یک جهت می باشند. با استفاده از پین های متفاوت امکان ارتباطات Full duplex فراهم شده و امکان حرکت اطلاعات در دو جهت فراهم خواهد گردید.

تراشه UART خروجی موازی گذرگاه سیستم کامپیوتر را اخذ و آن را بصورت سریال از طریق پورت سریال انتقال خواهد داد. بمنظور افزایش سرعت ، اغلب تراشه های UART دارای یک بافر با ظرفیت شانزده تا شصت و چهار کیلو بایت می باشند. بافر فوق امکان Cache نمودن داده های واصله از گذرگاه سیستم را زمانیکه تراشه مشغول پردازش داده ها و ارسال آنها برای پورت سریال است را فراهم می نماید. اغلب پورت های سریال دارای نرخ انتقال اطلاعاتی به میزان ۱۱۵ کیلو بیت در هر ثانیه می باشند.

اتصال سریال :

کانکتور خارجی برای یک پورت سریال، نه پین و یا بیست و پنج پین است . با توجه به اینکه موارد استفاده اولیه از پورت های سریال مودم بوده است ، وضعیت عملکرد هر پین نیز متاثر از واقعیت فوق بود.

 : Pin Function

  1.  :  Carrier Detect آیا مودم به یک خط تلفن متصل است ؟
  2. : Receive Data کامپیوتر اطلاعات ارسال شده توسط مودم را دریافت می نماید
  3. : Transmit Data کامپیوتر اطلاعاتی را برای مودم ارسال می دارد.
  4. : Data Terminal Ready کامپیوتر به مودم آمادگی خود را برای ارتباط اعلام می دارد
  5. : Signal Ground پین مربوطه Ground شده است .
  6. : Data Set Ready مودم آمادگی خود را برای ارتباط به کامپیوتر اعلام می دارد.
  7. : Request To Send کامپیوتر از مودم در رابطه با ارسال اطلاعات سوال می نماید
  8. : Clear To Send مودم به کامپیوتر اعلام می نماید که می تواند اطلاعاتی را ارسال دارد.
  9. : Ring Indicator زنگ تلفن تشخیص داده خواهد شد.

یکی از مهمترین مسائل در ارتباط با مبادله اطلاعات بصورت سریال، مفهوم flow control است . با استفاده از قابلیت فوق یک دستگاه قادر به اعلام ( درخواست ) توقف ارسال داده به یک دستگاه خاص دیگر در یک مقطع خاص زمانی است .سیگنال های زیر در این رابطه مورد استفاده قرار خواهند گرفت :

DTR (Data Terminal Ready):

کامپیوتر به مودم می گوید که آماده ارسال اطلاعات است.

DSR (Data Set Ready):

مودم به کامپیوتر می گوید که آماده دریافت با انتقال اطلاعات است.

RTS (Request To Send):

کامپیوتر زمانی که کاراکتری برای ارسال دارد این سیگنال را فعال می کند.

CD (Carrier Detect):

مودم زمانی که اتصال کامپیوتر رت تشخیص داد این سیگنال را می فرستد.

CTR (Clear to Send):

مودم آماده ارسال اطلاعات است و کامپیوتر اطلاعات را به مودم می فرستد.

TXD:

ارسال اطلاعات.

RXD:

دریافت اطلاعات.

ساختار برنامه :

در این پروژه از ساختار های استاندار ارایه شده از سوی شرکت اتمل استفاده شده است به نحوی که فایل اصلی پروژه در آدرس ProjectProject-keilprojectuv2  موجود می باشد ، همچنین تمامی فایل های کتابخانه ای مربوطه در آدرس Projectat91lib قابل دسترس می باشند .

کتابخانه های استفاده شده :

علاوه بر کتابخانه های معمول استفاده شده در تمامی پروژه جهت راه اندازی هسته ارم و مقداردهی IO ها از کتابخانه های زیر استفاده گردیده است :

نحوه اجرای برنامه :

برنامه را بر روی برد پروگرام نمایید و از طریق یک ترمینال ( ترجیحا از محیط Hyper Terminal  ویندوز استفاده نمایید ) پورت سریال با استفاده از تنظیمات زیر به برد متصل شوید :

  • 115200 bauds
  • 8 data bits
  • No parity
  • 1 stop bit
  • Hardware flow control (RTS/CTS)

هم اکنون پس از مشاهده اطلاعات مربوط به برنامه و همچنین نرخ ارسال اطلاعات بر روی پورت سریال می توانید با ارسال یک فایل از نحوه مدیریت Flow Control از طریق مشاهده نرخ ارسال اطلاعات ، مطلع شوید . برای اینکار کافیست که از طریق پورت سریال یک فایل متنی و یا باینری را به پورت ارسال نمایید و مشاهده نمایید که مجموع بایت های ارسال شده با حجم فایل برابر است . برای ارسال فایل در Hyper Terminal  کافیست تا از گزینه Transfer  منوی Send Text File  را انتخاب نمایید .

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

تشریح کد :

PIO_Configure(pins, PIO_LISTSIZE(pins));

این تابع تمامی ورودی و خروجی های مورد استفاده در برنامه را مقدار دهی می نماید ، این پین ها آنها عبارتند از :

PIN_USART0_RXD
PIN_USART0_TXD
PIN_USART0_CTS
PIN_USART0_RTS
ConfigureUsart0()

این تابع ابتدا mode کاری پورت سریال را به صورت Hardware Handshake و 8Bit Data  و 1Bit Stop و بدون بیت Parity  تنظیم می کند ، سپس با راه اندازی واحد PMC ، پورت USART را در بادریت 115200 راه اندازی می نماید . آنگاه وقفه ورود داده به بافر را فعال می نماید و واحد فرستنده و گیرنده USART0 را راه اندازی می کند .

ConfigureTc0()

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

// Start receiving data and start timer
    USART_ReadBuffer(AT91C_BASE_US0, pBuffer, BUFFER_SIZE);
    AT91C_BASE_US0->US_IER = AT91C_US_RXBUFF;
    TC_Start(AT91C_BASE_TC0);
// Infinite loop
while(1);

تایمر و پورت سریال راه اندازی می شوند و سپس برنامه در یک حلقه بینهایت می ماند .

وقفه تایمر :

در سرویس روتین این وقفه تعداد بایت دریافت شده در هر ثانیه نمایش داده میشود .

وقفه دریافت فایل :

در سرویس روتین این وقفه مجموع عدد متغیر تعداد بایت های دریافت شده در آن ثانیه افزایش می یابد و در صورتی که نرخ ارسال اطلاعات به حداکثر مشخص شده نرسیده باشد ، با استفاده از سیگنال CTS ، برای دریافت داده در خط RX آماده می شود .

دانلود سورس کد

در  اینجا شما میتوانید سورس برنامه را دریافت ،کامپایل و پروگرم نمایید و شاهد عملکرد برنامه باشید.

با کلیک بر روی عکس زیر فیلم راه اندازی این پروژه را مشاهده کیند.

Tags: , ,