シリアルポートの初期化を検討15.uboot

シリアルについて

組み込み機器の開発者のために、機器の多くの始まりは、プログラムの実行を取得することができない、利用できないシリアルポートが使用できない場合に埋め込まれたプログラムをデバッグするためのシリアルポートの役割は、明らかであるので、デバッガは、多くの時間と労力を要し、5月シリアルポートを備えた後にLEDに光をオフにして実行しているプログラムのわずかな兆候は、あなたがより多くのデバッグ情報を取得することができます。使用S3C6410シリアルポートやその他の機器は、シリアルポート後の初期設定は、データを送受信することができ、似ています。まず、マニュアルチップのシリアルブロック図を見:

UART
シリアル伝送データ信号線は、TXDN信号線は上記のように、データは、RXDnを受信する信号線は、これら2本の信号線は、送信シフトレジスタに接続され、シフトレジスタを受信する、シリアル添加さらにFIFOモジュールを含む、データ64バイト2を送信および受信するために使用されます。生成モジュールとボーレートに加えて、制御装置に加えて、対応する部分には、上部周辺バスシステムに接続されています。

シリアル・レジスタ

関連するレジスタを初めて目には:
UART1
S3C6410はリストの上、シリアル-0、他のいくつかのシリアル・レジスタの説明では、関連するレジスタをUART0,1,2,3 4つのシリアルポートを持っており、この、のような、聞かせてのは、以下に詳細に言います:

###### ULCONx:データ長、ストップビット長、パリティビットをフォーマットシリアルデータ
ulcon

UCONx:シリアル制御クロックソース選択レジスタ、送信および受信モード

UCON
UCON

UFCONx:FIFO制御レジスタの設定は、FIFOトリガレベルを有効にします

ufcon

UTRSTATx:ステータス・レジスタを送受信します

utrstat

UERSTATx:フレームエラー・ステータス・レジスタのエラー、パリティエラー

uerstat

UFSTATx:FIFOステータスレジスタ

UFSTAT

UTXx:送信データは、データが投げたそれを送信するために登録

UTX

URXx:受信データレジスタから受信したデータを得るために登録します

URX

UBRDIV:ボーレート除数値レジスタ

ubrdiv

UDIVSLOT:ボーレート除数の値が小数部分(私は名前から来たんです...)

スロット

シリアルポートの初期化

シリアルポートの初期化タスクは、以下に主に行われます。

  • GPIOピンの機能の設定は、シリアルポートの機能に関連しています
  • 提供ULCONxシリアル・データ・フォーマットは、レジスタ、データビット長、ストップビット長、パリティビット、等を設定します
  • 設定したシリアルポート制御がUCONxを登録し、シリアル・クロック・ソースは、選択送信し、データ受信モード:割り込み、ポーリングは、DMAを中断します
  • ボーレート分周数レジスタとボーレートレジスタの分割値の小数部を設定します
  • FIFO制御レジスタFIFOが有効になっているかどうかを設定、など

######ボーレートを設定する
ボー
ボーレート除数値:
DIV_VAL =(PCLK /(BPS 16)) - 1。
EG:
PCLK = 66.5M =6650万
= 115200 bpsのボーレート
DIV_VAL =(115200分の66500000
16)-1 = 35.078
UBRDIVn = 35
0.078の小数部
の数= 0.078 16で割っUDIVSLOTn 1
UDIVSLOTn 1の数= 1 = 1.248
、表に従ってよう0x0080 UDIVSLOTnの値。

コードの実装


#define UCON0      (*((volatile unsigned long *)0x7F005004))
#define UFCON0     (*((volatile unsigned long *)0x7F005008))
#define UMCON0     (*((volatile unsigned long *)0x7F00500C))
#define UTRSTAT0   (*((volatile unsigned long *)0x7F005010))
#define UFSTAT0    (*((volatile unsigned long *)0x7F005018))
#define UTXH0      (*((volatile unsigned char *)0x7F005020))
#大专栏  15.uboot study 串口初始化eta-keyword">define URXH0      (*((volatile unsigned char *)0x7F005024))
#define UBRDIV0    (*((volatile unsigned short *)0x7F005028))
#define UDIVSLOT0  (*((volatile unsigned short *)0x7F00502C))
#define GPACON     (*((volatile unsigned long *)0x7F008000))
#define PCLK 66500000
#define BOUD 115200

void uart_init(void)
{
    GPACON &= ~0xff;
    GPACON |= 0x22;

    
    ULCON0 = 0x3;  /* 数据位:8, 无较验, 停止位: 1, 8n1 */
    UCON0  = 0x5;  /* 使能UART发送、接收 */
    UFCON0 = 0x01; /* FIFO ENABLE */

    UMCON0 = 0;

    /* 波特率 */
    /* DIV_VAL = (PCLK / (bps x 16 ) ) - 1 
     * bps = 115200
     * DIV_VAL = (66000000 / (115200 x 16 ) ) - 1 
     *         = 35.08
     */
    UBRDIV0 = (int)(PCLK/(BOUD*16)-1);

    /* x/16 = 0.08
     * x = 1
     */
    UDIVSLOT0 = 0x1;

}

void putc(unsigned char c)
{
    while (UFSTAT0 & (1<<14)); /* 如果TX FIFO满,等待 */
    UTXH0 = c;                         /* 写数据 */
}


unsigned char getc(void)
{
    unsigned char ret;
    while ((UFSTAT0 & 0x7f) == 0);  /* 如果RX FIFO空,等待 */
    ret = URXH0;                   /* 取数据 */
    if((ret == 0x0d) || (ret == 0x0a))
    {
        putc(0x0d);
        putc(0x0a);
    }
    else
    {
        putc(ret);
    }

        return ret;
}


void uart_send_string(char *str)
{
    while(*str)
    {
        putc(*str++);    
    }
    putc(0x0d);
    putc(0x0a);    
}



復刻版は、オリジナルのコンテンツを明記してください チャイクン・ヤン とソース http://ykzhai.top/2016/08/15/開発/組み込み/ S3C6410 / 15-uboot-study-シリアルポートの初期化を/
 

おすすめ

転載: www.cnblogs.com/lijianming180/p/12147646.html