現(xiàn)在開始編程。
在華坪等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作專業(yè)公司,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,華坪網(wǎng)站建設(shè)費(fèi)用合理。先寫一個(gè)大的函數(shù):
void main(void)
{
uart_init();
uart_putc('a'); //發(fā)送數(shù)據(jù)
//uart_getc(); //接收數(shù)據(jù)
}
然后分別寫三個(gè)小的子函數(shù)
先在宏定義中聲明各個(gè)寄存器的地址,然后我們開始使用它們。
#define GPA0CON 0xE0200000
#define UCON0 0xE2900004
#define ULCON0 0xE2900000
#define UMCON0 0xE290000C
#define UFCON0 0xE2900008
#define UBRDIV0 0xE2900028
#define UDIVSLOT0 0xE290002C
#define UTRSTAT0 0xE2900010
#define UTXH0 0xE2900020
#define URXH0 0xE2900024
//下面是串口初始化程序
void uart_init(void)
{
//首先先選擇GPA0CON控制寄存器,這個(gè)寄存器的作用是把IO口設(shè)置為串口模式
//先把這個(gè)寄存器的bit0~bit7清除,再寫入0x22,則Rx Tx就設(shè)置成功了。
(*(volatile unsigned int *)GPA0CON) &= ~(0xff<<0);
(*(volatile unsigned int *)GPA0CON) |= 0x00000022;
//然后就是根據(jù)上一章講的,我們來(lái)設(shè)置ULCON:設(shè)置串口的數(shù)據(jù)位,校驗(yàn)位和停止位
//這個(gè)寄存器的[31:7] 沒有功能,這里寫0x3的意思是:
//[1:0] 為11表示八位數(shù)據(jù)位,[2] 為0表示一位停止位,[5:3] 為0表示不需要校驗(yàn)位,
//[6] 為0表示正常模式(若選擇1則表示紅外模式);
(*(volatile unsigned int *)ULCON0) = 0x3;
//然后我們?cè)僭O(shè)置UCONn寄存器
//這個(gè)寄存器的[1:0] 為01,表示中斷請(qǐng)求或者輪詢方式,[3:2] 為01,表示中斷請(qǐng)求或者輪詢方式
//[10]設(shè)置0,選擇PCLK為時(shí)鐘來(lái)源。剩下很多與中斷有關(guān)的位我們先不需要管,畢竟我們用串口來(lái)做實(shí)驗(yàn),
//不需要中斷,不斷來(lái)回檢查就行了。
(*(volatile unsigned int *)UCON0) = 0x5;
//我們不使用流控,所以直接讓UMCON全都為0,禁止掉。
(*(volatile unsigned int *)UMCON0) =0;
//我們不使用FIFO模式,所以同樣把它們都設(shè)置為0就可以了。
(*(volatile unsigned int *)UFCON0) =0;
//然后就要計(jì)算配置波特率了
//PCLK_PSYS通過(guò)時(shí)鐘系統(tǒng)分析為66.7MHz
//DIV_VAL = (66700000/(115200*16)-1) = 35.18,余數(shù)0.18
(*(volatile unsigned int *)UBRDIV0) = 35;
//(rUDIVSLOT中的1的個(gè)數(shù) = 16*0.18= 2.88 = 3
//然后查閱手冊(cè),得知為0x888
(*(volatile unsigned int *)UDIVSLOT0) = 0x0888;
}
初始化完成了,現(xiàn)在開始寫發(fā)送程序。
void uart_putc(char c)
{
//與uart功能有關(guān)的狀態(tài)寄存器,記錄了發(fā)送數(shù)據(jù)是否完成
//這個(gè)寄存器的bit3~bit31都沒有功能,
//第bit2是transmitter empty位,發(fā)送緩沖器里面沒有可供發(fā)送的數(shù)據(jù)的時(shí)候置1,有的話置0
//bit1位是如果有數(shù)據(jù)進(jìn)入緩沖區(qū)則硬件自動(dòng)置0,如果進(jìn)入的數(shù)據(jù)被發(fā)送了出去,硬件再自動(dòng)置一
//FIFO就是在發(fā)送器里面存一大堆數(shù)據(jù),所以對(duì)于FIFO模式下,檢測(cè)每次發(fā)送的數(shù)據(jù)是否發(fā)送了只能用
//檢測(cè)bit1的方法,對(duì)于不使用FIFO模式來(lái)說(shuō),一次只發(fā)送一幀數(shù)據(jù),而且都存在發(fā)送器里面,因此
//檢測(cè)bit2和bit1都可以使用。
//首先一直循環(huán)檢測(cè),直到置1的時(shí)候,才能發(fā)送第二幀數(shù)據(jù)。
//
//bit0表示的是接收區(qū)的置位狀態(tài)
while (!((*(volatile unsigned int *)UTRSTAT0) & (1<<1)));
(*(volatile unsigned int *)UTXH0) = c;
}
//會(huì)寫發(fā)送程序以后,接收程序就簡(jiǎn)單多了。
char uart_getc(void)
{
while (!((*(volatile unsigned int *)UTRSTAT0) & (1<<0)));
return (*(volatile unsigned int *)URXH0);
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
名稱欄目:ARMcortexa之串口通信2-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://jinyejixie.com/article22/dhoscc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、定制開發(fā)、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、定制網(wǎng)站、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
網(wǎng)頁(yè)設(shè)計(jì)公司知識(shí)