シリアルについて
組み込み機器の開発者のために、機器の多くの始まりは、プログラムの実行を取得することができない、利用できないシリアルポートが使用できない場合に埋め込まれたプログラムをデバッグするためのシリアルポートの役割は、明らかであるので、デバッガは、多くの時間と労力を要し、5月シリアルポートを備えた後にLEDに光をオフにして実行しているプログラムのわずかな兆候は、あなたがより多くのデバッグ情報を取得することができます。使用S3C6410シリアルポートやその他の機器は、シリアルポート後の初期設定は、データを送受信することができ、似ています。まず、マニュアルチップのシリアルブロック図を見:
シリアル伝送データ信号線は、TXDN信号線は上記のように、データは、RXDnを受信する信号線は、これら2本の信号線は、送信シフトレジスタに接続され、シフトレジスタを受信する、シリアル添加さらにFIFOモジュールを含む、データ64バイト2を送信および受信するために使用されます。生成モジュールとボーレートに加えて、制御装置に加えて、対応する部分には、上部周辺バスシステムに接続されています。
シリアル・レジスタ
関連するレジスタを初めて目には:
S3C6410はリストの上、シリアル-0、他のいくつかのシリアル・レジスタの説明では、関連するレジスタをUART0,1,2,3 4つのシリアルポートを持っており、この、のような、聞かせてのは、以下に詳細に言います:
###### ULCONx:データ長、ストップビット長、パリティビットをフォーマットシリアルデータ
UCONx:シリアル制御クロックソース選択レジスタ、送信および受信モード
UFCONx:FIFO制御レジスタの設定は、FIFOトリガレベルを有効にします
UTRSTATx:ステータス・レジスタを送受信します
UERSTATx:フレームエラー・ステータス・レジスタのエラー、パリティエラー
UFSTATx:FIFOステータスレジスタ
UTXx:送信データは、データが投げたそれを送信するために登録
URXx:受信データレジスタから受信したデータを得るために登録します
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の値。
コードの実装
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-シリアルポートの初期化を/