久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5019|回復(fù): 1
收起左側(cè)

2440裸機(jī)編程之八 UART通用異步收發(fā)

[復(fù)制鏈接]
ID:68618 發(fā)表于 2014-11-12 13:48 | 顯示全部樓層 |閱讀模式
S3C2440A 內(nèi)部集成的UART(通用異步收發(fā)器)單元提供三個(gè)獨(dú)立的異步串行I/O端口,也就是通常所說(shuō)的串口。串口是用途廣泛的通訊口,很多工業(yè)現(xiàn)場(chǎng)總線都以串口為基礎(chǔ)。在這里,串口不僅可以用來(lái)與外部設(shè)備進(jìn)行數(shù)據(jù)通訊,還可以用來(lái)觀察系統(tǒng)的運(yùn)行狀況,例如前面已經(jīng)使用過(guò)的利用串口終端工具觀察程序運(yùn)行情況的方法。 S3C2440A 的UART 單元提供三個(gè)獨(dú)立的異步串行I/O 端口,每個(gè)都可以在中
斷或DMA 兩種模式下工作。它們支持的最高波特率為115. 2 kbps。每個(gè)UART 通道包含2 個(gè)64 位FIFO 分別供接收和發(fā)送使用。
S3C2440A 的UART 具有以下可配置的參數(shù)項(xiàng)目:可編程的波特率,紅外收/發(fā)模式,l 或2 個(gè)停止位,5 位、6 位、7 位或8 位數(shù)據(jù)寬度和奇偶校驗(yàn)位。每個(gè)UART模塊包含以下幾個(gè)部件:波特率發(fā)生器,發(fā)送器,接收器和控制單元。波特率發(fā)生器可以以PCLK、FCLK或UEXTCLK作為時(shí)鐘源。發(fā)送器和接收器包含64字節(jié)的FIFO和移位寄存器。要被發(fā)送的數(shù)據(jù),首先被寫(xiě)入FIFO,然后被拷貝到發(fā)送移位寄存器中,最后從數(shù)據(jù)輸出端口(TxDn)依次被移位輸出。被接收的數(shù)據(jù)也同樣從數(shù)據(jù)接收端口(RxDn)依次被移位輸入到移位寄存器,然后被拷貝到FIFO中。




這里以u(píng)art0簡(jiǎn)單介紹它的使用。
ULCON0     用于選擇 模式、校驗(yàn)、停止位、數(shù)據(jù)位
UCON0      用于使能 發(fā)送、接收
UBRDIV0    設(shè)置uart0波特率,波特率 = PCLK/(UBRDIV0+1) /16
UTRSTAT0   接收和發(fā)送完畢的標(biāo)志,用于軟件查詢
URXH0      接收數(shù)據(jù)寄存器,存放接收到的數(shù)據(jù)
UTXH0      發(fā)送數(shù)據(jù)寄存器,用于發(fā)送

這是個(gè)uart0的簡(jiǎn)單收發(fā)程序:
//********************************************************************
#define bps 115200
char ch;
void Main(void)
{     
    int i;
    ……硬件初始化……

uart0_init();
Uart_Printf(" uart串口實(shí)驗(yàn)\n\n\n");
Uart_Printf(" 請(qǐng)發(fā)送一個(gè)字符\n");
while(1)
{
  ch=receive_byte();
  transmit_string("你剛發(fā)送了:");
  transmit_byte(ch);
  transmit_byte('\n');
}
}
void uart0_init(void)
{
rGPHCON = rGPHCON & ~(0xf<<4) | 2<<4 | 2<<6 ; //GPH2、3 選為 TXD、RXD
rUMCON0 = 0x0;         //關(guān)閉控制流功能
rULCON0 = 0<<6 | 0<<3 | 0<<2 | 3;    //普通模式、無(wú)校驗(yàn)、1位停止位、8位數(shù)據(jù)位
rUCON0  = 1<<2 | 1;        //發(fā)送模式:允許、接收模式:允許
rUBRDIV0=(U32)(PCLK/(bps*16))-1;    //設(shè)置波特率,pclk 為ARM 時(shí)鐘頻率,bps 為傳輸波特率
}
char receive_byte(void)   //接收一個(gè)字節(jié)
{
while(!(rUTRSTAT0&0x1)); //等待接收到數(shù)據(jù)
return rURXH0&0xff;   //返回?cái)?shù)據(jù)
}

void transmit_byte(char data) //發(fā)送一個(gè)字節(jié)
{
while(!(rUTRSTAT0 & 0x2)); //等待發(fā)送緩存區(qū)為空
rUTXH0=data;    //發(fā)送數(shù)據(jù)
}

void transmit_string(char* p) //發(fā)送一個(gè)字符串
{
while(*p != '\0')
  transmit_byte(*p++);
}

//*******************************************************************

結(jié)果如圖:




當(dāng)然也可以用中斷來(lái)處理,這里接收用中斷做。
//********************************************************************
#define bps 115200
char ch;
void Main(void)
{     
    int i;
    ……硬件初始化……

uart0_init();
Uart_Printf(" uart串口實(shí)驗(yàn)\n\n\n");
Uart_Printf(" 請(qǐng)發(fā)送一個(gè)字符\n");
while(1); //等待中斷
}
void uart0_init(void)
{
rGPHCON = rGPHCON & ~(0xf<<4) | 2<<4 | 2<<6 ; //GPH2、3 選為 TXD、RXD
rUMCON0 = 0x0;         //關(guān)閉控制流功能
rULCON0 = 0<<6 | 0<<3 | 0<<2 | 3;    //普通模式、無(wú)校驗(yàn)、1位停止位、8位數(shù)據(jù)位
rUCON0  = 1<<2 | 1;        //發(fā)送模式:允許、接收模式:允許
rUBRDIV0=(U32)(PCLK/(bps*16))-1;    //設(shè)置波特率,pclk 為ARM 時(shí)鐘頻率,baud 為傳//輸波特率



rSUBSRCPND = 1;      //SUBSRCPND的RXD0位 清0
rSRCPND = 1<<28;     //SRCPND的UART0位 清0
rINTPND = 1<<28;     //INTPND的UART0位 清0
pISR_UART0 = (U32)receive_int;  //申請(qǐng)中斷向量
rINTSUBMSK = rINTSUBMSK & ~(1);  //禁止RXD0的屏蔽
rINTMSK = rINTMSK & ~(1<<28);  //禁止UART0的屏蔽
}
char receive_byte(void)   //接收一個(gè)字節(jié)
{
while(!(rUTRSTAT0&0x1)); //等待接收到數(shù)據(jù)
return rURXH0&0xff;   //返回?cái)?shù)據(jù)
}

void transmit_byte(char data) //發(fā)送一個(gè)字節(jié)
{
while(!(rUTRSTAT0 & 0x2)); //等待發(fā)送緩存區(qū)為空
rUTXH0=data;    //發(fā)送數(shù)據(jù)
}

void transmit_string(char* p) //發(fā)送一個(gè)字符串
{
while(*p != '\0')
  transmit_byte(*p++);
}

void receive_int(void) __irq
{
transmit_string("(中斷)你剛發(fā)送了:");
transmit_byte(rURXH0&0xff);
transmit_byte('\n');

rSUBSRCPND = 1;      //SUBSRCPND的RXD0位 清0
rSRCPND = 1<<28;     //SRCPND的UART0位 清0
rINTPND = 1<<28;     //INTPND的UART0位 清0
}

//*******************************************************************

運(yùn)行正常:

回復(fù)

使用道具 舉報(bào)

ID:45457 發(fā)表于 2015-9-11 19:09 | 顯示全部樓層
2440裸機(jī)編程之八 UART通用異步收發(fā)
回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费在线 | 亚洲a网| 久久不射电影网 | 99久久国产| 欧美日韩一区二区在线观看 | 国产一区二| 国产精品久久久久久久一区探花 | 欧美在线综合 | 天天爽夜夜操 | 日韩av.com | 久久久www成人免费无遮挡大片 | 精品日韩一区二区三区av动图 | 亚洲精品永久免费 | 免费黄色a级毛片 | 久久午夜视频 | 精品乱人伦一区二区三区 | 97视频久久| 伊人网站视频 | 国产三区在线观看视频 | 国产电影一区二区在线观看 | 一区二区精品在线 | 国产精品国产亚洲精品看不卡15 | 久久久久久久久久久久91 | 黄色毛片免费 | 日韩在线免费播放 | 日韩淫片免费看 | 91成人在线视频 | 亚洲成av人片在线观看无码 | 色姑娘av | 日韩一区二区不卡 | 人人干免费 | 国产精品久久在线 | 日产精品久久久一区二区福利 | 国产午夜在线 | 日本成人福利视频 | 久久精品网 | 久久黄网 | 日本午夜免费福利视频 | 成人欧美一区二区三区在线观看 | 蜜桃av一区二区三区 | 国产精品久久久久久久久久久久久久 |