2 فایل پیوست
کلیه آموزش ها و نکات مهم برد eke2sam7x v2.0 کویرالکترونیک
سلام
از این پس تمامی نکات مهم و مثالهای برد [Dear Guest/Member you can't see link before replyclick here to register] در این بخش قرار می گیرد
دوستانی که مثال یا پروژه ای با این برد تست کردند می توانند در ادامه قرار دهند.
WARNING
| لطفا از مطرح نمودن سوال در این بخش خود داری کنید | |
دوستانی که تمایل به خرید دارند می توانند از [Dear Guest/Member you can't see link before replyclick here to register] تهیه نمایند
[Dear Guest/Member you can't see link before replyclick here to register]
Information
|
- تامین شدن تغذیه از طریق پورت usb
- برنامه پیش فرض روی برد چشمک زدن تمامی LED ها می باشد
- بدون نیاز به پروگرامر جدا
| |
4 فایل پیوست
کتابخانه راه اندازی lcd در مورد 4bit
سلام به همه دوستان:hi:
برای این پست کتابخانه راه اندازی LCD کارکتری رو در مود 4 بیت قرار میدم که امیدوارم به دردتون بخوره!
توانایی های کتابخانه :
[Dear Guest/Member you can't see link before replyclick here to register] قابلیت تعریف کتابخانه رو پورت و پایه های دلخواه.
[Dear Guest/Member you can't see link before replyclick here to register] سازگار با تمام خانواده های ARM7 آتمل از سری S,EX,X, و کلا آتمل:o
[Dear Guest/Member you can't see link before replyclick here to register] استفاده از مود 4 بیت برای انتقال دیتا به نمایشگر {صرفه جویی در پایه های استفاده شده}
[Dear Guest/Member you can't see link before replyclick here to register] قابلیت تعریف کارکتر دلخواه در حافظه کارکتری نمایشگر{حداکثر 78 کارکتر}
[Dear Guest/Member you can't see link before replyclick here to register] عدم پشتیبانی از خواندن اطلاعات نمایشگر {فعلا لازمش نداریم:0013:}
نیازمندی های کتابخانه:
نیازمند کتابخانه Tdelay.h برای ایجاد تاخیر !{باید در مسیر کتابخانه کپی شود.}
ماکروها و توابع:
ماکرو های تعریف پین و پورت:
کد:
#define LCD_PORT AT91C_BASE_PIOA // Or AT91C_BASE_PIOB
#define LCD_PMC AT91C_ID_PIOA // or AT91C_ID_PIOB
#define LCD_RS 2
#define LCD_RW 3
#define LCD_EN 4
#define LCD_4D 5
دو ماکروی بالا جهت تعریف پورت قابل استفاده توسط کتابخانه است و ماکروهای بعدی جهت تعریف پین های مورد استفاده هست . نکته قابل ذکر این که پایه های دیتای مورد استفاده توسط ماکروی LCD_4D تعریف میشود به این صورت که خود اگر مقدار این ماکرو را مقداری معادل 5 قرار دهیم باید پایه DB4 را به پایه 5 و DB5 را به پایه 6 و DB6 را به پایه 7 و DB7 را به پایه 8 وصل کنیم. یعنی پایه های 5و6و7و8 جهت دیتا استفاده خواهد شد.:0013: و اگر مقدار آن را 10 قرار دهیم پایه های 10و11و12و13 برای دیتا استفاده خواهند شد. برای مابقی مقادیر هم به این صورت خواهد بود.
تابع بالا جهت پیکربندی ال سی دی مورد استفاده قرار می گیرد و قبل از استفاده از کتابخانه حتما باید فراخوان شود. این تابع به صورت خودکار کلاک PIO مورد استفاده را فعال میکند.
کد:
void lcd_command(char cmd);
این تابع برای ارسال دستور به LCD استفاده میشود . لیست دستوارتت قابل پشتیبانی:
[Dear Guest/Member you can't see link before replyclick here to register]
کد:
void lcd_data(char ch);
ارسال داده به LCD
کد:
void lcd_gotoxy(char x, char y);
با استفاده از این تابع میتوان موقعیت مکان نما رو تنظیم کرد.
این تابع مکان نما را در موقعیت 0و0 قرار میدهد.
با استفاده از این تابع میتوان کلیه محتوای روی نمایشگر را پاک کرد.
کد:
void lcd_LoadCustomChar(char* lcdCustomCharArray, char lcdCharNum);
با استفاده از این تابع میتوان کارکتر دلخواه را برای نمایشگر تعریف کرد. پارامتر اول آدرس دیتای کارکتر مورد نظر هست و پارامتر دوم کارکتری که باید در نمایشگر تعریف بشه مثلا مقدار 0 کارکتر 0 را بااین کارکتر جدید جایگذین میکند.{نکته قابل توجه این که فقط میتوان کارکتر های 0 تا 7 را از نو تعریف کرد و باقی کارکتر ها قابل تغییر نیستند.} در مثال ذکر شده بیشتر با این فرمان آشنا خواهد شد.
کد:
void lcd_putc(char c);
این تابع یک کارکتر رو در موقعیت جاری مکان نما قرار می دهد.
کد:
void lcd_puts(char* data);
با استفاده از این تابع میتوان یک رشته را بر روی نمایشگر قرار داد.!
عکس از عملکرد:
[Dear Guest/Member you can't see link before replyclick here to register]
دانلود کتابخانه همراه با مثال کاملا تست شده:
2 فایل پیوست
محاسبه مقدار صحیح فیلتر pll
سلام به همه دوستان !
برای این پست یه برنامه آماده کردم که با استفاده از اون میتونید مقدار صحیح و مناسبی را با توجه به فرکانس ورودی و فرکانس کاری PLL محاسبه کنید ! این برنامه از تمام خانواده های AT91 پشتیبانی میکنه :018:
[Dear Guest/Member you can't see link before replyclick here to register]
2 فایل پیوست
Aic کنترل کننده وقفه {اینتراپت}
سلام به همه دوستان:hi:
برای این پست کتابخونه وقفه رو آماده کردم که توی میکروی آتمل قسمت AIC کنترل اونو به عهده داره . وقفه یکی از اساسی ترین و مهترین بخش در مباحثمیکرو هست حتی از تایمر هم مهمتره چرا که تایمر با استفاده از وقفه کاربردپیدا میکنه! :wink:
میکروهای SAM7 از 32 کانال وقفه بهره می برن که هر کدوم به صورت مجزا قابل کنترل هست و میشه براش تعریف کرد که با کدوم تغییر ورودی وقفه اتفاق بیفته!
یکی از معایت میکرو های SAM7 در ضمینه پایه های وقفه پذیر PIO هست که محدود و غیر قابل تغییر هست بر خلاف خانواده های NXP که میشه تعریف کرد کدوم ورودی به عنوان وقفه تعریف بشه سری SAM7 فقط از ورودی های پیشفرضی که توسط شرکت انتخاب شده ساپورت میکنه!
کانل 0 ورودی وقفه مربوط به وقفه سریع یا FIQ می باشد فرق وقفه FIQ با RIQ در این هست که در زمان وقوع این وقفه CPU ملزم به اجرای ان می باشد و از ماسک پیروی نمی کند و از اولویت بندی های انجام شده چشم پوشی می کند.
میکرو های SAM7 از 8 سطح وقفه برداری پشتیبانی میکند ، که 0 اولویت کمتر را دارد و مقدار 7 بالا ترین اولویت را به خود اختصاص داده ، برای روشن شدن این موضوع یک مثال مطرح میکنیم، فرض کنید هم زمان وقفه سرریز تایمر با وقفه ورودی IRQ0 فعال می شود ، فرض کنید که وقفه تایمر 0 مهم تر از رخداد بیرونی است، با اولویت بندی میتوان کنترل کرد که کدام وقفه زود تر اتفاق بیفته ، در هنگام اجرای رخداد سر ریز تایمر وقفه IRQ0 در حالت انتظار باقی می ماند تا روال وقفه تایمر پایان یابد بعد روال این وقفه اجرا شود، این طبقه بندی 8 سطحی است ، و اگر وقفه IRQ1 مهمتر از تایمر باشد وقفه تایمر معلق شده و به وقفه IRQ1 رسیدگی می شود بعد وقفه تایمر کامل میشه بعد وقفه IRQ0 اجرا میشه.
و اگر دو یا چند وقفه که در یک سطح هستن اجرا میشه ابتدا از وقفه با ارزش سحت افزاری پایین تر شورع به وقفه برداری میکنه، برای مثال وقتی که هم زمان دو وفقه IRQ0 , IRQ1 که در دو در یک سطح تعریف شدن اتفاق بیفته اول وقفه IRQ0 اجرا میشه بعد IRQ1 و اما در مورد این کتابخانه:
[Dear Guest/Member you can't see link before replyclick here to register]این کتابخانه به صورت کامل نوشته شده.
[Dear Guest/Member you can't see link before replyclick here to register]این کتابخانه از توابع inline استفاده میکنه که سرعت اجرا را بالا میبره.
[Dear Guest/Member you can't see link before replyclick here to register]این کتابخانه برای تمام خانواده های SAM7 کار خواهد کرد.
ماکرو ها:
کد:
AIC_Configure_PIO(AIC_PORT,AIC_PIN)
این ماکرو برای پیکربندی یک پایه برای اتصال به واحد PIO فقط پایه های پیشفرض.
متغییر اول ادرس پورت و متغییر دوم شماره پایه مورد نظر هست.
کد:
IRQ_ACT_POWER(IRQ_ID)
فعال کردن پاور IRQ , FIQ های خارجی هست. آیدی مربوطه را دریاف میکند.
کد:
CALL_END_OF_Interrupt(pAic)
این ماکرو باید حتما در انتهای روال مربوطه به وقفه فراخوانی شود. این تابه به واحد AIC می فهماند که روال جاری پایان یافت و واحد AIC اگر وقفه در انتظار داشته باشد آن وقفه رو شروع خود کرد.
ثوابت آیدی (برای پیکر بنده هر کانال خاص در تابع کانفیک کاربرد دارد.)
کد:
#define AT91C_ID_FIQ ((unsigned int) 0) // Advanced Interrupt Controller (FIQ)
#define AT91C_ID_SYS ((unsigned int) 1) // System Peripheral
#define AT91C_ID_PIOA ((unsigned int) 2) // Parallel IO Controller A
#define AT91C_ID_PIOB ((unsigned int) 3) // Parallel IO Controller B
#define AT91C_ID_SPI0 ((unsigned int) 4) // Serial Peripheral Interface 0
#define AT91C_ID_SPI1 ((unsigned int) 5) // Serial Peripheral Interface 1
#define AT91C_ID_US0 ((unsigned int) 6) // USART 0
#define AT91C_ID_US1 ((unsigned int) 7) // USART 1
#define AT91C_ID_SSC ((unsigned int) 8) // Serial Synchronous Controller
#define AT91C_ID_TWI ((unsigned int) 9) // Two-Wire Interface
#define AT91C_ID_PWMC ((unsigned int) 10) // PWM Controller
#define AT91C_ID_UDP ((unsigned int) 11) // USB Device Port
#define AT91C_ID_TC0 ((unsigned int) 12) // Timer Counter 0
#define AT91C_ID_TC1 ((unsigned int) 13) // Timer Counter 1
#define AT91C_ID_TC2 ((unsigned int) 14) // Timer Counter 2
#define AT91C_ID_CAN ((unsigned int) 15) // Control Area Network Controller
#define AT91C_ID_EMAC ((unsigned int) 16) // Ethernet MAC
#define AT91C_ID_ADC ((unsigned int) 17) // Analog-to-Digital Converter
#define AT91C_ID_AES ((unsigned int) 18) // Advanced Encryption Standard 128-bit
#define AT91C_ID_TDES ((unsigned int) 19) // Triple Data Encryption Standard
#define AT91C_ID_IRQ0 ((unsigned int) 30) // Advanced Interrupt Controller (IRQ0)
#define AT91C_ID_IRQ1 ((unsigned int) 31) // Advanced Interrupt Controller (IRQ1)
#define AT91C_ALL_INT ((unsigned int) 0xC00FFFFF) // ALL VALID INTERRUPTS
کلید های پیکر بندی هر کانل {مشخص کننده این موضوع که هر کانال به لبه حساس باشد و یا به سطح و...}
کد:
#define AIC_EXT_LOW_LEVEL ((unsigned int) 0x0 << 5) // External Sources Code Label Low-level Sensitive
#define AIC_INT_HIGH_LEVEL ((unsigned int) 0x0 << 5) // Internal Sources Code Label High-level Sensitive
#define AIC_INT_POSITIVE_EDGE ((unsigned int) 0x1 << 5) // Internal Sources Code Label Positive Edge triggered
#define AIC_EXT_NEGATIVE_EDGE ((unsigned int) 0x1 << 5) // External Sources Code Label Negative Edge triggered
#define AIC_HIGH_LEVEL ((unsigned int) 0x2 << 5) // Internal Or External Sources Code Label High-level Sensitive
#define AIC_POSITIVE_EDGE ((unsigned int) 0x3 << 5) // Internal Or External Sources Code Label Positive Edge triggered
توابع:
کد:
__inline unsigned int AT91F_AIC_ConfigureIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id, // \arg interrupt number to initialize
unsigned int priority, // \arg priority to give to the interrupt
unsigned int src_type, // \arg activation and sense of activation
void (*newHandler) () ); // \arg address of the interrupt handler
این تابع کانال مورد نظر را پیکر بندی و آماده استفاده می کند.
متغییر اول که آدرس AIC میکرو هست و متغییر دوم آیدی کانال مورد نظر که قبلا ذکر شد.
متغییر سوم مشخص کننده اولویت وقفه هست که مقداری از 0 تا 7 به خود میگیرد.
متغییر چهارم نحوه تریگر را مخص می کند که ایا حساس بع سطح باشد یا لبه که قبلا ذکر شده و متغییر اخر هم آدرس تابعی که هنگام رویداد وقفه باید فراخوانی شود.
توجه داشته باشید که در ابتدای تعریف این تابع باید از کلید __irq استفاده شود.
کد:
__inline void AT91F_AIC_EnableIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id ); // \arg interrupt number to initialize
برای فعال کردن کانال مورد نظر به کار میره.
کد:
__inline void AT91F_AIC_DisableIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id ); // \arg interrupt number to initialize
برای غیر فعال کردن یه کانال خاص به کار میره.
کد:
__inline void AT91F_AIC_ClearIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id); // \arg interrupt number to initialize
پرچم وقفه مورد نظر رو پاک میکنه.
کد:
__inline unsigned int AT91F_AIC_IsActive (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id); // \arg Interrupt Number
برای مشخص کردن این که روال رویداد وقفه مورد نظر در حال اجراست یا نه.
کد:
__inline unsigned int AT91F_AIC_IsPending (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id); // \arg Interrupt Number
مشخص میکند که کانال مورد نظر در حالت انتظار رویداد هست یا نه.
دانلود کتابخانه همراه مثال کاملا تست شده