اطلاعیه

Collapse
No announcement yet.

راه اندازی پورت سریال توسط ASF

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازی پورت سریال توسط ASF

    دوستان من در تلاش برای راه اندازی پورت سریال ATXMEGA128A1AU توسط ASF در محیط atmel studio هستم.
    برای انجام این کار کلاک CPU میکرو کنترلر را توسط PLL از 8MHz به 32MHz افزایش داده ام و همچنین از کریستال خارجی 8MHz استفاده می کنم.
    در سایت خود اتمل یک Quick start جهت راه اندازی پورت سریال توسط این کتابخانه ها قرار داده شده است. در مرحله اول بنده قصد داشتم از اون نمونه کدها کمک بگیرم.
    مشکل در این قسمت هست که توسط مقدار دهی به رجیسترهای میکروکنترلر به صورت مستقیم پورت سریال به راحتی راه اندازی می شود ولی با استفاده از توابع این کتابخانه راه اندازی نمی شود.

    [code=c]#include <asf.h>
    #define F_CPU 32000000UL
    #include <util/delay.h>

    #include "UART.h"

    #define USART_SERIAL &USARTD0
    #define USART_SERIAL_BAUDRATE 9600
    #define USART_SERIAL_CHAR_LENGTH USART_CHSIZE_8BIT_gc
    #define USART_SERIAL_PARITY USART_PMODE_DISABLED_gc
    #define USART_SERIAL_STOP_BIT false

    static usart_rs232_options_t USART_SERIAL_OPTIONS = {
    .baudrate = USART_SERIAL_BAUDRATE,
    .charlength = USART_SERIAL_CHAR_LENGTH,
    .paritytype = USART_SERIAL_PARITY,
    .stopbits = USART_SERIAL_STOP_BIT
    };


    int main (void)
    {
    sysclk_init();
    board_init();

    sysclk_enable_module(SYSCLK_PORT_D, PR_USART0_bm);
    usart_init_rs232(USART_SERIAL, &USART_SERIAL_OPTIONS);


    while(1)
    {
    usart_putchar(USART_SERIAL,'h'
    }
    }
    [/code]

    مشکل دقیقا از این تابع می باشد:

    [code=c]usart_init_rs232(USART_SERIAL, &USART_SERIAL_OPTIONS);
    [/code]
    اگر به جای تابع بالا، تابعی را که خودم برای راه اندازی پورت سریال نوشته ام را قرار بدهم برنامه به صورت کامل و دقیق کار خواهد کرد!

    [code=c]void UART_D0_init_9600(void)
    {
    PORTD_DIRSET = PIN3_bm; //TXD0 output
    PORTD_PIN2CTRL = PORT_OPC_PULLUP_gc; //Pullup RXD
    USARTD0_BAUDCTRLB = 0;
    USARTD0_BAUDCTRLA = 0xCF; // Baud = 9600 bps
    USARTD0_CTRLC = USART_CHSIZE_8BIT_gc; // Frame size 8 bit
    USARTD0_CTRLC |= USART_CMODE_ASYNCHRONOUS_gc; // Uart Asynchron mode
    USARTD0_CTRLB = USART_TXEN_bm | USART_RXEN_bm; //TX Enable RX Enable
    //USARTD0_CTRLA |= USART_RXCINTLVL_HI_gc; //Enable Receive interrupt in High level
    USARTD0_CTRLA |= USART_RXCINTLVL_LO_gc; //Enable Receive interrupt in Low level


    //PMIC_CTRL = PMIC_HILVLEN_bm; //Enable High level interrupt
    PMIC_CTRL = PMIC_LOLVLEN_bm; //Enable Low level interrupt
    }
    [/code]
    دانلود کل فایل پروژه:
    کامپایلر Atmel studio 7

    http://uplod.ir/h5c57jthk2ke/UART_1.rar.htm


    به نظر شما مشکل کار من از کجا هست؟


    #2
    پاسخ : راه اندازی پورت سریال توسط ASF

    دوستان مشکل رو حل کردم.
    مشکل اینجا بود که باید پین TX میکرو کنترلر را به صورت دستی از ورودی به خروجی تغییر میدادم. و همچنین پین RX میکروکنترلر را pull-up می کنیم.
    [code=c] PORTD_DIRSET = PIN3_bm; //TXD0 output
    PORTD_PIN2CTRL = PORT_OPC_PULLUP_gc; //Pullup RXD
    [/code]

    دیدگاه

    لطفا صبر کنید...
    X